プログラミングを独学で習得するのは無理じゃない(けどおすすめはしない)

プログラミングの指導や、研修を行っていると

「独学でプログラミングは習得できますか」

という質問を受けることがよくあります。

この記事では

  • プログラミングをどのようにすれば独学で習得できるか
  • 独学における注意点やアドバイス

について紹介します。

プログラミングの独学での学習は無理?

結論から言うとプログラミングの独学での学習は可能です。

プログラミング習得=独学可能

現に筆者(現役システムエンジニア)は中学~大学時代に独学で次の言語を習得しました。

  • BASIC
  • Visual Basic
  • Perl
  • Hyper Talk

プログラミングは、

プログラミング学習は敷居が高い」、

プログラマは夜中まで仕事して何万行も書いている

と思われます。

しかし、実際プログラミングを習得することはそこまで敷居が高くありません。

早い人であれば1ヶ月もあれば即戦力レベルまで習得することはできます。

何万行もあるプログラムを書くこともありますが、あれは単純に機能が多いだけです。

一つ一つの機能は100行程度です。

よく言われる何万行もあるプログラムとは結局100行~数百行程度のプログラムが積み重なった結果です。

いきなり1万行を超えるプログラムはこの世に存在しません(断言します)

そう考えると敷居は低くなりませんか?

1:プログラムとは似たような構造で作られていて、1つ覚えれば応用がいくらでも利く
2:世の中の大きなプログラムは小さなプログラムが集まった結果のもの

これらを前提にどのようにプログラミング学習を進めていくのがよいか読み進めて頂ければと思います。

スクールに行くべきか

プログラミングは独学で習得できると書きましたが、スクールに通うことは推奨します。

プログラミング習得するなら=スクールに通うのがおすすめ。

やはり独学には限界があります。

独学では参考サイトに載っているソースコードをそのまま使ってしまいます。

そうすると動作はするのですが、なぜ動くのかがわからなくなってしまいます。

なので応用が利かなくなってしまいます。

これを続けていくと

  • 原理は解らないけど、取り合えず動いた
  • 動かないけど原因が分からない
  • そもそも何が解らないのかが解らない

といった事態に陥ります。

それに対してスクールは講師が「なぜこのように動作するのか」を教えてくれます。

動かない場合はヒントをくれたりもします。

何が解らないのかが解らない場合でも質問をすれば丁寧に回答してくれます。

そうすると動かない、解らない苦悩から動く喜びや完成への達成感を得られます

どんな企業でもプログラミング経験者であってもOJTで簡単なプログラムから書かせる理由はここにあります。

OJT(On-the-Job Training、オン・ザ・ジョブ・トレーニング)とは、職場で実務をさせることで行う従業員の職業教育のことです。

プログラミングの独学の効率はよいのか?

独学でプログラミンぐ学習は効率が悪いです。

独学プログラミング学習=効率が悪い

スクールに行くのは抵抗がある

自分のペースで学習をしたい

と思う人は必ずいます。

独学のメリットは自分のペースで反復しながら学習したり、周りに対して劣等感を覚えないことです。

しかし、効率はかなり悪いです。

具体的には以下のデメリットがあります。

  • 自分がどれほどのスキルを有しているのか、もしくは自分の弱点が解りにくい
  • 同様の悩みを抱えている人との課題やノウハウを共有できない

独学では自分がどれくらいスキルを身に着けているのかわかりません。

なので自分の弱点を把握しないまま闇雲に学習してしまいます。

結果余計な学習時間を費やすことになってしまいます。

また悩んだら悩みっぱなしになる傾向があります。

プログラミングを独学で学ぶ人の大半がこの部分で挫折します。

独学はどれくらいの期間

では、独学で学ぶ場合、どれくらいの期間が必要なのでしょうか。

その人のポテンシャルとモチベーション次第ではありますが、目安は次の2つです。

・単純なプログラミングができるようになるまで約1カ月
・業務レベルで通用するプログラムが書けるようになるまで1年

単純なプログラムというのは数百行程度のプログラムです。

数百行程度では、計算機能やメモ機能のような単一的な機能のプログラムが作れます。

業務レベルというのは、単純なプログラムを組み合わせた数万行のプログラムのことです。

たいていの人は独学だと数年かかると思ってください。

プログラミングを独学で学習するときのデメリットは?

プログラミングを独学で学習するときのデメリットは?

プログラミングを独学で学習すると次3つのデメリットがあります。

  • スパゲッティソース
  • 書いたプログラムの性能が悪い
  • チームプレーの意識が薄れる

以下で詳しく説明いたします。

スパゲッティソースになりやすい

独学では、スパゲッティソースという可読性の悪いプログラムしか書けなくなってしまいます。

独学のデメリット=スパゲッティソース(可読性が悪いコード)になりやすい。

可読性が悪いとは、「繰り返し処理」や「分岐処理」が複雑に絡み合っている他人が読みにくいプログラムコードのことです。

その結果、バグがあってもどこを直せばよいのか全く読み解くことができません。

また、1行を直しただけでプログラム全体の挙動がおかしくなるケースもあります。

スパゲッティソースはまさに独学における一番のデメリットです。

独学では、「動けばいい」だけのプログラムしか書けなくなってしまいます。

しかしスクールでは、講師から適切な指摘を受けることができます

書いたプログラムの性能が悪い

独学で書いたプログラムコードは、性能が悪いことがあります。

独学のデメリット=プログラムコードの性能が低い

我々プログラマはミリ秒単位の世界で仕事をしています。

数万件のデータから一つのデータを引っ張ってくるなら、50ミリ秒(0.05秒)以内に処理を完了させないと遅いと言われます。

ビッグデータを扱うなら、数兆個のデータから数億個のデータを抽出するのに1ミリ秒以内に処理を完了させる必要があります。

独学で開発した場合、プログラムを実行するのが自分一人なので、性能周りの意識が薄くなりがちです。

プログラミングの現場で実際にプログラミングをしたときに大きな処理レベルでやり直しを受けることもあります。

例えば以下のプログラムがあったとします。

boolean is100 = false;
for(int i = 0; i < allDatas.Count; i ++)
{
//データの値が100ならTrueを成立させる
if(allDatas[i].value == 100)
{
is100 = true;
}
}

これは参考書的には100点のプログラミングです。

恐らく数多くの参考サイトもこのようなサンプルを書かれています。

しかし、実際の現場ではこれは書き直しを命じられます。

なぜだか解りますか?

例えばデータの総数が100万件あったとして、最初の1万個で条件を満たせたとします。

しかしループは回り続けるので、99万回の無駄な処理が実行されてしまうわけです。

独学でプログラミングをやっているとこういった細かいけど重要な部分に気が回ることはありません。

チームプレーの意識が薄れる

独学で学習するとチームでの開発スキルをみがけません。

独学のデメリット=チーム開発スキルが身につかない

実は仕事としてプログラミングを行う上で、チームプレーは一番重要なポイントになります。

実際のプログラミングの現場では、必ず複数人で開発をします。

必ずチームで何かを作り、チームでお互いのプログラムを見ながら何が悪いのかを分析します。

そして、不具合やそれに準ずる事象についてチーム内で共有します。

チームでの開発によって、プログラミングのノウハウが身についたり、効率的なプログラムが理解できます。

しかし、独学でプログラミングの勉強をした場合、個人プレーになってしまうので、チームで開発する機会がありません。

プログラミングを独学で無理なく勉強する方法は?

プログラミングを独学で無理なく勉強する方法は?

独学で習得するのは確かに大変です。

しかし、1つのプログラミング言語を習得したら後は独学でも全く問題はありません。

そういった意味で、1つのプログラミング言語を習得するまではスクールに通うほうが吸収は早くなります

ただ、独学で無理なく勉強する方法としてはいくつかあります。

これは実際に筆者が若手エンジニアに癖付けさせていることです。

以下で詳しく説明します。

コメントだけでプログラムを完成させる

プログラミングする前の設計をしっかりすると開発が楽になります。

独学のコツ=設計をしっかりする

プログラマといわれるとプログラムを書いているだけと思われがちです。

しかし、実際にプログラミングをしている時間はプロジェクト全体で言うなら30%程度の時間です。

そのうち、純粋なコードを書いている時間は50%未満です。

プログラムには有効ステップ数というのがあり、これは実際にプログラムがプログラムとして動作をする行数のことを指します。

仮に1000行のプログラムがあったとしたら、実際の有効ステップ数は400行から精々500行程度です。

では残りは何かというとコメント行であったり、プログラム全体を見やすくするための空白行です。

なので、まず「何をしたいか」というのを日本語でコメントとして書きます。

そうすると、あとはそれをプログラムに変換するだけです。

プログラムに変換するだけなら、参考書でも参考サイトでもサンプルはいくらでもあります。

実際にコメントを書いていけば、

「この処理はあちこちで使うから共通化できないか」
「ここでこんなに複雑な処理は必要か」

など日本語として自分のプログラムを見直すことができます。

独学で習得するならこのプログラミング以外の部分をしっかりするとつまずきにくいです。

マイルストーンを設ける

マイルストーンを設けることでモチベーションを高めることができます。

独学のコツ=マイルストーンを設ける

マイルストーンとは、物事の進捗を管理するために途中で設ける節目のことです。

要するに段階的な目標です。

独学で勉強をする場合、ゴールが見えないとモチベーションを保てません

そうならないためにもマイルストーンを設けてください。

「xx月xx日までにコメントを書く」「xx月xx日までにこの処理を作る」など小さなものでも構いません。

マイルストーンを設けてそれに向かって勉強を進めてみてください。

フローチャートを書いてみる

フローチャートを書いて、処理毎に図として噛み砕いてみるのもいい勉強になります。

独学のコツ=フローチャートに処理を書く

フローチャート は、プロセスの各ステップを箱で表し、流れを矢印で表すことで、プロセスを表現する図です。

通常開発では数万行のプログラムを書きます。

上手く開発をするためには機能を分解して開発する必要があります。

分解がうまくできないとつまずいてしまいます。

フローチャートを使えるとタスクを効率よく分解することができます。

なので独学でもつまずきにくいです。

実際プログラミングの仕事をするとほぼ100%の確率でフローチャート図を求められます。

(筆者は今まで大小含めて1000近くのプログラムを作ってきましたが、フローチャートを書かなかったのは10件にも満たないほどです)

結局はどのようにプログラミングを習得したらいいのか

最初の1つの言語はスクールに行くなり指導者をつけるなりして学ぶことをお勧めします。

プログラミング学習おすすめ=最初の言語はスクールで学ぶのがおすすめ

そこである程度のノウハウが付いたら、後は独学でも十分同じくらいの効率で習得ができるようになります。

1つでもプログラミング言語を習得してしまえば、あとはどんな言語であっても応用が利きます。

例えばC#という言語はVisual Basic文法がほとんど同じです。

日本語で言うなら関西弁と標準語(東京弁)程度の違いしかありません。

また、C#はjavaをベースに作られている言語なので、javaでも問題なくプログラミングをすることが可能になります。

違いでいうなら、現代の言葉を使っている人が、時代劇を見ている程度の差分です。

1つの言語を習得しただけで、そこから簡単に3つの言語まで使えるようになります。

なので1つの言語をある程度使えるようになったら、積極的に別の言語に挑戦してみましょう。

例えば「スクールで習ったXXの言語で書かれた課題をYYの言語で書いてみよう」でも問題ありません。

そうすると必然的にYYの言語についても最初に習得したXXの言語と同レベルにプログラミングができるようになります。

プログラミングジャパンのLine公式アカウントにご招待

プログラミングジャパンのLine公式アカウント