見出し画像

第2回:プログラミングの学習ステップ別で活用できるサービス・教材(入門編)

こんにちは。TechCommitの開発をしているひろポン(@HiroshiSano0711)です。

前回の連載では学習に入る前のステップについて解説しました。

今回は入門のステップについて解説します。

プログラミング入門といっても、何を学習すれば良いのか、どのように学習を進めていけば良いのか分かりづらいですよね。

TechCommitの学習者にも評判の良い教材やサービス、悩みを解決した方法などを聞いてみたので、初学者向けにまとめてみました!

同じポイントでつまづく方が非常に多いのでぜひ参考にしてみてください!

連載
・学習に入る前に
・入門  ←今回はここ
・実践
・応用

作りたいモノ・やりたいことを決めておく

ー職種や業界でプログラミング言語を絞る
プログラミング言語には、処理速度が速いC/C++や、統計解析に特化したR言語など、それぞれ得意分野があります。

そのため、「これを作るならこのプログラミング言語を選択した方が良い」となるので、プログラミング言語を選択する際は作るモノが大きな判断基準となります。

作るモノによっては決して選択されないプログラミング言語もありますし、業界や職種などによって作るモノの傾向が大きく変わります。

初学者はプログラミング言語から選択する傾向がありますが、目指す業界や職種が左右されるため、いろいろな情報に振り回されてしまいます。

ですので「どのプログラミング言語を選択するか?」より先に「どの道へ進むべきか?」や「何を作りたいか?」を決めて、業界や職種を選択した方が良いです。

それらが決まるだけで、学ぶプログラミング言語の候補をだいたい2~3つほどに自然と絞られます。

まだ決めていない方は、前回の記事を参考にして業界や職種などをまず決めておきましょう。

最初に学ぶプログラミング言語を決める

ー市場の傾向、案件の量、情報量などで判断して選択する
作りたいモノ・やりたいことが決まったら、学ぶプログラミング言語を1つに絞ります。

同じモノを作ることができるプログラミング言語同士の比較は、ある程度その言語を使いこなしてみないと違いを実感することが難しく、経験者でも悩むことが多いです。

現場では人材の確保のしやすさ、求められる要件などビジネス要素も入ってくるので総合的に判断して決める必要があるからです。

初学者は

・作りたいアプリケーションで他より多く採用されている
・案件の量が他より多い

などで選択することをおすすめします。

よく採用されているプログラミング言語ほど、ネット上に情報が多く学習しやすいと言えます。

将来性を考えると最近新しく開発されたプログラミング言語をつい選択したくなりますが、情報が少ないため問題が発生した場合は自身の実力で解決しないといけません。

はじめは実力で解決することは難しいので、そのアプリケーションを開発するならこのプログラミング言語がよく採用されている、という主流の言語を選択した方が無難です。

転職・就職を目指す方であれば、GreenのようなIT/Web業界向けの転職・求人サイトが活用できます。

職種や業界などで検索できたり、各社の使用技術が詳細に記載されています。

どうような企業がどういうモノを作っていて、どのプログラミング言語がよく採用しているのか参考にできます。

開発環境を構築しよう

ープログラムを実行できる状態にする
学ぶプログラミング言語が決まったら、そのプログラミング言語で書いたプログラムを実行できる環境(開発環境)を構築します。

ほとんどのPCは一般ユーザー向けに作られているので、開発者向けのソフトウェアやツールなどは購入時に含まれていません。

開発環境構築は主に必要なソフトウェアをインストールしていく作業になりますが、ソフトウェアの依存関係によってうまくいかない場合があります。

ーソフトウェアの依存関係に注意する
ソフトウェアはお互いに連携して動くものが多いです。

依存関係というのは具体的に

・Aのソフトウェアを動かすためには、Bのソフトウェアがインストールされている必要があること
・Aのソフトウェアの新しいバージョンを動かすためにはOSのバージョンが〇〇以上である必要があること

などの条件を指します。

この条件が守られないとエラーが発生したりしてうまく構築できません。

また、ソフトウェアは日々更新されていくので、古い情報だとうまく行かない可能性が高まります。

開発環境構築を行う場合は、直近1~2ヶ月以内に出版された書籍や公式に近いサイト(そのソフトウェア専用のサイトやGitHubのREADMEなど)など、できる限り最新で正確な情報を参考にした方が良いです。

ー開発環境構築には期限を設けよう
開発環境構築は、うまくいけば何事もなくあっさり短時間で終わりますが、うまくいかないときはベテランのエンジニアでも苦労する場合があります。

「3日かけてできなかったら一旦諦める」といった期限を設けた方が良いです。

開発環境構築で初学者がハマるポイントは、間違ってインストールしてしまったソフトウェアを削除してインストールし直す場合です。

どこのディレクトリに何のファイルが入っているかがまだわからないので、誤った操作で重要なファイルを削除してしまったりすると元に戻すことが難しいためです。

開発環境を構築する場合は、事前にPCのバックアップをとっておいて、いざというときは元に戻せるように備えておくと無難です。

ー開発環境はレンタル可能
どうしても難しい場合には開発環境をレンタルするという手段もあります。

必ず自身のPCに開発環境を構築しないと学習が始められないわけではありません。

AWS Cloud9といったサービスで開発環境をレンタルできます。

学習を始められない状態はモチベーションを著しく下げます。

自身のPCに構築することは一旦諦めてレンタルで済ませ、ある程度知識が身についてから再挑戦するのも1つの手です。

後でご紹介しますが、もともと開発環境を用意せずに学習できるProgateのようなサービスもありますので、そちらも検討されると良いでしょう。

プログラミングの基礎を学ぼう

ープログラミング言語の文法を学ぶ
まずは基本的な文法やルールから学びます。

プログラミング言語の文法を学ぶことは、英語を学ぶ時にアルファベットを学ぶようなものです。

文法やルールを知らないと、プログラムを読んだり書いたりすることが全くできません。

基本的な文法やルールを学ぶならProgateがおすすめです。

※ご紹介していくサービスは主にWeb開発に関するサービスではありますが(自身がWebエンジニアでかつTechCommitでもWeb開発を学んでいる方が多いため)、Web開発以外(組み込み開発、スマホアプリ開発など)の教材/サービスもご紹介したいので随時追記していきます。

スライドによる解説を読んだ後に即問題を解くという流れでテンポよく学習できます。

Progateは開発環境構築も不要なのですぐに始められるのも大きなメリットです。

文章だと長文を読むのが辛かったり操作の過程や流れがわかりづらいという方は、動画で学べるドットインストールがおすすめです。

様々なプログラミング言語やゲーム、Web、スマホアプリなど広い分野の講座があり、開発環境構築の講座もあるので構築したい方は挑戦してみても良いでしょう。

ーオブジェクト指向はコードを書きながら少しずつ理解を深めていく
変数や繰り返し処理(for文、while文など)、条件分岐(if文、switch文など)、メソッドを定義するくらいまでは理解できる人が多いです。

しかし「クラス」「インスタンス」「継承」などオブジェクト指向に入ってくると急に理解できなくなりハードルが上がったと感じるでしょう。

これは当然のことなので、今のステップで気にする必要はないです。

さまざまな捉え方がありますが、僕自身はオブジェクト指向とは

どこに何のプログラムをどのように書いてプログラミングを行えばソフトウェアの生産性があがるのかを突き詰めた考え方

といった捉え方をしています。

主にプログラムの設計に関連してくるので、プログラムを考えて書き、できたプログラムをよりよいものに改良するという経験なしではまず理解できないと考えています。
※オブジェクト指向は本来、上流工程にも適用されるもっと広い概念ですが、便宜上狭い意味で用いています。

設計理論、コーディング技法などを学び、経験を積んでいく上で少しずつ理解を深めていくのが一般的です。

初学者がオブジェクト指向を学ぶなら『オブジェクト指向でなぜつくるのか 第2版』の書籍がおすすめです。

クラス、インスタンスなどの目的や概念、役割などが比喩や例えではなく具体的に解説されています。

比喩/例えでオブジェクト指向を解説している教材が多いですが、それだと真に理解することは難しいので、比喩/例え無しで学ぶことが大事です。

ーコンピューターやプログラムの原理や仕組みを学ぶ
第1回の連載でご紹介した「基本情報技術者試験」の内容がベースになりますが、それ以外にも以下の書籍はコンピューターの基礎知識を補うのにおすすめです。

『コンピューターはなぜ動くのか』
コンピューターの原理や仕組みなどが学べるので、コンピューターに対する苦手意識がなくなっていきます。

『プログラムはなぜ動くのか 第2版』
プログラムの動作原理、メモリに関する知識など解説されていて、自分の書いたコードが裏側でどのように実行されているのかを学べます。

『基礎からきっちり覚える 機械語入門』
なぜそうなのか?というコンピューターに関する疑問に答えてくれていて理解が深まります。

『痛快!コンピューター学』
歴史的背景を元にコンピューターの基礎を学べます。

学習を進めるにつれて、コンピューターの歴史的背景や原理などを学んでいないと理解できない部分が多いことがわかります。

この先学んでいく内容も理解が早くなるので、並行して学んだり、わからなくなった時に参照する書籍としても活用できます。

サービスでは、SchooJMOOCなどの講座がおすすめです。

専門家が易しく解説してくれるのでわかりやすく、講義形式なので電車の移動中や隙間時間などでも学習できます。

ープログラミング言語の文法の他に学ぶべきこと
プログラミング言語の基本的な文法やルールを学ぶことは大前提です。

初学者がよく誤解することは、プログラミング言語の文法やルールなどの基礎を学ぶことがプログラミングを学ぶことだと思っていることです。

プログラミングができるようになるためには、文法やルール以外にも

・データ構造/アルゴリズム
・制御構造
・データ処理

などを学ぶ必要があります。

簡単なプログラムを書く練習をする

ー自身で考えて書く
このステップが最も重要です。

このステップを飛ばしてプログラミングを習得することは不可能だといっても過言ではないです。

多くの初学者は、自分で考えてプログラムを書く練習をする前に次のステップの学習を始めてしまいます。

具体的には

・静的なWebサイトが作れるようになる前にJavaScriptやWebフレームワークを使った動的なサイトの作り方を学ぼうとしてつまづく
・基礎である〇〇ができることが前提なのに、〇〇を飛ばして応用に入ってしまいつまづく

などが該当します。

教材通りに学習を進めていて

「さっぱり理解が進まず頭に入ってこない」
「スキルが身についた実感が全くない」

などの悩みを持つ方が多いですが、その主な原因は「プログラムを書く練習をしていないこと」が考えられます。

コンピューターは人間では考えられないほど細かく具体的に命令する必要があります。

プログラムを書く練習をしないと、コンピューターにどのような命令をすれば動くのかを学ぶことができないです。

プログラムを書けるようになるための近道は、たくさん書くことです。

もはや近道とは呼べないかもしれませんが、時間をかけて練習しないとできるようにならないです。

一番頭を使う大変なステップで時間もかかりますが、このステップを行うことで確実にゴールへ近づくことができます。

プログラムを書く練習をするならpaizaのレベルアップ問題集がおすすめできます。

問題を解いていくことで、要件に沿ったプログラムを書く練習が楽しくできます。

paizaにはスキルチェックというサービスもありますが、レベルアップ問題集の方は問題には制限時間がなく、何度でもチャレンジできるのでとっつきやすいです。

また、書籍やサービスなどの教材にも「演習問題」が用意されていることが多いので、飛ばさずにしっかり考えて解いてみることも良い練習になります。

ー論理的思考を練習する
制御構造を組み合わせて意図したようにプログラムの実行の流れを考えるためには、論理的思考を練習すると良いでしょう。

制御構造とはコンピュータープログラムでは

1. 記述した順番に命令を実行する順次構造
2. 条件によって実行する命令を分岐させる選択構造(条件分岐)
3. 同じ命令を繰り返し実行する反復構造(ループ、繰り返し)

の3つの制御構造を基本とする考え方が多いです。

論理的思考といっても広いですが、とくにMECE(漏れがなく、ダブりのない状態)を練習すると、プログラムのパターンや終了条件を考える場合などで役立ちます。

ーデータ処理を学ぶ
プログラミングでは、ユーザから送信されてきたデータやデータベースから取得したデータなどを整形して出力するという処理を主に行います。

データ処理を学ぶことで、プログラミング言語で用意されているメソッドの使い方や意味がわかったり、どのように機能を実現するのかのイメージがつかめます。

データ処理は、WebAPIを利用した機能を実装してみるのが1つの方法です。

楽天APIが無料で手軽に利用できるのでおすすめです。

取得した商品の一覧データを、一定の形式で画面に出力すると良いでしょう。

開発(ハンズオン)を通して学習する

ーフレームワークを学ぶ
プログラミング言語を学んで簡単なプログラムを読み書きしても、いったいこのプログラムはどこの何の処理を書いているのかわからず成果物のイメージができないでしょう。

実は1つのアプリケーションを自身で0から作ることはものすごく時間のかかる大変な作業で、実際の開発ではフレームワークというものをよく使います。

フレームワークというのは「骨組み」「枠組み」といった意味の用語ですが、開発で汎用的に使えるプログラムの部品があらかじめ用意されているものを指すことが多いです。

これまでやってきたプログラミング言語を学ぶことと、フレームワークを学ぶことは異なり、例えるなら

プログラミング言語を学ぶこと => 部品を作ること
フレームワークを学ぶこと => 部品同士を組み立てて作ること

に近いです。

プログラミング言語を学んで簡単なプログラムを書く練習は、自身が作りたいアプリケーション独自の処理を書く場合やコードを読み解く場合に活きてきます。

フレームワークだけ学んでも思い通りに実装することはできないので、両方学ぶ必要があります。

ー理解を深めて成果物を作成する
ハンズオン(体験学習)を通して学ぶべき主な理由は

・成果物を作成するため
・理解を深めるため

の2つです。

当然のことですが、実際に手を動かしてプログラムを書かないと成果物を作ることはできません。

また、プログラムは1行ずつ順番に追っていかないと理解が難しいため、手を動かして学習することで理解も深まります。

ー開発の流れを一通り経験する
まずはどのように開発を進めていくのか、各工程で何を行うのかなどを学び、開発の全体像を把握します。

全体像がわかると、いまどこの何を学んでいるのか整理できるようになります。

何がわからないのかを言語化しやすくなり、あとどこの何を学べば良いのかを自身で考えられるようになっていきます。

ただ、実際に学んでいくと開発の全体像は思った以上に大きいと感じるでしょう。

一度で全て理解することは難しいので、この段階ではわからないことがあったり、調べても理解できなそうな部分は飛ばしても構いません。

次の実践のステップで少しずつ知識を広げて理解を深めていけばOKです。

全体像を把握するなら「チュートリアル」の名がつくものや0から作ってみるような教材がおすすめです。

Web開発では、Railsチュートリアルが有名です。

Twitterのようなアプリケーションを、開発環境準備からGit、デプロイ、ユーザー登録、ログイン認証、投稿、ユーザーのフォロー機能、テストなど、Web開発の基本的な流れから機能実装まで一通り学べます。

初学者に必要なWeb開発の知識がふんだんに詰まっているため、Ruby以外の言語を学習している方にもおすすめできます。

全体の流れをつかめてきたら、次はいろいろなアプリケーションを作ってみます。

1つのアプリケーションを作成してみるだけだと、どうしても設計や実装に関する知識が偏ってしまい

得た知識や学んだ技術をどのように活用すればよいのか?
どのような知識や技術が重要なのか?

などを理解することが難しくなります。

いろいろなアプリケーションを作りながら学んでいくことで、「だから、フレームワークのこの機能はこんな風に使うんだ」「だからこのように実装するんだ」と、点と点だった知識がつながっていきます。

いろいろなアプリケーションを作りながら学ぶなら、Techpitがおすすめです。

SNSやマッチングアプリなどいろいろな種類のアプリケーションを作りながら学べます。

ある程度慣れてきたら、「この機能を実装したい場合にどのように設計すればよいのかがわからない」「こういうジャンルのアプリケーションはどのように作ればいいんだろう」とピンポイントな部分で詰まるようになります。

その場合は、専門性が強く実践的な教材が多いUdemyが活用できます。

自分の学びたい講座だけ購入できますし、セールもよく実施されているのでタイミングが良ければ安い費用で済ますことも可能です。

ここまで来れば、なんとなくこういう風に作っていくんだろうなあという実装のイメージがつかめてくるでしょう。

しかしまだ自身でオリジナルアプリケーションを作ることはできない状態で、教材通りに進めることはできるけど、あまり理解できていないという方もいます。

特に転職・就職を目指している多くの方が疑問に思うことは、「実務ではどれくらいの知識や技術を学ぶ必要があるのか」ではないでしょうか。

実務レベルの内容を体系的に学びたいならN予備校のプログラミングコースを活用されると良いです。

現場で必要な知識やスキルのレベルを元に作成されているコースなので、どこまで学習すれば良いのかイメージしやすいです。

コンピューターサイエンスやアルゴリズムの講座もあるので、体系的に学ぶことができるということで評判が良いです。

ご紹介したサービスは有料が多いですが、安い料金で利用できてTechCommit内でも評判の良いサービスばかりなので、ぜひ試しに利用してみてください!

次回予告
次回はオリジナルアプリケーションを作成する実践のステップについて解説します。

まとめ

作りたいもの・やりたいことを見つけておこう
ー職種や業界でプログラミング言語を絞る
初学者はプログラミング言語から選択する傾向がありますが、ゴールがぶれてしまうので、まずは作りたいもの・やりたいことを見つけてなりたい職種や行きたい業界を決めておいた方が良い。
それらが決まれば選ぶプログラミング言語は自然と2~3つに絞られる。

プログラミング言語を決めよう

ー市場の傾向、案件の量、情報量などで判断して選択する
同じモノを作ることができるプログラミング言語同士の比較は経験者でも難しい。
実際の現場ではビジネス的な要素も含めて総合的に判断したりする。
人気のプログラミング言語の方が情報がたくさんあるので、初学者にとって易しい。
情報の少ないプログラミング言語だと詰まったりした場合は実力で解決しないといけないため。

開発環境を構築しよう
ープログラムを実行できる状態にする
PCは一般ユーザー向けに作られているので、開発者向けのソフトウェアは追加でインストールが必要。

ーソフトウェアの依存関係に注意する
ソフトウェアは連動して動くものが多いので、前提となるソフトウェアが必要だったりソフトウェアのバージョンに条件があったりする。
これらの依存関係を守らないとうまく構築できない。

ー開発環境構築には期限を設けよう
開発環境構築は何事もなければあっさり終わりますが、うまくいかないとベテランのエンジニアでも苦労することもある。
どうしてもうまくいかないこともあるので、3日以内に構築できなかったら一旦諦めるなど期限を設けた方がよい。
学習を始められないという状態が続くとモチベーションが著しく下がる。

ー開発環境はレンタル可能
開発環境をレンタルできるサービスや、開発環境が不要の学習サービスもある。
必ずしも自身のPCに構築しないと学習が始められないわけではない。

プログラミングの基礎を学ぼう
ープログラミング言語の文法を学ぶ
まずは基本となる文法やルールなどを学ばないと、コードの読み書きが全くできない。

ーオブジェクト指向はコードを書きながら少しずつ理解を深めていく
クラスやインスタンスなど、オブジェクト指向に入ると難しいと感じますが、それは当然のこと。
オブジェクト指向は主にプログラムの設計に関連してくるので、プログラムの設計や、より良いコードに改良するなどの経験を経ないとコツをつかむのが難しい。
経験を積んでいく上で少しずつ理解を深めていくようにする。

ーコンピューターやプログラムの原理や仕組みを学ぶ
基本情報技術者試験の知識はベースになりますが、それ以外にも読んでおいた方が良い書籍がある。
より具体的なコンピューターの仕組みやプログラムの動作原理などを知っておくことで、後の学習の理解が早まる。

ープログラミング言語の文法の他に学ぶべきこと
プログラミング言語を学ぶこと=プログラミングを学ぶことではない。
データ構造/アルゴリズム、制御構造、データ処理なども学ぶ必要がある。

簡単なプログラムを考えて書く練習をしよう
ー自身で考えて書く
このステップが一番重要。
問題集などを解いたりして、時間をかけてできるように練習する過程がどうしても必要になる。

ー論理的思考を練習する
プログラムのパターンや条件、実行の流れなどは論理的思考が必要になってくる。
MECEを練習しておくと役立つことが多い。

ーデータ処理を学ぶ
実際の開発ではデータ処理をメイン。
ユーザーからの入力やDBから取得したデータなどを整形して出力するなどの処理を練習すると、メソッドの意味や使い方などがつかめてくる。

開発(ハンズオン)を通して学習しよう
ーフレームワークを学ぶ
開発では生産性の高いフレームワークが使われる。
プログラミング言語を学ぶこととフレームワークを学ぶことは異なっていて
プログラミング言語を学ぶ=部品を作る
フレームワークを学ぶ=部品同士を組み立てる
といった違いがある。

ー理解を深めて成果物を作成する
ハンズオンは成果物を作ったりプログラムへの理解を深めるために必要な学習方法。
手を動かして学ぶことを意識する。

ー開発の流れを一通り経験する
開発は思った以上に長い道のりになる。
まずは一通りの流れを経験することで、どのような工程で行うのがを学ぶ。
一度で全部を理解することは難しいので、最初は浅く広く学び、次に1つずつ理解を深めていくようにする。

TechCommitでは個人アプリ開発・学習仲間を募集中です。
今後もプログラミングの学習方法についてのお話を『プログラミングの学習情報マガジン』にまとめていきますので、よろしければフォローもぜひお願いします。

もし少しでも役に立った、面白いなと思ってくださったら、「スキ」や「フォロー」、「SNSシェア」で応援していただければ嬉しいです!

いいなと思ったら応援しよう!