プログラミング初学者にありがちな罠
こちらのブコメで暴言を吐いたので少し書きます。
東大の方みたいなので、私のような普通のエンジニアとはちょっと状況が違うかもしれません。
が、私や周りのエンジニアでも、若手の頃に同じ道を通ったな〜というものがありましたので、簡単に書いてみます。
悩む時間はもったいない?
あるある。
最初の数年、これが一番苦しいと思います。が、10年目でも20年目でも皆悩んでます。仕事ですら悩んでます。世界の名だたるギークも悩んでいます。
なので、悩んだときにどうするかという訓練はある種必要なものだと思っています。
分かってしまうと「なんだそういうことか」となるのですが、そこに至る時間をどう短縮するかの方法論という観点で考えたいです。
優秀なデキる人と働きたいの幻想
みんな一度はこれを言ってるような気がします。
自分が知らないだけで、デキる人の解法に触れられる機会があればもっと爆速で成長できるのに!と。
個人的に今となってはこれ反対です。
- 優秀なデキる人がほとんど存在しない
- その人がデキる人か判断付かない
- デキる人は私に構わない、プログラミングは大概孤独
- 優秀な人が何言ってるか理解できない
- 問題を定式化できない
- 解法がコロコロ変わる
プログラミングは非常に複雑なものだと思います。まったく同じケースというのに中々遭遇できません。将棋みたいに定石はあるでしょうが、定石もちょいちょい変わるので追いつくだけで吐きます。
それを逐一教えてくれる人というのは、実は存在しないし、そういう人の時間は超貴重なので大して絡むこともできません。せいぜい憧れるくらいです。
結局、最短経路にたどり着くためにそれ以上に血反吐を吐かなければならない状況に陥ります。
優秀な人はインターネットに居る
ちなみに本気で優秀な人は、StackOverflowに居たりQiitaや技術ブログに居たりします。あとは何かで登壇するとか。更に優秀な人はOSSコミュニティに居たりします。
素晴らしい師の教えはインターネットで共有されているのでリアルな人を求めずとも積極的に勉強することができます。リアルな人への期待は幻想に近いです。
言及先ブログにもありますが、OSSの中を覗いてみるのは大変有意義だと思います。ただし、あまりに高度すぎて大体理解できないはずです。分からないなら無理しない方がいいです。無理なもんは無理です。巨人の肩に乗りましょう。
でもたまーに分かりやすいコードもあるので、OSSの中を覗く癖は付けておきたいです。(基本難解なので徐々に見るのが怖くなるんですが)
複数人開発は重要(でも銀の弾丸ではない)
優秀じゃなくても、ちょっと先輩くらいの人と一緒に開発するのは大変有意義です。
(と言っても、その環境を用意するのは中々大変なのですが)
これは最短経路とか言う話ではなく、コードを見たり指摘されることでヒントがいっぱい貰えるからです。
とは言え、それを毎日やってるエンジニアですら不足感を覚えているはずなので、プログラミング山はどこまでも高く険しいです。ヒントが得られたくらいで、ちょっと有利になる程度じゃないでしょうか。
質問に答えてくれない
これも働いてみるとすごく意外なんですが、相互の質問はかなり少ないです。
- 答えられない
- ググったほうが早い
- 説明するのが大変
- どうせ知らない
- そんな時間ない
ここらへんのせいです。やっぱり孤独です。
最近はQ&Aサイトが国内外問わずいっぱいあるので、あちらを使うのがまだ良いかと思います。(と言っても、問題の95%は既出の問題なんですが)。エンジニアはインターネットから毎日知識という大きな恩を受けているので、それを還元することにやぶさかでない人が多い印象です。
書籍との付き合い方
これは個人的にですが、アンチ書籍派です。
- 実装にダイレクトに役に立つことが極稀
- 質の悪い本が多い(良い本は大体洋書・・・)
- 本に書いてることが真実だと思ってしまう(やがてそれは信仰になる)
- 経験値が足りなくて本質を理解できないケースが多い
- 一冊読むのに死ぬほど時間がかかる(理解+実装)
- 自分で動かしてみなければならない
- 古い(3年前の本でもう古い)
ぶっちゃけ未だによくわからないんですけどね、本の立ち位置。
私には合いませんでしたし、どの職場においても書籍は部屋の片隅で文鎮になってます。いや最近は本棚も見ないですね。
※初学者向けの最初の1冊とか、定番中の定番中の定番くらいの本はおすすめです(2人に1人は知ってるくらいの本)
その他
言及元ブログのその他は概ね同意です(冒頭はちょっとよくわかりません)
しかし本人が優秀な分、多くの普通の人は真似できないものが多いと思います。
旧帝大院卒の私でもキツイです。無理です。
東工大卒の元同僚でようやくこのくらいのことしてます。しゅごい。ついていけない。
初学時〜若手時に大切なこと
もっと私のようなレベルで言えば
- 楽しむ、自分は何が楽しめるかを理解する
- コーディングはあくまで道具であると心がける、宗教にはまらない
- 完璧な解はなく、優秀な人でも常に悩んでる、疑い続ける必要がある
- 考え続けなければならない、じゃないと理解できない
あたりが大事な気がします。
そもそもプログラミングをするべきなのか考える
経験則ですが、プロダクトに興味がある人はほとんどの場合コーディングから離れる運命にあると思います。
優秀ならなおさらです。発注したほうが早いし。
アメリカなんかでは特A級の優秀な人がコーディングしてますが、あれはあくまでプログラムそのものが製品だからだと思います。
多くのサービスで言えば、コーディングの良し悪しはサービスの良し悪しに中々繋がりません。それでもやる理由があるかどうかは考えておかないと苦しくなっていくと思います。大体は単に好きだからやってる人ばっかりですが。
はてブを見る
同業者がどこで情報を仕入れているかが何となく分かる。