前回「新人エンジニアが生き残る術 」の続きです。
https://menta.work/post/detail/14347/WxRVbRPrnIYjXxfaKwmj

「プログラミング」は創造的な行為です。

プログラムは可能な限り簡素な表現がされていなければなりません。
業務ロジック(本来実装しなければならない処理)
に集中できるソフトウェア構造であるべきです。

プログラムはちょっとでも油断すると複雑性が増大します。
日々リファクタリングを行ってソースコードを整理する必要があります。
リファクタリングとは、日常的に行われる作業で
前日の自分のコードに対しても行います。

リファクタリングはマーチンファウラー氏がまとめた
コード整理技法のカタログ集です。
キャッチコピーが「どろどろのコードを美しいコードに」です。

詳細は「新装版 リファクタリング 既存のコードを安全に改善する 」を参照願います。
技術書として1冊の書籍に情報が集約されていることが
とても素晴らしいことです。
技術者は日々良書に触れ、数十年分の経験がなければ醸成できないスキルを
書籍を通して吸収しましょう。

他にも世の中には巨大ソースコードの複雑性に対する
様々なアイデアがあります。
こまめにルーチン化したりクラス化したりして
複雑性を回避する必要があります。

  • リファクタリング
  • オブジェクト指向(デザインパターン等)
  • アーキテクチャ(パターン)

MVCパターンなどはWEBフレームワーク等で必ず
触れることになります。

「ちょっと待った!!。基礎構文を覚えたばかりで
リファクタリングやオブジェクト指向を覚えるなんて
段差が急すぎる・・・・」
という声が聞こえてきそうですね。

基礎構文の学習から、プロのソフトウェアエンジニアとして活躍するまで
様々な事を学習する必要があります。
そのためのWEB上の情報も、所々に真空層となっている感があり
初学者が効率の良い学びを妨げる要因になっています。

ここは、プログラミングスクールやメンター達が
使命感を持って取り組む必要があるでしょう。

着任後も学習しなければならないことは何か?

ネットワーク関する知識不足 TCP/IP って何ですか?

ネットワークの関連の知識は頻繁に触れることになります。

ここでは詳細は述べませんが、キャリアのどこかでまとまった
時間を取って集中的に勉強する必要があります。

勉強しなければ一生、解らないままです。
時間を節約したい方は下記の資料を参照してください。
※NTTコミュニケーションズ インターネット検定 .com Master

.com Masterは包括的にかつ学べ、実務レベルでとても役に立つネットワークの知識が得られます。

フレームワークが何でもやってしまうので、複雑なアルゴリズム開発経験のない人間がどんどん増えている。 

フレームワークと呼ばれるライブラリの内部は高度に抽象化されたクラスの集合体です。
クラス内部の所々は歯抜けの状態ですが、それ以外の処理は密に連携され既に実装が完了している状態です。

あとはそのフレームワークの利用者が欠けている処理を当てはめる(プログラム実装)
作業となりますので、フレームワークを利用する際は
その裏側で発生している処理をなんとなく理解している必要があります。

大規模な開発ですと、さらにそのフレームワークの上に担当業務で行っている提携処理の使いまわしが
できるように独自のフレームワークを重ねて拡張し使用しているケースがあります。

こういった拡張は、優秀な先輩社員がプロジェクト本格始動の数か月前(あるいは数年前)
からシステム基盤部の構想を練り、プロジェクト開始(参画者が一気に増えるタイミング)時
に円滑に業務が行えるように計画されていたりします。

ただ、先輩たちが引いたレールの上を歩いているだけの日々を送っていると
本物のエンジニアにはなれません。

処理の裏側を探求する好奇心と野心がなければ、いつまでも新人レベルを抜け出せないでしょう。
例えば有名フレームワーク内のORM等のみを抜き出して、自分で独自実装してみるなど学習欲が必要になります。

学習する内容がねずみ算的に増えてどうすればよいかわからない。

ソフトウェア開発エンジニアの学習範囲は広大です。
そのため「集中」と「選択」が必要です。
例えばフロントエンドエンジニアの学習領域ですが

  • HTTP
  • HTML
  • CSS
  • SEO
  • アクセシビリティ
  • レスポンシブデザイン
  • CSSボックスモデル
  • CSS設計
  • CSSメタ言語
  • JavaScript言語
  • DOM操作
  • イベントループ
  • Node.js
  • npm,Yarn
  • セキュリティ
  • JSフレームワーク
  • コンパイルモジュールハンドラー
  • リンター
  • CSS-in-JS
  • CSS Modules
  • CSS フレームワーク
  • テスト
  • 型定義
  • Web Components
  • PWA
  • SSR ServerSideRendering
  • SSG StaticStiteGeneration
  • GraphQL
  • ネイティブアプリケーション
  • WebAssembly

などなど・・・・・・(多いヨ~)

それぞれ個々に追求していくと時間がいくらあっても
足りません。
ここは50%捨てる覚悟を持つべきですが
末端の技術はすぐに枯れたり変化したりします。

新人の間はソフトウェア開発技術者のコアな技術を
しっかり学ぶべきでしょう。

関連記事

プログラミングでもっとも大事な事
https://menta.work/post/detail/14347/9BSOoOhvVU3D3IwUNjGF
オブジェクト指向プログラミングのメリット・デメリット
https://menta.work/post/detail/14347/slgw1gZRzsEYS7sllBgO