複業フリーランスのhillpointです。
Twitterで見かけたマナブさんのこの記事を見て、私は、少し意見が違うと思ったのと
ちゃんと勉強し、努力しているものの、プログラミングが上達できなくて、深く悩んでいる人へ
自身の経験上の意見を伝えたくて、記事としました。
プログラミングには、向き不向きがあります。
私、もう何十年もエンジニアをしていますが・・・
どんな人が向いていないか?
どうしたら上達できるか?
残念ながら、わかりません。
現実、複数年の一定期間、努力し、ダメだったら、向いていないと判断して、プログラマー以外のエンジニアへ転身することを考えることが必要だと思います。
なお、この向き不向きは、一定期間やってみて、初めてわかる事で、これから、プログラミングを始めようと思う人は、気にする必要はありません。
これは、マナブさんと同意見です。
もちろん上達するには、時間がかかります。
時間もかけず、努力もせず、できないから、向いていないなんて判断するのは、間違いです。
それは向き・不向きではありません。
どうしても、プログラミングが上達できない人の特徴と対策、説明します。
専門用語について
アイコンがついている専門用語は、「知らないと恥ずかしいITエンジニアの用語集」ページに説明を記載しているので、専門用語の意味が解らない場合、リンクをタップして、説明を参照してください。
約50名のエンジニアの育成に携わった経験から
SE歴10年以上です。
毎年、複数名の新人を受け入れ、育成し、3年・5年と成長していく過程を見てきた結果です。
5名に1名ぐらい、どうしてもプログラミングが上達しないという人がいます。
勉強もできるし、コミュニケーションも正しく取れる、スキルアップの努力もする。
人材としては申し分ない人が、どうしても、プログラミングが上達しない、普通のプログラマーに到達できない。
そんな人が、5名に1名ぐらい、います。
新人から2年目ぐらいまでは、まだ努力すればできるようになる、勉強すればできるようになると、悩みつつも努力を継続しますが、3年もたつと、とても深い悩みとなります。
もうプログラミングを始めて、3年経つが、どうしても、プログラミングが上達しない、まわりのプログラマーと比べプログラミングができないという方へ。
エンジニアとしての生き方は、プログラマーだけではありません。
というか、プログラマーはIT業界では、一番下のレイアです。
プログラマーはあきらめ、システムエンジニアやテストエンジニアやインフラ、ネットワークなどなど、プログラマー以外のエンジニアの道を模索したほうが良いです。
プログラミングは、どんな人が向いていないのか?
年代、性格、性別、かしこさ、理系文系等、その人の特徴やこれまで過ごしてきた要素に、共通する特徴は、残念ながら、ないです。
こんな人は、向いていないという特徴はありません。
よく、論理的思考ができない人は、プログラミングに向かないという意見があるが、そんな単純な話ではありません。
論理的思考は、考え方なので、理解が早い、遅い、得意、不得意はあるものの、勉強したり、経験したりすることで、理解できるようになります。
論理的思考は、少し会話すれば、できている・できていないは、解ります。
不思議なのが、会話し、考え方や理解を聞いていると、論理的思考はできるいるのだが、プログラミングがまったくできないって人がいるという事です。
プログラミングが上達できなかった人の特徴
どうしても、上達できなかった人がどんな感じか?と言うと、共通して言う事、見掛ける事がこんな感じです。
自分でプログラミングしたプログラムを憶えていない。
記憶力が悪いとか、仕様が理解できていないとか、ロジックが理解できていないとか、そおいうことはありません。
こと、プログラムだけ、頭に残っていないと言うか、書き捨ててしまっているような感じです。
なので、すらすらと続きが書くことができない。
結果、プログラミングがいっこうに進まない。
また、なんとか、書きあげたプログラムも、前後の整合性が取れていない、矛盾しているといった問題が埋め込まれます。
それは、テストすれば、解るのですが、自分でプログラミングしたプログラムを憶えていないため、問題が発生しても、どこが悪いのか?かが解らない。
結果、なにが解らないのかも解らなくなってくる。
プログラミング言語は理解するが、値の変化、分岐、繰り返し、戻る等の変化が理解できない。
バカなのか?というと、そうではありません。
ドキュメントも書けるし、仕様も理解できるし、コミュニケーション能力も高い。
もちろん学歴も高い。
普通のプログラマーであれば、容易に理解できる、プログラム上の変化だけ理解できない。そんな感じです。
プログラムは、見えない世界の話なので、プログラムが動く世界の中だけ、理解できない。想像できない。そんな感じです。
プログラミング言語は、データをあやつる言葉であり、言語は理解できるが、操られたデータが想像できないようです。
プログラミングが上達できなかった人の苦しみ
最初はみんな同じです。最初からできる人はいません。みんなできなかった。
できる人は、たいして勉強しなくても、努力しなくても、できるようになるので、差がついてきます。
この差は、勉強したり、努力したりし、埋めようとするが、差は広まるばかりで、焦り・悩みとなって行きます。
新人時代は、まだまわりも温かい目と、努力する姿を見て、見守ってくれますが、2年目、3年目となっていくと、まわりからも圧力がかかってきます。
無理矢理、作ったプログラムの品質が悪く、多くの問題を発生させたり、1人分として与えられた仕事をこなせなかったりし、まわりに迷惑をかけるようになります。
時には、怒られることも発生します。
何度言われても、何度怒られても、どんなに努力しても、上達せず、まわりから白い目で見られるような事も。
体力的にも、精神的にも限界を迎え、やがて、メンタルに影響を及ぼすことも珍しくありません。
どうしても、プログラミングが上達できなかった人はどうすれば良いか?
上司に相談し、プログラマー以外のエンジニアへの転身を行いましょう。
上司への相談時は、どのぐらいの努力・勉強をしたか?客観的に説明できるように準備します。
例えば、読んだ本の数とか、勉強したサイトの数とか。
上司も、エンジニアでしょう。
その努力・勉強の内容から、成果が得られていないことは、理解できるでしょう。
また、IT業界において、プログラマーだけが、必要とされるエンジニアでないということは、上司も知っているでしょう。
なお、プログラマー以外のエンジニアへの転身は、会社を辞める必要はありません。
また、これまでプログラミングのために勉強したり、努力した内容も無駄にはなりません。
例えば、テストエンジニアへの転身を図ります。
プログラムがあれば、必ずテストがあります。
システムを開発するためのコストの半分は、テストというシステムもあります。
プログラムは開発できてなくても、システムとして、どういったテストを行えば良いか?また、どういった問題が起こるか?は想像できます。
なぜなら、自分が問題=バグを埋め込んだ経験があるから。
テストのスペシャリストになり、システムの品質を確保する事も、重要なエンジニアです。
例えば、システムエンジニアへの転身を図ります。
プログラムが開発できなかった経験から、なにを設計しないといけないか?なにを決めないといけないか?なにをプログラマーに伝えないといけないか?は想像できます。
なぜなら、システムエンジニアが設計した設計書をもとに、プログラムが開発できなかったから。
プログラマーが開発しやすい設計書を作る。
結果、品質の良いプログラムができる。
そんなシステムエンジニアになれます。
これ、最高のシステムエンジニアです。
まとめ:プログラミングには向き不向きがあります。
プログラミングに取り組み、努力しても、どうしてもダメだったら、メンタル壊す前に、「向いてないわ!」って、プログラマー以外のエンジニアに転身するのもありです。
ときには、あきらめるな!勉強しろ!、努力しろ!といった激が飛ぶかもしれませんが、無理せず、様々な自分の可能性を考えてください。