「プログラミング能力とは」によってわかるプログラミングとは

めっさ亀レスですが。

$id を $name に変えるなどして、indexをチョチョイといじればなんとかなると思っていた。

http://lovecall.14.dtiblog.com/blog-entry-39.html

この一文にべにぢょの成長を感じた。

昔だったら絶対思わなかった感覚だろう。

http://d.hatena.ne.jp/maname/20080706

「5*2はいくつですか」
とほとんどの人は10と答えると思いますが、「5*2=10」が成り立つのは「5+5=10」と「a*2=a+a」が成り立つからです。「5*2=5+5=10」ね。
でも、「5+5=10」が成り立たず、「5+5=0」という世界だとどうでしょう。「5*2=5+5=0」ですから同じ計算でも答えが違います。

でも「5+5=0」になる世界なんて、私たちのすぐ側に転がっています。10進法の世界では「5+5=10」ですが、この計算の一桁目を見れば「5+5=0」です。単に私たちが気づかないだけで、気づかなくても困らない。

論理とは、2つの要素からなります
1.前提(仮定、知識)
2.ルール(演算、述語論理)
数学だと前提が「1,2,3」という数字、ルールが「+*」等の演算子となります。先ほどの例だと「5+5=10」と「a*2=a+a」などがルールですね。

プログラミングをする上では、前提も、ルールも、その多くが自分で決めることが出来ます。低級であろうと高級であろうとそれは変わりません。関数というのはこれこれを入力したらこれこれが出力されるというルールに他なりませんし、変数の値がいくつだと何を表しているかというのは前提ですよね。

ライブラリやフレームワークを用いるということは、相手の前提とルールに乗っかることでもあります。つまり、ライブラリを使うということは、相手のルールに縛られてしまうということでもあります。だからライブラリを用いるときは、そのルールと矛盾しない、アプリケーションを作るために必要な追加ルールを考え出さなきゃなりません。そして、その追加ルールを足すことでアプリケーションがホントに作れるのかを頭の中で予想できる必要もあります。

人のプログラムを読んで改良するということも同じです。ただその前提やルールが完全に判るとは限りません。バグもあって仕様書に書かれているルール通りに動かないかもしれないし、仕様書がそもそもないこともあり得ます。ルールを推測することも必要になる場面もあります。

ルールを知り、ルールを操れること、これがプログラミング能力なのかなぁと最近思っています。


べにぢょさんの話に戻すけど、この話はWebアプリケーションのルールを知ることで、どう操れば問題を解決できるのかの策が見えるようになってきたということですよね。

$id を $name に変えるなどして、indexをチョチョイといじればなんとかなると思っていた。

http://lovecall.14.dtiblog.com/blog-entry-39.html

そういう感覚を得ることがプログラミング能力だと思う。

GoTheさんの話も同じく、ルールの組み合わせできちんと動くのかをシュミレートするという話。

「いける」と思った数×「やべぇ」と焦った数=プログラミング能力(「できるようになった」数)

「いける」と思った数だけプログラミングは上達する。 - GoTheDistance

おまけ

Prologってプログラム言語があるけれど、あれは前提とルールしかない言語だよね。だからあれが純粋なプログラム言語という気がします。ただしルールが厳密すぎて出来ることが偏りすぎるのが難点だけど。