最近のトラックバック

2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        
無料ブログはココログ

« 2011年9月 | トップページ | 2011年11月 »

2011.10.16

プログラミングスキルをどう身に着けたか Part1

C 言語や Windows プログラミングはこのようにして習得したが面白かったので自分の遍歴も書いてみます。単なる昔話なので、他の人の参考になるかは不明ですが。

●ファミリーベーシック
 僕のはじめてのプログラミング体験は小学5年のときのファミリーベーシックだった。ある年のお年玉をつぎ込んで買ったはず。
 このときは大したプログラミングはしておらず、ファミコンのAボタンを押すとマリオがジャンプするくらいのことしか作らなかったと思う。
 というか、この時点では外部記憶装置はオーディオ用のテープしかなく、しかもこのテープレコーダは予算不足で買えなかったので、FAMILY BASICのカートリッジ内のメモリ(数KB)がすべてだったのである。

●PC-9801 RX2
 中学生になると同時(1989年)に、親にねだって買ってもらった。ディスプレイと込みで30万円はしたはずなので、決して安くない。マシンスペックはCPUが80286の12MHz, メモリ640KB, 5インチフロッピードライブ2台という構成だった。
 親にしてみれば、これだけの値段のする、何の役に立つかわからないものをポンと買い与えるのは悩みどころだったと思うが、当時はそんな心配は全くせず、ファミリーベーシックと比べてマシンスペックが何十倍にもなったことに狂喜するばかりであったのである。もちろん市販のゲームをやるのも熱心だった。
 今はNECというとダメなIT企業の代表格みたいな感じだが、当時は今のAppleやGoogleと同じくらい強固なブランドだった。

ベーマガ
 やはりこの雑誌抜きには僕の中高生時代は語れない。毎月8日の発売日が楽しみで仕方なかったのを今でも覚えている。
 中心は読者が投稿するプログラム(殆どがゲーム)で、ソースコードが誌面に印刷されているのを1文字ずつ打ち込んでいくのである。これで手を動かしながら打ち込むことで他人の作ったプログラムの仕組みを学習し、今のプログラミングの実力の基礎ができたと思う。僕が参考にしていた投稿者は今は40~50歳くらいになってるはずで、直接には知らないけど今でも感謝している。

●アセンブラ
 投稿者のレベルは年々上がり、処理速度を稼ぐためBASICでは限界に達していた。アセンブラで書かれた作品が多くなり、ソースコードは一応BASICで書かれていても、「膨大な16進数の羅列をメモリにロードしてそこへジャンプするだけ」というのが珍しくなくなった。これの打ち込みは実に苦行である。そこで自分もアセンブラを勉強してみなくては、ということで買った本が「はじめてのマシン語」という本である。(今も売られているようだが、初版が1983年なのでたぶんこの本のはず。内容は当時とはもちろん違うはず)

 これで8086の基礎を学ぶとともに、「裸のコンピュータ」に接近した気がして、まさに寝る間も惜しんでむさぼり読んだ。VRAMが&HA8000から始まるのは今でもはっきり記憶している。

 なお、当時学校に置いてある生徒用のコンピュータは富士通のFM16βで、自分のPC-98とは違うところが多く、この本でPC-98に特化した知識に傾いてしまってからは学校のコンピュータ部とは徐々に疎遠になっていってしまった。

 印象的なエピソードとしては高校1年のとき、この本では解決できない問題にぶつかって、大きな本屋に行ったところズバリそれを解説している本を見つけたときのことである。確か、BIOSのシステムコールに関するものだったはずだ。
 本は5500円と高く(当時は小遣いが3000円/月で、ベーマガを買って数回ゲームセンターに行くと終わりである)、買うのはためらわれた。そこで本屋の床に座り込んで要点をノートに書き写し、さらにその本が売れてしまうことを警戒して本屋の中の全然違うジャンルの目立たない場所に隠し移したのを今でも覚えている。今思うと実にひどい話だ。
 だが、数日するとその本の別のページの情報が必要になり、学校帰りに本屋に行ってメモをする、というのを何度か繰り返し、ついに耐え切れなくなって親に泣きついて5500円もらって最後にはその本を買ったのである。今でもその本は実家のどこかにあるはずだ。

 なお、アセンブラをマスターしたといっても頭の中のプログラミングの発想法はガチガチのBASICのままなので、メモリは全てがグローバル変数という使い方だったし、「SPレジスタ」の用途もついに理解できなかった。
 PUSH AXでメモリに書き込むとともにSPが2下がる、という仕様が何のためにあるのかよくわからないし、このような変な動作がなぜたった1バイトの命令で実現されているのかも設計意図がまるで理解できず悶々としていた。
 自分のアセンブラのプログラムでは、大抵他のレジスタは別の用途に使いきっていたので、PUSH/POPのあとSPをわざわざもとに戻すコードを書いていたし、SPの戻し忘れは自分のコードのバグ原因で上位にきていた。

●紙にソースコードを書く
 BASICにしてもアセンブラにしても、ソースコードを方眼紙の上に鉛筆で書いてその上で「脳内コンパイル」「脳内デバッグ」をするのも多かった。
 これは、学校の授業中にもこっそりプログラミングができるという絶大なメリットがあった。嫌いな先生の授業のときにはよくこの手を使っていたものである。本や雑誌を見るのに比べて目立たないからね。


 だいたい、こういうことをしていたのは中学3年~高校3年くらいだったと思う。
 とはいってもコンピュータばかりしていたのではなくて、当時は将来物理学者になるつもりだったので、数学と物理の勉強のほうを優先してたし、PC-98あるいはアーケードゲームにも並ならぬ時間を使っていた。

 世間的には、そろそろWindows3.1の時代になっていたが、自分のPCは80286のままなのでWindowsは使えず、高校生の経済力では新しいPCは買えなかったので、BASICとアセンブラしか知らないまま大学生になるのである。

 なお、この時の経験があるので、僕は「大学で教える初級プログラミングの授業はアセンブラにすべき」という考えの持ち主だ。さすがに企業での教育はそんな回り道はできないが、大学でやるならJavaだのRubyではヌルすぎる。アセンブラをやらないと、「プログラム言語は何を解決する技術なのか」が理解できないから、というのが理由だ。(Part2へつづく)

#感想等はTwitterでもOKです

« 2011年9月 | トップページ | 2011年11月 »