初めまして、DICEです。
タイトルからして胡散臭いですが帰らないで!!
さて、プログラミング学習を始めたは良いものの【全然覚えられない!】という人は多いのではないでしょか?
そして、プログラミング学習挫折の理由も【覚えられないから楽しくない】といったものが多い気がします。
私もプログラミングの【プ】すらわからない状況でしたが、ある勉強法を編み出してからスルスルとプログラミングが覚えられるようになりました!
また、考え方を変えることで更に効率的に…!
そんな私の勉強法や考え方をノウハウとしてSTEP1~STEP3までまとめていこうと思います。
ちなみにお金の無い学生時代だったので極力お金をかけない方法での勉強方法をまとめています。
慣れないながらもまとめてみましたのでぜひ一読してみてください!
大雑把な経歴
ノウハウ云々の前に少しばかり大雑把な経歴を…
大雑把な経歴
- 普通高校を卒業(偏差値40未満)
- 情報系専門学校へ進学
- 就活1社目で採用され今に至る
といった感じです。
注目すべきは【高校】!
そうです!頭が良い訳ではありません!
そんな私でも自分なりの勉強法を編み出し、考え方を変えプログラマーとして仕事するに至ります。
準備編
まずは準備です。
この段階で決めるべきことはこれです。
決めるべきこと
- 何を作りたいのか(大雑把で良い)
- 何言語を勉強するか
これだけです。
まず【何を作りたいか】を決めてください。
何を作りたいかが明確でないとアドバイスのしようがありません。
よくTwitterで
といった質問を見かけますが的確な回答が返ってきている例は少ないです。
ですが、
といった質問には回答が多くつきます。
【何を作りたいか】が明確になっているだけで多くの人から回答を得られるようになります。
ただ【何を作りたいか】は簡単に決まると思いますが、プログラミングを学び始めた人にとって最大の難関は【勉強する言語の選定】です。
プログラミング初心者の人は色々な人に質問すると思いますが、【Pythonが良いよ!】【Javaしかないでしょ!】と言うように学ぶべき候補がたくさん出てくることも少なくありません。
その候補たちの中から「あ、この言語良さそう!」と言うものが見つかれば良いですが、初心者がそこまで判断できることは稀です。
とりあえず候補の言語たちを調べてみてください。
検索キーワード例
- 【言語名】 開発例
- 【言語名】 できること
こんな感じで調べればある程度の情報は集まると思います。
それでもどれに決めればいいのか分からない場合は、回答してくれた方に気になったことを質問しましょう。
おすすめの言語を勉強するメリット・デメリットを聞いて、そこから判断しても遅くはありません。
学ぶべき言語の選定には特に時間をかけ、慎重に選びましょう。
STEP1
ここからはどのプログラミング言語を選んでも共通する勉強方法をお話しします。
全部覚えるという考えは捨てましょう
プログラミング初心者は何かと
「これを覚えなきゃ!あぁ、これも!あれも!」
と全て覚えようとしてしまいます。
この考えは捨てましょう。
プログラマーだってすべてを覚えているわけではありません。
実際に仕事をしていく過程で身についているだけであって、最初から全部覚えているわけではないわけです。
じゃあどうしているか?
Google検索と仲良く仕事をしています。
そうです。めっちゃ調べてます。
プログラマーはカンニングOKの職業なのでどんどんカンニングしてその場その場で分からないことを解消すれば良いのです。
もちろん、ただ調べるだけでなく調べたことは吸収して次へ活かしましょう。
勉強法のお話
プログラミングを勉強する上で一番重要なのは【手を動かすこと】です。
書籍や勉強サイトでは章末で【課題】を出し、今までの内容を理解できているかのテストをすることが多いです。
課題は目的の文字列や数値が出力できるかで正解・不正解を判断することが多いです。
それらの問題にどんどん挑戦しましょう!
ただし問題に挑戦するのは1回だけ!
初心者がやりがちなこと
課題の問題に正解できなかったら、その章をやり直す。
または、答えだけ見て満足する。
課題に挑戦して問題に正解できなかったらその章をやり直す
なんてことしていませんか?
ハッキリ言いましょう。
時間の無駄です。
正解できなかったら答えを見ましょう。
ここでポイント!
ポイント
答えを見たらなぜそうなるのかを考えよう。
書籍や勉強サイトには答えの内容を出力するためのプログラムが書かれていることがあります。
まずはそれを丸写ししましょう。
ただし、コピペではなく模写をしてください。
コピペでも意味が無いわけではありませんが、模写をした方がプログラムの書き方を理解しやすいです。
自分で書いていく過程で
「こういう書き方があるのか」
「ここをこうすれば良かったのか」
といった点に注目することになります。
この注目をするという行為が重要です。
何かに注目したということは、その課題をこなしていた時の自分にはなかった考えや書き方だったということです。
何かに注目したのであれば、その注目した部分を自分なりの辞書を作ってまとめましょう。
後々困った時に役に立つかもしれません。
入門書レベルであれば1周したら次のステップへ進みましょう。
理解度は70%~80%もあれば十二分です。
プログラミング初心者はこの初級編のあたりをウロウロすることが多いですが、入門書を1周できればある程度は理解できているので次のステップに進んでも問題ありません
どんどん壁に体当たりしていきましょう。
目標の設定方法
大きい目標を立てることは重要ですが、最初は小さい目標を少しずつこなして小さな達成感を積み重ねることを重視しましょう。
小さい目標でも達成知ることでモチベーションアップにつながるので、大きい目標はあくまでも最終目標としてその過程で小さな目標をどんどん作っていきましょう。
STEP2
ここからは入門書レベルを1周した前提でお話しします。
それも良いですが、応用編の書籍はあくまでも応用編なので新しい技術はそこまで手に入りません。
なので入門書レベルが終わったらフレームワーク系の勉強に進みましょう。
フレームワークとは
アプリケーションやソフトウェア開発の枠組み
フレームワークに関する学習法は大きく分けて2つあります。
フレームワークの学習法
- お金をかけて情報を得る
(書籍やオンラインスクールなど) - お金をかけず情報を得る
(公式サイトのチュートリアルやQiita,Zenn,noteの利用)
お金に余裕があればオンラインスクールを利用した方が絶対に良いです。
講師の良し悪しもありますが、一人で勉強するよりも圧倒的に勉強が捗ります。
私はお金に余裕は無いものの何とか学費を用意して専門学校に進学しました。
専門学校はオンラインスクールよりも専門的なことが学べるので、本当にお金に余裕があれば専門学校が一番良いです。
ただ、専門学校だけでは知識や技術には不足することが多くあります。
なので結果的に他に情報を得る方法が必要になります。
ただ、皆が皆お金に余裕があるわけではありません。
オンラインスクールは教えてもらえる内容の割には安すぎるくらいですが、専門学校に通ったことでほぼすっからかんの当時の私のようにお金が無い学生には生活に響くレベル……。
であればどうするか!
書籍かネット!
ただ、書籍も安いわけではありませんからね……。
知り合いから書籍を譲ってもらう機会があれば全力でもらいましょう。
多少古くても問題ありません!
とは言え、そんな機会もなかなか無いものです。
ということで今回はネットでの情報収集をおススメします。
独学で勉強する上で大切なことは
いかにお金をかけずに情報を得るか
です。
今回は例としてPythonのフレームワークであるDjangoを取り上げたいと思います。
フレームワーク公式チュートリアルを制覇しよう
Djangoのを勉強する上での最大の利点はドキュメントに日本語があることが挙げられます。
[st-card-ex url="https://docs.djangoproject.com/ja/3.2/intro/" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
フレームワークの公式ドキュメントの多くは英語のみです。
初めての場合英語のドキュメントと言うだけで気が引けてしまいますよね?
なので最初に手を付けるフレームワークは日本語のドキュメントが充実しているものを選びましょう。
ただし、「英語なんて余裕だぜ!」と言う人はこの限りではありません。
で、このDjangoですが日本人でもいろいろな人がDjangoの技術に関することを記事にしてくれています。
チュートリアルを制覇したら先人の知恵を借りて自分なりのデモアプリを作ってみてください。
その時点での自分の実力が分かります。
とは言えチュートリアルを制覇した時点で、そのフレームワークの基礎は固まっています。
後は公式ドキュメントとにらめっこをして、時には先人たちの知恵を借りながら技術を磨いていく日々です。
チュートリアル後の実力伸ばしにはQiitaとZennがオススメです。
個人的ではありますが、Zennの方が色々な技術者がいるので質の高い記事を読むことができる気がします。
STEP3
1つの言語をある程度使えるようになると別の言語にも興味が出てきたりします。
こんな声もありますが、それはごもっとも。
ですが、1つの言語を極めるだけでは現在のIT業界で生き抜いていくのはいずれ辛くなってきます。
Djangoの話の流れで例としてWeb系で話を進めましょう。
Djangoではフロント側とバック側の両方を実装できます。
では他の技術を向上させるために別のものと組み合わせてみましょう。
そうですね……。
Javascript系になりますがVue.jsとかどうでしょう?
Vue.jsもDjangoと同様に日本語の資料が揃っています。
Djangoをバックエンド開発に特化させ、Vue.jsをフロントエンドに特化させて開発してみましょう。
2種類の言語を使ってみる
ただ、いきなり組み合わせるのは無理なのでVue.jsの勉強をしましょう。
またまたチュートリアルを制覇しに行きましょう。
Vue.jsのチュートリアルはこのサイトが良いかもしれません。
[st-card-ex url="https://cr-vue.mio3io.com/tutorials/todo.html" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
Vue.jsの公式はこちらのサイトなのでVue.jsについてはこちらのサイトを見ましょう。
[st-card-ex url="https://jp.vuejs.org/v2/guide/index.html" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
Vue.jsのチュートリアルを制覇したらいよいよDjango REST frameworkの勉強です。
こちらのチュートリアルは英語なので、日本語訳されたチュートリアルを参考にしたほうが良いかもしれませんね。
[st-card-ex url="https://qiita.com/Gattaca/items/419e2a2cf23b6a9f1028" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
この辺の資料をただひたすらにネットで収集しまくって一つのアプリケーションを作ります。
一つのWebアプリケーションが完成したら別のアプリケーションを開発していきましょう。
ただひたすらと開発を繰り返して実力を積み重ねていきましょう。
そして、作ったものはポートフォリオサイトを作成して誰でも見れる環境にどんどん積み上げていきましょう。
番外編1:別言語を短期間で習得する方法
他の言語を勉強する時
と思うことも多いと思います。
が!
そうでもないです。
一回一つの言語を覚えたことでプログラミングの基礎だけはできています。
であれば他の言語にも応用していきましょう。
Pythonをやった後であればRubyが文法的にほぼ同じなので短期間での習得が望めます。
RubyであればRuby on Railsを習得できます。
これで2言語目が習得できますね。
その次はJavaをやってみましょう。
構文がPythonやRubyとは異なりますが、for文やif文は存在するので多少応用がききます。
少し難易度が上がりますが、Javaを習得できれば習得できる案件が一気に増えます。
Javaはオブジェクト指向言語の代表格になります。
現状よく使われているプログラミング言語はほぼオブジェクト指向言語になります。
短期間で習得する方法は似た構文の言語を狙って勉強をすることです。
足りない技術も出てきます。
足りない技術は今まで学んできた技術をパズルのように組み合わせて穴を埋めていきましょう。
番外編2:英語のドキュメントに挑戦しよう
プログラミング学習を進めていくと最新技術にも手を出したくなると思います。
そうなるとぶち当たる壁としては英語のドキュメントです。
日本訳の記事を探すのも良いですが、最新技術の日本語訳の記事なんて基本存在しません。
となれば英語の記事を読まざるを得ません。
英語が読める人であれば何ら問題はありませんが
という人にとっては苦行でしかないでしょう。
そこは上手いこと翻訳ツールを使用しましょう。
Deepl翻訳が便利なのでおすすめです。
[st-card-ex url="https://www.deepl.com/ja/translator" target="_blank" rel="nofollow" label="" name="" bgcolor="" color="" readmore=""]
番外編3:楽しみながら勉強しましょう
何はともあれ楽しみながら勉強しないと長続きはしません。
Javaであればマインクラフトのプラグインを開発すれば必然的にゲームの追加要素を作りながらプログラミングを学ぶことになります。
Modの開発でもJavaを使うのでプログラミングをしながら遊べる面ではマインクラフトのプラグインやModの開発がおすすめです。
因みに当サイトでもマインクラフトのプラグイン開発に関する記事を書いていますのでぜひご覧ください。
[st-card-ex url="https://www.dice-programming-etc.com/category/minecraft/spigot/" target="_blank" rel="nofollow" label="マイクラプラグインについて" name="" bgcolor="red" color="" readmore=""]
ただ、他の言語での開発をしている人にとってはマインクラフトのプラグイン開発で勉強するという手段は取れません。
そこでおすすめなのがDiscord Botの開発です。
ゲーム系のチャットツールではありますが、かなりの人たちが使用しているツールでもあります。
ただ、難点としてはDiscord Botの開発ドキュメントは基本的に英語のみです。
因みにDiscordのBot開発に対応している言語はこんな感じです。
Discord Bot開発可能言語
- Clojure
- Crystal
- Dart
- .Net
- Elixir
- Go
- Java
- Javascript
- Julia
- Kotlin
- Lua
- Nim
- PHP
- Python
- Ruby
- Rust
- Scala
- Swift
- Typescript
結構いろいろな言語で開発できるようですね。
DiscordのBotに関する記事も書いておりますので参考にして下さい。
[st-card-ex url="https://www.dice-programming-etc.com/category/discord/" target="_blank" rel="nofollow" label="Discord Botの開発について" name="" bgcolor="red" color="" readmore=""]
番外編4:各言語でできること
記事内でお話ししたPython・Ruby・Javaでできることの一例を書いておきます。
参考になれば幸いです。
Python
Pythonでできること(例)
- AIの開発
- 自動データ処理や分析などの業務効率化
- スクレイピング技術によるWEB上の画像データ・テキストデータの自動収集
- WEBサービス・WEBアプリケーション制作
- スマホアプリ(Android・iOS)開発
- デスクトップアプリ開発
- 組み込みアプリケーション開発
- ブロックチェーン技術の開発
Ruby
Rubyでできること(例)
- AIの開発
- 自動データ処理や分析などの業務効率化
- スクレイピング技術によるWEB上の画像データ・テキストデータの自動収集
- WEBサービス・WEBアプリケーション制作
- スマホアプリ(Android・iOS)開発
- デスクトップアプリ開発
- ゲーム開発
基本的にPythonに近いことはできます。
Java
Javaでできること(例)
- WEBサービス・WEBアプリケーション制作
- スマホアプリ(Android・iOS)開発
- デスクトップアプリ開発
- ゲーム開発
まとめ
今回は自分なりの勉強方法をまとめてみました。
私はSTEP1~STEP3を繰り返すことで「プログラミングを学ぶ」ということに慣れていき、どうすればプログラミング言語を短期間で習得するかを考えました。
私はC言語から入ったのですべてのプログラミング言語に応用ができたのが不幸中の幸いでした。
ただし!
初心者がC言語からやり始めるのはおすすめしません。
絶対と言っても良いほど挫折します。
なので無難にJavaからやり始めるのがおすすめです。
Pythonの方が構文的に初心者としてはやりやすいですが、いろいろな言語を習得するうえで後々役に立つのはJavaの方だと思います。
最終的には個人の判断にお任せしますが一番はやりやすい言語を楽しみながら勉強することです。
楽しむ心を忘れずにプログラミング学習を続けましょう!
ということで記事は以上になります!
少しでも参考になれば幸いです。
もし質問等がありましたらコメントや問い合わせフォーム・TwitterのDMやリプライでご連絡ください。