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

GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

プログラミング初心者はどのように学ぶべきか談義について

いろんな見解があったほうが面白そうなんで、参戦してみる。

タケルンバ卿のBotの作成からあきみちさんのエントリに飛び火し、そこへまなめさんがTB打ってみたら呼ばれて飛び出たダンコーガイ状態になっているようです。

僕は弾さんと同じ意見

プロになるためには、確かに原理も知らなければならない。JavaPHPしか知らない「プログラマー」には、私だって「スイーツ(笑)」と頭につけたくなる。しかし、それは原理から学ばなければならないということを全く意味しない。むしろ原理は、動作感覚を会得してからの方が学びやすいのだ。

この感覚に全面的に同意します。

僕はJavaからプログラミングを学んだスイーツ(笑)プログラマです。弾さんが書いているような学習経路、つまりなんでもいいからプログラムが動くことを学び、そこからもうちょっとマシなプログラムってのはこういうもんだぞっていうのを某K氏に従事し学んできました。

やっぱプログラムが意図した形で動くと、楽しいじゃん。その喜びを覚えるほうが先だと思うんだよなー。原理や理論は後回しでいい。乱暴な比喩だけど、車の運転と同じようなもんじゃないかな。アクセル・ブレーキ・ハンドルの操作を体で学んで動作感覚を掴む。習ったところで、動かせるかは別問題。それと同じで、プログラミングは「習うより慣れよ」の精神が重要だと思います。

Javaスクールの危険とか

そんな私が学んできてずっと思っていたことは、私はC言語から学び、JavaPHPと進んできたが、今の人はいきなりJavaPHPから学ぶのである。構造化プログラミング言語からオブジェクト指向言語へと順を追うのではなく、いきなりオブジェクト指向言語を学ぶのだ。はっきりいって理解できるのか非常に疑問に思う。

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

まなめさんやあきみちさんと同様の疑問を、かのJoel先生もお持ちのようです。

Javaスクールは良いソフトウェアデザインをするための巧みさ、機敏さ、柔軟さを身につけられるように学生の頭を鍛えることにも失敗している(ここで言うデザインは、オブジェクト階層をいじって際限なくコードを書き換えたり、has-a対is-aのような似非「問題」に思い悩むOO「デザイン」とは違う)。デザイナには同時に複数の抽象レベルで考える訓練が必要であり、そのような思考は優れたソフトウェアアーキテクチャをデザインする上で不可欠なものなのだ。

Javaがそぎ落としてきたものに目を向けずしてなにするものぞ、といった所でしょうか。

こういった視点が無ければ、自分の作ったソフトウェアに構造的な欠陥を生み出すことになりかねないし、プログラマとしての成長は頭打ちになるんだぞという警鐘を鳴らしているんだと思います。

どちらも重要な視点ですが、僕は動かないソフトウェアに価値は無いと思っているので、はじめの一歩なんだから動作感覚ファーストでいいんじゃないかな、と思います。