📝

プログラマーの次のステップへの勉強方法

2022/10/27に公開

はじめに

実務で指示されたものはだいたい作ることができ、どのようなプログラミング言語でも実装できるプログラマーがそこで成長が止まることはよくあることである。そのような人に限って、「次に何すればいいのかわからない」と悩んでいると思う。

プログラマーの成長が止まっている要因として、以下のようなことが考えられる。

  • 新しい技術の情報を仕入れて議論できるプログラマーがいない
  • 業務で扱っている技術がそこまで高度ではない
  • 改善サイクルが遅い
  • 開発プロセス・ドキュメントをまとめてくれるプログラマーがいない
  • 周囲に積極的にアウトプット・個人開発を進めているプログラマーがいない

これらを簡潔にまとめると、仕事はあるけど否定できない停滞感があるということになる。

そこで、今回の記事では

プログラマーとして技術を伸ばすのが楽しい、純粋にものづくりが楽しい、けど今のままでは不安を感じる

という人を対象に個人的にオススメする勉強方法を簡潔に紹介する。あくまで一個人の見解に過ぎないが、参考になれば幸いである。

具体的な勉強方法

デザインパターンを学ぶ

デザインパターンとはオブジェクト指向の原理原則を駆使して一般的な問題にアプローチができるコーディングのテクニックを意味する。

デザインパターンを理解することで得られるメリットは以下の通り。

  • コードをモジュール化でき、機能の単位を小さくできる
  • 依存性の低いコードを仕上げられる
  • 保守性・柔軟性があり、機能を簡単に変更できる
  • デザインパターンという共通認識を知ることでプログラマー同士で意思疎通をスムーズに行える
  • デザインパターンが実装レベルの情報を内包してくれるので、設計レベルの話で実装の話に移るようなことが少なくなる

デザインパターンは柔軟性と保守性を両立したプログラムを書く上では必須のスキルである。デザインパターンを学ぶ上で参考になる書籍とGitHubリポジトリを以下に紹介する。

https://www.oreilly.co.jp/books/9784873119762/

https://github.com/kamranahmedse/design-patterns-for-humans

ソフトウェアアーキテクチャを学ぶ

デザインパターンは個々のクラスの役割を定義しているものではあるが、アプリケーションとして完成させるためにはより大きなデータの流れがプログラムの中で発生する。

  • 階層型アーキテクチャ
  • ドメイン駆動モデル
  • クリーンアーキテクチャ
  • クラウドデザインアーキテクチャ
  • マイクロサービスアーキテクチャ

アーキテクチャはコードを書く上での土台となる重要な概念である。土台が強力であれば、そこまで技術力の高くないプログラマーでもメンテナンス性の高いコードを書ける可能性が高まる。さらに、共通認識を作れるのでプログラマー同士での意思疎通が簡単にできるというメリットもあるのだ。

アプリケーション開発でソフトウェアアーキテクチャの知識は決して無駄にならないので、絶対に学んでおくべきである。オススメの書籍やネット記事は以下の通り。

https://www.oreilly.co.jp/books/9784873119823/

https://www.tutorialspoint.com/software_architecture_design/introduction.htm

https://www.freecodecamp.org/news/an-introduction-to-software-architecture-patterns/

要件定義を学ぶ

要件定義とは、システム開発などのプロジェクトを始める前の段階で、必要な機能や要求をわかりやすくまとめていく作業である。本格的な開発の前段階で、プログラマーの視点から要求をまとめて具体的な進め方を決定する重要なプロセスだ。要件定義はプロジェクトを成功させる上では必要不可欠である

要件定義について詳細に学びたければ、以下の記事が非常に参考になるのでぜひ確認しておきたい。

https://qiita.com/Saku731/items/741fcf0f40dd989ee4f8

https://qiita.com/syantien/items/9a8a7cbaeca2be3ef0d7

インフラ・ネットワーク知識を理解する

今の時代、アプリケーションを開発する際にはほとんどの場合インターネットに接続して処理を行うことが当然になっている。その際に、プロトコルの特徴やHTTP(ブラウザ)の仕様や構造に対する理解が必要不可欠だ。

理解しておくべき基本的な専門用語は以下の通りである。

  • TCP
  • HTTP
  • DNS
  • ルーティング
  • ミドルウェ
  • イミュータブルインフラストラクチャ
  • 仮想化

インフラを扱うソフトウェアでは主に以下のような知識を学んでおこう。

  • Docker(最優先して学ぶべき)
  • Kubernetes(余談だが、業界ではk8sと表記されていることが多い)
  • AWS

これらの理解はアプリケーションを開発する上で、効率性や堅牢性の両方を向上させることができる。どこから着手すればいいのかわからない場合、最初にDockerから学ぶことを強く推奨する。Dockerを理解する上で役立つWEB記事は以下の通り。Dockerを使うにはまずこれらの記事の内容を理解することから始めていこう。

https://qiita.com/gold-kou/items/44860fbda1a34a001fc1

https://qiita.com/etaroid/items/b1024c7d200a75b992fc

https://qiita.com/zembutsu/items/24558f9d0d254e33088f

▼DockerとKubernetesに関する違いを丁寧に解説されている英文記事。非常に参考になる。

https://azure.microsoft.com/en-us/topic/kubernetes-vs-docker/

OSSに参加する

世の中には優秀なプログラマーがたくさん自分のコードを公開している。GitHubで有名なフレームワークのソースコードも数多く開発されている。自分が普段使っているフレームワークのコードを読んで、仕組み、思想やコードの書き方を学んでおこう。そうするだけで、今まで書いていたコードのより良い書き方を発見できるきっかけになる。

公式ドキュメントを読む

公式ドキュメントを読むのも立派なプログラミングの勉強になる。なぜなら、公式ドキュメントはOSS(オープンソースソフトウェア)において、ソースコードと双璧をなす最も信頼できる資料の1つだからだ。10分でもいいので、公式ドキュメントを丁寧に読む習慣をつけよう。

公式ドキュメントに関する詳細は過去記事にて解説しているので、時間があればそちらも確認しておきたい。

https://zenn.dev/nameless_sn/articles/how_to_read_official_documents

おわりに

今回の記事では、ある程度技術力があるけど次に何をすればいいのかわからないプログラマーに向けてオススメの勉強方法を簡潔に解説した。

【本記事で紹介した学習方法】

  • デザインパターンを学ぶ
  • ソフトウェアアーキテクチャを学ぶ
  • 要件定義を学ぶ
  • インフラ・ネットワーク知識を理解する
  • OSSに参加する
  • 公式ドキュメントを読む

今回の記事で紹介した学習方法はあくまで一個人の見解に過ぎないが、読者の学習の質を向上させるきっかけになれば幸いである。

参考サイト

https://doriven.hatenablog.com/entry/2014/02/25/193807

https://zenn.dev/nameless_sn/articles/how_to_read_official_documents

https://qiita.com/newta/items/f4aff8cdd8706d5d08c5

https://qiita.com/hiraike32/items/40ef06f85f6a63828985

https://it-trend.jp/development_tools/article/32-0060

GitHubで編集を提案

Discussion