プログラミング

【現役SEが考える】おすすめのプログラミング勉強法

たまには開発者っぽいお話でもしてみようと思い記事にしてみました。

キャステ

たまにはやらないとみんな忘れちゃうもんね!

実はこう見えて、仕事でプログラムを書くこともある現役SEです。
仕事や趣味でこれまで色んなプログラミング言語を扱ってきました。
一例を挙げると・・・

使用したプログラミング言語例
  • Java
  • JavaScript
  • Python
  • PHP
  • C#
  • C++ etc…

主にはこんなものです。マイナーなものも入れるともうちょい増えます。

クマリオ

ちなみにESDBはPHPで動いてます!

実際私が色々勉強して、私が大事だと思うことを今回はまとめてみました!

ソフトウェア開発の話です。ハードウェアは初心者です。

初心者はまず概念を知ることから

本記事では下記いずれかに当てはまれば初心者と定義します。
早い話、教材以外での実践経験があるか無いかです。

初心者の定義
  1. 初めてプログラミング言語を勉強する
  2. 仕事で納品物の作成未経験
  3. 趣味で自分の考えたシステム開発未経験

定義を終えた所で本題に移ります。
概念は「プログラミングで出来る事」の事だと考えればOKです。
ぱっと思いつくのはこんなもんでしょうか。

概念の例
  • 条件分岐
  • 繰り返し
  • 配列
  • オブジェクト etc…

上記に示したのはほんの一例です。
まずは概念を「知っている」レベルまで勉強することをおすすめします。
完全に理解する必要はこの段階ではありません。知っていればそれでOKです。

クマリオ

詳細なプログラムの書き方も丸暗記する必要はありません。

「詳細なプログラムの書き方まで覚えるんだ!」と意気込んで勉強し始めるとかなり高い確率で心が折れると思います。相当難易度が高いので。
資格試験とか学校の試験で出題されるなら話は別ですが、プログラムの書き方は初心者のうちに必要な勉強の本質ではないです。

キャステ

でも書き方覚えてなかったら書けないよ!

クマリオ

書くとき都度調べればOKじゃないかなって思ってる。

書き方はどうせ何回も書くうちに覚えます。
あと現代の開発環境は大概入力補完が用意されているので、実際のプログラムの一部を書けば後は大体勝手に補完してくれます。

概念を知るにおすすめの勉強方法と言語

概念を理解することが大事と言っても実際何をすれば良いの!と思われるんじゃないかと思います。
一番おすすめなのは初心者向けの書籍を購入し、一通り読んでみる事です。

キャステ

でも初心者向けの書籍ってめっちゃ分厚くない?

クマリオ

半分くらいは実際のプログラム例だし読まないといけない量は意外と少ないよ〜

書籍を利用する最も大きいメリットは、ある程度まとまった情報を労力無く入手できることです。
断片的な情報なら大体検索すれば手に入りますが、線として繋がったまとまった情報にする労力がかかる上に初心者ではまず無理です。

キャステ

書籍ダメ!って言われたら心折れちゃう?

クマリオ

鮮やかにポッキリ折れちゃう

次におすすめなのは「Progate」というプログラミング学習プラットフォームです。
こちらのメリットはスライドで勉強しながら、実際にプログラムを書くことが出来るという点です。
「Progate」は一部無料で学習できる上、月額980円で全コンテンツ学習可能という本当に採算が合うのか心配な優良コンテンツです!

クマリオ

一部初心者向けでない言語もあるので、そこだけ注意が必要です。

死ぬ気で1か月間勉強し倒すなら「Progate」も良い選択だと思います!
何かと心が折れやすい開発環境構築が必要がないのも嬉しいポイントです。

続いては最初はどの言語が良いのか?という話です。
個人的にはオブジェクト指向の言語であれば大体なんでも良いのかなと思います。
例を挙げるならこんな感じです。

オブジェクト指向の言語例
  • Java
  • Python
  • JavaScript
  • Ruby
  • C#
  • PHP etc…

また、スマホアプリ開発がしたいならKotlin(Android)やSwift(iOS)などもおすすめです。
どちらもオブジェクト指向の言語です。

クマリオ

ただし、SwiftやるならMacOS必須です。

オブジェクト指向は近年のプログラミングでは超重要な概念です。
簡単に説明できる代物ではないので説明は省略しますが、オブジェクト指向は最初のうちに理解しておかないと後々苦戦するので初心者のうちにぼんやりと理解しておくと良いと思っています。

概念を知ったらまずは何かシステムを作ってみよう

概念が掴めたら、早いうちに何でもいいのでシステムを作ってみます。
何かしらの成果物を作り上げる過程で、プログラミングスキルは大きく向上します。

プログラミングスキルを構成する要素は大きく下記の3つに分類できると思っています。

プログラミングスキル構成要素
  1. プログラムを書く力
    → プログラムを書けるか
  2. 処理フロー(ロジック)を考える力
    → 仕様を実際の処理に落とし込めるか
  3. プログラムを読み解く力
    → 既に書かれたプログラムから処理の意図が掴めるか

①と②は何かを作る段階で飛躍的に向上します。
何かを作る際に当然プログラムを書く必要がありますし、やりたいことの処理を考える必要があります。

③はチームでの開発、既存システムをいじる、過去の自分のプログラムを見返すなどで向上できます。

繰り返し書籍を読んでサンプルを書き写すという勉強だと上記の1がほんのり上がるだけなので、学習効率は非常に悪いです。

クマリオ

昔やった事ありますが、全く身にならなかった・・・

システムを作るというと難しそうに聞こえますが、正直何作ってもいいです。
例えば下記の様な物とか。

作るものの例
  • タイマー
  • TODOリスト
  • RSSリーダー etc…

何を作っても最初は沢山課題が見つかると思います。ほぼ全員がそうなんじゃないかと思います。
生まれた課題を一つ一つ解決していく事がスキル向上の近道なので、なにか作りながら必死に頭を捻りましょう!

何かを作り出す事が最高の教材です。

軸が出来れば他言語の習得難易度が下がる

複数のプログラミング言語を学びたい!と思っている方向けの話です。
そういう場合はまず自分の中で基軸になるプログラミング言語を一つ作ることをおすすめします。

ほぼ全てのプログラミング言語(高水準言語)の基本部分は非常に似通っているケースが多いです。
一つのプログラミング言語が自分の中の軸であれば、他の言語で習得が必要な項目が圧倒的に減ります。
性質が非常に似通っている場合は、新しい言語でいきなり何か作り始めるということも可能です。

ですので複数のプログラミング言語を学びたい場合は同時並行で学習するのではなく、まずは一つ自分の中で軸となるプログラミング言語を作る方が効率が良いです。

クマリオ

軸があっても同時並行は頭が混乱するのでおすすめはしないですが・・・

前述の通りESDBを作った際に使った言語はPHPです。
PHPは以前はほぼ使用経験がありませんでしたが、他の性質が似ている言語を使用した経験があったので書籍での勉強期間は非常に短く済みました。

【まとめ】プログラミングはあくまで手段

ここまで勉強方法をつらつら書いてきましたが、私はプログラミングスキルはあくまでシステムを作るための手段だと思っています。

最終的にプログラミングを勉強し、スキルを向上させることが目的になっても良いとは思います。
しかし、最初のうちからプログラミングの勉強が目的になると中々続きにくいんじゃないかなと思います。

勉強してて何かつまらないなと思ったら、その時点で何でも良いのでシステムを作っちゃいましょう!
楽しければ続けるも良し、合わなければ辞めるもよしです。
別にプログラム書けないと生きていけないことなんてないんです‹‹\(´ω` )/››

ではまた、ばいばいっ!