LEFログ:学習記録ノート

leflog: 学習の記録をどんどんアップしていきます

【感想】『情熱プログラマー』―― 日々楽しんでプログラミングに向き合うために

以前からちょこちょことつまみ食いのようにこの本『情熱プログラマー』を読んでいたのだけれど、一度しっかり通読してみようと思い立ち、最初から最後までじっくりと読んでみた。

この本の内容を簡単にまとめると、以下の3つに要約できる

これらの3つの項目はそれぞれ独立している訳はなく、互いに連関している。つまり、プログラマーとしての理想像に近づくことで、プログラマーとして生き延びることができ、そのプロセスにおいてプログラミングを楽しむことができる。

そしてそのことは、おそらくこの本を読まなくても無意識のうちに感じているだろうけど、この本を読むことで更に解像度を上げることができるだろう。

本の要約になってしまうと味気ないため、自分自身の経験も交えて感想を述べていこうと思う。

時代の変化についていこう

ソフトウェア開発に関する領域は進化が速い。いや、正確に言うならば、進化の速い領域と、遅い領域がある。進化の速い領域を学ぼうと思ったら、日々学習を続けなければならない。だけど、これはとても幸運なことだ。

つまり、それはルーチンワークではないということだ。自分は学生時代お金がほとんどなく、とあるバイトをしていた。そのアルバイトでは毎日決まりきった仕事が繰り返され、個人が創意工夫する余地はなかった。単調な作業の中で、ただ時間が経過するのを待っている状態だった。

その経験を思い出すと、新しいことを学び続けられるこのプログラマーという仕事は、とても幸運で、そして楽しいものだと思う。新しいゲームが発売されたときのワクワク感を、常に胸に抱いて仕事できる。

自分は学生時代、作家か研究者になりたいと思っていた。それらは日々新しいことを学べる仕事だからだ。自分はその両方にはなれなかったけど、プログラマーという形で実現できた。

新しい技術を学ぶことには他にも色々なメリットがある。そのことについては本書に書いてあるので省略する。

なんでもやる

なんでもやろう。苦手意識を持たず、なんでもやる。これは、自分がこの半年で痛感したことである。

例えば、自分はデザインに対して苦手意識を持っていた。具体的にはCSSだ。RubyやTypeScriptでコードを書くことに比べると、CSSを書くことは、なんとなく自分に向いていない気がしていた。

だけど、そうした先入観を持ってしまうことは、結果として自分の可能性を閉ざしてしまうことがわかった。CSSは、どこでどう表示を切り分けるかというロジックを持っていて、書いたコードが画面へと即時に反映される。先入観を捨てて思い切って学習すると、楽しいことがわかった。そして、根源的なところでは、他の言語を学ぶのとあまり変わらないということもわかった。

また『情熱プログラマー』の内容を借りて言うと、「コーディングはもう武器にならない(p.9)」。現在、ChatGPTの影響もあって人工知能がどんどん進化して、単純な実装だけには価値がないことが更に浮き彫りになりつつある。だから、設計やアーキテクチャリファクタリングのような、プロジェクト全体の視座を持った仕事が重要になっている。

更に広くこのことを分析すると、「人間と機械の間のインターフェイス」として、プログラマーの価値は担保されるのではないかと思う。つまり「なんでもできる」必要があるし、「なんでもやる」必要がある。お客様の要望を分析し、本当に必要なものを実装する。そのためには対話を通じて、信頼を育む必要がある。コンサルティングからDevOpsに至るまで、なんでもできたほうが良いし、そうしたプログラマーのほうがこれからどんどん価値を持つのは間違いないと思う。

また、「なんでもやる」に関するエピソードでいうと、半年間darashiさんと一緒に開発をしていて、学びになったことがたくさんある。上記のCSSのこともそうだし、他にもこんなエピソードがあった。

timer.teamの開発の途中で、残り時間を円グラフで表示するという機能を実装した。

時間経過とともに背景のランドルト環が欠けていく機能

この画像のように、時間経過とともに円グラフが欠けていく。

ここで自分が凄いと思った点が2つある。それは「この円グラフを実装する技術力」と「その機能を容赦なくオミットできる決断力」だ。

円グラフを実装することは難しく、ただ単にTypeScriptとReactを書けるだけでは実装できない機能である。circleタグとviewBoxタグを使った実装であり、幅広い知識があるからこそ実現できた。

そしてその特徴的な機能を、デザイン案の決定とともに、ノータイムで削除した。これも、自分の中では驚いたことだった。もし自分一人の開発であったら「せっかく頑張って実装したのだから……」と躊躇していたと思う。

これはtimer.team全体の開発におけるほんの一つのエピソードであるが、その一つにおいても学べることが多かった。「なんでもやる」という精神があるからこそ、上の実装と判断ができるのだと思う。

――最後には全部できるようになるとイイよね

この言葉は1on1の中で「プログラマーとして学習すべきこと」について、darashiさんからアドバイスされたことである。そう、一流のプログラマーを目指すのであれば、最後には全部できる必要がある。そのためには、先入観や苦手意識を捨てなければならない。なんでもやる。全部やる。そして成す。

最後に必要なのは行動力

『情熱プログラマー』では優れたプログラマーであるための具体的な方法論がたくさん載っていて、それがプログラマーとしての幸福に繋がることが述べられている。

しかし、これらは実践しなければ何も始まらない。例えばブログを書くのだって、正直にいうと少し億劫だ。自分はショーペンハウアー的なニヒリズムを持っているので、「せっかくブログを書いたところで100年後には……」みたいな感情が生まれてしまう。

だけど、それでもやる。それをわかった上でやる。無為かもしれないと覚悟しつつ、行動に移す。そして、その過程を楽しんでみる。ブログ記事を書くという内容に絞るなら、毎回文体を変えて読者が飽きないようにしようと試みる(ときには動画も撮ってみる)。サービスに新しい機能を追加するときは、できるだけ読みやすいコードにしようと挑戦してみる。そうしたちょっとした工夫が、日々の仕事を楽しくし、生きがいを持たせるのだと思う。

私事だが、先月の末に体調を崩し、一ヶ月ほど微妙な体調不良が続いていた。今は良くなって、メンタルも回復し、休日にブログも書けるようになった。そこで思ったのが、やはり健康と体力は大事だと言うこと。健康じゃないとやる気は生まれないし、体力がないとやる気が持続しない。だから、たくさん睡眠を取って、食生活を整えて、たくさん運動するように生活習慣を改善しないといけない、と改めて思いました。

話を戻すと、良い理念も実践しなければ意味がない。プラグマティズム(行為主義)はプログラマーにとっても重要だ。そして、ジェダイ・マスターのヨーダのように、恐怖心を捨てなければならない。なぜなら「普通の人間とプロを隔てているのは恐怖心(p.137)」なのだから……。