初心者はプログラミングをどうやって学ぶと良いのだろうか?

2008/12/15-1

最近、初心者がプログラミングを学ぶ(もしくは、初心者にプログラミングを教える)にはどうすれば良いのかが良くわからなくなってきました。 ここで言う「学ぶ」や「教える」というのは、授業などではなくゆるいつながりで知人に教える事を想定しています。 (まあ、学校の授業でもいいのかも知れませんが。)

色々ある

Ruby,PHP,Perl,Java,JavaScriptあたりがWeb界隈で最近良く見るプログラミング言語だと思われます。 初心者にとっては、生でHTMLやCSSを書くことも「それ既にプログラミングでしょ」という感覚もあるようです。

さて、「全くの初心者だけど何でもいいからプログラミングを学びたい」という人は何から手をつければいいのでしょうか?

個人的にはC言語の方が入門者向けだと思う

個人的には、オブジェクト指向的な「難しい」ものを最初から理解できるのだろうか?というのがいつも疑問に思えます。 抽象化って凄く難しい事で、ゼロから書く手続き型プログラミングの方が「何をやってるのか?」を理解しやすいと思うのですよね。 C言語で「mainから書けば順番通りに動く」のと、JavaScriptなどで「状況がマッチすると呼び出される」というのでは、上から順番に流れていく手続き型の方が直感的だと感じています。

(C言語でコードを書くには抽象化が必要無いと言っているのではないのでご注意下さい。)

でも、つまらない

個人的には例えば「C言語を基礎からやってポインタがわかるぐらいになってから他の言語を」というのが好きです。 しかし、実際はこのような方法はあまり流行りません。 恐らく「勉強勉強感」が強すぎてつまらないからです。

まわりが高度過ぎる

私がプログラミングをやり始めたのが大学1年生の時で、大学のUNIXマシン(Sun OS/NewsOS/DecOS/IRIXなど)でプログラムを書いていました。 当たり前のようにC言語とX11を使ったコードを書いていました。 当時の私にはそれ以外の選択肢はありませんでした。

月日が経ち、いつしか大学でも授業によってはC言語ではなく、Javaから教えるようになり、さらにHTMLとJavaScriptから入る授業もあります。

C言語でチマチマ勉強する大きな欠点は、やる事が細かすぎていて「自分が作りたいものとの関係」が全くイメージできないのだと思います。 初心者がC言語で色々いじって作れるものは、今手元にある「凄い完成度が高いアプリケーション(OfficeとかSkypeとかetc)」に比べればゴミのようなものしか作れません。

昔の私が居た環境は、そもそもコマンドラインばかりで、ウィンドウを新しく出すのはブラウザのMoasicを出すか、emacsをコンソールじゃない状態で出す時だけで、それ以外は全部CUI(Character-based User Interface)でした。 そういう意味で、昔はprintfだけのプログラムを作るだけでも「イメージが湧いた」のだと思います。 しかし、簡単なCUIぽいプログラムを書いたとしても今は「何それ?ショボイ!!!」になるのだろうと思います。

そもそも「昔は。。。」系の懐古をしていても仕方がないですし、それはそれなんですけどね。

という意味で、今はある程度出来上がったものを組み合わせて「動くもの」を経験して満足感を得つつ、コードを書くとは何かという感覚が出来上がった後に基礎的な部分をやるんですかね。

Webプログラミングなのかなぁ

最近だと、既存ライブラリを使ったWebプログラミング系から入る人が増えている気がします。 やはり、そっち系が楽しいのですかね。

Google Maps APIとか、Twitterとか、Hatenaとか、その他Web APIを使うためのライブラリをダウンロードしてインストールして動作させたり、そもそもプリインストールされている環境でいじってみるのが良いのかも知れないですね。

GUIプログラミングはちょっと面倒だしなぁ

数年前は「手元で動くもの」系が初心者向けとして人気でした。 例えば、JavaでSwingを使ってちょっとしたオセロプログラミングを学期末に作ったりというのがありました。

でも、GUIプログラミングって結構面倒なんですよね。 色々おまじない的に覚えなければならないことが多いですし。

さらに、最近はMacユーザが増えてきていて「特定のGUIライブラリだけを使う」というのが結構面倒というのもありますね。

最後に

まあ、「今更何を言う」的な話題だとは思うんですよね。 授業としてプログラミングをやっている先生は結構いつもこのような悩みを抱えているように思えますし。

でも、この前タケルンバさんとかと飲んでいて「じゃあ、今度プログラミングの勉強手伝いますよ」と言ったら脱兎の如くかわされまくられたので、ちょっと反省してるんですよね。

いや、ちょっと「ブログネタ的」という発想を加えすぎて、「VMWareにUNIX系OS入れてApacheでも動かしながらWebプログラミング」とか「簡易自作Webサーバを作ってみましょうよ」とか言ったのも悪かったんですけどね。 無駄に基礎過ぎ!でしたね。 そっち系の話って、やり方を知るだけなので一度やると出来る事の幅が広がって楽しいのと、自分でプログラミング環境を整えるところからやると自信のつき方が違うと思うんですよね。

ただ、「エライ難しいとこ言われてる」というイメージがあるようで、大抵ドン引きされてる気がします。 一度やった事がある人とこういう会話をすると「そうそう!そうだよね!」となることも多いので、ここら辺にキャズムを感じる今日この頃です。

難しいですね。。。

関連

プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!