はじめに、
私自身はインフラSEです。しかしたまにミニPJの開発PMをやったり、小さい案件は一人で開発をすることがあります。(主にjavaとpython) 結構前ですが開発者として派遣された子の進捗が芳しくなく、2週間かけて全然完成できなかった機能実装を、私と一緒に行ったら2Hで終わった事がありました。
彼は一応開発のプロとして派遣されてきたにも関わらず、なんだ?この体たらくは!?っと最初思いました。
そして彼にいくつか質問をしたところ、私が常識と思っていたことが全く知らなかった事に驚愕。
その後彼に教材として私が読んだ書籍を渡し、一緒に勉強をしました。
結果彼は急激に成長し、派遣会社を辞め某大手企業に転職を果たせました。
その時の書籍だと古いものが多いので、比較的新しい書籍があればそちらもご紹介します。
オブジェクト指向を身に付ける
まずpython,php,swift,cotlin,typescript,javascriptなど多種多様な言語が世の中に存在しています。
ただ私の感覚で言えば、これらの言語は日本語(オブジェクト指向言語)の中にある、博多弁、関西弁、京都弁、青森弁などの違いでしか無く、オブジェクト指向という言語の考え方が分かれば正直すぐ分かる程度です。
事実2Hでオープンソースの不具合を見つけるコンテストを開いた時、初めて触る言語にも関わらず不具合を発見するという事が出来ました。(まぁ情報工学系博士課程の学生だったのもあります)
新卒採用した子でも2年間で6つぐらいの言語は使いこなしているので、オブジェクト指向を理解した開発をするのは必須だと考えても問題無いです。
以下の本は古い本ばかりですが、オブジェクト指向を初めて勉強するには全く問題無い本です。
図書館に行けば多分まだ置いてあるかも。
他にお勧めの初心者向けオブジェクト指向があればコメントで教えてください。
デザインパターンを使いこなす
オブジェクト指向で開発していると、クラスにどんな単位で作成するべきか、もしくは分割するべきか?がけっこう悩みの種になってきます。クラスの特性に応じて、パターン化してくれたものがデザインパターンになります。
これは結構強力で、私は100行、x10ファイルぐらいのクラスファイル中、if文があるのは1ファイル以外無くなり、多段になるif文も存在しなくなった時、感動を覚えた記憶があります。
やり過ぎると逆に可読性とメンテナンス性は下がりますが、最低でもステート/ストラテジーパターンやNullObjectパターンぐらいは身に付けて貰えたら相当開発が楽になります。
リファクタリング
実は今回紹介する本の第一章を10回ぐらい繰り返して行う事でオブジェクト指向とデザインパターンが理解出来るようになった名著中の名著です。
開発をしていると、最初から綺麗なコードを書ける訳ではないです。ちょっとこのクラスにこの機能があるのはおかしいとか、メソッドがやたら多いなぁっと感じて来た時に、クラスを分割したり、再構成するときに非常に強力な考え方を教えてくれる本です。正直この本に書いてあることを半分でも実践出来たら、新人飛び越えてそこそこ活躍出来る開発者になっていると思っても良いと思います。
単体テスト
実は、単体テスト、リファクタリング、デザインパターンは私の中では開発者が必ず身に付けるべき3種の神器(スキル)と思っています。単体テストがあることで安心してリファクタリングが出来、デザインパターンがあることで、リファクタリングする方向性が定まります。
しかしテストコードを書くのは相当しんどいです。特に初期段階ではクラスが定まらず、何度もリファクタリングするためにテストコードを書き換える事が多くなります。
そのためテストコードをおろそかにして、痛い目を見るというのが新人が通る鉄板の事象です。
特に半年後、1年後に自分のコードを修正したら不具合が発生するという事がよく起こります。
その時テストコードがないと原因が分かるのに無駄な時間を費やす結果になるので是非未来の自分のためにもテストコードの作成は必須と思って貰えるとうれしいです。
最後に
リーダブルコード系の書籍も非常によいですが、今回はリファクタリングに含まれていると思い、外しました。
ただリーダブルコード系の本の方が読みやすいとは思います。
また新人開発者が陥るのは、何でもかんでも開発してしまう事です。
「それってDBに任せていいじゃないの?」
「それってプラグインあるよね?」
「パフォーマンスチューニングするのはそこじゃないでしょ?」
という事がしばしば発生します。
よい開発者への道は(私にとって)開発の神様であるケンベック曰く、
「私は優秀な開発者ではない、優秀なツールを使いこなす開発者だ」の格言に従い、
先人達の知恵を活用して是非開発者人生を歩んで頂けたら幸いです。
もし今回紹介した本よりも良い本があれば是非ご紹介ください。
宜しくお願い致します