株式会社システムインテグレータ 代表取締役社長 梅田 弘之
(Twitter:@umedano)
「勉強がわからない」の前に「勉強の仕方がわからない」
スポーツにしろ英語にしろ、何かを初めて学ぶ人は、「勉強がわからない」の前に「勉強の仕方がわからない」ものです。どうすれば最も効率的にプログラミングスキルが身につくでしょうか。先輩たちは「近道はない」「銀の玉はない」などと突き放すことを言いそうですが、自分だって最初は同じだったはずです。そこで今回はプログラミングの学習法について取り上げてみましょう。
プログラミングの勉強は英語の勉強と一緒
同じ”言語”ということで英語に置き換えて考えてみましょうか。英単語を覚えることは、メソッドを覚えること。英文法(グラマー)を理解することは、プログラムの文法をマスターすることに相当します。そしてリーディングは他人が書いたコードを読解すること、ライティングはコードを書くことですね。英会話はちょっと苦しいのですが、わかりやすくコミュニケーションを取るには会話の組み立てが必要で、それはアルゴリズムということになります。
英語 |
プログラミング |
単語を覚える |
メソッドを覚える |
英文法を理解する |
プログラムの文法をマスターする |
リーディング |
プログラムコードを読み解く |
ライティング |
プログラムを書く |
英会話 |
アルゴリズム |
表:英語の勉強とプログラミングの勉強は似ている
ということは、英語力の上達方法を当てはめればプログラミングの勉強方法がわかりそうですね。あれ、ところで英語の勉強方法ってどうすればいいんでしたっけ。”英語の勉強法”でググると山のようにいろいろな方法が出てきて、むしろ英語の方が難しそう。なんだかせっかく英語に置き換えたのに、全く無意味な表作ってしまったように思えてきました。アルゴリズムをきちんと組み立てないとプログラミングでもこうした無駄なコードを書いてしまいますね。
プログラミングの勉強法(初心者編)
気を取り直して、”英語”は忘れて、プログラミングの学習法に戻りましょう。まずは、どのような学習方法があるかをリストアップしてみます。
①プログラミング教室に入る。プログラミング研修を受ける。
②誰かに教えてもらう。
③プログラミングの本を買って、それに沿ってやってみる。
④ネットで検索して、良さそうなサイトを見つけて勉強する。
初めてスキーをするときにスキースクール入るのが楽ちんなように、①のプログラミング教室やオンラインスクールで学ぶのは王道でしょう。でも、お金も時間もかかるのでたぶんこのブログを読んでいる人の求めている答えではないのでしょうね。
②の誰かに教えてもらうってのもいいのですが、そんなに都合よくプログラミングのできる彼氏(彼女)が身近にいるわけはありません。勝手に恋人前提にしていますが、親切な先輩がいたとしても初回くらいはいいですが、何回もとなるとこっちが気が引けてしまいます。
そうすると、やはり本かネットで勉強するしかないですね。ネットは情報がふんだんにあるのですが、筋道を立てて学ぶならやはり本の方が良いでしょう。ということで、一番オススメは③の本を買って学ぶでした。
なんだか、当たり前の結論になってしまってブーイングが出そう…。なので、どんな本を選ぶかまで掘り下げてみましょう。ここは2つのタイプに分かれます。
タイプA
プログラミングの前に、プログラミングの仕組みやアルゴリズム、データについて書いてある本で基礎を学ぶ。基礎がわかった上でプログラミングの本で勉強した方が上達が早い。
タイプB
最初に仕組みを理解しようとすると楽しくないので続かないかも。まずはわからないなりにも書かれた通りにプログラミングして動く喜びを味わおう。やっていくうちに自然と基礎も理解できてゆく。
どちらのタイプも「いきなり難しい本を買ってしまうと挫折する」という意見は一致しているのですが、果たしてどちらがいいでしょう。
初めてのスキーに例えてみましょう。タイプAは、リフトに乗る前に2時間くらい自力で登ったり滑ったりして基礎を学んでからリフトに乗るスタイル。タイプBは、まず緩やかな斜面のリフトに乗って、長い距離を降りながら滑り方を身につけるスタイルですね。そして、難しい本を買うケースは、いきなり頂上に行って泣きそうになるスタイルです(これも結構見かけます)。
もう1つ、料理の例でも考えてみましょう。タイプAは料理する前に、油の引き方や調味料の入れる手順、野菜の切り方などの基礎を勉強して、その上で簡単な料理を作ってみる。タイプBは、まずは簡単な料理をクックパッドに書いてある手順通りに作ってみるという感じですね。
こう考えると、タイプAもBもどちらも正解ですね。あとは自分はどっちが合っているかで選べばいいでしょう。ちなみに私はタイプBです。
料理におけるアルゴリズムとデータ 実は料理とアルゴリズムは密接な関係があります。クックパッド(実は有料会員です^^;)を見ると、料理の手順と材料・調味料にわけて記述されていますが、この料理の手順がアルゴリズムで材料・調味料がデータです。 クックパッドの人気が高いのは、たとえ野菜炒めのような簡単そうに見える料理でも、豚肉に下味を付けておく、豚肉を炒めてから別皿にとっておき最後に入れて炒める、火の通りにくい人参やピーマンを先に炒める、などの細かな手順がきちんと書いてあるところです。 この通りに作れば、完璧に美味しい料理が手際よくできます。そして、いろいろな料理を作っていくうちに共通する手順(アルゴリズム)がだんだんわかってきます。調味料の”さしすせそ”、包丁の”ざく切り”や”千切り”なんかも共通アルゴリズムですね。
|
プログラミングの勉強法(初級・中級者編)
今回の本題はこちらです。本などでプログラミング初歩を学んだあと、もっと上達するにはどうしたらいいでしょうか。「新入社員のKさん(美人です)がプログラミングを上達する方法の相談に来ました。さて、どうアドバイスする?」という設定で、前回(vol.2)の若手3人に意見を聞いてみました(この設定の方が真剣に答えてくれます)。
Y君(プログラミング体育会系)
「たくさん読む、たくさん書く。悩んで手が止まるより、書いて消してを繰り返すべし」
梅田
(こいつが言うと、千本ノックのイメージだなぁ…)
Y君
「書くと言っても何を書いたらいいかわからないというなら、車輪の再発明になるかも知れないけど、例えばCならSTLにあるものを自分でイチから書いてみると勉強になる。リストの構造やMapの構造などが理解できる。」
梅田
「その次の段階は?」
Y君
「有名どころのデザインパターンがアルゴリズムの勉強になる。自分も昔、Techscoreにあるデザインパターンでよく勉強した。いろいろなデザインパターンを見て、理解して、使ってみて、自分でも作ってみるとアルゴリズムの引き出しが増えてプログラミングに強くなる」
A君(Y君と真逆の癒し系プログラマー)
「手を動かして書いてみることかなぁ」
梅田
(あれ、Y君と同じだ!)
A君
「Webで調べるのもいいけど、サイトの情報は部分的なのでやっぱり最初は本の方が理解しやすいと思います。」
梅田
「その他は?」
A君
「プログラミングコードのレビューは、こんな書き方があるんだって勉強になると思います。わからない書き方があったときに、ちゃんと調べてみるってのが大事です」
K君(気配りもできる独立独歩プログラマー)
「あ、それインターンシップでもよく聞かれます。まずは、どんなものを作りたいか決めることでしょうか。ホームページを作るのか、携帯アプリをつくるのか、など作るものによって、どの言語を選ぶべきかが変わってきます。」
K君
「Twitteみたいなものを作るとか、身近にある題材を選ぶと飽きないでいいかも。そうやって1つやるだけでも、プログラミングに対するエッセンスが付くので、言語が変わっても応用できるようになります。」
梅田
「その他は?」
K君
「あとは資格試験の勉強もいいかも。資格を取るのはモチベーションも上がりますし。それと、やはりAtCoderのようなプログラミングコンテストに参加すると力が付きます」
梅田
(へぇ〜、まさかこいつから資格試験が出て来るとは思わなかった…) [RELATED_POSTS]
プログラミングの勉強法(まとめ)
料理は作るべし、スキーは滑るべし。そしてプログラミングは書くべしということですね。そいういえば英語もリーディングだけでなくたくさん聞いて会話することが上達の近道でした(ここで無理やり英語を持ってきて冒頭の失敗をごまかす)。
では、上記の3人に私の意見も加えてまとめてみましょう。
①本を1冊やってみる
②短期集中で勉強する(だらだらやるより6ヶ月夢中にやると上達が早い)
③テーマを決めてプログラムを書いてみる
④テーマは、関心のある身近な(好きな)ものでもいいし、ライブラリやデザインパターンならアルゴリズムも一緒に勉強できる。
⑤人のコードを見て学ぶ機会を増やす。その際に分からない書き方に出会ったら、都度調べて自分の引き出しに入れる。
⑥ペアプロをやらしてもらう。
⑦プログラミングの基礎知識が付く試験勉強を活用する
⑧Qiitaのようなサイトに自分でも投稿する(Give and Takeの精神を持って)
⑨ブログなどで発信してゆく
⑩AtCoderやpaizaのようなプログラミングコンテストにチャレンジする
以上です。みなさん、プログラミングの面白さ、楽しさを広めて行きましょうね。
- カテゴリ:
- キーワード: