僕のプログラミング遍歴

今はフリーランスプログラマーとして主にC#(WinForms)を使っていますが、そこに至るまではいろいろありました。

スポンサーリンク

10歳~12歳/ファミリーベーシックとMSX

ファミコンにキーボードをつなぐと、なんとプログラミングができる! そんな夢のようなファミコンソフトのファミリーベーシック。

ファミリーベーシック
ファミリーベーシック

BASICのインタープリタなんですが、コードの容量が1982バイト(つまり1982文字分)しかなく、まともなプログラムなんて作れません。それでも当時小学生だった僕にとって、自分で書いたプログラムが動くというのはとても魅力的な体験でした。

同時期、友人がMSXを持ってたので、友人の家でMSXのBASICを触ってました。知ってますか?MSX。

MSX(エム・エス・エックス)とは、1983年に米マイクロソフトとアスキー(現アスキー・メディアワークス)によって提唱された8ビット・16ビットのパソコンの共通規格の名称であり、MSXとその後継規格であるMSX2(1985年)、MSX2+(1988年)、MSXturboR(1990年)の総称でもある。最初のMSXを便宜上「MSX1」、「初代MSX」と呼ぶこともある。MSXturboRでは16ビットのCPUを採用した。

Wikipedia:MSX

MSXの「MS」はつまり、Microsoft。まだMicrosoftが有名じゃなかった頃に、ビル・ゲイツ自身がごにょごにょ頑張って作ったらしいですね。

MSXは、パソコンと呼ぶにはあまりに貧弱で、どちらかというとファミコンに対抗したゲーム機寄り。プログラミング部分はファミリーベーシックほど貧弱ではないけど、まぁまともなプログラムが組めるというほどではありませんでした。

所詮小学生のお遊びなので、結局は

10 N=0
20 FOR A=1 TO 100
30 N=N+A
40 NEXT A
50 PRINT "1カラ100マデノゴウケイハ";N;"デス"

とか書いて、わーいわーい喜んでただけです。でもね、これが楽しかったんだよォ。

16歳~18歳/Quick C

この頃、Microsoftは業務用の本格的なCコンパイラ「Microsoft C」を売り出していたんですが、その廉価版である「Quick C」という製品がありました。

廉価版といっても、大規模で本格的なプログラミングに耐えうるだけの統合開発環境やデバッガなどを備えていて、高校生がおもちゃとして遊ぶには十分すぎるほどの性能でした。

小学生の頃に遊んでたファミリーベーシックはいつの間にか押入れの奥に眠り、プログラミングのことなんかすっかり忘れてた高校生の僕。とりあえずパソコン(NECのPC9801シリーズ)を買うぞってなったわけなんですが、目的の半分はエロゲー。なんか、パソコンのエロゲーはすごいらしいぜ? 見たことないような×××が見れるらしいぜ! ってことで、高校生らしく鼻息を荒くしてたわけですワ。

目的の残りの半分は、プログラミング。将来のために本格的に勉強しようとかそういうのじゃなくて、なんていうかとにかくプログラミングが楽しいので、高価なおもちゃの1つって感じです。

それまで「プログラミング=BASIC」だと思ってたので、「最近はC言語ってやつがあるらしいぞ」と聞いて、ほうほうそれは面白そうだ、勉強してみよう、ってことでQuick Cを買いました。1万5000円くらいだったと記憶してますが、何百ページにも及ぶ説明書(IDEの説明とチュートリアル・文法書・コンパイラ仕様書・リンカ仕様書)が圧巻でした。こりゃぁもう、子供のおもちゃってレベルじゃねぇな。

子供の頃は漠然と「ゲームを作りたい」と思ってたんですが、ゲームプログラミングに必要なタイミングとかフレームとか割り込みとかの処理がよくわからず、結局リアルタイム性の無いプログラムを適当に作った程度でした。

そのうちの1つが、円周率を3万桁まで計算するというもの。マチンの公式と呼ばれる

$$4\arctan \frac{1}{5}-\arctan \frac{1}{239}=\frac{\pi}{4}$$

を使って、時間と容量が許す限りどこまでも下の桁まで円周率を正確に計算するというものです。プログラミングの力によって、パソコンという文明の利器を高速回転させるというのは、至高の喜びでしたね。

このあたりでうすうす気付き始めてたのかもしれません。僕はゲームが作りたいんじゃなくて、プログラミングがしたいんだ、と。何かクリエイティブなことをしたいんじゃなくて、コンピューターを意のままに操れることに快感を感じているのだと。変態かもしれませんね。

18歳~24歳/Visual C++

世の中ではWindowsが登場し、Microsoftの主力Cコンパイラも「Visual C++ Ver1.0」として新たに刷新されました。「Visual」の名でわかるとおり、これぞ現在まで続くVisual Studioの最初の原形です。

今までのようなコンソールアプリだけじゃなくて、Windowsのアプリも作ることができるという素晴らしいもの。さっそくVisual C++を買ってみたんですが、ここで問題発生。

僕のパソコンはメモリが256KBしかなく、こういう本格的な業務アプリに耐えられるだけのメモリを増設していませんでした。HDDも外付けの200MB。いろいろとマシンスペックが足りません。

今この記事を書くために使ってるパソコンは、メモリ32GB、HDD3TB。ぞれぞれ、当時の13万倍、1.5万倍。これが25年前の世界か…。

それでも無理やり、最初に自動生成される空のウィンドウを表示するだけのコードをビルドしてみました。

5日かかりました。

うぉーい! ビルドに5日ってどういうことやねん。120時間フル稼働させてやっとビルドが終わるとか、使い物になるかーっ!

そんなわけでしばらくお蔵入りになったんですが、Windowsが95になり98になり、パソコンも何度か買い替え、Visual C++ 4.0の頃にはまともに使える環境が揃っていました。

Visual C++が推すWindowsアプリ用の開発フレームワークは、MFC(Microsoft Foundation Class)。コンソールアプリではなく、グラフィカルなGUIを持つWindowsアプリを作るためには、新しく勉強しないといけないことがたくさんあります。MFCに慣れていくことで、それらの作法を少しずつ覚えていきました。

また、MFCを勉強することで、自然とWindowsのメッセージループに関することも覚えていきました。特にMFCは、DocumentとViewというクラスを元にコーディングすることを誘導しているので、僕にとっては今でも通用するモデルとビューを分離する考え方の原点となりました。

いろいろなことを勉強しながらも、所詮遊びは遊び。完成までこぎつけたアプリは少なく、ほとんどのプログラムは何の形にもならないまま途中で終わってました。

そんな中、唯一しっかりとした形になったのが、ぷよぷよシミュレーター。おそらく、ぷよぷよのシミュレーターを世界で初めて作ったのは僕なんじゃないかと思います。といっても、いずれは誰かが作るものだったし、何か特別なアイデアとか技術が盛り込まれてたわけでもないし、単に時期的に一番最初だったってだけですけど。

25歳~28歳/Visual Basic

この頃に就職をしたんですが、そこで業務に使われてたのがVisual Basicでした。

小学校の頃に遊びで触った程度のBASICとは、もうまるっきり違う別物です。同じMicrosoftのVisual Studio系ということもあって、どっちかというとVisual C++に近い。

小学校の頃のBASIC経験はとりあえず忘れて、Visual C++時代に身につけた知識を使って、この新しいVisual Basicという環境に慣れていこう。

そういうふうに考えて取り組むと、わりとすんなりできるようになりました。

でも、ここからは遊びじゃなくて仕事。ゴールのある完成品を、決められた納期までに作りきらなくてはいけません。今までのように途中でヤメることは許されない世界です。プログラミングの知識や技術がどうこうじゃなくて、「プログラマーとして仕事をする」とは何ぞや、ということを実体験を通じてたくさん学びました。

28歳~44歳(現在)/Visual C#

2002年頃までは、性能を求める場合に使用されるVisual C++と、業務用アプリをすばやくコーディングできるVisual Basic(6.0)が、Microsoft系開発環境の双璧を成していました。特にVB6.0はWindowsAPIのコール(今で言うところのP/Invoke)も自由に使うことが出来るので、VB6.0がある意味(教育コストも含めて)で最強だったと言っても過言ではありません。

ここで登場したのが、.NETという新しいフレームワーク。そして、そこで選択できる言語として新たに設計されたC#というプログラミング言語。

.NETはネイティブのマシン語にコンパイルするのではなく、一旦中間言語にコンパイルします。また、C#の言語仕様はC++から進化したというよりは、「C++から進化したJavaから進化した」とも言うべき仕様が多く含まれています。

ビジネス的に、Microsoftが.NETをJavaの対抗馬として見ていたのは明白でしょう。

さて、そんな大変革があった2002年ですが、僕は社内の他のメンバーがVisual Basicしか使ったことが無いということもあり、教育コストの観点から、移行するのは慎重でした。

そんな中、通常の業務は今まで通りVisual Basicでこなしつつ、仕事の空き時間を使ってひたすらC#を勉強し、あるタイミングで一気にC#への移行を決意しました。この新しい言語C#には、きっと将来性があると信じて。

最初の頃は「C#って何ですか?」と、名前も知られていない状態。Microsoftが弱ってる時期は、もうこの世は全部Javaになってしまうんじゃないかという雰囲気もありました。しかし最近はC#がUnityで採用されるようになり、.NET Coreやら何やら、C#が生きる時代がしっかり到来したと感じています。

35歳頃~

少し時期は戻って35歳頃。これまでWindowsの業務用アプリしか作ってこなかったので、Visual BasicかC#っていうMicrosoftのレールにしか乗ってこなかったんですが、この頃にフリーランスになり、たまにWeb系の仕事をするようになりました。

そんな折、がっちがちのアプリを1つ作り上げるようなことはなくても、ある程度はjavascript、PHP、node.jsなどを書く必要性に迫られることがありました。Objective-Cなんてのを触ったこともあります。

今の僕は、設計から細部の実装まで全部やり切れるのはC#ですが、「書けと言われれば書ける」程度の知識を持っているサブ言語が、このようにいくつかある状態です。

プログラミング言語とは

実務で使われるプログラミング言語は、それがWeb系なのか、ディープラーニングなのか、Windowsスタンドアロンなのか、ゲームなのか、銀行系なのかなどなど、それぞれ目的によって変わってきます。

そこに優劣は無く、単に適材適所というだけのことです。

プログラマーとして生きるにあたって、いつどの分野から仕事の依頼があるかわかりません。どんなときにでも対応できるように幅を広げておくことは、とても重要だと思います。

その一方で、たくさんのものに手を出しすぎて、どれもが「浅い」ものになってしまうと、1つの仕事をやりきるができません。

何か1つ、「これならできる」と言えるほどに極めた軸を持っておいて、「広く」の方向にもいろいろと知識の幅を広げていくといいのではないでしょうか。

スポンサーリンク