こんにちは。
あなたは、新卒や未経験からプログラマーになり、

プログラミングができない・・・
と悩んでいませんか?
あるいは、あなたが働いている職場で、
がいませんか?
そういった、「もはやどうしたらいいかわからない状況」って、一刻も早く抜け出したいですよね?
そこで、この記事ではそんな状況になってしまっているあなた、あるいは職場にいる人を助けるための方法をお教えします。
この記事を最後まで読んでいただくことで、以下のようなことを理解することができます。

・全くプログラミングができない人からの脱出
・どう教えても仕事ができるようにならないプログラマーの救い方
結論
まずは詳細な内容に入る前に、結論をお伝えしたいと思います。

一言で「プログラミングができない」と言っても、その原因は以下のように様々です。
・プログラミング言語の習得をできていない
・社会人としての基本スキルやITリテラシーが足りない
・そのチームの人とうまくいっていない
なので、的確な対処を行わない限り、「プログラミングができない」からは脱却できません。
こういう状態から脱却するためには、以下の4つのフェーズにわけて対策を実施します。
・第一フェーズ: 現状をキープしつつ、問題切り分け&プログラミングを頑張る
・第二フェーズ: プログラミング以前の問題に手をつける
・第三フェーズ: プログラミング言語を簡単なものにする
・第四フェーズ: プログラミング以外の作業を担当する
基本的に「現状を出来る限りキープできるように」するという意味で、第一フェーズから1つずつ効果があるか試していくべきです。
この記事の信頼性

僕は新卒でエンジニアとして就職し、最初はC++言語でプログラミングを実施していました。
大学時代もある程度プログラミングをやっていたため、社会人として就職しても何とかやっていけると思っていました。
ただ、現実は予想と大きく異なっていました。
・わからないことは質問しようと思い質問をするのですが、それでもわかりません。厳密にいうと「その場ではわかった気になる」のですが、実際に自分で手を動かそうとすると全くできません
・さらには、そのチームの人たちのリテラシーが非常に高く、チーム内の会話にもなかなかついていけません。
・しまいには、先輩に「この話前にも言ったよね?」と言われる始末で、質問さえもできなくなってしまいました。
僕の社会人デビューは、悲惨な状況での幕開けとなりました。
そこからの十数年間は、本当に苦しみながら、ときには挫折を味わいながらここまでやってきています。
そこで、この記事では僕のこういった苦しかった経験、そしてどうやって切り抜けてきたか?を、これを読んでいるあなたにお伝えしたいと思います。
この記事の流れ
この記事は、以下の流れで説明します。
・その人のレベルや状況に応じた、4つのフェーズでの対策
それでは早速、内容を見てみましょう。
「プログラミングができない」という人に起こっていること

まず、僕の体験も踏まえつつ、「プログラミングができない」人の状況を分析してみます。
おそらく、こんな状況ではないでしょうか?
プログラミングそのものに原因がある場合
純粋に「プログラミングがわからない」という人は、以下のような部分で困っている可能性があります。

・プログラムを一人で書くことができない。書いたとしても、期待と全く違うものになっている。
・他の人にやり方を聞いても理解できない。あるいは理解できたと思っても、自分で手を動かすことができない。
・C言語やC++言語のような、初心者には難しい言語を使っている
・プログラミングの講義をきいても、自分で書けるようにならない
これが一番基本的な「プログラミングがわからない」の原因かと思います。
プログラミングそのものを理解していないときにこの問題が発生します。
基本的な社会人スキル / ITリテラシー関連に問題がある場合
これは社会人としての基本スキル、あるいはプログラミングに関する周辺知識がないために起こる問題です。
具体的には以下のようなものが該当します。

・プログラミングができていない人のプライドが高くて人の話を聞こうとしない
・何が分からないのかわからない。あるいは、わかったつもりになる。
・人の話の重要な点が理解できていない。メモをとってはいるものの、要点を抑えたメモをとれないので、その後のアクションにつなげることができない
・プログラマーとして必要なITリテラシーが不足している
仕事ができないのにプライドが高く、人の話を聞かない人もある一定数います。
議事録をとろうとしても満足にとれなかったり、期待されるコミュニケーションができない場合が該当します。
また、ITリテラシーが足りていないなどのケースも該当します。

僕の場合は、配属初日に「HDDのパーティションしてね」って言われて、「パーティション・・・何それ」となった記憶があります。
「HDDのパーティション」はその会社の人にとっては当たり前でしたが、僕にとっては、完全に新しい世界でした。
これはあくまで一例ですが、こういった「プログラマーとして知っておくべきIT知識」がないと苦労する場合があります。
その人の所属するチームやプロジェクトの状況に問題がある場合

その人とチームの相性が悪い場合や、チーム自体に問題がある場合もあり得ます。

・職場が忙しく、あまりチームの人に聞けない状態である。
・質問されるとチームの人がイライラしてしまう
・(本人のスキル不足との掛け合わせで発生)チームの人に過去にいろいろ質問をしたけどそれでも理解できず、もはや「この質問何度目?」って言われるようになってしまい、聞くことができなくなっている

上記のどちらにも該当していました(笑)
職場の人が忙しいと遠慮してしまい、質問ができません。
勇気を振り絞って質問をしても、社会人スキルが不足しているせいで満足に理解できません。そして再質問をすることになり、チームのメンバーとうまくいかなり、さらに質問しづらくなる・・・という悪循環に陥っていました。
おそらくこんな感じではないでしょうか?
チームの人が忙しくて質問ができないのは「あるある」のケースだとは思います。
また、質問をした結果イライラされてしまうとそれ以降、質問しづらくなってしまいます。
それでは、この状態から、「一人前の社会人」あるいは「一人前の戦力」になってもらうにはどうしたらいいか?を説明していきたいと思います。
「プログラミングができない!」という状況を打開するための対策

前提
はじめに、ここまで説明してきた通り、「プログラミングができない」には、ほぼ間違いなく複合的な要因が原因あります。
改めて分類すると、以下のような問題があります。

・プログラミングができない
・社会人としての基本スキルが足りない (メモのとりかた、話の聞き方)
・ITリテラシーが低く、プログラミング作業に影響を及ぼしている
・社内ツールや開発環境を使いこなせていない
・チームの人とのコミュニケーションがうまくいっていない
対策は、これらの「プログラミングができない原因」に応じて、4つのフェーズに分かれます。
基本的に1つ目のフェーズのものから実施していき、そこで結果が出れば次以降のフェーズに進む必要はありません。
逆に1つ目のフェーズで結果が出ないのであればフェーズ2、フェーズ3・・・と進めていくことになります。
そしてあらかじめお伝えしておきますが、この状況を打破するには、
・「その周りの人」
これらの、両方の努力と協力が必要です。
誰か1人が頑張るだけで乗り切れるほど、簡単なものではありません。

今回の前提は、「やる気があるけどできない人」としています。
なので、以下のような、「そもそもの、その人の姿勢や考え方に問題があるもの」は除外しています。
・「やる気がない」
・「人の話を聞くつもりがない」
第一フェーズ: 現状をキープしつつ、問題切り分け&プログラミングを頑張る
このフェーズは、困っている人(あなた or チームなどにいるプログラミング初心者)のプログラミング作業を手助けします。
前提として、以下のような人が対象となります。
・社会人としての基本スキルも一応ありそう
こういった人に向けての対策は、以下のようなものを実施してみましょう。
プログラミングのうち、何がわからないかを書き出してみる
おそらく、「プログラミングがわからない」となっている原因は1つではないと考えられます。
そこで、一度問題の分析をしてみましょう。
数年社会人としてやってきたスキルや経験があれば、
自分は何が分かっていないか?
こういったものは分析できるのではないでしょうか?
もしこういった「わからない問題」を書き出せない状態であれば、フェーズ2もしくはフェーズ3に移行します。
もし分析をできて、何か具体的に詰まっているポイントが分かったのであれば、そこを集中的に勉強してみましょう。
おそらく、以下のようなところが詰まりポイントになるかと思います。
・JavaScriptの非同期処理
このあたりは、初めてプログラミングをする人はほとんどの人が詰まるポイントですので、根気よく勉強を続けるしかありません。
もし自分一人だとわからない!という場合は、他の人に聞いてみるのもいいでしょう。
自分なりに、一人になっている時間にプログラミングをやってみる
仕事中はどの職場でもバタバタしており、あまりゆっくりと考えることができないと思います。
ですので、会社が終わって家に帰った後や、休日の空いている時間に自分で勉強をして、少しでも早く会社の期待するレベルまで追いつくのも必要です。
もしあなたが、

「プログラミングの効率のいい勉強方法が分からないよ・・・!」
という場合、一度プロ (プログラミングスクール)で集中的に教わるのもよいかと思います。
一人で分からないところも講師に教えてもらうことで、より素早く理解することができます。
第二フェーズ: プログラミング以外の問題に手をつける

もし第一フェーズの問題切り分けがうまくいかなかった場合、あるいは切り分けてみたけど、一向に成果がでない場合は、プログラミング以外の部分にも問題があるかもしれません。
具体的には、以下のような問題を抱えている可能性があります。
・プログラミングの前段階として、社会人の基本スキルやITリテラシーが不足している。
・逆にいうと、上記のスキルさえ整えば、プログラミングはできるようになる可能性がある
もし上記のような状態であれば、プログラミングより前に、社会人としての基本スキルを教える、あるいは補強する必要があります。
上記の問題をもう少しブレイクダウンすると、以下のようになります。

きちんと言ったことは理解できているか?
メモの取り方一つとっても、ある程度コツが必要です。
(やれている人にとっては当たり前ですが)メモは、言われたことをすべて記録するという姿勢だとNGです。
その会話の中の要点、そして次のアクションとなるキーワードや締め切りとなる日付などを記録するようにすべきです。そうしないと、メモをとることに必死になりすぎて、相手のいうことが入ってきません。
”分かった”の状態を理解しているか?
「分かった」とは、相手の言うことのツボを理解して、自分がアクションをとれる状態になっていることを言います。
特に新人の頃の「分かった」は、「相手の言っている日本語は理解した」というレベルにとどまり、相手が本当に伝えたかったことは何か?そこから自分が何をやればいいのか?を理解していなかったりします。
ITリテラシーはあるか?社内ツールは使えているか?
プログラミングを実施するためには、ある程度ITリテラシーがあったり、社内のツールが使えていることが前提になります。
その他にも、「WiFi」、「VPN」、「SSL」など、プログラミングに必要そうな単語は山ほど出てきます。
もしかすると、それらの用語が分かっていないことが、プログラミング作業の妨げになっている可能性があります。
こういったポイントを解決できれば、少しずつ「デキる人」に変わっていくのではないかと思います。

ごくまれに、「わからないことを聞けない」という人もいます (僕もそうでした)
この場合は、
・その人に高いリテラシーを求めすぎており、萎縮してしまっている
・その人の性格に問題がある
・周りの人が、不明点を確認できないような雰囲気になっている
というあたりが考えられます。
場合によっては対策可能な部分もありますが、もしこれが当てはまっている場合は、フェーズ4に移行することをオススメします。
この状態は、この人にとっても幸せな状態ではなく、かなりのストレスがかかっていると考えられるためです。
もし仮に、第二フェーズのプログラミング以外の問題に手をつけてもなかなかプログラミングができるようにならない場合は、第三フェーズに移行します。
第三フェーズ以降では、本格的にプログラミングの内容や、プログラマーとしての働き方の見直しを行います。
第三フェーズ: プログラミング言語を簡単なものにする

このフェーズの方針は、以下の通りです。

今やっているプログラミング言語が、その人にとって難しすぎると考えられるため、簡単なプログラミング言語を書いてもらう
方針としてはシンプルです。
ただ、これを実現しようとすると「別のプロジェクトに異動してもらったり、別の役割を担当してもらう」ということになります。
ただ、ソフトウェアプロジェクトは、基本的にプロジェクトごとにどの言語を使うかが決まっています。
つまり、その人の都合だけで使うプログラミング言語を変更できません。
なので、このフェーズでは、
などの相談をすることになります。
特に、C言語やC++言語を使っている場合は、ポインタとアドレスの概念が非常にとっつきにくく、初心者が苦しむ原因となります。
そういう人は、Javaなどの言語に切り替えると、それまでの苦労が嘘のように解決することがあります。

明示的にポインタやアドレスを使うことがないので、導入としてはやりやすい
もしJavaなどの言語への切替が難しい場合は、チーム内のプログラミング関連の作業をする/お願いするというのもよいでしょう。
具体的には、以下のようなアイデアがあります。

・Pythonなどで社内ツールを作り、他の人の作業が助かるようなものを作る
・(必要であれば)ユーザの行動ログ解析など、データの分析などをやってもらう
こういった作業がよいのではないかと思います。このようにツールなどを作る案の良いところは、以下のような部分です。

・プロダクトに直結しない作業なので、不具合を埋め込んでも致命傷にならない
・(1つ目の副産物として)チームの人が神経質になって面倒を見る必要がない
・プログラミングができない、と思われる人にとっても、少しずつ成果を形にできるので、少しずつ自信がつく
このような、いろいろなメリットがあります。
今「プログラミングができない」という人であっても、こうやって少しずつ、成功体験を積み重ねていけば実力と自信がついて、いつかは立派な戦力になります。
ただ、もし仮にその人の心が折れてしまってプログラミングを続けることが難しそう、ということであれば第四フェーズに移行することになります。
第四フェーズ: プログラミング以外の作業を担当する

このフェーズが最終手段です。
第四フェーズまで来ると、何かの環境を変える必要があると思います。
前提としては以下の通りです。

・チームにあっていない
・プログラミングという作業があっていない
第四フェーズに該当する人には、こういった状況のどちらか、あるいは両方が該当することになります。
対策としては、以下のようなものになります。

チームを変えてもらう、あるいは教育係を変えてもらう
「できない」という状況で煮詰まると、最終的には「そのチームの人が苦手」というところに行き着きます。
こうなると、仕事が嫌なのではなく、その人が嫌で会社に行きたくない、というようになってしまいます (これも僕の経験談)
プログラマー以外の担当に変えてもらう
あるいは、プログラミング作業が向いていないのかもしれません。
そういう人は、その人の特性を考慮しつつ、可能であれば仕様設計担当などに回る/周ってもらうのがよいかもしれません。
仕様設計であれば、プログラミングやITのそこまで難しい知識がいらないためです。
仕様設計も基本的に同じ「ソフトウェア」を作っているので、プログラマーとは常に一緒に仕事をすることになります。
そういったプログラマーと仕事をする中で、少しずつITのスキルもついてくるので、数年後に、「仕様設計のできるプログラマー」という立ち位置でプログラミングにもう一度チャレンジするのもよいかと思います。
ちなみに僕はこの方法でプログラミングに再挑戦し、プログラマーとして何とかなった記憶があります。

この文章では、「仕様設計がプログラミングより簡単」という文脈で書かれていますが、実際仕様設計が簡単ということではありません。
素人からするととっつきやすい、というだけで、本当に素晴らしいUI/UXデザインをやろうとすると、何年もその領域で経験を積む必要があります。
(ちなみに僕個人としては、プログラミングよりUI/UXデザインの方が好きだったりします)
このフェーズまできている人は、精神的にもかなり辛い状態ですし、プログラミングに対しても全く自信を持てない状態になっています。
そこで、プログラミングに関連する仕事をやってもらい、少しずつスキルアップと自信をつけてもらう必要あがります。

もちろん、直近の状況を解決して、自分のキャリアを波に乗せるという意味では良い選択だと思います。
とはいえ、僕個人としては、「プログラミング自体ではなくても、それに関連する仕事を続けることをオススメ」します。
というのも、ここまで数ヶ月〜数年単位で苦しみつつ、勉強していると思います。
この数ヶ月〜数年の苦しみは決して無駄ではなく、あなたは実際かなりのスキルがついています。
ここでプログラミングに関する仕事を完全にやめてしまうと、ここまで頑張ってきた成果が水の泡です。
プログラミングは、やっていない人からすると非常に難解なものであるため、少しだけでもそのプログラミングができるというのは大きなアドバンテージになります。
まとめ
それでは、これまでの内容をまとめます。
一言で「プログラミングができない」と言っても、その原因は様々あります。

・プログラミング言語の習得をできていない
・社会人としての基本スキルやITリテラシーが足りない
・そのチームの人とうまくいっていない
こういう状態から脱却するためには、以下の4つのフェーズにわけて対策を実施する必要がある。

・第一フェーズ: 現状をキープしつつ、問題切り分け&プログラミングを頑張る
・第二フェーズ: プログラミング以前の問題に手をつける
・第三フェーズ: プログラミング言語を簡単なものにする
・第四フェーズ: プログラミング以外の作業を担当する
この記事は以上となります。
この記事を読んだあなた、もしくはあなたの所属するチームの人が、「プログラミングができない」という悩みから開放されることを願っています。
最後まで読んでいただき、ありがとうございました!
コメント