Skip to content

Instantly share code, notes, and snippets.

@shyouhei
Created September 27, 2017 07:31
Show Gist options
  • Star 229 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save shyouhei/266178ffedab5767a5b69b972c76f88a to your computer and use it in GitHub Desktop.
Save shyouhei/266178ffedab5767a5b69b972c76f88a to your computer and use it in GitHub Desktop.
優秀なプログラマーになるためのコツ

優秀なプログラマーになるためのコツ

重要な順で

優秀なプログラマーになるには非常に長い時間がかかるという現実を直視すべし

優秀なプログラマーというのは寝ている間に異世界に召喚されて無双するのとはわけが違うんですよ。

自分の例で言うとプログラミングを始めた中学生の時から優秀なプログラマだったかって、そんなわけない。みんなヘッポコからスタートしているに決まってるわけです。以来二十余年、地道に生き恥を晒し続けてきた結果として、現在いちおう業界の末席を汚すところまで来ている。このプロセスから目を背けるべきではないです。優秀なプログラマーに生まれる人間なんかいない。優秀なプログラマーに「育つ」んだし、それには時間が必要。今日から無双したいと思うな。

そうはいっても二十年は長すぎやろ

  • 上記に対する反論として「お前がそうじゃなかっただけで、中学生で優秀なプログラマーもいるだろう」、これはこれで事実ではある。そういう人のことをgiftedとか呼びますね。いるよ。たしかにな。で?参考になるとでも?
  • 上記に対する反論として「お前がそうじゃなかっただけで、大学院で優秀なプログラマーもいるだろう」、これはこれで事実ではある。自分のこれまでの経験から申し上げますと、中卒からすでに優秀なプログラマーはごく稀にいます、大卒で優秀なプログラマーは時々います、けれど、高卒のプログラマーはその他の大勢と同様、優秀なプログラマーになるまでには比較的、年月を要する傾向があるようです。 大学は非天才が本来二十年かかるプロセスを意欲があれば最短四年でクリアできる超技術 と思っていただいた方が良い。行くチャンスがある人はぜひ行くといいと思います。べつにMITやCMUやUCBだけが大学ではないので。

そうはいっても時間かけれるのはラッキーなほうではあるんだよ

自分の中学時代を思い出しつつFacebookを見ると、当時、マスコミで働きたいって行ってた人はNHKを経て今はフリーアナウンサーだし、ダンサーになりたいって言ってた人は劇団員になったし、医者の息子は医者になったし、プログラミングやってたのは自分含めてそうなってる一方、画業で生きていきたいと言ってた人が画家になったとか、バスケ部でプロになったとかいった人は把握していない。それは、けっして美術部やバスケ部や人たちが努力してなかったからではなくて、というか努力なんて当然みんなしてて、でも、それだけではない要素にも左右されてしまう分野ってことなんだと理解しています。

優秀なプログラマーは他のものがなくても時間さえかければなれる、その点恵まれてる方だと思います。

プロになってからの方が大変ということを知っておくべし

中学のことはまあいい。一旦置いておくとして、プロになった後ですけれども、この業界の特徴として、メンタルヘルスの問題でやめていく人が非常に多いということがあるわけです。国の統計 http://www.mhlw.go.jp/toukei/list/h28-46-50b.html によると、やはり「メンタルヘルス不調により連続1か月以上休業又は退職した労働者」は情報通信産業が最多だったりするわけです。暗数もあると思うし数字そのものに注目するべきではないが、多いことは多いので間違いなく、体感としてもたくさんいる。

それで、メンタルヘルスの問題の困るところは、回復する種類の不調であったとしても、回復まで数年を要することが稀ではないし、回復しないことも多々あるということです。

なにが原因で体調を崩すのか等の話題はここでは触れません。しかし優秀なプログラマーになるということは、上記の通り長時間を要するということも踏まえると、メンタルヘルスにリスクがある環境に長時間暴露されることが不可避であると。これが(すくなくとも日本語文化圏においての)正直な現状かと思います。これを乗り切らないことには優秀なプログラマーになることはできない。

いいですか。才能がどうとかいうレベルの問題ですらないんです。傷病になるかならないか、なんです。そういうラインが優秀なプログラマーとそれ以外の分水嶺になってしまっている。逆に言うと業界で長きにわたり活躍し続けている人というのは、それだけですでにひとかどの人物かと思いますよ。たとえ外野からは低空飛行に見えたとしてもね。前線で走り続けることは本当に大変。

現状は間違ってると思います。けど間違ってるけど現状はこうなんです。

プログラマーの優秀さを決定づけるのはプログラミングスキルではない

そろそろ「優秀なプログラマーって、なんだ?」という、あえてこれまで触れてこなかった領域に突っ込んでいきましょうか。ここでは、優秀なプログラマーになりたい現時点で優秀なプログラマーではないみなさんが思い描く優秀なプログラマー像について考えてみるわけですけれども、それってだいたい、異世界に転生してプログラミングで無双したいとか、そういうレベルの解像度じゃないですか。もうちょっと現実に寄せた話し方でいうと、プログラム作ってチヤホヤされたいよね?要は。

そこで指摘せねばならんのが、プログラミングのスキルとチヤホヤされるためのスキルに一切の関係がないという事実です。

いや、いますよ。プログラム作ってチヤホヤされる人。たしかにいる。けどそれは、つぶさに観察するとプログラミングのスキルが高いからではないことが多いです。みなさんも優秀なプログラマーになりたいのであれば当然、現時点で優秀なプログラマーを研究すべきなことは明らかですが、「この人は誰からも理解できないものすごいハイレベルのプログラムを書いている!」みたいな人は、結局誰からも理解されないので、べつにチヤホヤされません(それは不幸なことではないし、本人が望んでない可能性も高い)。そうではなく、他の人に理解される努力をしている人が結局他の人に理解されている。

たとえば論文です。論文を書ける人は強い。なぜか。論文で重視されるのは新規性というものですが、これはようはものすごく雑に言うと今回の論文がどんだけヤバい論文かが論文自体の非常にタイトな紙幅にあますことなく記載されている必要がある、という意味だと、論文書いたことがない人には雑にご想像いただきたい。論文を書くにはスキルが必要でこれを訓練してくれるのが大学なわけですが、このスキルがセルフブランディングにただちに応用可能であることはわりとすぐ理解できるでしょう。

あるいは会社作って一発当てた人とかも強いですが、これなんかも会社作るには本人以外に出資者が必要なのであって、社長とはすなわち出資者を納得させれるだけの説得力、および説得してきた実績のある人という理解をするとよいのではないでしょうか。

いずれにせよ論文とか会社とか、べつに情報産業固有の話じゃないんですよね。もちろんプログラミングスキルがない人が社長やってもうまくいくとは限りませんよ?でもプログラミングスキルそのもだけでチヤホヤされたいというのは、「それって関係ないよね」って話。

優秀なプログラマーになれなかった場合というリスクをヘッジする必要性について

人生に必要なのはリスクヘッジです。ヘッジしてあるからこそリスクテイクできる。みなさんが優秀なプログラマーになりたいのであれば、なれなかった時にどうするかというリスクヘッジを考えていくのは不可避といえます。もちろん職場でのメンタルヘルスに対しては労災保険・健康保険という話になるわけで、そのへんの話題は(重要ではあるものの)ここではちょっと省略させてもらうとして。いざ優秀なプログラマーになれないとなった時にどういう進路があり得るかですが。

もちろん、優秀じゃなかったからといってプログラマー人生は続くんだというスタンスはありえて、ありえてというか大多数はこの生き方で生きていると思います。一方でメンタルヘルスのリスクは変わらないので、あんまりヘッジになってないぞという説はそれなりの説得力はありますね。そこをどうしていくか。

もちろん、あるいは管理職っていう方向にピボットする人もいるとおもいます。けれど、それって別にリスクヘッジとかそういう文脈でやるものでもないので、やや違ってくるかなあと思う。あと管理職ってべつに低リスク人生じゃないだろうとも思う。

このあたりは正解はなさそう。自分の場合はとりあえず「従業員」というのはすごい手厚いと思ってて、あまり技術顧問とかになってないのは意図的にそういうキャリアパスを選んでいるというのは正直あります。

@pochi0701
Copy link

鬱になるのは認められないからですよ。
だから自分が満足できるコード書けばいいんですよ。自分スタート時に自己満の為に電卓に4人麻雀書きました。誰に認められなくてもそこから進んでいく力は得られると思うですよ。
自分の為にいいコード書くことは挫折する要素が少ないので、それに満足できれば誰でも優秀なプログラマになれると思いますよ。
ただ、それと食えていけるかはちょっと別ですけどね。

@externvoid
Copy link

  1. メンタルヘルスの問題、俺的解決方法:ランニング+筋トレ。こいつが解決してくれる。ただし、ランニングできる体作りも大変だし、筋トレ、例えば腕立てできる体を作るもの大変。体つくりって、時間が掛かるのを覚悟しないといけない。簡単なのは、通勤時間を運動時間にしてしまう事。俺の場合、自転車のビンディングシューズを背中に背負って電車に乗るという、デメリットをかれこれ15年以上我慢してるが、メンタルヘルスの問題は解決できている。

  2. 前線で走り続けることは本当に大変。現実は間違っている。けど、間違っているけど、現実はこうなのだ。これには、激しく同意。

  3. 他人に理解される努力をしている人が、結局他人に理解されている。これも、激同。

  4. 人生に必要なのは、リスクヘッジで、ヘッジしてあるから、リスクテイクできる。これも、激同。どの程度リスクテイクするか?ヘッジするかのさじ加減が人生左右するんだろうなぁ。

@ddk50
Copy link

ddk50 commented Sep 30, 2017

他の人に理解される努力をしている人が結局他の人に理解されている。

完全同意

@ajishio12
Copy link

だらだらと読みにくい長文書いて、結局結論出んのかいって突っ込みたくなる辺り、あなたは平凡エンジニアでしょう。

上の人も書いてるけど、メンタルやられる奴は大抵運動不足でゲームばっかしてる奴。
10年選手になりたければ、筋トレすべき。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment