ども、@kimihom です。
プログラミングをしてきて10年が経った今、やってきて良かったこと間違っていたことを振り返りつつ、本テーマを記していこう。私が今まで選んできた技術の成功と失敗について。
今までできなかった何かができるか
最優先とするのは、「その技術が今まで不可能だった何かができるようになったか」である。近年では "例えばこれ" というものに出会うことができていないが、定期的にこの目線で技術の調査と試しを繰り返している。
ちょっと前だと、私の場合は Twilio に限る。今まで電話をプログラムして制御するなんて考えもつかなかったことが、誰でも簡単にできるようになった。今でも Twilio 以外で同様の実現が可能なのは数えるくらいしかない。
このような不可能を可能にした 0->1 技術はほとんどないが、「今まで可能だったものを、少し改善したもの」という 1->2 な技術というのは今でもどんどん出てきている。それらを磨いていったとしても、それは単に自己満足にしか過ぎず、利用者からしてみれば どうでもいいと思われるものだ。
何でも6割ではなく、一つを9割にしたい技術
教育でもなんでも言えることだけど、それぞれを "6割理解できて使える" レベルになるのではなく、"9割理解できて広められる"レベルに1つでもなれた方が、よりエンジニアとして相応しい。残り1割をさらに深めていきたいと、そう思えるエンジニアだ。
この "1つの技術を極める" 判断ができるのは、大人数のチームのみだとは思わない。事実、私は長い間1人でプログラミングをしてきた。この環境で大事なのは、9割を目指すものを一つにして、それ以外を汎用的な技術で固める という判断をすることだ。"それ以外" に関しては、今からすれば「今更」と言われそうな技術をあえて選ぶ。その選択をした方が、何か詰まったとしてもすぐに解決できるほどの情報量が出回っているからである。汎用的な技術に時間をかけるくらいなら、9割の1つの技術を極めることに時間を割くことが大事である。
できる限りライブラリを使わない
ライブラリを使えば一瞬で作ることのできる何かがあったとして、かつてはそれらにすぐ釣られて使う判断をしていた。
この判断をすると、最初の大枠は確かに実現できるんだけど、より細かい部分で必ず改善が必要な部分が出てくる。そして、仕方ないからライブラリのソースコードを読みながら、実現したいことを実装するという判断が必要になることが多かった。誰が書いたかよくわからないコードを読むのに長い時間をかける必要が出てくる。
すぐにライブラリを使う判断をするのではなく、自分で実装できるものなら時間がかかったとしても実装することを試すほうがいい。なぜなら、自分で試行錯誤してコーディングすることを楽しめるし、今後の機能改善やバグ修正も自分が把握して対応できる。そしてそれがまたブログや登壇のネタになる。
そのコードを今後長らく自分が管理していくことを考えてみよう。ライブラリの場合、誰かが修正するたびに必要なくてもその動作の確認やマージ作業が待っている。そのために自分の書いたソースコードが動かなくなり、修正に迫られることも多く出てくる。
自分の書いたコードなら、常に "こうしていきたい" をそのまま実現できる。もちろん自分の書いたコードのセキュリティ対応の確認が必要にはなるけど、それでも今後の運用を考えると自分で書いたコードの面倒を見ていきたいと思うようになった。
コミュニティがある or 作る覚悟がある
面白い技術が出てきた時に、"秘密にする" という選択肢は明らかに間違えている。
技術をを盛り上げて、新しい意見や視点を共有し合うことで、その技術がさらに改善されていく方が、明らかにメリットが大きいのである。
だから、仮にそうしたコミュニティがなければ、自分で0から作り上げようとするくらいの技術であるか。自分で積極的にブログで共有していけるものか。この判断ができるほどのものだと、自分も最先端を追う覚悟ができて、技術をリードしていく存在になれる。
単に誰かの発言を聞くという存在から、自分から発信をして話すようになる。私は後者がメインになるようになってから、自分の関係のある部分だけでない技術にも自分から調べるようになっていった。
ひとまず触ってみて、ビビッとくるものがある
感覚というのも、時にはモチベーションにつながる。そういう思いというのも、時にはプログラミングに熱中する一つの要因となる。
ただし、この思いを持っただけで、確実にそれはうまくいくとは思わない。私の場合、"0->1" と "1->2" のそれぞれの技術で「これすごい!」な思いを持ったことがあるけれど、後者はしばらくするとそのモチベーションが続かずにその技術自体も廃れていった。
終わりに
実は Alexa プログラミングは上記全てを満たしたけども失敗している。これは実装もしてみて失敗した良い経験である。
本記事の条件を全て満たしていたとしても、うまくいかないこともある。だがそれを満たさないとその先へは進むことはない。
私はこうして技術を磨いてきた。そしてこれからも。