Tapestry The Fabric weaver
Think, Try, Tell it!
自分のプログラミング勉強法はどうだったか
404 Blog Not Found -- アマグラマーのすすめ - 目次
とか,
IT戦記 -- 勉強が出来ない奴はプログラマになれ!(バカだからできる勉強法)
を見て自分で,自分のプログラミング勉強法は,どうだったかと考えてみた.

もともと,工作とかが好きだった.

プログラミングというものが「ある」ことを知ったのは,BASICしか乗ってない,恐ろしく初期のコンピュータをさわってから.そのころから,プログラミングを意識していたと思う.

で,その,コンピュータを処分してしまってしばらく,電子工作で,簡単なプログラミングできるロボットを作って(そういうキットがあったのです),それに色々やらせたり,カルネージハートというロボットを組み立てて,プログラミングしてで,戦わせるという,なんともマニアックなゲームで遊んだり.

そして,本格的な自分のパソコンを手に入れたのが,大体,大学入学前か後くらい.Macしかも,Mac OS 9なので,プログラミングやりたくても,なかなか,難しかった.色々調べて,とりあえず,AppleScriptを勉強した.で,作ったのが,アイテムが放物線を描きながらゴミ箱に放られるスクリプトとか,フォルダを等間隔に並べるスクリプトとか.で,だんだん,これでは飽き足らなくなって,Pythonに手を出して挫折し,Macintosh Programer's Workshop(MPW)に手を出して,参考書片手にCの勉強をした.

AppleScriptで,簡単にできることを,なんでCで出来ないんだってことを疑問に思っても,よかったんはずなんだけど,異世界すぎてただ,サンプルプログラムを実行したり,簡単な演習を解けただけで,楽しかった記憶がある.

で,気がつけば,大学の演習が,ものすごく物足りないものになってしまっていて,逆に,大学の演習で出される問題のバグを指摘したりしてた.

それでも,ちょっとした言語を作る演習とかには,刺激を受けて,
Schemeに手を出したり,Ruby, Python, Haskellやったり,

この辺りくらいで,自分の限界を感じ始めていたんだけど,

思えば,ここまで,出来たのは,工作,つまり物を作るおもしろさを知ってたからのような気がする.自分の作ったものが動く.みんなにすごいと褒められる.この楽しさ知ってしまうと,なかなか,諦められるものじゃない.

だから,プログラミングをやるにあたって,僕から言えることは,

まずは,ものを作るおもしろさを知れ!

なのかもしれない.
プログラミング言語学習 必要を感じるまで学ばない?
404 Blog Not Found -- 私の言語遅延学習法 - 三つのルール+1

これ読んで,一つだけ,違和感を感じた.


必要を感じるまで学ばない
私の場合、長らく「プログラマー」としてより「ネットワークエンジニア」としての仕事が長かったため、ある言語を学ぶきっかけは、「システム直して」というものが多かったのです。そこでは実にさまざまな言語で環境が構築してあって、それを解析するのにその言語の知識が必要となりました。

そうなってから学ぶと、なにしろ「いつまでに直せ」という締め切りがありますから、いやでも学びます。スカウターの数値が跳ね上がるのです。


ここなんですが,必要を感じてからでは遅いような気がした.
で,なんでだろと思って,


基礎をしっかり抑えておく
あるコンピューター言語を学ぶ、というのは、ある意味この応用編に過ぎないという見方も出来ます。私が scheme → C/Assembly Language という、Computer Science の古典的カリキュラムを支持する理由がそれなのです。世界は Church と Turing の間にある。この両極端を最初にしっかり学んでおけば、たいていのコンピューター言語はこの間のどこかに収まっているのですから怖くないのです。



を読んで,なっとくした.「基礎ができてる人」の学び方なんですね.必要になってから,基礎からは遅すぎると思う.

問題は,大学では情報系でさえ,「プログラミング言語の学習」は必要ではないことなんですね(しかも,研究室に配属されてからも).
プログラミングの演習も,やろうと思えば,他の人のソースをそのまま,コピー&ペーストできてしまう.すでに,あるプログラムを使って実験できてしまう.つまり,人によっては,4年間,もしくは,院まで行くなら6年間,基礎も勉強せずに,終わってしまう.

で,僕が知りたいのは「必要でない状態」で,いかに「プログラミング言語の学習の基礎」を教えるか/学ぶかなんですが.それに答えてくれるものは,何かないだろうか?

一方で,僕も述べたように,プログラミングなんかやらなくても,どうにかなってる人が沢山いることも事実.そうなると,学ぶためのコストを考えると「必要になってから」が正しいことになる.

しかし,
教育機関にも問題
でも,述べたけど,やっぱり,疑問を感じてしまう.
ソフトウェア開発能力の応用
ソフトウェア開発能力(プログラミング能力)って,考え方という面で,様々なところに役に立つのではないかと思う.

これは,具体的すぎて,言いたいことが,ぼけてしまうかもしれないが,
UMLは,ビジネスモデルにも利用されたりする.

僕が言いたいのは,コンパイルの仕方がどうだとか,デバッグツール,OSの知識とか,細かいことではなく,考え方とかデザインとかである.

例えば,DRY(Don't Repeat Yourself),Design Pattern, TDD(Test Driven Development),その他,もろもろとか,プログラマの三大美徳とか.

書いていて,思い出したが,

Matzにっき -- ソフトウェア開発における初心者

で言っていた,「抽象化して考える能力」.非常に大事なのではないかと考える.
教育機関にも問題


Matzにっき -- ソフトウェア開発における初心者
とはいえ、最大の原因はプログラマにはないのではないか。 間違っているのはプログラマじゃない、社会が間違っているのだ。



限定して言えば,すべてのとは言わない(知らないので言えない)が,教育機関にも,問題があるような気がする.

PHPではないが,何かと言えばJavaなのである.教育者でさえも,C/C++等のより低級な言語を使うことに,抵抗があるように感じる(ちなみに,聞いた話では,Cしか使えない人と,二極に分かれているらしい).

さらに,悪いことには,Javaでどうにかなってしまう,ほとんど,まったく,プログラミングをせずに,どうにかなってしまうケースも散見される.
こうなると,Javaでいいじゃないかということになってしまう.

しかし,本当にそうだろうか?

Javaでどうにかなる程度のことしかやってないという可能性はないのか?
Javaであるがゆえの実行コストでアルゴリズムの本来の性能が出せていない可能性はないのか?

僕は,Javaを否定しているわけではない.ものによっては,Javaを使うことがベストであるケースは当然ある.

それでも,ときどき,疑問を感じる.

ケースによっては,Javaの部分を他の言語に置き換えることができるだろう(例えば,MATLAB)