お前は絶望的にプログラミングに向いてないから諦めて刺身にタンポポ乗せる仕事でもやってろ がバズってるようで、私もかねてから考えてることをちょっと発信してみようと思う。匿名での投稿にはなるが、私は日本国外の大手企業でフルスタックエンジニアをしている。
私の主観では世の中の人の99.9%はプログラミングに向いていない。もしかしたら、9をもうひとつ増やしてもいいかもしれない。それくらいプログラミングに向いている人は希少だと思う。
ある程度数学の素養があったりする人の方がプログラミングに向いているというけど、理系でもプログラミングが苦手な人は多くいる。どういった人がプログラミングに向いているのか、もしくは向いていないのかという点については、この投稿では特に言及しない。
この投稿はプログラミングに向いていないのにやらざるを得ない環境にいて無理をしている人に向けて書いている。
自分の高校時代の友人が仕事でプログラミングを始めたけど、ボロボロになって仕事を変えるという姿をいくつか見てきた。以前の職場にも、経験者として入ってきてはいるが、向いてないなあと思うような人物を何人か見てきている。また、大学在籍時にTAとしてプログラミングを教えた経験上、向いていない学生というのも多く見てきた。この記事では、そういった人たちがプログラミングを諦めて他の道へ早く進めるように、私の意見を書き連ねていこうと思う。
こういった人々がプログラマとして多く採用されている環境では、本当に優秀なプログラマというのが少ないので、以下に書き連ねるような問題点はあまり可視化されてこない。ただ、こういう人が集まってプロジェクトを進めている環境では、プログラマとしての仕事は全員にとって辛いもののように思える。仕事は難解だが、納期の関係上残業が多くなり、精神を擦り減らしながら仕事を進める。反して、プログラミングに向いている人にとってプログラムを書く仕事というのは、美しいプログラムを書くことで自己肯定感を得ることができるという点で天職なのである。
プログラミングに向いている人は、簡潔なコードを短時間で仕上げてくる。読んでいて疑問に思いそうなところに対しては適切にコメントがなされていて、システムデザインも適切である。
対して、向いていない人は時間をかけて煩雑なコードを仕上げてくる。本人も「動けばいいや」程度の意識しか無い(私の推測だが、時間がかかっているので次の段階へ進むことしか考えられていない)ので、コードは読みにくく、洗練されていない。
こういった傾向は私が観測してきた範囲内でのことでしかないのかもしれないが、おおよそ一般的に当てはまると考えている。これを前提にこの先の内容を書いていくので、納得などをできない方はここで読むのをやめてほしい。それでは、向いていない人のもたらす問題点について書いていこうと思う。
向いている人のコードはシンプルであるがゆえに、バグが入り込みにくく、コードレビューもすんなりと終わる。対して、向いていない人はコードを仕上げるまでに時間がかかるだけでなく完成度も低いので、レビュー段階でコメントが付きやすく、多くの修正も必要になってくる。また、コード自体が煩雑になる傾向が多く、そういった部分にバグが混入しやすい。
向いている人にとっては早く問題なく終わる仕事が、向いていない人にとっては時間がかかり、不確実な結果を出すことになりがちである。
他人に任せた仕事のアウトプットを見て、自分が実装していたらもっと上手く速く出来ると思うことは稀ではない。実際にバグが混入して対応する可能性、コードレビューにかかる工数、そういった点を考慮すると、生産性は10倍以上違うのではないかと思う。
正直に言うと、プログラミングに向いていない人が書いてくるコードは見ていて辛い。仕事の場合、そういった人の書いてきたコードが100%美しい状態に達していなくてもマージせざるを得ない場合もある。私は整ったコードだけをマージしたいのだが、コードレビューに時間がかかるほどマージコンフリクトが発生しやすく、他の変更との競合も発生しうること、また全体の納期の兼ね合いやタスクの依存性を考えて、早くマージせざるを得ないという状況になりやすい。
簡単に言うと、向いている人の場合は「成果9:技術的負債1」程度で変更を加えていくのに対し、向いていない人は「成果7:技術的負債3」程度の変更が最初にコミットされ、この段階での技術的負債の割合を減らすためにコードレビューをじっくりしていく程の余裕が無い場合が多いということだ。もちろん、これはプロジェクトの内容に依存するということは言うまでもない。
そして、途中から入ってきた優秀な人材がコードを見て萎えるのである。「いや、僕もその辺のコードはあまり良くないとは思っているんだけど、事情があってね」なんてことを苦笑いしながら、説明とも言えない説明をすることになる。
向いていない人がプロジェクトで多くなってくると地獄である。本来、簡潔で完璧なコードを書ける人がコードレビューをする側へと回らざるを得ない状況になってしまうからである。本来、コードを書くことに専念した場合に、向いていない人と比べて10倍の生産性を発揮する人材が、数人の向いていない人を管理することに忙殺されてしまうのである。
もしかしたらあなたの周囲にはいないかもしれない「デキるプログラマー」に任せれば、あなたの仕事は一瞬でより美しく完成させられます。出来ない人は精神と肉体を擦り減らしながらプログラムを書いている傍ら、本当に出来る人たちは楽しみながら完璧なコードを仕上げていきます。
無理してそこで働く必要はあるか?向いていないのであれば、新しい仕事を探した方が身のためだ。特に、10年20年先のキャリアを考える上で、あなたの輝ける未来は今のレール上には無いのではないか。今は目の前の仕事に忙殺されているかもしれないが、これを機に考え直してほしい。
ふむ。
エンジニアの選民思想ってすごいよね