今回は、プログラミング独学でつまずくポイントとその克服方法についてです。
プログラミングを独学である程度の規模のものを開発するところまでいくためには、乗り越えるべき数々のポイントがあると感じています。
実際にプログラミングを専門に教えていた方からもいろいろ話をうかがったり、自分でも指導してきて判明したポイントを最初からの時間軸で10にまとめてみました。
克服のためのアドバイスもあわせて書いています。
プログラミングつまずくポイント
初心者がプログラミングをはじめてから、実際に「プログラムのありがたさを十分に感じることができる」ようになるまでのつまずきポイントの整理をしています。
「プログラムのありがたさを十分感じることができる」とは、自分で何かプログラムしたものが、自分を含めた誰かが使って便利だと実感できることを指しています。
各ポイントを乗り越えて最後までたどり着ければ、あとは継続してやめなければ、スキルは向上し続けると思います。
プログラミングでつまずく10のポイント
プログラミングつまずきポイント
- インストール/開発環境構築
- プログラミング基礎(文法:条件分岐、関数等)
- 何をつくるのか最初(モチベーション)
- ライブラリ学習(標準関数、各種ライブラリ使い方)
- プログラミング応用(構造体、クラス)
- 何をつくるのか(ある程度の規模のもの)
- 開発のための技術理解(Web画面、機械学習等)
- 開発につかうフレームワーク
- プログラムの考え方-どのようにつくるのか(設計)
- プログラムのリリース(提供方法、パッケージング等)
実は、新入社員で就職した場合などは、実質は5番目くらいまですすんだ程度で現場デビューということになり、悩むことが多いかもしれません。
フリーランスでプログラミングで少しでも稼げるということであれば、今なら8番目くらいまでの壁を乗り越えればつてがあればデビューできると思います。
設計部分がある程度自力でできるようにならないと独り立ちは厳しいですが、複数人で開発する仕事ならたくさんの出番がありそうです。
つまずきポイントの内容とその克服へのアドバイス
パソコンは持っていることを前提にします。
今は、WindowsでもMacでも、Linuxからの方は非常に少ないとは思いますがLinuxであっても、OSは関係なくはじめられるプログラミング言語がほどんどです。
インストール/開発環境構築
プログラミングをはじめるには、最初にプログラミングができる環境を自分のパソコン上につくる必要があります。
そのための環境構築、インストールでつまずくことがあります。
インストールの中でもつまづくポイントがあるため、克服するための方法をお伝えします。
まず、インストールのやり方がわからない(どこからはじめるかがわからない)ところがあります。
対策としては、GoogleかYahooで検索するか、簡単な書籍(インストールからでているもの)を購入するかです。
ネット検索の場合は、「[対象となるプログラミング言語] インストール [OS]」で検索すれば、やり方がでてこない言語はよほどマイナーな言語です。
例えば、「Python インストール Windows10」でインストールはできます。もっとも、このサイトを読んでいる方はここはクリアしているはずですね。
できれば、できる限り新しい記事を参照してください。
古い記事の場合、内容が異なっている場合もよくあるので、そこだけ注意すれば、大抵の言語は、ネットで調べてインストールして、Hello,Worldを表示させる部分まではいけると思います。
ただネット検索の場合の問題は、ここから先に進むために開発環境をどうするかだと思います。
それも検索すればでてきます。
「[対象となるプログラミング言語] 開発環境 [OS]」
何にすればいいかわからない時は、MicrosoftのVisualStudioCode(VS-CODE)を選択ください。
ここからインストールできます(https://code.visualstudio.com/)
無料だし、HTMLやCSSも含めてメジャーな言語(どころか使おうとするとたいていの言語)ではサポートのアドオン機能が使えて便利です。
アドオンがなくともエディタとしても十分使えます。
Windows以外にも、MacOS、Linux系のOSもサポートしています。
プログラミング基礎(文法:条件分岐、関数等)
次のつまずきポイントが、下に列挙するようなものです。
- 条件分岐
- 繰り返しループ
- 配列・リスト
- 関数呼び出し・引数
わからなくなったとき、もっともよい方法は、書き写すことです。
他人の書いたサンプルで納得するのではなく、自分で打ち込んで動かしてみてください。
こういう場合は、書籍が便利で本の場合は順番にやっていけばいいですが、別に検索でも問題はありません。
パターン化してますが検索するならこのパターンです。
「[対象となるプログラミング言語] [知りたい内容]」
知りたい内容に上の一覧の項目をいれれば、最初に学ぶ言語であれば、いまは便利な世の中で結果が表示されます。
ただ、効率も悪いので、はじめての場合は、入門用のなるべく簡単なん学習書を1冊、購入してやってみることをおすすめします。
おすすめ書籍がたくさん出てきますが、300ページくらいの薄めのものがいいかも知れません。
500ページを超えるようなものは、確かにいい本もたくさんありますが、このあたりで苦労している場合はめげる可能性があります。
今はネットでも購入できますが、迷った場合は自分の足で書店に行って、手に取って選んでみるのが良いと思います。
何をつくるのか最初(モチベーション)
構文は覚えたけど本当に使えるようになったのだろうか、勉強用に何をつくればいいのか?
最初の構文を覚えて、プログラムってこんなものか、となんとなくわかったタイミングで、じゃぁ何をつくればいいのだ、となることが多いかも知れません。
自分はHello,World!の次に作るのを、「タイピング練習プログラム」だと書いてはいるのですが、タイピング練習プログラムでは、いろいろな内容がつまり過ぎているので、もう少し簡単に「簡単電卓」か、「じゃんけん」あたりが妥当とところで、そのあたりを自力で(自力が大切です)、つくってみるといいです。
1)簡単電卓で作る内容(例)
・数字1を入れてくださいと表示して、入力を受け取る
・数字2をいれてくださいと表示して、入力を受け取る
・数字1と数字2の四則演算結果を画面に表示する
(A+B=C、A-B=D、A×B=E、A÷B=F)
ただし、数字2(B)がゼロの場合には割り算は行わない。
1回だけ実施するもの→繰り返し実行するものの順番で作成
繰返しの場合には、入力が空だった場合に終了する。
2)じゃんけんで作る内容(例)
・画面に、1:ぐー、2:ちょき、3:ぱーを表示し、入力1を受け取る
・画面に、1:ぐー、2:ちょき、3:ぱーを表示し、入力2を受け取る
入力1と入力2でじゃんけんして、勝ち負けを判定し結果を表示する
これも、1回だけ実施→繰り返し実行するものを作成し、更には、入力2側を人間に入力させるのではなくプログラム側で乱数をつかって数字を生成して勝負させるように修正していけば、学ぶことは増えていきます。
このあたりがクリア出来たら、タイピング練習プログラムや、自分で考えたちょっとしたものを作ってみるといいと思います。
Pythonでつくる「タイピングプログラム」の記事はリンクはっておきます。
-
HelloWorldの次に作るべきプログラム【つくるとわかるPythonの特徴】
先日Go言語版をだしたので、Pythonはじめたときにどんなものをつくったのか気になって見てみたら、プログラミング言語が異なると ...
続きを見る
ライブラリ学習(標準関数、各種ライブラリ使い方)
標準関数・ライブラリとは、文字列操作、配列・リスト操作系などのプログラミング言語によっては言語仕様にひもづくものから、機械学習や暗号化ライブラリなどの特殊な状況であつかうものまでさまざまあります。
ここについては、全部覚えようとしない。必要に応じて調べて使う、というのが、結局対策になります。
第2第3の言語を学ぶ時も実はここが最も時間がかかるところで、条件文などは一度覚えてしまえばすぐに使えるようになりますが、ライブラリ関係は同じようでいて微妙に違うので、ひとつひとつ調べる必要があります。
つかうタイミングがきたら調べて覚えていくのが近道です。
そのときに、検索した結果をコピーするのではなくて、関数やライブラリの引数のひとつひとつの意味をしっかりと把握してください。
いまだと、コピペしてそのまま使ってください、など、検索するとよく見つかります。
例えば、電話番号が正しいか調べる関数だとか、上で出たじゃんけんでつかう乱数で指定された範囲の数字(1から3とか)を出力する関数とか、調べればネット上には、そのまま使えそうなものが、たくさん見つかります。
見つかりますが、実はそれを使うのが良いとは限らないのもたくさんあったりします。
電話番号だったら0120に未対応とか、携帯に対応していないものまであったし、乱数の範囲のものは、間違っているものとか、割り算の余りをつかった方がよい場合とか、プログラムで求めているものに合致していない場合も多くありました。
プログラムを利用するのであれば、確認は当然なのですが、そもそも学習のための利用であれば、そのまま使うのではなく、内容を理解して利用するということを心がけるべきです。
そうすれば、ネット上の情報は有効に活用できるし、身になってくれるものがたくさん存在しています。
プログラミング応用(構造体、クラス)
標準関数やライブラリを習得しても、次にひかえている大きなハードルがあります。
構造体とクラスの定義の仕方です。
ここは、オブジェクト指向と、その考え方でプログラミングするとかは、まずは忘れていいと思います。
データをまとめるのが構造体で、データとそのデータをつかう関数をひとつのかたまりにするのがクラス。
その程度の理解であとはひたすら使い方です。
まとめるための名前がついてますので、それが頭につくだけという程度に理解してしまえば、使い始められるのではないでしょうか。
クラスとインスタンスとの関係、プライベートとパブリックとは何か、等知るべきことも結構ありますが、ここは使っていくうちにどういうときにつかうのかが少しずつ理解が深まります。
オブジェクト指向型の言語の場合はクラス利用がある程度前提になっている場合もありますので、まずは形からはいって使ってしまえば、自然に覚えていきます。
何をつくるのか(ある程度の規模のもの)
独学でやってくると、ある程度のスキルを身につけた後に、次のステップに進むのが難しいのが、では次に何をつくろうかというところです。
プログラミングをやる会社に就職したケースだと、ちょうどこのあたりからは実際の業務が与えられはじめます。
というのも、ここから先は習得には時間がかかったり、何を習得するかは開発対象に依存してしまうからです。
ということで、まずは何をつくるか、何をつくりたいかです。
自分が何をやりたいのかまずは考えてみます。
Web系のアプリケーションを作りたい、スマホゲームを作りたい、データ分析をしたい、など。
汎用の言語であれば組込み系などの条件が厳しいものをのぞけば大抵の機能は作れますが、向き不向きはありますので、言語に向いているものを選択したほうが開発は楽になります。
その前提で何もないのであれば、こんなものをというものを列挙してみます。
Web系、スマホなどのアプリ
- チャットアプリ(LINEのようなもの)
- 掲示板アプリ
- メンバー登録管理アプリ
- 簡単メーラー
デスクトップアプリ
- 売上高計算
- 家計簿(かんたんなもの)
- 食事カロリー計算
ゲーム
- 三目並べ
- マインスイーパー
- インベーダゲーム(上から敵が攻撃してきて、下からの攻撃で撃ち落とすもの)
- RPG(簡単なもの、プログラミング言語によってはテキストストーリー方式)
調査・分析系
- キーワードネット検索、情報を一覧化
- 売上情報の読込、分析表示(売れているもの、売れなくなったもの等)
- データを読み込んで分析計算(やりたいことは各自の趣味や学業等から)
仕様にはよりますが、1000行から3000行程度のプログラムで実現できそうなものを列挙してみました。
Webアプリとデスクトップアプリは、どちら側でもできると思います。
この規模のものを自力で自分で考えながら悩んでつくりきってしまうのが、プログラミングを習得するための一番の近道なのだと考えています。
実際にはこれをクリアするためには、ここから先にのべるいくつかのポイントに直面するかもしれません。
ただ、クリアすることで、プログラミングを身につけたという自信にはつながると思っています。
開発のための技術理解(Web画面、データベース、機械学習等)
開発対象がきまれば、次の大きな壁が、開発する対象となるものに使用する技術です。
Webアプリを開発対象とするのであれば、単にプログラミング言語を知っているだけではつくれなくて、HTMLやCSSの知識が必要となってきますし、プログラムで処理した結果をどうやって画面に表示させるかの知識も必要となってきます。
Webのフレームワークを使うならその習得が必要となるし、CGIで作るならそもそもCGIってどういう仕組みで動いているのかを知る必要があります。
さらには、データベースに対してデータの登録、検索、更新、削除などの処理をする場合もあり、データベースを操作するための手順や言語(SQL)を覚える必要もでてきます。
このように、プログラミングはある特定の言語を覚えたからといってプログラムが完成するものでもなくて、開発する対象によっては、次に待ち受けるハードルが大きい場合があります。
難易度は高いですが、過去何人かで成功しているし、自分でもやっている方法はあります。
方法1)
その対象技術でプログラミングしてある書籍を探して購入して、参考にしながら、自分が作るプログラムで利用する技術を決める。
書籍とネットで調べながらつくりあげる。
方法2)
その対象技術でプログラミングしてある書籍を探して購入して、そのコーディングをすべて書き写す(自分のPCに打ち込む)
動作するまで頑張って動かしてみる。
(書籍は読みながら、できるだけ理解しつつ、わからなければ、そのまま打ち込んで動かすところまでもっていきます)
感触がつかめたら、自分がつくりたいプログラムを書籍とネット等で調べながらつくりあげる。
方法3)
作りたいプログラムに近いプログラムをネット、Github等でさがす。
参考にしながら、自分のプログラムをつくってみる。
このあたりまでくると、未経験者にはハードルが結構高いですが、クリアすれば、同じ技術をつかうものであれば作れるようになるし、他の技術をつかうものでも、その技術さえ知識として仕入れれば作れるようになります。
ようするに、その気になればプログラミングで稼げるということですね。
おすすめは、方法1でやってみて、進まないとおもったら、大変かもしれませんが、方法2に切りかえて、プログラムを打ち込んでください。
1つ打ち込んで動いたら、自分の作りたいものにもどってみれば、作れるようになっていると思います。
とにかく自分で手を動かしてくださいね、サンプルをダウンロードして動いた動いたとやっているだけでは、いつまでたってもプログラミングが上達しませんので。
開発につかうフレームワーク
上記でプログラミングするのにフレームワークが必要であれば、インストールから実施して動かしてみてください。
不要であれば、ここのステップは飛ばしてしまってもかまいません。
あくまでも、フレームワークをつかわなければいけなくなったときが、つまづく一つのポイントだということです。
フレームワークは、ネットで調べて学習するのは、すでにいくつもフレームワークを知っていて概念を類推できる方は別として、初心者には検索だけでの独学は難しいです。
有名なフレームワークで書籍がでているものは、購入して学習したほうが早いと思います。
そうではない場合は、あきらめるのでなければ、ソースコードを入手して、中身を見ながら解析するか、コミュニティに参加するか、開発者に直接聞くという手順になりますが、そのレベルであればここでアドバイスする必要はなさそうです。
初心者は、まずは書籍を探してみてください。
プログラムの考え方-どのようにつくるのか(設計)
プログラミングを学ぶというときに、ついつい抜けてしまうのが設計に関するスキルです。
最近は、プログラミング言語がいろいろ機能がつめこまれているためその習得に時間がかかるし、さらには上で述べたような開発するための各種の技術、フレームワークなどを習得する必要もあるので、設計部分がおろそかになってしまっています。
プログラミングはプログラミング、設計はSEの仕事と分けてしまっているのかもしれません。
しかし、よりよいプログラムをつくるためには、プログラムの構造をどのようにしたらいいかという見通しは必要になるし、そもそも、ソート、マージなどに加え、各種設計のパターンは覚えておいて損はありません。
ある程度プログラミングがわかってきたら、デザインパターンとアルゴリズム系の学習に取り組むと次のステップがみえてくるのではないでしょうか。
プログラムのリリース(提供方法、パッケージング等)
最後の締めですが、ここまで来たかたには、パッケージングなどの技術的な方法は、検索一発で完了する程度のことかもしれません。
ただし他の人への公開、さらには一般公開となると注意すべきことはたくさんあります。
・READMEはつけたか、著作権はどうしているか
・ソースコードを見せるようにするしない
・不特定多数の利用を想定したセキュリティレベルになっているかどうか
・Web系のセキュリティをしっかりつくりこんであるか
・ID/パスワードが埋め込みになっていないかとか(外部API利用や、メール送信を組み込んだ場合は特に注意)
このあたりは、簡単には書ききれないので公開先のルールなどをしっかり確認して対応してください。
最後に
プログラミングを学ぶには数多くのつまずきポイントが存在します。
ひとつひとつクリアしていくことが必要ですが、最善の対策はやはり、あきらめないことだとは思います。
何のためにプログラミングを学ぶのか?
プログラミングは現在、習得してしまえば稼げる可能性は極めて高いスキルの一つになるし、時間的にもそう習得に長くかかるものではありません。
今は需要が供給を圧倒的に上回っている状況ですので、ここでがんばるかどうかで、今はチャンスです。
でも、こうしてみるとやはり独学は結構難しいところもあります。
自分でやりたいんだけど、どうしたらいいかわからないというかたは、相談に応じていますのでお気軽にご連絡ください。
最後までお読みいただき、ありがとうございました。