/ 更新: 2019/9/13

プログラマになるのは簡単だけど、向き不向きはある。

プログラミング / 初心者


プログラマになるのは簡単です。 プログラムを始めるのも簡単です。 でも、仕事としてプログラミングをする場合、向き不向きはあります。 しかも、比較的向き不向きが激しい職種だと思います。 最近、YoutubeなどでWEBエンジニアに簡単になれるよという話をよく聞きますが、フロントエンドのWEBエンジニアなら、アルゴリズムを考えることもあまりないので、几帳面であったり、集中力があればなんとかなると思います。 僕が長年やっているWindowsなどで動作する業務システムを構築するような仕事の場合、表面上は仕事ができているように見えても、向いていない人に仕事を任せると、その仕事の結果は呪いのように何年も本人や周りの人を苦しませることになります。

どういう人がプログラミングに向いていないのか?

プログラミングに向いていない人というのは、プログラムがかけない人ではありません。 それは、プログラマになれない人です。 プログラミングに向いていない人の特徴を知るために、プログラミングに向いていない人が書いたプログラムがもたらす結果の例をあげます。

1年後から1年に1回バグる。

向いていない人のプログラムは、一見ちゃんと動くように見えます。 でも、1年後にバグったりします。 そして本人に直してもらいます。 すると、翌年またバグります。 これを何年かやったあとで、別の人が確認すると、根本的な解決がなされていないことが判明します。 面倒だから意図的にその場しのぎの対策をしたのなら逆に許せるのですが、本人は本気で直したと思っているというのが問題です。 (1、バグが直っていないことに気づかない。) 同じ場所を5回くらい直していることに触れると覚えていません。 プログラマは、自分がやったことを全て覚えているわけではないし、その必要もありませんが、同じ場所を何回も直したとかいうことがあれば、通常は覚えています。 こういったことすら覚えていないので、過去に作ったプログラムの仕組みを確認すると、ほぼ覚えていないし、ソースコードを見ながら話をしても、思い出すこともできないようです。 (2、自分が作ったプログラムの内容を覚えていない。) また、プログラムが直ったという報告を受けたときに、ソースコードをみなくても全体の仕組みから考えると、本人が話す修正方法では直らないと思って、直った理由を確認すると答えることができません。 一回試してうまくいったから直ったと判断しているようです。 血圧が高いから、血圧を下げる薬を投与するのと同じで、根本的な解決策にはなっていないのです。 (3、バグの現象基準でしか考えることができない。) 仕方がないので、かわりにプログラムを直そうと思って、ソースコードを見ると気が遠くなりそうなくらい複雑なコードが書いてあったります。 計算式に例えると、x+Y+YーX+2X みたいな感じで、途中で無駄にパラメータを出し入れしてあったり、入れ子の入れ子の入れ子の入れ子になっていたりします。 下の動画くらい、無駄な処理があります。 (4、ソースコードが複雑) x+Y+YーX+2X=2(X+Y) と計算してからプログラムを書き始めればいいのに、なぜか考える前にやります。 この傾向は、全ての作業にあらわれています。 パソコンの調子が悪いと、何も考えずに、すぐに再インストールし始めたりして、どんどん時間を浪費します。 (5、考える前にやる) 楽に仕事を片付けるために考えるよりも、単純作業を選びます。 結果、長時間労働になります。 (6、単純作業が嫌いじゃない) 僕が出会ったプログラマで有能だと感じが人は、ことごとく単純作業を嫌っていました。 向いていない人が、何日もかけてやって、のちのちズルズルトラブルが発生するような仕事を、1日中ネットサーフィンをしていて、夕方から2時間くらいで仕留めて、ノートラブルなんてことも頻繁にありました。 プログラムは、そもそもバグや不具合が発生することが前提なのですが、クライアントから全く連絡がなくて、逆に不安になるほどです。 ネット見たり、散歩したり、おやつ食べたりしているうちに、考えがまとまって良いアイディアが浮かぶと言っていました。 向いていないプログラマは、考えないすぐ始めて、漏れが多く、ミスも多いです。 山にトンネルを掘るときに事前調査していないから、穴を彫りながら軌道修正して、最終的にはトンネルが開通するけど、実は、トンネルのすぐ近くに水脈があって、1年後に壁から水がもれてくるような感じです。 (7、発生しうるトラブルを推測できない、想像力の欠如。) 全体的に考えないで行動する傾向が強いです。 不具合の報告をするときも、クライアントと同レベルの報告をしてきます。 「エラーがでました。」 と…。 毎回、同じ質問をさせられます。

-エラーログを確認したか? -ソースコードを確認したか? -現象は毎回発生するのか?それとも時々発生するのか?

毎回同じ質問をされるんだから、そこまで調べてから話しにこればいいのに、理解不能です。 (8、過去にうまくいかなかった行動を繰り返す。) プログラミングに向いてる人の場合は、報告してきたときにはバグは修正されています。 報告の内容は以下です。

-バグの発生条件 -修正内容 -修正後のアップデート等の処理状況 -他に推測されるトラブルがあれば、その話。

このように、コーディングをしたり、デバッグをしたりするのは誰でもできるようで、全くできない人もいる才能のような部分もあります。 向いてない人とのやり取りは無限ループになります。 考えられるチェック項目をこちらから1つずつ質問しながらすすめていき、しかも、問題解決されないことすらあります。 向いている人の場合は、だいたい1往復か2往復です。 問題発生→状況報告→指示→結果報告 このくらいで、仕事が終わります。 ものすごく向いている人の場合は、1往復、もしくは、片道です。 次のような感じで、問題解決後、連絡がメールで来ます。 Aという条件でBというトラブルが発生するので対処しておきました。 クライアントにも連絡済です。 また、めったにないと思いますが、Cという条件でDというトラブルが発生する可能性がありますが、Eという作業で回避することができます。 返信不要です。 片道です。

プログラミングに向いていない人の特徴

向いていない人の特徴は、まとめると以下のようになります。

1、バグが直っていないことに気づかない。 2、自分が作ったプログラムの内容を覚えていない。 3、バグの現象基準でしか考えることができない。 4、ソースコードが複雑 5、考える前にやる。 6、単純作業が嫌いじゃない。 7、発生しうるトラブルを推測できない、想像力の欠如。

これらの特徴から、向いていない人に足りないのは、

-注意力 -合理的な判断力 -論理的な思考力

です。

プログラミングに向いている人になるためにはどうすればよい?

僕の考えでは、向いていない人に足りないものの中で一番問題となるのが注意力です。 注意力の欠如により、結果的にいい加減な判断、いい加減な思考となってしまっています。 なので、本人の意思があれば、ある程度改善できると思います。 僕自身の経験でも、10年前の自分が、ひどい目にあった結果、注意力を身につけ、その結果、合理的な判断力や論理的な思考力が少しはついて、仕事の精度が上がりました。 次のことに気をつけて仕事すると、プログラミングに向いている人になれます。 -できるだけ同じ作業を繰り返すことを避ける。 プログラマが同じ作業を繰り返すはめになるのは、何かが間違っているからです。 どうしてもプログラムで回避できない場合は、単純作業する人を雇うべきです。 -作業する前に時間をかけて考える。 プログラマの仕事は作業ではなく思考だと定義しましょう。 -自分も人も信用しない。 ミスや予期しないバグを防ぐことができます。 -仕事を減らす仕事をするように心がける。 自分の時間も他人の時間も無駄にしない。 節約した時間で、本を読んだり、遊んだり、ネットを見てたりしたほうが良いです。 クライアントのほとんどは、仕様を決めることができません。 決めてきたとしても、その仕様が最適ではない可能性が高いです。 ぼんやりやりたいことがあって、それを具体化してほしいを考えています。 クライアントが決めた仕様をそのまま実現しても、使い物にならなかったりします。 業務システムの場合は、法律や通達の内容をカバーしていると、適切な仕様を提案することができます。 結果、無駄な仕事が減り、役立つプログラムができるので、顧客満足度もあがります。