以前努めていた会社の上司から連絡がありました。その内容は以下のようなものでした。
「なぜ、同期の中で君だけ飛び抜けて成長したのか?他の子と同じ環境にいたはずなのに。」
正直なところ、自分がずば抜けて成長したという認識はなく、自分では今でもダメだと思っているので、そのように言われたことに大変驚きました。
しかしながら、自分が成長できていたと仮定して、自分がどうプログラミングスキルを磨いてきたのか振り返るよい機会になったので皆さんと共有したいと思います。
これからプログラミングを学ぼうとしている方々の参考になれば幸いです。
自己紹介
都内のIT企業でプログラマーとして勤務している38歳。大学卒業後、未経験から組み込みエンジニアになり、数年前にフィールドをIT企業に移してAWS上でWebアプリの開発しています。
取り組んだこと
- とにかくやってみる
- とにかく勉強してみる
- 人の書いたコードを読む、修正してみる
- 人の技は盗む、パクる
- パターン化する
- 素直に人に聞く
- バカでもできる方法を考える
とにかくやってみる
自分はあまり座学は得意ではなかったのでとにかくコードを手探りで書く、からの調べる、が良かったのかな、と思いました。とある研究によると、とにかくやってみてから勉強する、というのが学習効果が高いそうです。
とにかく勉強してみる
理解できないとが多かったのですが、一応本を読んだり調べたりしました。正直、どこまで自分の役にたったのかよく分かっていません。しかし、一説によると現在の読書量が年収と相関関係があるらしいので、本を読んで勉強するというのは良いことかもしれません。
人の書いたコードを読む、修正してみる
もともとプログラミング経験なしだったことから、まっさらな状態からコードは書かせてもらえませんでした。人の書いたコードを一部修正して新機能を実装する、もしくは追加する、ということをいろいろやらされました。少しでも間違えたり下手な修正をすると叱られたのですが、今思うとあの経験は今も生きています。どんなコードが修正、追加しやすいのかどうか、もとのコードを壊さずに最小の修正でやるにはどうしたらよいか、というのを体感できたのはよかったと思います。一行の追加で自分の望む動作をソフトウェアにさせる、というのを理想としていました。まぁ、実際にはかなり難しいですけどね。
人の技は盗む、パクる
変な意地ははらずに、他の人のコードは使えると思ったらまるまるパクる。そのままパクれなければ少しの修正でパクる、それも難しそうなら概念だけでもいいからパクる。コメントですらパクる。IQ180の人が一週間かけたコードでも、パクってしまえば数秒で実装できますよね。もちろん、法律に触れることはやっては駄目ですよ!
パターン化する
一から全部書くのは面倒くさいので、まずはパターンを探すのが重要だと思います。さすがに新規の開発でかつ不慣れな言語や開発環境で右も左も分からない状態でパターン化するのは無理ですが、ある程度プロジェクトが進めば一定のパターンが見えてくるはずです。そのような場合は必ずパターン化して横展開します。もちろん、他のプロジェクトでも使えるなら、同じようにパターンを展開します。ミスも減りますし、他の人がコード見たときにパターンがある方がコードを読みやすくなります。
素直に人に聞く
僕は誰が相手でも必要性や興味があれば頭を下げて教えをこいます。「SPAってなんですか?教えてください!」ってな感じです。おかげで今React触ってます。毎日が入社一日目の気持ちで働いております。
バカでもできる方法を考える
とにかく自分で考える量をいかに減らすか、というのに集中していました。頭が良い人であれば、その賢い頭を使って考えるというのが正解かもしれません。しかし、僕のように頭が良くない人間がそれをやると、すぐにメモリいっぱいになりファンがうなりだします。頭から煙がでてしまいます。よって、利用できるものはフルで利用するし、自分が気にしなくてはいけない箇所をいかに減らすか、ということが重要になります。利用できるもの、というのはフレームワーク、ライブラリ、人、考え方、やり方、金、コネ、制度、情報、なんでも全部です。「バカでもできる方法はないか?」というのを常に考えるクセがついています。ただ、人に嫌われてると協力も得にくいので、普段から周りと仲良くしておくのが僕にとっては大切でした。
まとめ
こうやって振り返ると、テクニック的なことは意外と少なく、どう考えるか、どう取り組むか、ということを気をつけていたようですね。デザインパターンとかテクニック的なことを覚えるのもよいですが、若いうちは社会人としてどう働くか、自分なりの方法を模索して構築するのが良いかもしれませんね!
以上になりますが、あくまで僕はこうだった、というものなので、参考程度でお願いします。