「プログラミングの勉強したいんですけど、何からしたらいいですか?」
よくある質問
エンジニアをしてるとたまにこのような質問を受ける。
結論から言うと「知らん」だが、最近使ってる答え方を書いておく。
要点としては3つある。
- 学習目的
- 勉強方法
- プログラム言語
学習目的
学習者からこの質問を受けて、こう答えるエンジニアもいるだろう。
「目的は何?」
僕から言わせてもらうと、学習者は明確な目的など持っていない事が多い。
なぜなら、「ITで何が出来るのか。そもそもITとは何なのか。」が分かってないからである。
まず、IT分野にはいくつかある。
厳密ではないが、以下のように分かれる。
- インフラ系
- ネットワークやセキュリティ、サーバ運用など
- 日常生活でいう道路や水道やガスのような部分
- ハードウェア系
- 機械への組み込み
- 今話題のIoTやドローンはここに分類される
- ソフトウェア系
- Web系
- ゲーム系
- その他
さて、あなたはこの中で何がやりたい?
それによって答えは変わってくる。
僕はチャットアプリやSNSなど「Web系」に興味があったので、その道に進んだ。
友達にはゲームが好きで「ゲーム系」に進んだ人もいる。
このように「何が出来るのかを知り、そのためには何系をすれば良いのか」と考える必要がある。
勉強方法
次に「プログラミングの勉強ってどうしたらいいですが」についてだが、
勉強方法は、人によって様々である。
理論からしっかり勉強したい人もいれば、
人から聞いて耳で勉強する人もいれば、
手当たり次第に問題を解いていく人もいる。
このように、人によって違うため、違う勉強法を教えても長続きしない。
長続きさせるためには、適した勉強法を教える事が大切だ。
理論から勉強したい
理論から勉強したいのであれば、「基本情報技術者試験」を勧める。
ITの基礎的な部分がまとまっていて、アルゴリズムからネットワークの仕組み、情報戦略など包括的に勉強するには持って来いである。
勉強の分野は、大きく分けると3分類に分けられている。
人から聞いて耳で勉強したい
人から聞いて耳で勉強したいのであれば「無料カンファレンスや無料勉強会」を勧める。
「無料」というのは重要だ。
無料はハードルを一気に下げてくれる。
都内では毎日のように勉強会が開催されている。
地方は回数が少ないが、それでも勉強会は開催されている。
とりあえず気になるところ数箇所に顔を出して、どういう話をしているのか聞き、興味が沸けばそれを勉強してみるといい。
どの勉強会に参加すればよいのか分からない場合は、界隈のコミュニティで最大派閥の勉強会に顔を出せば、界隈の雰囲気が掴めてよいかと思う。
(例えば、「Pythonの勉強会よりJavaの勉強会の方が楽しかった」であればJavaを勉強してみると良いだろう)
手当たり次第に問題を解きたい
手当たり次第に問題を解きたいのであれば、少し保留とする。
というのも、次の「プログラム言語」を見せてみないと分からないからである。
プログラム言語
ここまで読んでみて、初心者が思う事はこうだろう。
「めんどくさ」
そうだと思う。僕自身も書いていて面倒くさい。
初心者のプログラム言語選びというのは、それほど面倒くさい事なのだ。
逆に言うと「これだけ面倒臭い事を数秒で考えて回答している」という事だけでも覚えて帰ってほしい。
さて、プログラム言語だが、これも「学習目的」に起因する部分がある。
例えば、このような感じ。
- ゲームを作りたいのであれば、処理速度を考慮するため
C++
- 簡単にWebサイトを作りたいのであれば、Wordpressも扱える
PHP
- 機械学習を考慮したサービスを作りたいのであれば
Python
- 30億のデバイスで動くようにしたいのであれば
Java
ちなみに、データベースを触るのであればSQL
は必須であるし、
Webページを触るのであればHTML
は必須である。
最後に、百聞は一見に如かずという事で、様々な言語で書いたFizzBuzzのプログラムを見てほしい。
これを見て「この言語分かりやすい」「この言語面倒くさそう」などの感情を持つ事が出来れば、分かりやすい言語を選択するのをおすすめする。
(僕が書ける言語に限定したため、Java
,Ruby
,Python
,Go
の4言語のみ紹介する)
Java
import java.util.ArrayList; import java.util.List; public class FizzBuzz { public static void main(String[] args) { int start = 1; int end = 100; List<String> fizzBuzz = new ArrayList<>(); for (int i = start; i < end; i++) { String str = ""; if (i % 3 == 0) { str += "Fizz"; } if (i % 5 == 0) { str += "Buzz"; } if (str == "") { str = String.valueOf(i); } fizzBuzz.add(str); } System.out.println(fizzBuzz); } }
Ruby
class FizzBuzz def self.fizzBuzz start = 1 endx = 100 fizzBuzz = [] for i in start..endx do str = '' if i % 3 == 0 then str += 'Fizz' end if i % 5 == 0 then str += 'Buzz' end if str == '' str = i end fizzBuzz.push(str) end p fizzBuzz end end FizzBuzz.fizzBuzz
Python
class FizzBuzz: start = 1 end = 100 fizzBuzz = [] for i in range(start, end): str = '' if i % 3 == 0: str += 'Fizz' if i % 5 == 0: str += 'Buzz' if str == '': str = i fizzBuzz.append(str) print (fizzBuzz)
Go
package main import ( "log" "strconv" ) func main(){ var start int = 1 var end int = 100 var fizzBuzz []string for i := start; i < end; i++ { var str string = "" if i % 3 == 0 { str += "Fizz" } if i % 5 == 0 { str += "Buzz" } if str == "" { str = strconv.Itoa(i) } fizzBuzz = append(fizzBuzz, str) } log.Println(fizzBuzz) }