プログラミングを学ぼうとすると、覚えることの多さに圧倒され、見通しが立たず挫折しそうになる。どう取り組めばいいのか?

4つの柱

新しいプログラミング言語を学ぶとき、4つの重要な柱がある。

  • 文法
  • ツール
  • 標準/非標準ライブラリ
  • 設計スタイル・イディオム

それぞれを並列に徐々に伸ばしていく必要がある。

文法

その言語の文法を学ぶ。言語仕様は正式にドキュメント化されてることが多いので情報源には困らない。言語によってはウンザリするほど分厚い(JavaならPDFで800ページ弱、JavaScriptでも600ページ弱……)が、少なくとも取り組みの「いとぐち」にはなる。

ツール

その言語で一般的に使われているツールの使いこなしを学ぶ。例えばJavaなら、javac, java, jar, IDE(Eclipse,IntelliJ,...), JUnitとか。ネットに落ちてるチュートリアルでは、ごく基本的な使い方しか学べないかもしれない。それで満足せず、ショートカットキーを覚えたりカスタマイズしたり、より便利なツールを探したりして、開発時のストレスを軽減したい。

ライブラリ

言語が標準で提供している関数ライブラリやクラスライブラリの使い方を学ぶ。公式のAPIリファレンスや、使用例をまとめたサイトを見つけて、いつでも参照できるようにしておこう。まずは、文字列や配列を操作する関数/クラスを一通り予習しておくと、何かと役立つ(車輪の再発明しないように)。

必要に応じて、標準じゃない(サードパーティの)ライブラリも学ぶ。フレームワークもここ。

設計スタイル・イディオム

その言語特有の設計スタイルや、コードの書き方を学ぶ。

設計スタイル:
オブジェクト指向とか、関数型プログラミングとか、モジュールをどう分けるかみたいな、上流寄りの話し。

イディオム:
rubyで変数を初期化する(count ||= 0)とか、Clojureで再帰を書く((if (seq coll) ...))とか。例が地味だな…。要するに設計スタイルよりも下流の話し。

身につけるのが一番難しいのがイディオムかも。

  • Cookbook系の教科書を読む
  • 上級者のコードを読む
  • 上級者にコードレビューしてもらう
  • StackOverflowで質問する(What is the most idiomatic way to...?)
  • Qiitaに投稿してツッコんでもらう?

その他 〜 言語に依存しない諸々

4つの柱とどっちが先かはともかく、言語に依存しない汎用スキルも欲しい。

  • エディタ、タッチタイピング
  • デバッグノウハウ
  • バージョン管理ツール
  • バグ管理ツール
  • DB
  • OS
  • ターミナル、シェル
  • 規格・標準仕様(http,文字コード,CORS,OAuth,...)
  • 暗号, PKI
  • 環境構築ツール(Docker,VirtualBox,...)
  • Webサーバ(httpd,Nginx,...)
  • プラットフォーム系サービス(Heroku,AWS,...)
  • 英語
  • ……

いやぁ、ホント大変ですわ。長い道のりだけど、どこかから始めるしかないよね。