一流のソフトウェアエンジニアになるための考察

どうやったらしばやんさんや、かずきさんみたいな一流のエンジニアになれるのだろうと毎日考えている。もちろん彼らみたいにすぐになれないので、努力をずっと継続していると、彼らみたいになれる、つまり、その習慣や考え方を身に着けられないかと感じている。

何が違うのだろう、また私の所属する Azure Functions チームもガチでイケてる人が沢山いてるが、彼らの一年目と自分とはどう違うのだろう?

何がイケてないと思うのか?

自分を振り返ってみよう。自分の何がイケてないと思うのだろうか?やはり、圧倒的にな、技術に対するコントロール感の欠如だと思う。コードが動作していても、インフラいじりにしても、自分の支配下に置けている感が少ないのだと思う。ハマって時間を無駄にするのもそのたぐいだと思う。自分でも、自分は彼らに比べて、理解が「うすっぺら」であるのを感じる。

スピード感

プロダクションのプログラマなので、スピード感は重要であると思う。では何がスピードを妨げているだろう?

・トラブルシューティング(思ったように動かない)
・人に聞かないと進めない
・知らないことを調べる

これらをやらなくてよくなれば良くなるほど、高速で、コントロール感を感じながら楽しくコーディングが出来そうだ。 前にブログにも書いた通り、事前に試せば試すほど、上記のステップは省略できる。最近では、有料の口座も深く学んで時間を節約することに貢献するだろう。

 また、こうなってしまう要素の「理解の浅さ感」はどこからきて、どうすれば防げるのだろう?

Divya の一言

自分のチームメートに Divya という人がいるのだが、彼女も例にもれず技術イケメンだ。あるとき、私が何か月も前に作ったコードが動かなくて、コード読んでも、なぜ動作しないのかがわからなくて途方にくれていた。ただ、そのコードベースは巨大で、自分もブラックボックスの部分がある。だから彼女にレビューしてもらうことにした。

 彼女は、私のPRを見て、コードを読んで、「これは完璧だから、ここの部分をチェックしよう」といってチェックをした箇所があって、それが正解だった。私のコードは間違っておらず、私のテスト環境への「デプロイの仕方」が問題があったのだ。自分はそんなこと考えもせず、自分のコードが悪いとばかり思っていたが、彼女は一発でそれを見抜いた。しかも、私にとってのブラックボックスは彼女にとってもブラックボックスなのだ

コードへの信頼

ふと自分の内心に気づいたのだが、私にはなぜか、「コードは思った通りに動くとは限らない」という思い込みがあり、いろいろ試行錯誤する傾向にある。だから、彼女から感じたのは「コードやインフラはちゃんと設定すれば動くもの」という真逆の考えであるのを感じた。コードを信用している。私は何回も動かないのを経験しているから、そうなっているのかもしれないが、なぜそうなっているのかは、ほとんどの場合「コントロール配下にその技術がないから」つまり理解が浅いからだ。

コードリーディングに関しても、コードの文法知識的に「読める」コードでも面倒で「読み飛ばし」とかすることが多いことに気づいた。だからコードリーディングで解釈を間違えたりするのだ。早く読めなければ、試しながら、ゆっくりからでいいので、確信をもって読めるように練習したい。

一流技術イケメンの深さ感

一流の人と仕事をしていても、正直「スーパー頭いい!」とかは感じない。自分より100倍できるが、それはスペックではない。多分習慣と、思考回路。コントロール感が増すと、早く出来るようになり、早くできるので新しい勉強に投資できるというサイクルになるのだと思う。そんな時に昔買った本を思い出して読んでみた。とてもいいことが書いてあった。

いいことはたくさん書いているのだけど、とくに私に刺さった部分は次の部分。

・計画は変更になるかもしれないけど、計画を必ず立てること
・ライブラリを使うときは、そのライブラリから学び、そのライブラリが
 自分も書けるようになること

最初のアドバイスは、思考が撮っ散らかりがちな自分には良い方法だと思う。つい思考が発散する。特に2つ目が私に響いて、かつ、若干絶望的な気分にもなった。ライブラリを使うのはある意味コピペと一緒なので、それが自分でもかけるレベルであれば、時間を節約するために使う価値があるという感じの考え方。そうかぁ。一流の人はそうなんだ。確かに彼らは自分でも書けそう。つかってるだけだから、一生それを書けるようになれない。だから、ライブラリを使うAPIなんかは自分でも自分なりに簡易版なんかを書いたりしたらいろんなことに気づくとの事。

 確かに私も人から受け継いだリポジトリをどう理解するか?というのは苦労している。やっぱ自分が書いていないものは本質的に難しいし、簡単にコードを自由にいじったりしづらい。だから、自分が0から作れるようになればいいのか。小さなスパイクをして、例えば私が見てる Kafka Extension なら、Azure Functionsのエクステンションを書いてみて、Kafkaの自分の実装を書いてみる。そんな過程で、作者が「なぜそういう実装にしたのか?」というのを考えることが重要であるとのこと。

まとめ

現在では、ライブラリが多種多様で、バックエンドがクラウドだったりするので、すべてを実装するのは無理だが、「実装しようとおもったら出来る」という風になれたら確かにとても強いし、とても楽しそうだ。そうなると、やっぱり一流になるにはコンピュータサイエンスをがっつりやるほうがよさそうだし、コンピュータサイエンス出身ではない自分だと、今から積み重ねるしかない部分なのである意味絶望的でもある。でも大学に行くということも有りだし、働きながら勉強するのもありだ。少なくとも一流の人のコントロール感がどれぐらいかわかったのは価値がある。あとは端っこからそれをやっていくだけや。

この記事が気に入ったらサポートをしてみませんか?