プログラミングが出来る と一言で言ってしまうのはあまりよくなくて、ある程度分割して考えるほうがいいと思っている。
- 自分が必要なものを作ることができる
- みんながもっている共通の課題のうち、自分の技術力で解決可能なものを見つけて、解決するプロダクトを作ることができる
- 同僚と協調しながら製品を作ることができる
おおまかにいって「プログラミングが出来る」というのはこの3個のスキルに分割できるのではないかと思っている。そして、これらはそれぞれあまり関係がない。
- 自分の課題を高速に解決することができるが、それを製品や OSS にまとめてリリースすることは出来ない人
- 優れた OSS のポートフォリオを持っているが、同僚という立場の人と協調することはあまり得意ではない人
- 業務としてプログラミングで成果を出してきているが、別に趣味で自分のためになんか作ったりはしてない人
- ゲームを自作しているが、別にそれで食ってこうとか思ってない人
という人達がいると思う。「プログラミングが出来ない」という問題は
- 解決したい課題に対して技術力が追い付いていない
- 自分の技術力に応じた課題を見つけることができない
- 業務としてのプログラミングに必要な協調性が不足している
- こういうものは意識して訓練するかどうかにかかっている
こういうパターンが考えられる(もちろんこれで全部ではない)。それぞれ必要な訓練は全く別なのだが、これを全部「技術をより深く知ること」で解決できるような気がしてしまうがそれは間違っている。
実際のところ「技術をより深く知ること」により転職がある程度楽になり、転職することで金と時間と気持ちの余裕が手に入りやすくなり、それによりあらゆる問題の解決は楽になる可能性があるのだけど、それが最短のパスである可能性は実はそんなにない。
「プログラミングが出来ない」というのは解決すべき問題としてはあまりにも曖昧すぎるので、自分や周囲の状況を観察してこれを細かいタスクに割っていくことが解決の一助になるし、またそういう課題の捜索と分析という作業を繰り返し行なうことでプログラミングが出来るようになる。