プログラミングというより物事が出来るようになる思考法
私が人生でずっと悩んで追い求めていたものがついに解決した。それは、なんでも良いから何かが「出来るようになる」ことだ。
昔からいくらその対象に時間をかけても、努力しても、人並みにすらならない。人にやってもらうとか自分がやらないことに関してはうまくいくのだが、自分が何かが出来るようになるということに関しては人生50年目だが、絶望的で、それが自分の自己肯定感や、人並みに生きることへの罪悪感を生んでいた。人生で解決したかった問題 No.1 だ。だからそれをずっと解決しようと頑張ってきた。
ギター演奏での解決方法
私はクソ不器用で、なにやってもできないので、人生で出来たらいいことを2つだけ定めた。ギター演奏と、プログラミング。ギター演奏に関しては少し前に解決した。根本的な問題を一つ上げるとすると、「ゆっくりから、メトロノームで練習する」これだけだ。
ギターはもう何十年も演奏しているのに弾ける感がなかったけど、ほぼこのアドバイスのおかげで少なくとも自分がギター弾けない感というのは解決された。しかし、プログラミングの方はどうやって解決していいのやらという状態だった。私はソフトウェアエンジニアなので、そっちが解決しない限り自分は人生を楽しめないと思っていた。
世界でトップレベルのエンジニアを観察
つい先日、スキップマネージャとの One on One でこのようなことを言われた。「どうや、世界のトップレベルのエンジニアと仕事出来て楽しいやろ?」
今私は、あるプロジェクトをやっていて、やってる同僚がめっちゃくちゃ凄いエンジニアで、そのスキップの言葉にもうなづくしかない。自分は本当にラッキーだ。自分があまりに出来なくて申し訳ないので、彼を観察しようと、彼にトラブルシューティングのペアプログラミングをお願いした。
彼は私の依頼の意図がよくわからないようだったが、自分は彼の思考法を学びたかったのだ。彼がどのように考えて、どのように問題を解決するか。
衝撃的な解決
一緒に彼と問題の解決に当たった。自分だったらいろんなログをクエリーしたり、コードを見たりとか、いろいろじたばたするところだが、彼は最初の一つのログだけを見て、「仮説」を立て始めた。手は一切動かさない。彼はしゃべりながら、アーキテクチャがこうなっていてこのログがこうなっているから、自分の推測では、こういうことが起こっていると思われる。だから、自分が調べるべきはこのテーブルといって、SQLを1つだけ実行した。それがまさに問題の原因を表していた。
自分だったらああでもない、こうでもないといろいろクエリーしたりコード見たりするところだが、彼は手を動かしたのはその一回きりで、自分なら数時間以上かかる問題を一瞬で解いて見せた。
恐ろしいことに、そのコードベースに関して、彼は経験がほとんどない。自分の方がずっとコンテキストを持っている。まるで神業のようだったが、一方で「人間が不可能なことをやっている」というわけでもなかった。
プログラミングの生産性というのは圧倒的な「頭脳労働」であるということを実感した瞬間だった。その「頭脳」によって、生産性がクソほど違うというのはこういうことなのだろう。
若い同僚の一言
ついに自分が長年待ち望んでいた瞬間がやってきた。その同じ日に、同僚がシアトルから自分の自宅に戻るのでもう一人の若い同僚とランチをご一緒した。彼らはとても若いしキャリアも少ない。でもとても優秀だ。大学出てほぼすぐなのに、仕事もがっつりこなして、頭もすこぶる良い感じ。自分とは正反対だ。そんな彼らと、On Boarding つまり新しいことに取り組むときの話になった。自分のチームのアーキテクチャはめっちゃくちゃ複雑なので、各マイクロサービスごとに誰かが作った内部用のビデオが存在する。それをシリーズにして、各項目ごとに勉強出来るようになっている。そんなめっちゃくちゃに複雑なアーキテクチャについていってる彼らの On Boarding にも興味があったのだ。そんな話になってるときに、彼が衝撃的な一言を言い放った。
理解には時間がかかる
「いやぁ、ビデオ見ても難しいので、10回観てますわ。何回も見直して、分からないところポーズしてメモして観てます。」そうしたら、もう一人の同僚も「やっぱそうなるよね。自分も何回も何回も見たわ」。この出来る人2人の同じコメントには雷を打たれた気分になった。自分は難しいから1回観ても理解できへんし、そんなもんと思っているので、1回みてあんまり頭に入ってないけど、実行したり、デバッグし始めて、ちょっとづつ理解していくというステップを普段はとりがちだ。私は頭がいい人はああいうのを見て1発で理解できてうらやましいなぁと思っていたけどそうではないのだ。どんなに頭がいい人でも理解には時間がかかるものなのだ。頭のいい人が理解が早いように見えるのは、そうやって時間をかけてきて積み重ねているので、既に理解していることに関して頭のメモリにコンテキストが載っているからだ。
早くしようとする者は遅くなる
私の頭の中では常に理解というものは完璧には出来なくて中途半端で徐々にみについていく(それでもちゃんと理解出来てるかはしらない)なので、ある意味あきらめていた。しかも、私は「生産性を上げなければ、どうやったら早く出来るだろう」と常に考えてきた。しかし、皮肉なことに「早く出来るように頑張る」ということが最終的な生産性を圧倒的に下げていたのだ。理解が十分でないから、努力しても空回りになるし、身につかないし、忘れやすくなるので頭にのこらないのだ。
理解に時間をかける
そのことを何回も頭で考えて、その週末に上記のような帰着を得た。私は今までの考えを改めて、何かを早く出来るようになるということを一切辞めた。下記のブログなどを読んで「理解」とはどういうものかを理解しようとした。
今までは、実際にコードに触れないとわからないよね?と思っていたけど、そうではなくて、ドキュメントを読んでいて理解できない箇所がでてきたら、時間をかけて理解して進むようにした。メール一つ読むときも今までだったら、英語だし、自分には読み飛ばし癖がついていたが、時間をかけてゆっくり理解して読むようにしてみた。
「理解に時間をかける」を実践する
すると、ドキュメントやメールを普段よりずっと時間をかけているつもりだったが、時計を見てみると思ったより時間が経っていない。しかも、自分の体感覚でしかないのだが、技術や、コンテキストがかつてないほど明確に理解出来ている。しかも記憶に明確に残っている。何か努力したわけではないのに。ミーティングに出る時も、普段なら理解をあきらめて自分のパートだけでもなんとか対応するという感じだったのに、「理解しよう」という意識を持つことで、分からない英単語を聞いたらその場で調べるようになったし、わからなかったら聞き直すようになった。さらに、同僚をみならって、会議の間にわからなければレコーディングや、AIで生成されたスクリプトを時間をかけて見直して理解するようにした。
複雑な技術をコントロール出来ている感覚を得る
そうやって、「理解は時間がかかるもの」として、早くしようとせず、徹底的に理解する習慣をつけていくと、自分の人生でかつて経験したことが無いことが起こった。以前はメモを取りまくっていたコードリーディングもゆっくり理解することで100%挙動が理解出来ているし、その確信がある。デバッグの時も少ないログをゆっくり観察して、従来読み飛ばしていたようなログの他の項目も見ることで、圧倒的に試行錯誤が減って問題に一直線に解決できるようになってきた。
そして、何より最高なのが人生で初めて何かわからないことがあっても「自分ならやれる」と思えたことだ。この感覚が欲しくて50年間あがいてきたのだ、それがやっと手に入った。
人生をコントロール出来る感覚を得る
その変化はプログラミングや技術だけではなかった。私生活においても私はいろんなことの理解をあきらめていた。頭が悪いから仕方がないと思っていた。でも時間をかけて理解することで、人生のいろんな小さなことも「コントロール出来ている」感を感じることが出来て「自分なら出来る」という安心感を得ることが出来るようになった。
頭の出来ではなく習慣
eXtreme Programming を開発した Kent Beck は言っていた。「私は偉大なプログラマではなく、偉大な習慣を身に着けたプログラマだ」と。私はみんなより頭が悪いとずっと思っていた。事実どんなに努力しても、時間と金をぶち込んでも、いつもできなかったのだ。しかし、それは頭ではなかった。単なる思考の習慣だった。ギターの件を思い起こすと、根本原因は同じだったように感じる。早くできるように頑張るために出来なくなっていたのだ。どんな人も最初は難しくて、簡単なものなんてなくて、理解には時間がかかるのだ。今の自分はとても幸せな気分だ。本当に人生で欲しかったものがアメリカで手に入るなんて思ってもいなかった。
幸いなことによく読まれているこのエピソードも入っている本が発売になりました。こちらもエンジニアだけではなく多くの人に読んでいただいています。私がアメリカで見つけたいろんな生産性の秘密をシェアしています。
このポストから数年後に書いた次のポストも続きとしてどうぞ。
この記事が気に入ったらサポートをしてみませんか?