ビープラウドの清水川貴之さん@shimizukawa , 清原弘貴さん@hirokiky、@tell-kさんが執筆(ビープラウド監修)した「自走プログラマー」が出版されます(大手書店は2020年2月18日から先行販売、電子書籍は2月22日販売開始、一般書店は2月27日販売開始です)。
自走プログラマーの前書きには「プログラミング入門者が中級者にランクアップするのに必要な知識をお伝えする本」と書かれています。
私なりに、入門、初級、中級以上のそれぞれのプログラマーのレベルをイメージしてみました。
- 入門プログラマー
- プログラミングの文法を学びながら書いている。プログラムが完成しないこともある。
- 初級プログラマー
- 見よう見まねで動くプログラムを完成できる。しかしレビューを受けると、多くの指摘があり、レビュー、修正ともに大きな時間がかかってしまう。行ったり来たり、止まったりの「迷子状態」にハマることが多い。
- 中級以上のプログラマー
- 動くプログラムを完成できる。レビューは指摘事項が少なく、少量の修正で済む。人の助けを借りる量も少なく自走している状態。
中級以上のプログラマーが持っている習慣
中級以上のプログラマーが持っていて、入門、初級プログラマーが持っていない習慣があります。
それは「すべての設計・実装に理由をもつ習慣」です。
中級以上のプログラマーは、設計や実装の理由を質問すると、明確な答えが返ってきます。
一方で、入門、初級プログラマーにレビューで質問をすると「なんとなく」「憶えていない」「Webからコピペしたので理由はない」というような答えがしばしば返ってきます。
中級以上のプログラマーは「すべての設計・実装に理由を考える」習慣をもっているために、プログラムやシステムの全体の一貫性が維持され、メンテナンス性、パフォーマンスにも優れたプログラムを書くことができるのです。細部まで心が行き届いている状況といえるでしょう。
入門、初級者の人がすべてに理由を考えられない理由
入門、初級者の人が理由を考えられないのには理由があります。
入門・初級者はプログラムを動かすための知識を1つしかもっていません。
それは、プログラムの入門書には「プログラムを動かす方法」は書かれていますが、設計や実装の選択肢やメリット・デメリットは書かれていないからです*1。
設計や実装の選択肢を1つしか持っていないので、それが良いのか悪いのかわからないのです*2。そのため、設計や実装の理由を考えようにも考えられないのです。
設計・実装の選択肢を良いも悪いも含めて複数もっていれば、それぞれの案を比較検討できますし、少しずつでも理由を考えられるようになります。
「自走プログラマー」には、この良い(ベストプラクティス)・悪い(具体的な失敗例)の選択肢が良い・悪いも合わせて240(120のプラクティス☓2)個掲載されていますので、理由を考えるための「設計・実装の選択肢」を得ることができるでしょう。
この「理由を考えるための設計・実装の選択肢」が、前書きに書かれている「プログラミング入門者が中級者にランクアップするのに必要な知識」の本質です。
「自走プログラマー」の具体的な内容
自走プログラマーの目次は以下です。
第1章 コード実装 1.1 関数設計 1.2 クラス設計 1.3 モジュール設計 1.4 ユニットテスト 1.5 実装の進め方 1.6 レビュー 第2章 モデル設計 2.1 データ設計 2.2 テーブル定義 2.3 Django ORMとの付き合い方 第3章 エラー設計 3.1 エラーハンドリング 3.2 ロギング 3.3 トラブルシューティング・デバッグ 第4章 システム設計 4.1 プロジェクト構成 4.2 サーバー構成 4.3 プロセス設計 4.4 ライブラリ 4.5 リソース設計 4.6 ネットワーク 第5章 やることの明確化 5.1 要件定義 5.2 画面モックアップ
関数名の名前付け、関数設計から始まり、クラス設計、モジュール設計、ユニットテストと進み、レビュー、モデル設計、エラー設計、システム設計、要件定義と、ソフトウェアの小さな範囲からソフトウェア全体へと範囲が広がっていきます。
中級以上のプログラマーの意識は、機能をつくるというソフトウェアの「点」にとどまらず、開発するソフトウェアが安定して持続的に運用や開発を続けていけるのかという「面」にも視点が及んでいるのでそのような構成になっています。
プログラマーは、実運用で起きうるエラーや異常をあらかじめ認識したエラーハンドリング、そして迅速な状況把握を可能にするロギングができて、はじめて一人前です。
「自走プログラマー」では、エラー設計(ロギング)にも37ページの紙幅をとっています。
このように自走プログラマーは、本番運用まで見越した実践的な内容になっています。
「自走プログラマー」の活用方法
設計・実装の選択肢を得た上で「自走プログラマー」を以下のように実践で活用していただければと思います。
- 「自走プログラマー」のプラクティスに書かれているように実装してみる。実装・設計のパターンを頭に入れる
- 「自走プログラマー」にかかれている「具体的な失敗例」と「ベストプラクティス」の違いをひとつひとつ理解する*3。
- 「ベストプラクティス」ではない設計・実装をしたときにどのようなデメリットが発生するかを考える
- すべての設計・実装に理由を考えることを始める・続ける
「自走プログラマー」のひとつひとつのプラクティスは日々の開発で「理由」を考え抜いて得られたものです。料理でいうとプロの料理人によって考え抜かれたレシピ集です。
これらを読んでいくことで、中級以上のプログラマーが、日々どのようなことにこだわり、思考を積み上げているかを知ることもできるでしょう(中にはそこまで考える必要あるの?というものもあるでしょう)。
最後に
中級以上のプログラマーには誰もが一足跳びには到達できません。
日々のひとつひとつの仕事(設計・実装)に意味・理由を考えて、思考を重ね、洗練させていくなかで、徐々にそのレベルに到達していきます。
日々、すべてに理由を考える習慣を続けられる人は、短い期間で初級者から中級以上のレベルに達することができます。
逆にいうと、日々すべてに理由を考える習慣のないプログラマーは何年経っても初級プログラマーから中級以上のプログラマーに進化はできないでしょう。これは厳しいようですが現実です。
このようにならないためにも、理由を考えるための設計・実装の選択肢と、中級以上のプログラマーの考え抜く視点を「自走プログラマー」から手に入れてもらえればと思います。
そして、得た知識をもとに、すべてに理由を考える習慣を始めるとよいでしょう。
入門・初級レベルのプログラマーの方は是非とも、中級以上のプログラマーを目指しましょう。
一回このレベルに到達すれば、プロフェッショナルなプログラマーとして安定した成果が出せますし、周囲からの信頼も高くなるでしょう。
そのための入り口として「自走プログラマー」を是非お手にとっていただければと思います。