独学でプログラミング学習をすることについて解説をしていきます。
独学でプログラミングは習得できるのだろうか…
プログラミングの指導や、研修を行っているとこのような質問がよくあります。
この記事ではこのような疑問点を解消する為に
- プログラミングをどのようにすれば独学で習得できるか
- 独学における注意点やアドバイス
といった点について詳しく解説していきます。
目次
プログラミングの独学での学習は無理?
結論から言うとプログラミングの独学での学習は可能です。
現に筆者(現役システムエンジニア)は中学~大学時代に独学で次の言語を習得しました。
- BASIC
- Visual Basic
- Perl
- Hyper Talk
一般的にプログラミング学習をはじめようとすると
プログラマは夜中まで仕事して何万行も書いているっていうし、敷居が高いよな…
と思う人が多いです。
しかし、実際プログラミングを習得することはそこまで敷居が高くありません。
早い人であれば1ヶ月もあれば即戦力レベルまで習得することはできます。
何万行というプログラムを書くことがあるけど、それは単純に「機能が多いだけ」なんです。
「一つ一つの機能」は100行程度で終わります。
よく言われる何万行もあるプログラムとは結局「100行~数百行程度」のプログラムが積み重なった結果です。
1万行を超えるようなプログラムはこの世に存在しません。
1万行を書き込むようなプログラミングも結局は「100行程度のプログラムを1つずつ積み重ねたもの」なんですよ。
そう考えると敷居は低くなりませんか?
- プログラムとは似たような構造で作られていて、1つ覚えれば応用がいくらでも利く
- 世の中の大きなプログラムは小さなプログラムが集まった結果のもの
これらを前提にどのようにプログラミング学習を進めていくのがよいか読み進めて頂ければと思います。
スクールに行くべきか
プログラミングは独学で習得できると書きましたが、スクールに通うことは推奨します。
やはり独学には限界があります。
独学では参考サイトに載っているソースコードをそのまま使ってしまいます。
ソースコードをそのまま使ってしまうと動作はしても「プログラムがなせ動くのか」の仕組みが理解できなくなる危険性もあります。
したがって、応用が利かなくなってしまいます。
これを続けていくと
- 原理は解らないけど、取り合えず動いた
- 動かないけど原因が分からない
- そもそも何が解らないのかが解らない
といった事態に陥ります。
それに対してスクールは講師が「なぜこのように動作するのか」を教えてくれます。
動かない場合はヒントをくれたりもします。
何が解らないのかが解らない場合でも質問をすれば丁寧に回答してくれます。
そうすると動かない、解らない苦悩から動く喜びや完成への達成感を得られます。
どんな企業でもプログラミング経験者であってもOJTで簡単なプログラムから書かせる理由はここにあります。
OJT(On-the-Job Training、オン・ザ・ジョブ・トレーニング)とは、職場で実務をさせることで行う従業員の職業教育のことです。
プログラミングの独学の効率はよいのか?
独学でプログラミンぐ学習は効率が悪いです。
スクールに行くのは抵抗があるし、自分のペースで学習したいなぁ…
というふうに思う人は必ずいます。
独学のメリットは
- 自分のペースで反復しながら学習できる
- 周りに対して劣等感を感じない
といった点です。
しかし、効率はかなり悪いです。
具体的には以下のデメリットがあります。
- 自分がどれほどのスキルを有しているのか、もしくは自分の弱点が解りにくい
- 同様の悩みを抱えている人との課題やノウハウを共有できない
独学では自分がどれくらいスキルを身に着けているのかわかりません。
そのため自分の弱点を把握しないまま闇雲に学習してしまいます。
結果余計な学習時間を費やすことになってしまいます。
また悩んだら「悩みっぱなし」になる傾向があります。
プログラミングを独学で学ぶ人の大半がこの部分で挫折します。
独学はどれくらいの期間
独学で学ぶ場合はどれくらいの期間が必要なのでしょうか。
その人のポテンシャルとモチベーション次第ではありますが、目安は次の2つです。
- 単純なプログラミングができるようになるまで約1カ月
- 業務レベルで通用するプログラムが書けるようになるまで約1年
単純なプログラムというのは数百行程度のプログラムです。
数百行程度では、計算機能やメモ機能のような単一的な機能のプログラムが作れます。
業務レベルというのは、単純なプログラムを組み合わせた数万行のプログラムのことです。
たいていの人は独学だと数年かかると思ってください。
プログラミングを独学で学習するときのデメリットは?
プログラミングを独学で学習すると次3つのデメリットがあります。
- スパゲッティソース
- 書いたプログラムの性能が悪い
- チームプレーの意識が薄れる
以下で詳しく説明いたします。
スパゲッティソースになりやすい
独学では、スパゲッティソースという可読性の悪いプログラムしか書けなくなってしまいます。
可読性が悪いとは、「繰り返し処理」や「分岐処理」が複雑に絡み合っている他人が読みにくいプログラムコードのことです。
スパゲッティソースだと、バグがあってもどこを直せば良いのか分からないことが多いし、1行直しただけでプログラム全体の挙動がおかしくなるケースもあります。
スパゲッティソースはまさに独学における一番のデメリットです。
独学では、「動けばいい」だけのプログラムしか書けなくなってしまいます。
しかしスクールでは、講師から適切な指摘を受けることができます
書いたプログラムの性能が悪い
独学で書いたプログラムコードは、性能が悪いことがあります。
我々プログラマはミリ秒単位の世界で仕事をしています。
数万件のデータから一つのデータを引っ張ってくるなら、50ミリ秒(0.05秒)以内に処理を完了させないと遅いと言われます。
ビッグデータを扱うなら、数兆個のデータから数億個のデータを抽出するのに1ミリ秒以内に処理を完了させる必要があります。
独学で開発した場合、プログラムを実行するのが自分一人なので、性能周りの意識が薄くなりがちです。
プログラミングの現場で実際にプログラミングをしたときに大きな処理レベルでやり直しを受けることもあります。
例えば以下のプログラムがあったとします。
for(int i = 0; i < allDatas.Count; i ++)
{
//データの値が100ならTrueを成立させる
if(allDatas[i].value == 100)
{
is100 = true;
}
}
これは参考書的には100点のプログラミングです。
恐らく数多くの参考サイトもこのようなサンプルを書かれています。
けれど、実際の現場ではこのコードは書き直しを命じられてしまいます。
しかし、なぜだか解りますか?
例えばデータの総数が100万件あったとして、最初の1万個で条件を満たせたとします。
しかしループは回り続けるので、「99万回の無駄な処理が実行されてしまう」わけです。
独学でプログラミングをやっているとこういった細かいけど重要な部分に気が回ることはありません。
チームプレーの意識が薄れる
独学で学習するとチームでの開発スキルをみがけません。
実は仕事としてプログラミングを行う上で、チームプレーは一番重要なポイントになります。
実際のプログラミングの現場では、必ず複数人で開発をします。
必ずチームで何かを作り、チームでお互いのプログラムを見ながら何が悪いのかを分析します。
そして、不具合やそれに準ずる事象についてチーム内で共有します。
しかし、独学でプログラミングの勉強をした場合、個人プレーになってしまうので、チームで開発する機会がありません。
プログラミングを独学で無理なく勉強する方法は?
独学で習得するのは確かに大変です。
しかし、1つのプログラミング言語を習得したら後は独学でも全く問題はありません。
ただ、独学で無理なく勉強する方法としてはいくつかあります。
これは実際に筆者が若手エンジニアに癖付けさせていることです。
以下で詳しく説明します。
コメントだけでプログラムを完成させる
プログラミングする前の設計をしっかりすると開発が楽になります。
プログラマといわれるとプログラムを書いているだけと思われがちです。
しかし、実際にプログラミングをしている時間はプロジェクト全体で言うなら30%程度の時間です。
そのうち、純粋なコードを書いている時間は50%未満です。
仮に1000行のプログラムがあったとしたら、実際の有効ステップ数は400行から精々500行程度です。
では残りは何かというとコメント行であったり、プログラム全体を見やすくするための空白行です。
なので、まず「何をしたいか」というのを日本語でコメントとして書きます。
そうすると、あとはそれをプログラムに変換するだけです。
プログラムに変換するだけなら、参考書でも参考サイトでもサンプルはいくらでもあります。
実際にコメントを書いていけば、
- この処理はあちこちで使うから共通化できないか
- ここでこんなに複雑な処理は必要か
など日本語として自分のプログラムを見直すことができます。
独学で習得するならこのプログラミング以外の部分をしっかりするとつまずきにくいです。
マイルストーンを設ける
マイルストーンを設けることでモチベーションを高めることができます。
マイルストーンというのは、『物事の進捗を管理するために途中で設ける節目』のことです。
要するに「段階的な目標」です。
独学で勉強をする場合、ゴールが見えないとモチベーションを保てません。
そうならないためにもマイルストーンを設けてください。
- 「xx月xx日までにコメントを書こう!」
- 「xx月xx日までにこの処理を作ろう!」
など小さなものでも構いません。
マイルストーンを設けてそれに向かって勉強を進めてみてください。
フローチャートを書いてみる
フローチャートを書いて、処理毎に図として噛み砕いてみるのもいい勉強になります。
フローチャート は、「プロセスの各ステップを箱で表し、流れを矢印で表すことで、プロセスを表現する図」です。
通常開発では数万行のプログラムを書きます。
上手く開発をするコツは「機能を分解して開発する」ということです。
分解がうまくできないとつまずいてしまいます。
なので独学でもつまずきにくいです。
実際プログラミングの仕事をするとほぼ100%の確率でフローチャート図を求められます。
(筆者は今まで大小含めて1000近くのプログラムを作ってきましたが、フローチャートを書かなかったのは10件にも満たないほどです)
結局はどのようにプログラミングを習得したらいいのか
最初の1つの言語はスクールに行くか、指導者をつけることをして学ぶことをお勧めします。
そこである程度のノウハウが付いたら、後は独学でも十分同じくらいの効率で習得ができるようになります。
例えば「C#」という言語は「Visual Basic」と文法がほとんど同じです。
日本語で言うなら関西弁と標準語(東京弁)程度の違いしかありません。
また、C#は「java」をベースに作られている言語なので、javaでも問題なくプログラミングをすることが可能になります。
違いでいうなら、現代の言葉を使っている人が、時代劇を見ている程度の差分です。
1つの言語を習得しただけで、そこから簡単に3つの言語まで使えるようになるね!
例えば
スクールで習ったXXの言語で書かれた課題をYYの言語で書いてみよう!
といったものでも問題ありません。
そうすると必然的にYYの言語についても最初に習得したXXの言語と同レベルにプログラミングができるようになります。
未経験からエンジニア転職!
副業・フリーランス転職にも完全対応!
社会人がエンジニア転職するなら
『プログラミングジャパン!』
まずは無料体験レッスンで詳しく話を聞いてみよう!