習得ガイド

無料講座も有料スクールも色々経験したからプログラミング初心者のためのプログラミング習得方法ガイドを作ったよ

0.はじめに

はいどうもこんばんは
乙pyです。

現在はエンジニア兼プログラミング講師をしています。

初めてプログラミングに触れた際は
全く何も出来ないい状態からのスタートでしたが
現在では人に教えたり、聞かれた事に答えられるぐらいには
成長できました。

プログラミングを習得するに当たっては
それはもう色々経験しました。

友人の家でたまたま見た書籍を貰い
それを見て独学で何とかしようとしたものの挫折。

結局はスクールに1年近く通い、
プログラミングに関しては身につけられたものの
今ではそのスクールで学んだことの半分は
全く仕事で使っていません。

現在の業務は統計分析や機械学習などを行うのがメインですが
それらは独学で身につけたものです。
仕事では複数の言語を使用しますので必要最低限の知識があります。

趣味ではゲームを作ったり、アプリをリリースしたこともあったので
そのために必要な知識もあります。

さてそれを踏まえた上で初学者がプログラミングを習得するには
どうすれば良いか・・
最良の方法はどれかについて考えてみましたので
その方法を紹介いたします。

1.どこから手をつけるか

そもそもどうやったらプログラミングが身に付くでしょうか?

プログラミングほど幅の広い分野は有りません。
しかもプログラミング単体だけの知識で
解決しないこともあるので大変です。

なのでまず最初は・・・

2.目標を決めよう

これに尽きます。

まずは目標によって
どこまで学習する必要があるかが決まると思います。

漠然とプログラミングを習得したいでは
うまくいかないのではないのかと思います。

目的を段階別で考えてみました。

もちろんこれ以外にも人それぞれも目的があると思いますので
近しいところを参考にしていただければと思います。

目標:文法だけ身につける
難易度:非常に易しい
時間:最短1日
文法を覚えるだけであれば本一冊
もしくは動画で5時間分ほどのボリュームです。
早い人であれば1日である程度まで覚えることが
できるのではないかと思います。

目標:業務で使いたい、役立てたい
難易度:易しい
時間:数日
このくらいであれば、エンジニアになりたい方でない限りは
数日で業務に応用が可能な人もいます。
簡単な集計やWEBから情報を取得してファイル化など
業務効率化を計ることができ、スキルアップには最適です。

目標:アプリを作ってみたい
難易度:中程度
時間:数ヶ月
さてここら辺から少し難易度が上がります。
まず作りたいアプリは今この世に無いものであるはずです。
そうするとアプリの部品を集めないといけません。

部品を作るのには色々調べたり、制約や
エラーの壁を超えないといけません。
そうした壁を乗り越えられるかどうかが
目標達成の鍵になるため、この壁を乗り越える
コストを払う必要が出てきます。

初めて作る場合は1-数ヶ月かかると思われるので
作り上げる根気も必要だったりします。

目標:WEBサービスを作って起業したい
難易度:やや難しい
時間:年単位
ここは自分で全部作る場合と
人にお任せする場合とで難易度や時間が変わります。

起業するのであれば、サービス構築の知識は
ある程度知っておいた方が良いと思います。
いざという時に直せないのであれば
サービスとして成り立ちません。

ですので人に作ってもらうにしろ
最低限のプログラミング知識、エンジニアリング知識は
持っておいたほうが無難です。
この場合は知識を身につける程度の学習コストで済むので
比較的低コストになると思います。

当然自分で全部作る場合は時間も学習コストも
相応のコストを払わなければならないことを覚悟しましょう。

目標:AIとか作りたい
難易度:やや難しい
時間:年単位
プログラミングが上達していなければ
自分でAIを作ることは難しいでしょう。
またプログラミングだけでなく
業界の知識やアルゴリズムに関する知識も必要です。

それなりのAIを製作するのであれば
仕事でプログラミングをしている人であれば数年
独学の場合はもう少しかかるかもしれません。

目標:統計分析とか機械学習をしたい
難易度:難しい
時間:年単位
データサイエンティストと呼ばれる職種が
この手の分野の仕事をしています。
まずプログラミングの知識が無いと成り立ちません。

最近の分析系の方々はPython,Rは最低限使える人です。
あとは業務に応じて周辺の知識が沢山必要です。
プログラミングだけでは成立しない職種なので
なかなかハードルは高いと思います。

数学、特に統計の分野や業界知識が必須です。

目標:プログラミングを覚えてエンジニアに転職したい
難易度:難しい
時間:年単位
もし転職を考えているならあまりお勧めはできません。
それでも転職したいのであればプログラミングの
知識は必須となります。

そもそもプログラミング出来ない人を
中途で雇ってくれるところは無いのと
業務経験が無い人を中途で雇ってくれないので
プログラミングを覚えるというハードルは高く無いですが
転職をするとなると高い壁になります。

アラサー未経験で転職した方を
あまり聞いた事がないです。
ギリギリ20代で少しかじった事があれば
なんとかなるかもしれません。

実際自分も働いていた現場ではJavaの知識が必須だったはずでしたが
中途で入ってきて隣に座った人は
そもそもJavaのプログラミングがほとんど出来ない人でした。
数行のプログラムの解読に1日かかるような
いつ勉強したの・・嘘でしょ!!!

と経営者だったら思うレベルでしたが
若ければ転職できる可能性があります。

エンジニアとして働きたい場合は
プログラミングの知識の他にハードウェアや
ミドルウェア、OS、通信、その他テクノロジーに
関連する知識が必要になってきますので
未経験の方は難易度が非常に高いです。

新卒や高校生、大学生は数年かけて覚える時間があるので
やや難易度は下がるでしょう。

目標:ゲームを作りたい
難易度:非常に難しい
時間:複数年単位
おそらく、未経験から初める中で
最も難易度が高いのではないでしょうか?

現在の主流はゲームエンジンを使って製作するのが
ほとんどだと思うのでその知識を身につければ
対応できますが、C++やC#など
初心者だと少し時間のかかるような言語の知識が必須です。

またゲームエンジンそのものを作るようなことになると
途方も無い時間と複雑極まりないコーディング能力が要ります。

まずは簡単なアプリから慣れていき
それが出来たならこの段階に進むことをオススメします。

逆に1人でゲームが作れるようなレベルであれば
どの業界でも活躍できる
エンジニアになれるのでは無いかと思います。

3.言語を選ぶにはどうすれば良いか

プログラミング初心者にとってのハードルは
まずはどの言語を選択するかということでしょう。

いきなり難しい言語をやっても習得に時間がかかってしまいます。
また、難易度の高さから途中で放り出してしまう危険性もあります。

ですのでまず最初は
「簡単で時間の掛からない言語をやってみる」
です。

一番最初に手を出してみるとしたら

HTML

だと思います。

HTMLはプログラミング言語では無いです。
ただし、言語というものを覚えるには
ちょうど良い題材です。

しかもWEBサイトは全てHTMLで書かれていますし
生活や業務に関わってくる部分が多いので
学んで損になる事がありません。
というか学ばないと損する時代になりました。

HTMLは学習コストも低く、まずはプログラミングの
取っ掛かりとして学習してみることをオススメします。

macでもwindowsでも無料のテキストエディターがあれば
編集などが行えますし、作成したHTMLを見るのは
WEBブラウザーで行えます。

しかも難しいアルゴリズムを覚える必要はなく
文法に乗っ取ってコーディングするだけで済む
簡単な言語です。

HTML自体は文法を覚えるのは数時間で済みます。
あとは慣れるのに1-数日と言ったところでしょうか。
まずはHTMLを学習してみましょう。

HTMLを学んでみて
これなら行けそうとか、簡単だと思ったら
プログラム言語の方に進んで大丈夫だと思います。

その上で難しいようであれば
あなたはプログラミング学習に向いていません。
時間の無駄です。
プログラミングを諦めることをオススメします。

次にプログラム言語を選ぶ段階となりますが
まずは母国語となるべき1つ目のプログラム言語を選ぶのです。
やや慎重に選択したほうがいいですが
まずは目的から言語を選んだほうが良いかなと思います。

言語の特性としては
初心者向け:
Python , PHP

慣れてきたら:
Java , C#

難しめ:
Javascript,C言語,C++

という位置づけかなと考えます。

まずは簡単な目的に設定しておいて
それを達成するた目の言語を選ぶと良いと思います。

初学者であれば「Python」が非常にオススメです。
お勧めできる点は
・比較的覚えやすい文法
・調べることの容易さ
・ライブラリの多さ

この3点があげられます。
まず最初の点は文法の簡易さです。
全ての文法を覚えなくても業務に活かせる上に
全てマスターしたら大規模アプリケーションも作成可能です。

特にGoogle社の3大言語として
Python , Java , C++の習得が挙げられています。

世界的にみても重要な位置づけの言語であるとともに
実務でも役立つのでお勧めできるのです。

次に初学者の壁となるのは
実行時のエラーでは無いでしょうか?
正しく動かない際のトラブルシューティングが
初学者の壁として立ちはだかります。

このトラブルシューティングの難しさは
言語を学んでいる人の少なさに比例します。
人気がない言語ほどその言語を学ぶ人がおらず
トラブル解決の手段が見当たらないケースに
当たる事が想像されます。

その点で行くと
PythonはJavascriptに次ぐ大人気の言語であるので
ブログや書籍が豊富にあり
トラブルシューティングも容易なのです。
初学者が言語を選ぶ際は人気のある言語を選んだほうが
相談できる人がいるというメリットがあるので
そう言った言語を選択したほうが良いです。

3つ目としてライブラリの多さが
Python言語の人気の高さに繋がっています。

ライブラリというのは
他の人が作ってくれた便利なプログラムの集まりで
自分で書かなくても実装したい機能を組み込む事が
容易にできてしまいます。

Pythonはおそらく世界でもトップクラスのライブラリの
多さです。
しかも業務や研究に役立つライブラリが豊富で
このライブラリを使うためにこの言語が選ばれている
という事もあります。

特にnumpyやpandasと言ったデータ分析のためのライブラリや
beautiful soupやscrapyと言ったWEBスクレイピングのためのライブラリ
そしてscikit-learnやtensor-flowと言った機械学習や
ディープラーニングのためのライブラリが無料で使えます。

Python言語の習得には別途初学者向けの動画講座を用意しました。
こちらでは短時間かつ無料でPython言語の文法を学習する事ができます。

次にある程度プログラミングに慣れてきたら
他の言語に手を出してみると良いでしょう。

初学者が次にハマりそうな箇所として
オブジェクト思考の概念があります。

最近の言語はほとんどオブジェクト指向の言語です。
この考え方で最初から学ぼうとすると
想像したり、理解するのが難しいため
まず最初はクラスやオブジェクト思考のことを考えずに
プログラム言語を学んでいくのが良いと思います。

ある程度書けるようになったら
クラスの部分に進んでいくのが良いかと思うので
Javaなどを最初に選ぶとやや学習に時間がかかるかもしれません。

間違ってもゲームを作りたいからと言って一番最初にC++を
学習しようとすると非常に大きな学習コストを払う羽目になると
思います。言語そのものの概念や文法が難しいからです。

ゲームだけはその言語を覚えるだけでは
達成できない目標であるため
ある程度書けるようになってからの目標にしたほうが
挫折しないかと思います。

4.環境構築について

プログラムを学習するにあたっては
プログラム言語が動く環境を作らないといけせん。

基本的にはプログラム言語はPC上で動きます。
なのでPCが無い方は、そもそもPCを揃えないといけません。

PCを選ぶとなるとOSの選択肢は複数あります。
・windows
・MacOS
・Linux

自分だったらMac一択です。
それは何故かというと
・プログラム言語のインストールのしやすさ
・不具合が少ない
・ウイルスがほぼ無い

ついでに
・macでしか動かないソフトがあるから
・カッコイイ(笑)
というところでしょうか

先ずはプログラム言語に関しては
どのOSでもインストールする事ができます。
ただしOSによってインストール方法は異なります。

Linuxでのインストールになると
そもそもプログラミング環境を整えるのに
Linuxの操作方法とコマンドを覚えないといけませんので
そもそも選択肢には入れづらいです。

windowsでもmacでも格言語のインストール方法は
ほぼ一緒で、インストーラーでインストールできると思います。
ただ、使っていくと、windows特有の制約で
インストールに失敗したり、難しかったりが良くあります。

ツールのインストールでmacは成功したけどwindowsで
うまくいかなかった事が多々ありました。
OS環境が違うと、ここら辺の整備が非常に骨が折れます。

次に不具合ですがmacは1ヶ月つけっぱなしでも
特に問題は起きないですが
windowsはすぐに重くなったり、下手するとブルースクリーンで
強制再起動させられたりします。
しかもウィルスが多いのでチェックに時間を取られたり
ウィルスに感染したらものすごい労力を取られてしまいます。

自分はwindowsではなんども感染していますが
macでウィルス感染したことはありません。

また別途ソフトウェアは必要ですが
MacOSにはWindowsをインストール出来るんです。
なのでMac上Windowsも動きます。
その逆は無いです。
ここら辺がwindowsを選ばずにmacを選択する理由です。

ただ自分は業務ではwindowsを使わされています。
会社がwindowsPCを支給しているからです。

なので会社と同じ環境でやりたければwindowsでも
問題ないですが、自分が会社を立ち上げるとしたら
支給PCは全部Macにします。

5.どうやって学習をするか

現在ではプログラム言語を習得するのに
様々な選択肢がありメリットデメリットがあります。

勉強方法については先ずは掛かるコスト
そして学習コンテンツの充実度で
判断すれば良いかと思います。

コスト面でいくと

スクール > WEBサービス > 動画講座 > 本 > WEBサイト閲覧

コンテンツの充実度は

有料サイト > 無料サイト

になります。

プログラミング習得マトリクスを作ってみました。

先ず初学者が始めるとしたら
・WEBサイトの閲覧
・初心者向けの書籍

こちらを見てみましょう。

WEBサイトに関してはQiita

こちらで学習したい言語で記事を検索し
それを読み込むで良いと思います。

あとはGoogle検索で目的の言語を検索して
一通りまとまったものを眺めてみるです。

当然全ての情報が集約されているわけではないと思うので
文法の理解は不十分なケースがほとんでしょう。

次の段階は書籍を買うです。

書籍を買う場合は
・初心者向け
・重版
・ベストセラー

こちらを選択しましょう。
Amazonで選ぶも良し、書店でどれが一番売れていますかと
聞きてみるのもイイと思います。

選ぶポイントとしては
重版のものの方が売れたという事が分かります。
重版かかるということはそれだけ内容が支持された技術本
であることになるので内容がしっかりしているでしょう。

言語によって本はたくさんあるため
紹介は差し控えますが、
上記のポイントを参考にしていただければと思います。

最初の段階のメリットとしては
・お金がかからない

デメリットとしては
・学習が進むかどうかが分からない
・挫折しやすい
です。

お金はかから無いけど言語を理解するのには
個人差が大きく、挫折もしやすいものです。

次に本を買って独学で勉強したりしたけど
理解できない部分があって困った場合です。

取るべき選択肢としては
・Udemyの動画講座
・Progate
・Aidemy

いずれも有料のコンテンツです。

料金体系は

Udemy
動画講座毎の買い切り制
1講座あたり1200円〜数万円

Progate
月額制(月額980円)

Aidemy
チケット制+月額のチケット制
1講座あたりチケットが1枚から
講座の買い切りもしくは月額プラン
Petit(¥ 1,880 /月) : チケット1枚
Small(¥ 3,480 /月) : チケット2枚
Medium(¥ 4,980 /月) : チケット3枚
Large(¥ 6,480 /月) : チケット4枚

どのサービスも
本よりも詳細に表現されているものもあったりするので
理解はしやすいのではないかと思います。

もちろんコンテンツとしては充実しているものであるので
最初からこういったサービスを選択するのも有りです。

月額プランで早ければ1ヶ月で覚えてしまえるので
非常に安価に済むかもしれません。

またこういったサービスが他にも沢山あるので
学習サービスを転々としていっても
そこまでひどくお金はかから無いでしょうし
理解できなければ乗り換えた方がお得です。

本を読んだり、動画講座を見たり、WEBの学習サービスの活用で
ほぼほぼ独学でもプログラミングが出来ている方を
ちらほら見かけます。

大半の方は書籍と学習サービスだけで十分かと思います。
自分も書籍何冊かと補完的に学習サービスを受けたり
動画講座を買って活用しています。


最後にプログラミングに自身が持てなくて
どうしても覚えたければ

人に頼る です。

この段階だと非常にお金が掛かることになります。

人に教わるのもいくつかの段階があります。

・メンターを雇う
・スクール(プログラミング教室)に行く
・大学に行く

先ずメンターを雇う方法としては
・プログラミング学習サービスのオプションで雇う
・自分でメンターを見つける

先ず学習サービスのオプションのメンターサービスですが
Aidemyだと集中プランだと1ヶ月19万年くらいだそうです。

次にメンターを探す方法として次のようなサイトがあります。

スポット的にコンサルをお願いできるサービスですが
料金は最低でも1時間15000以上です。

なのでメンターを雇うということは
非常にお金がかかります。

またメンターによっては
教え方がうまくない人に当たると
ほんと最悪、ということもあります。

プログラミングの上級者であっても
教えることの上級者では無いというケースがあり
高いお金出してメンターを雇っているのに理解でき無いという
二重苦三重苦がありえます。

なのでお金を出してメンターを雇うのには
かなりのデメリットも存在します。

次にスクールに通うです。
自分もスクールに通いましたが
個人的にはお勧めできません。

自分がスクールに通った理由は
・時間がない。
・お金を出して自分を追い詰めたかった。
・転職先も見つけたかった。
この3点です。

当時はJava言語とSQLを習いました。
ただし今ではSQLくらいしか習ったことを
仕事で活用できていません。

費用としては
100万円を超える金額で
通った日数は1年間です。

お金も時間も掛かる上に
習えることと言えば
書籍3冊程度の内容です。

圧倒的に費用対効果が悪すぎます。
100万円あれば5千円の書籍が200冊買えます。

現在であればスクールに引けを取ら無い
プログラミング学習サービスや
動画講座はいくらでもあります。
なので人に習うことに書籍200冊分の価値があるかは
疑問です。

しかも転職先も見つかりませんでした。
そもそもプログラミング初心者に毛が生えた程度の
プログラム言語経験者では実務には入れません。

中途なら即戦力でないと厳しいので
中途で雇ってくれるところの方が珍しいです。
おそらくは28歳くらいまでが
未経験者の限界ではないでしょうか?

それを超えていたら
転職のためにスクールに通って
プログラミングを習得しても
だいぶ厳しい現実が待っていると思います。

プログラミングスクールにお金を払っても
元を取るほどの効力があるのかは
簡単に想像できると思います。

一方で中高生であれば
大学に行ってプログラミングを習う
というのは正解だと思います。

おそらくは専門学校に行って習うよりも
大学に行っておけばよかった・・・

ということになるのではないかと思っています。
それは日本社会では圧倒的に4年制大学が有利だからです。

わざわざ給与体系が安い専門卒を選ぶ選択肢は有りません。
しかも4年制の大学の方が人と人との繋がりも有ります。
すでに習得した同級生や先輩にメンターとして
習ったりすることもできる訳ですし
学習環境としては最高です。

現在プログラミングも習えるとしたら
工学部・工学科
理工学部・機械工学科、電子工学科
あたりではないかと思います。

もちろん文系でプログラマーになった人も
大勢いる訳で理系でなくても身につきます。
専門学校やスクールに通うよりは
大学に通う方が良いでしょう。

大学に通うメリットしては
・お金がかかる
・時間がかかる
ですね。
四年通うとして
数百万円を誰が負担するのかということになります。

裕福な家庭であれば
全額キャシュでしょうが
プログラミングを習得するだけであれば
お金がかかり過ぎるものです。

6.最後に

プログラミングの習得というのは
あくまでも手段であり
目的ではないはずです。

何か達成したい目的があり
それを遂行するための手段として
プログラミングの知識を用いるとか

問題解決のために
プログラミングの知識を用いるというのが
プログラミング習得の意義ではないかと考えます。

そもそも使わないものを習っても
何の役にも立ちません。

またプログラミングの知識だけでは
エンジニアとして活躍することはできません。

もしエンジニアで活躍したければ
以下のような知識も必要ではないかと思います。

・コンピューターサイエンス
・ソフトウェア開発手法
・リファクタリング、デバッグ技法
・バージョン管理の方法(gitの操作)
・各種開発環境の整備方法
・パフォーマンスチューニング
・セキュリティーの知識
・アルゴリズムの知識
・ハードウェアの知識
・ミドルウェアの知識
・データベースの知識
・ネットワークの知識
・クラウドサービスの知識
・通信の仕組み
・通信端末の仕組み
・各業界の慣習
・その業界に関わる法律
・個人情報の取り扱い方
・最新テクノロジーの活用方法
・新しい言語の効率的な習得方法
・プロジェクトマネジメント

などなど

プログラム言語の知識だけでは
実はプログラムは成立しない部分があるので
そこを補完する知識の学習もセットで行わないと
ならない場合があります。

こちらの学習方法については
要望があれば詳しく書いていきたいと思います。

再度初学者向けの学習コンテンツを紹介させていただきます。
これからプログラミングを習得したいという方が始めに学ぶ
コンテンツとしては最適です。


YouTubeやTwitterでも
役に立つ情報を発信していますので
ぜひ登録お願いいたします。

乙pyのHP:
http://www.otupy.net/

Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter:
https://twitter.com/otupython



この記事が気に入ったらサポートをしてみませんか?