プログラマとしてOSSと関わりながら生き残るためにとった生存戦略

よく「どうやって情報手に入れてるの?」みたいに聞かれますが、そんなの、ひたすら時間かけてgithubみたりメーリングリスト読んだり最近ではgitterの会話読んでるに決まってます。
どうやって(How)ではなく、なぜ(Why)、自分がそんなことをするようになったのかを、あらためて書いてみる気になったので書いてみたいと思います。


書こうと思ったのは、Howだけ書いても、Why書かないとあまり意味ないと思うことが多くなったからですかね。(この件に関しては)
無責任に大雑把にいうと、(どんな理由であれ)情熱みたいなものがあれば、Howは自然に身につきます、たぶん。



なお、少し長くなるし、自分語りっぽくなるし、いつも書いてるようなものとは少し方向性が違い、具体的なすぐ役に立つ技術的な内容*1は基本出てこないので、期待してるものが違うと思う人は、ここで読むのやめたほうがいいと思います。



どれほどコード読んだり情報収集してるか?は、この前「未来から送られきた関数型ロボット」と謎な形容された?くらいで、海外の何人かのScalaプログラマからも認識されてるくらいだとは思ってます


未来から送られて来た関数型プログラミングロボット



その他、本当に以下のtweetのようなことしてますね。*2



https://twitter.com/xuwei_k/status/598070150873526273






そういうことをするようになった大きな理由としては

  • 英語やプログラミングに対するコンプレックス
  • 自分自身の感情に流されやすい性格

みたいに分類できると思ってます。もちろん大前提として

  • 情報収集が必要だった
  • それ自体が楽しい


面もあるし、事実そうなんですが、そういう面からではなく、わざとネガティブな理由のほうを中心に紐解いてみたいと思います。




「英語やプログラミングに対するコンプレックス」
とは、どういうことかというと、高校生の時は書道部(部長)で、大学は文学部書道学科で、英語なんて基本縁がないし将来必要になると思ってなかったし、高校2、3年のときは徹夜して朝まで毎日書道して、学校に行っても授業中はずっと寝てる、みたいな生活してました。なので英語は最後は赤点とった気がします。数学だけは得意だったので寝てても100点とってましたが。*3
今では、少なくとも英語を読む力くらいはプログラマの平均?にはなってると思いますが、だいぶコンプレックスは残ってます。



そんな調子で大学生のときも英語全然やってなかったし、プログラミングも大学3、4年のときに少し独学でC言語はじめた程度で、本格的にやりだしたのは社会人になってからです。ちなみにこれ書いてる時点で今社会人7年目?で28歳です。最近の若者見てるとプログラミング能力高い人多くて関心しますね・・・。



そんな経緯と、現状のこういう習慣がどう関係するのか?なんでそこから気がついたらscalazコミッターになってる(!?)のか、というと、大雑把には以下のような思考です

  • あープログラマだと結局英語必要なのかー、つらいなー
  • 英語のドキュメント読むよりは、ソースコード読んだほうがまだいいから、まずは人よりもソースコード読むかー
  • OSSっていう文化があって色んな人がいるんだなー。よくわからないけど、役に立つかもしれないし、有名なプロジェクト観察するかー
  • 英語いつまで経っても苦手な意識もったままじゃだめだし、とりあえずメーリングリストなどにも入って、情報追いつつ、英語読む習慣だけでもつけていくかー


みたいな感じです。それがひたすら続いたら今みたいになってました。
今では

  • ソースコードなどを読みながら寝落ちするの日常茶飯事
  • 暇さえあれば、通勤途中だろうが、会社でトイレにいく途中の廊下の数十秒の間だろうが、大体githubのフィードその他見てる
  • 朝起きたら、なにをするよりも先に数秒〜数十秒以内に体が勝手に動いて、寝てた間の数時間のgithubのフィードその他見てる
  • Scalaコンパイルやテストの待ち時間も大抵そういうの見てる

といった感じです



また、scalazをはじめとしたOSSの貢献に関しては

  • pull req送りたいけど送るの怖い。間違って変なpull req送って失礼なことしたらどうしよう・・・
  • そもそも、英語でうまく説明を書ける自信がない、どうしよう・・・
  • せめて英語できない分、他の人よりもしっかりソースコード読んで、コミットも整理して何度も確認してからすごく慎重にpull reqするようにしよう


と考えてたら、よりいっそうソースコード(gitの履歴含む)読むようになったし、どういうpull reqなら受け付けてもらえるのか?どういう風に送ればいいのか?を把握するために、少しでも興味があるプロジェクトに関して、今まで以上にひたすら観察するようになっていました。
基本的にそういう「不安」や「コンプレックス」みたいなのが根底にある、けど、英語力を向上させて英語で普通に読み書きできるようになろうとは思わす、べつの方向からカバーしようと偏ったことをしていたらこうなった(今も続いてる)だけでしかないです。




あと「自分自身の感情に流されやすい性格」の件ですが・・・

なんと言ったらいいのかいいのか難しいのですが、人間なら誰でも冷静な部分と感情的な部分を持っていると思うんですが、自分自身を大雑把に分析していうと

  • 好きなことに対しては、とても集中力を発揮する
  • 一方あまり興味が無いことに関しては、集中力全然続かない

みたいに、自分が好きか嫌いか、みたいな感情に流されやすいと思ってます。それで、プログラマとして仕事していくうえでというか、どの仕事でもそうでしょうけど、得意な好きなことも、あまり得意じゃないこともやっていく場面が大抵出てくるわけですね?*4

今でも「そんなに得意ではないことでも淡々とこなす」能力がわりと低いと思っていて、そういう意味ではすごく万能に仕事ができる人間とは思っていなくて*5、そういうのを普通にやってのけてるような人をみると羨ましく思います。場合によっては上司からみたら若干扱いにくいだろうなー、とかも思いますね。

計画を立ててその通りに実行するのとかも苦手なほうな気がします。思いついた新しいことを試したくなって以前たてた計画遂行できなくなるので、(仕事で最低限な範囲はともかく) 個人的に失敗しうるような具体的な計画をそもそもたてないようになりましたね。


あとは「好き」か「嫌い」か、というより
「コード書くことは集中できる」
けど
「コード書く前段階として、仕事で必要に迫られてから、長時間調査だけをしたりドキュメント読む」
のに苦手意識があった(今もあるけど、ある程度緩和されてる)のだと思います。その「ドキュメント」も「英語のドキュメント」という点で余計苦手意識あったんだろうと思いますが。


それでどうするかというと、苦手なものを直接克服するというより
「事前に他の人よりひたすらライブラリなどの情報を(仕事時間以外に)コード読んだりして頭に入れておけばいいか」
みたいになりました。
*6

なぜそこで行き着く先が同じというか、結局それ(ひたすら事前の情報収集やコードリーディング)ばかりやるようになってしまったのは、今でも自分でも不思議な面がありますが、多少試行錯誤して、プログラマとして生きていくにはどうしたらいいか考えたら、それをやって、自分にとってはそれがうまくいってしまったのだからしょうがないです。



さっきも書きましたが、最初はそういう不安駆動(?)だし、今でも根底ではそれは残ってますが、もう基本は完全に習慣化して無意識に体が動くようになった(毎日何時間もgithubのフィード見るのが当たり前になってる)ので、続けていられるのだと思います。

最初に書くの忘れましたが、あくまで「自分の場合こう考えて、こうしたらうまくいった」という事例を話してるだけで、決してみんながこうしろとか、真似して欲しいとか思ってるわけではないです。本当に完全に無意識に体が動くレベルじゃないと、やろうとしても続かないと思います。
「コード(最近ではHaskellの論文)読みながら寝落ち」とか「朝起きたら、なにをするよりも先に体が勝手に動いて、寝てた間の数時間のgithubのフィードその他見てる」
は、全然大げさではなく、本当にそうなので。



こんな感じで、とくにこれ以上まとめとか結論はないですが、そろそろ終わりにしたいと思います。とりあえずこの謎の習慣は続けられる限り続けていくと思います。
あと最近では、コードやプロジェクトの観察に加えて「論文」読むことにハマっているんですが、"なぜ(Why)" 論文読もうと思ったのかは、また別の機会に気が向いたら書きます。

*1:果たして、いつもそんなもの書いてるか?マニアックな情報しか書いてないだろ、とも思う

*2:何もない状態でのwatchは数十回やったことあるし、gitterも5,6回そういうことあった

*3:数学の授業終わってチャイムなっても寝てて、先生にキレられた思い出がある・・・

*4:そうじゃない、全部が得意なことばかりの幸せな人や、その逆の人もいるでしょう

*5:できないとも思ってないけど

*6:もちろん会社やプログラマの社会全体としては、仕事以外の時間使わなくても普通にうまくいくような社会になるべきというのもあるでしょうが、プログラマ界隈に限らず、所詮世の中弱肉強食だろうし、生き残っていくための不安というか防衛本能的な感じで、結局仕事以外でも仕事に役立つための努力はしちゃっていますね。それを他の人に強制とかしないようには少しは気をつけてるつもりですが