長らくScalaをプライマリ言語としてきたプログラマですが、今のプロジェクトではGoをやっています。
最近ゴリゴリと書き始めて感じてることは、Goを習得する上では技術的なことよりも精神的障壁を乗り越えることが先だということです。
そもそも目的も言語仕様も大きく違うわけで、そもそも比較すること自体がナンセンス。どちらも良い所、辛いところがあるわけで本エントリではage/sageをするつもりはまったくないことを予め表明しておきましょう。
自分が書いたコードが全てクソコードに見えてしまう件
例えば、Goではif err != nil
のエラーチェックをよく書きます。Scalaに使ってからあまり書かなくなったものだし、強力な高階関数等もそう。
書いたコードが目的を果たせていても、長らく染み付いた習慣から生み出される違和感はなかなか消えません。そうするとクソコードしか書いてないんじゃないかという罪悪感にとらわれはじめます。
しかし、元々ぺーぺーの頃はCやJavaから入ったわけで、昔はこのようなコードを書いていたことを思い出し、それがダメだったかと言えば決してそうではない。当然今よりスキルも低いので、クソコードも生み出したけど何の価値を生み出せなかったかというとそうではないと。
目的を果たせているのであれば、全てクソコードなんじゃないかという雑念を振りはらわなければならないというのがまず一つ。
完璧を目指すよりも、まずは終わらせる。そして晒していこう
当たり前ですけど、終わらせることに主眼を置くべきじゃないかと感じてます。シンプルなことだけど、色々な言語や技術を身につけてしまったからこそ、その原則を果たすことの難しさがあるのかなと。
幸い今はGitHub時代だし、Goは今すごくホットなこともあって社内外問わず色々なフィードバックが得られやすい。まずは終わらせることにこだわって晒していく、ということを短いサイクルでどんどんやっていくべきだとひしひしと感じてるとこです。プロダクトを作る上での大原則に立ち返らせられた、そんな気がします。
今まさに奮闘してるので、近いうちに晒していこう。
まとめ
Goを始めるというのは、過去の全てを一度リセットすることであった