読者です 読者をやめる 読者になる 読者になる

プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

どんな本を読めばプログラムが作れるの?

プログラミング言語のことはよく知っているはずなのに、プログラムを書こうとすると悪戦苦闘する人はいないだろうか。
プログラミングの本を読んでもわからないところはないはずなのに、その知識を自分のプログラムに使おうとすると手が止まってしまう人はいないだろうか。
ネットで公開されているサンプルプログラムを十分に理解して、どの行が何をしているのかを誰かに説明することもできるのに、
真っ白なテキストエディタの画面に向かうと頭が回らなくなってしまう人はいないだろうか。

へー、面白そう。書店で探してみよっと。Kindle版出ないかなあ。

プログラミングの本っていろいろあるけど、プログラミング言語の説明と、ちょっとしたサンプルコードが載ってるだけってのが多い。または、既に他のプログラミング言語を知っていて、新たな言語を学ぶという前提になっているとか。

プログラミングが出来るようになる本ってのもあることはあるけど、最初に学ぼうって人は言語の本選んじゃうと思う。そもそもいっぱいあって、よく分からないしね。

プログラミング言語はただのツールなんだよね

あなただけではない。私はこれまで15年以上に渡ってプログラミングを教えてきたが、ほとんどの学生は多かれ少なかれ同じような悩みを抱えていた。
あなたに足りないのは、問題解決能力である。つまり、何か問題を与えられたときに、それを解決するプログラムを自分で書く能力だ。

プログラムを作るのに必要なのは「思考法」なんだ。

現実社会で人間が何か作業をする方法と、それをコンピュータプログラムで実現する方法は、かなり違う。いや、実は全然違うわけじゃなくて、人間がする時は無意識にやってることを一つ一つ曖昧さを排除して論理的なプログラミング言語に落とすのがプログラミングなんだ。この「思考法」を出来るかどうかがプログラミングのカギになる。

例えばバラバラなトランプをマークと数字順に並べ替えるとしよう。人間ならまずテーブルにぶちまけて、マークと数字を別の場所に並べていくかな。無作為に取り出した1枚をマークごとに分類するかも。いくつか方法があるけど、そんなに考えずに実行できるよね。

これをプログラムで実現するにはどうするか。まずはプログラム上でトランプをどう表現するか考える必要がある。そしてコンピュータはいっぺんにいくつかのカードを見渡す、といったことが苦手だ。せいぜい二枚のカードを比較することぐらいしかできない。比較した結果をどこにどう置くかも重要だ。「順番に並べられた山の中に、カードをしかるべき位置に挿入する」っていうのもコンピュータは苦手。真ん中にカードを挿入する時、その後ろを全部1つずつずらすってことをしなくちゃいけない。

プログラミング言語は、あくまでも道具なんだ。トンカチやカンナのようなもの。でもそれを使って本棚を作るには道具の使い方だけ分かっていても作れないよね。道具を使ってどう加工するかを知らないと、本棚は作れない。

たぶん順番が逆なんだよね。プログラムをどうやって作るかを学ぶのが先で、道具の使い方はやりながら覚えればいい、ってyasuhoは思う。

じゃあどんな本を読めばプログラムが作れるの?

ごめんね。最近そういう観点で本を探したことないので。この本がそれに答えてくれるかも!? :)

個人的には「習うより慣れろ」かな。もちろんよい教科書があった方がいいだろうけど、本があるないに関わらずプログラミングは実際に手を動かして覚えるものだと思う。

そういう意味では、プログラミングを覚える本は何でもいい気がする。できればサンプルコードや「やってみよう」みたいな記事が多い本がいいかな。で、本を片手に実際にプログラムを書いて動かしてみるんだ。最初はサンプルをそのまま写して実行してみるだけでもいい。それから好きなように改変してみよう。モチロン本に書いてあることがすぐに実行できる環境が必要だよ。JavaScriptなんかいいかも。

やってみると、いろんな疑問が湧いてくるはず。「こんなことをするには、どうしたらいいんだろう」「これはどんな意味があるのかな」プログラミング言語の説明を読むのは、それからでいい。というより、そうやって読んだ方が確実に意味を理解できるはず。

プログラマであっても、経験のないプログラミング言語を覚える時は同じ。まずはサンプルを動かす。言語リファレンスを読む。実際にやってみて初めて、その言語のクセや使い方が分かってくるもの。

あとは困った時に教えてくれる人が近くにいると完璧。いなければ掲示板とかかな。けっこう厳しい人も多いネットの掲示板も、実際にやってみて分からない人に対しては寛容な気がするよ。

じゃ、がんばってね :)