最近、この春に職業プログラマになった人達と話す機会に恵まれているので、共通して話すことを書いてみる。
大概、○○について、聞かせてください。とか、いろいろ聞いてくる人達は、羨ましいぐらい、すごく意識高い。
彼らは会社での仕事のプログラミングを上手にやりたい。ってのは、あたり前だし、
- どうやってテストを綺麗に書くか?
- テスト書きながらプログラミングするってのをどう学ぶか?
- 綺麗な設計はどうやるのか?
- 仕事でコードを書いていくってのは、どういうことなのかとか?
- すごいコードはどうやって書くのか?
とか、いろんな事を学びたくて、何から学ぶべきなのか見失っているのではないかというぐらい、やる気に満ちあふれている。人それぞれ、やる気の方向性や現在のスキルセットが違うから何をしたいのか、した方が良いのかは異なっている。
だけど、ざっくり共通しているのは、結局のところ「ある程度のプログラマとしての実力をつけるのに何をしたら効率が良いですかね?」ってことを聞いているのだと感じている。
書けるようになるために書く、書く、書く
彼らは仕事でコードを書くのだから、一生懸命コードを書くだろうし、動くものを、綺麗なコードを書こうとしている。
彼らは大勢のプログラマに囲まれてコードを書いた経験など無いし、人によってはプログラミングすら経験が浅い人もいるので、周りのプログラマからしたら、おかしなコードを書く。昔は誰もがみんなそうだった。
最近はGitHubを利用する事が日常化していたりもするので、おかしなコードにはフィードバックが得られる。フィードバックによって、新たな発見があったり学ぶ事もあるだろう。とりあえずは、そのフィードバックに添って目の前の仕事のコードを直す。
そして、彼らは、またこう思うのだろう。
「良いコードを書けるようになりたい」
そして、書くために書く時間を割く。そして、「このコード大丈夫ですか?」とコードを見てもらう。(この行為自体は、良いコードを書こうとしての行動だから良いことだと思う。本件はこれを否定しているわけではない)
コードって書くだけじゃない。読んで、書くんだよ。
そんな彼らに僕は、こんな事を聞いたり、伝えている。
- 同じチームの人が書いたコードを見てる?
- コードを書いた人の性格や意図が見えるようになるぐらいコードを見てる?
- 自分はこういう所の知識が乏しいし苦手だから、ここがすごい勉強になるな。とか感じてる?
- Aさんのコードはすごいけど、Bさんのはちょっとアレだなとか、わかる?
- ○○さんの書くコードはすごく勉強になる。とか言える?それぐらい見てる?
僕の経験でいうと、人のコードを見る人は、「これちょっとというか盛大におかしいよね?」みたいなコードは、ほとんど書かないし、経験したことの無い言語やフレームワークを利用しても、順応や能力向上していくのがとても早い。
自分の書いたコードぐらいしか読まないし、指摘されたときぐらいしか直さない人はいつまでたっても、微妙なコードを書き続ける。指摘する方だって面倒になるし、そういう人と、何年かたって、また一緒に仕事したいとは思わない。
仕事だからOUTPUTをしていかないといけないだろうけど、OUTPUTを良くしていくためには、良いINPUTをしないと。INPUTの質と量をOUTPUT以上にしなければ、良いOUTPUTを出すようにならないんじゃないかな。
それなりのプログラマの実力をつけるためには、それなりのプログラマのマネをしてみると、自分に足らないものを発見しやすい。そういう目利きができるぐらいにはコードを読む。読めるようになるってのが、良いと思う。
そんな話しをすると目から鱗だったのか。「確かに先輩のコードを見れる環境にいるのにも関わらず、全然見てません。」とか、先輩の方が「耳が痛い話しだぁ」って言ってたりして面白い。
昔の自分に教えてあげたい
レビューした方が良いけど、ネットの記事を見るように日常的にレビューをするような習慣がなかった僕をGitHubというツールを活用していく上で、コードレビューが習慣となった。今となって担当のプロダクトのコードは大概レビューするし、他のプロダクトのコードも見るようになった。書いてる量より読んでる量が日常的に多い。そこから感じて、学ぶ事や学ぶきっかけになる事は非常に多い。
新卒で意識の高かった昔の自分に、教えてあげたい。と思って、お節介だと思うけど、せっかく僕に話を聞きに来てくれたのだからと思って、彼らにこういった話しをしている。
GitHubについては、明日のGitHubKaigiで、話したいと思う。
最低限、その言語の本とかリーダブルコードとか読んでないと先輩プログラマの指摘とか、コードを理解できないので読むと良い。
尊敬するエンジニアの共通点についてまとめた過去記事も、もしかしたら役立つかも知れない。
良い本やドキュメントを読んで、コードを書く事は大切。だけど、一緒に仕事をする尊敬するエンジニアのコードを読んで、理解して、学ぶことは実践的で、すぐに役立つから若いうちに習慣にできたら、自分の可能性がもっと広がると思います。
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus) 大塚 弘記 |
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) Dustin Boswell,Trevor Foucher,須藤 功平,角 征典 |