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

独学プログラミング学習をすることについて解説をしていきます。

プログラマー志望者プログラマー志望者

独学でプログラミングは習得できるのだろうか・・・

プログラミングの指導や、研修を行っているとこのような質問がよくあります。

この記事ではこのような疑問点を解消する為に

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

といった点について詳しく解説していきます。

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

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

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

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

  • BASIC
  • Visual Basic
  • Perl
  • Hyper Talk

一般的にプログラミング学習をはじめようとすると

プログラマー志望者プログラマー志望者

プログラマは夜中まで仕事して何万行も書いているっていうし、敷居が高いよな・・・

と思う人が多いです。

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

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

エンジニアエンジニア

何万行というプログラムを書くことがあるけど、それは単純に「機能が多いだけ」なんだよ。

「一つ一つの機能」は100行程度で終わります。

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

1万行を超えるようなプログラムはこの世に存在しません。

エンジニアエンジニア

1万行を書き込むようなプログラミングも結局は「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@で配信しています。