tqwko_05
@tqwko_05

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

なりたてエンジニア 何が分からないか分からない

IT業界でプロジェクトマネージャーからエンジニアに転籍して1年ほどになる社会人です。
表題のとおり、エンジニアとして1年経ったものの業務で分からないことが多すぎて「今の自分は何から勉強すればよいのか」が分からなくなり毎日混乱しています。

思考整理、またこれからの学びの指針として是非諸先輩方のご意見をお聞きできればと思います。

業務内容

・主な業務はWebサイトの改修
・責務はディレクターの要件定義をIT要件定義に落とし込み見積もり→製造→テスト→リリースまで
・バックエンドはJava(フレームワークはSpringboot、Strutsなど)、フロントエンドはJavaScriptを使用
・改修によってマークアップ言語やSQLにも触れる

エンジニアになりたての頃

ITに関する知識は付け焼刃程度
開発で使用している言語がJavaのため、初めに今流行りのオンラインプログラミングスクールに通い一通り課題をこなし卒業
初めはバグ対応や既存ソースの影響調査を行い、徐々に開発案件を実施していく

悩み

Javaという言語だけを学んだだけではWebサイトは作れない
当たり前のことですがそれを痛感した1年でした
もちろん先輩にフォローしてもらいながら進めていますが、案件をこなすたびに「できた喜び」よりも「知らないことの多さ」に毎回絶望しています。
そこで初見の技術はググって自分なりに理解をするのですが、”その場面を乗り切る知識だけ得るから体系的に身につかない”と自己分析しています。

例えば
初めてSQLに触れたとき、構文が分からな過ぎて色々なサイトを調べました。そこで本当は腰を据えて勉強すればよいですが、現実的な話先般のとおり案件を進める上で10個や20個と分からないことが出てくるので、それらひとつひとつに対してしっかり勉強する時間を取るのは難しく全てにおいて「なんとなくこういうことなんだな」で留めて案件をこなしています。
理解してソースを書いてレビューしてもらいリリースをしていますが、「自分の書いたソースしか理解できない」ような感覚です。

これが分かるようになりたい!

・HTTP通信(GET/POST)
・エラー処理(バリデーション、フロント/バックの責務)
・セッション(ページ遷移時のエラーなど)
・ローカルストレージ/Cookie
・トランザクション
・WebAPI
・ajax,JSON
・Tomcat/Apache
・JQuery
・デザインパターン
※一般的な知識というよりも、よりJavaに関わる部分での技術

パっと挙げただけでもWebサイトを改修する業務でこれだけ多くのことに対して中途半端な理解なのでなんとかしっかり身に着けたいと思っています。
話が最初に戻りますが、そこで優先度やまず何をすればよいといった指針が分からず困っています。今の時代ネットには情報が溢れていおり、知識が無い分取捨選択ができない部分も困っている理由のひとつです。

例えばこれだけはまずできるようになった方がよいという技術、スキル(上記以外にもあれば)、参考になる書籍、サイト等、このような状況のエンジニアがまず為すべきことなど、教えていただけると非常に嬉しいです。
(他のエンジニアは皆10年選手のようなベテランしかいないのでこの辺の感覚が全然伝わらないのです…)

自分の今の心情をつらつらと書いたので見づらい長文になってしまい申し訳ありません。
どなたかの目に留まったならば幸いです。

1

5Answer

「これが分かるようになりたい!」と今あなたが関心を持っているところに注力するのが、一番楽しくて、理解が深まると思いますよ。

ただ、いきなりすべての理解は大変なので
最初の一・二年目はフロント or バックエンド どちらかに力を注げばよいのではないでしょうか?
自分は最初、バックエンドからの理解を深めました。

以下ざっくりとした回答編

【バックエンド編】

★ サーバーの理解(Tomcat/Apache)
webサーバーやアプリケーションサーバ(tomcat)等がどのようなやり取りをしているかをしっかり把握しておきましょう。あとポートとか(ネットワークの一般的知識)
ex)tomcatだと8080ポートが良く使われるとか, httpはデフォルトで80ポート使うとか(httpsなら443とか)
余裕があればプロキシも..

★ ajax, JSON
JSONはただのフォーマットです。形を覚えてしまいましょう。webAPIでもよく利用されていますね。
ajaxの理解の前にwebサーバーのおける、「同期通信」と「非同期通信」を理解しましょう。

★デザインパターン
Java → OOPの原則を学ぶと良いです。
クラス図は最低限書けるようにしといたほうがいいです。(関連の種類など)
デザインパターンを覚える→OOPの設計感覚を身に着けるでもよいですが..
原則を理解すると、デザインパターンの形がなぜそうなるかが結構わかります。

★フレームワーク
まずは最低限フレームワークの使い方を学びましょう。
次にWebフレームワークの基礎であるMVCについて理解を深めましょう。
もしフレームワークがオブジェクトのライフサイクルを管理している機構も持っているのであれば把握しておきましょう。

★DB
データベース設計を学びましょう(ER図)
トランザクションは、機構を把握しておきましょう。

★http(GET/POST)
GET/POSTメソッドは、送信するパラメータが何かを意識するとわかりやすいです。(クエリパラメータ、リクエストボディーパラメータ)
RESTfulな設計も把握しておきましょう。

★ローカルストレージ/Cookie
ブラウザの開発者ツールを開く癖を身につけてください。一瞬で原理がわかります。
あとブラウザのキャッシュとかも知っておくと良いかも

★仮想化
VM,dockerなどは知っとくと便利です。暇があればぜひ。

【フロントエンド編】

★ JQuery
Javascript(commonJS, ES Modules)の基本はおさえておくべきですね。
JQueryだけでなく、webpack等、知っておくべきことは山のようにあります。

【その他】
正直、本のおすすめなんて、たくさんの人が紹介しまくっているので、その分野につまずいたときに検索すればよいです。

技術記事を読む癖はつけた方がいいです。(毎日1時間でも良いので)
暇があれば、github等でオープンソースのコードを読み漁り、活用できれば、立派なエンジニアです。

3Like

そこで優先度やまず何をすればよいといった指針が分からず困っています。

まずはご自身の業務でよく触れる技術・使う範囲に詳しくなるのがいいです。ベテランでも普段使わない技術まで熟知しているわけではありません。何ができるかとおおまかな特性だけ覚えておいて、必要になったら調べるものです。

今の時代ネットには情報が溢れていおり、知識が無い分取捨選択ができない部分も困っている理由のひとつです。

情報があふれていてもためになる情報源は限られています。調べ方は

  • ある技術の概要を学ぶなら、公式のチュートリアルか書籍かオンライン講義
  • 使い方や構文や具体的な仕様を調べるなら、公式のリファレンスかまともなサイトの解説、またはソースコード
  • リファレンスにない使い方のコツやエラーの解消方法を調べるなら、具体的なキーワードやエラーメッセージで検索

が基本です。理解度に応じて使い分けてください。 SQL でいえば、検索キーワードが「SQL とは」「SQL 書き方」くらいしか思いつかないならまず本などで概要を学ぶべきです。これで検索しても薄い解説サイトしか出てきません。ある程度把握できていれば「MySQL8.0 データ 複数行 挿入 書き方」程度まで思いつくでしょうし、検索結果も具体的な説明のページが増えて当てにできるようになります。

知識をつけるにあたっては細かい書き方までがんばって暗記する必要はありません。まずは特性(何をする技術か、使いどころはいつか、利点と欠点)を覚えましょう。たとえば localStorage なら「web ページに紐付くデータをブラウザに保存する技術。 JavaScript から読み書きする。データはキーと値のペアで、値は文字列のみ。少量のデータを保存するのに向くが、ブラウザの都合で消去されうる。永続的なデータはサーバに置くべき」といった具合です。似たような技術をいくつか覚えると特性について類推が働くようになります。

例えばこれだけはまずできるようになった方がよいという技術、スキル(上記以外にもあれば)

上記以外ならまずは git などのソースコード管理ツールを覚えるとよさそうです。チーム開発のためのツールと思われがちですが、個人で使うぶんにも便利です。特に勉強では、ソースコードを色々書き換えるうちに壊してしまうことがありますが、動いていた時点の内容まで簡単に巻き戻せるので安心して作業ができます。

他には Python か Ruby か JavaScript (Node.js) あたりのスクリプト言語をひとつ覚えておくと、ファイルの一括操作などの作業を自動化できて業務効率が上がります。

参考になる書籍、サイト等

Web 関連の技術なら MDN が大部分をカバーしています。

Web 開発するなら IPA が出している「安全なウェブサイトの作り方」「安全なSQLの呼び出し方」は必読です。

書籍では『プリンシプル オブ プログラミング』を一読するといいかもしれません。普段エンジニアが(無意識にせよ)気に掛けている原理原則がたくさん載っています。具体例はほとんどないのですぐに身になるものではありませんが、先輩が何を考えてコードを書いているか知る助けになると思います。もう少し実践的な作法を知るには『リーダブルコード』がよさそうです。

3Like

個人的には「まず英語だよなぁ、最低限翻訳使いつつ問題なく記事が読めるくらいになろうぜ!」と思います。

roadmap.shというサイトが今どきの種類別のエンジニアが学ぶべきことをまとめてくれたサイトがあります。
https://roadmap.sh/
英語が読めればその内容が何を意味しているかの説明までついています。

ググると日本語がされたものもあるのでご参考に。
https://brik.co.jp/tips/1125

2Like

Comments

  1. この図にある通り、インターネットの理解(サーバーの仕組み、ウェブページの仕組み、通信の仕組み)は真っ先に理解する必要があります。
    これらの理解はなによりも個別のサービス(Java(tomcatなど)やJS(jQuery, reactなど)での成果物)に触れるより先です!その知識が前提にありフレームワークを使い始められます。

    頑張りましょう
  2. 書籍でいうと「良いコード/悪いコードで学ぶ設計入門」は今どきのカジュアルさがありオススメです。
    内容は「言語にかかわらずキレイなコードを書く秘訣」です、何を学ぶにしても業務に繋がると思います。何より章末に次に読むべき本を指し示してくれているのがオススメです。
    (奇しくも本自体がRPGを題材にしてましたね)


    この本に「ジョシュアツリーの法則」というものも触れているのですが、「名前を知ると認識できるようになる」という法則です。
    プログラマーの仕事は当にそれです。有ることを知ってさえいれば、必要なときに学んだり回避したりできます(それがフレームワークでも、失敗例でも)。
    全てを学ぶ必要はなく、「こういう時にはこうするべき」さえ知っていれば一人前です。

@thi-moさんのインデックスに従いRPGな説明をします。

★ サーバーの理解
   中古のpcにubuntuなどインストールし、vscodeをインストールしましょう。
 RPGに例えると装備をゲットしましょう。

★DB
  mariaDB,postgreSQLをインストールし
ましょう。
SQLと言う魔法を唱える練習をしましょう。
 vscodeにER図を入れると探知魔法が使えます。
★仮想化
  lxd,dockerをインストールし、
  バンバン、便利なツールをインストールしましょう。(装備拡張し、ダンジョン攻略かな?)
 因みにlxdは標準でコンテナの転移魔法が使えます。
★http(GET/POST)
  nginxをインストールし、poxryやwebSocketのヘッダー変換を習得
  上位魔法の習得(http upgrade)

  基礎を習得したいのならtcp socketレベルでhttpサーバーを実装することをお勧めします。(マルチスレッドサーバーやデーモン化、SSLは不要)

★フレームワーク
  コンテナにフレームワークで開発したツールをインストール&セットアップし、nginx経由で接続する。
  超難関 java,php,python,ruby,?
  光魔法、風魔法、炎魔法、土魔法、水魔法の5第魔法を習得しましょう。  

 rubyならRack,pythonならwsgi,phpならFirstCGIの教養必要かも?
 vscodeでアプリ開発をしましょう。
★デザインパターン
  反対派なのでノーコメント
  基礎的なクラスを習得できたら考える事
  魔法陣を習得すると複雑な組み合わせ魔法が無詠唱で使えます。
★ JQuery(Ajax)
  javaScriptのみでAjaxを実装
  基礎を習得したらライブラリーを勉強
  前衛をテイマーに守らせることができ攻略が簡単になります。
★ JSON
  javaScript,pandas(python)をお勧め
 これは、アイテムボックスのように収納、取り出しが便利です。
【その他】
パッケジージ管理ソフトyum,apt及びpip,git,snap...
  更にbashおよび systemctl,serviceのサービス管理コマンドを取得することをお勧めします。

1Like

こんなに親身な回答をいただけるとは思っておらず…皆さま詳しいアドバイス本当にありがとうございます。。
ひとつひとつ内容確認させていただきます。

そのうえで不明点あれば回答者さまにご質問させていただきます!

1Like

Your answer might help someone💌