株式会社ラグザイア 取締役副社長 兼 CTO

ソフトウェアとの出会い

»

●初めてのプログラム

 プログラムコードに初めて触れたのはちょうど小学校4年生のころ、任天堂のファミリーベーシックという、ファミコンに繋いでファミコンのゲームが自分で作れるという製品の上で書いたベーシックでした。

 ファミコン反対派だった親とは異なり、1985年当時、母方の叔父さんは、すぐにコンピュータが必要不可欠になる時代が来ると考えたらしく、「ファミコン買ってやるから、その代わりファミリーベーシックも一緒に買え」といってお金をくれたそうです。しかし、ファミコンは当時、全国のちびっこから大変な人気で普通にお店に行っても買えない状況でした。日曜にもなると量販店には行列ができ、整理券が配られ、徹夜して並んで買う光景も珍しくありませんでした。ちびっ子達の親も、買えないと解ると意地になって子供たちのために奔走し、社会現象にまでなりました。

 今から考えると任天堂は当時から供給を若干不足気味にして需要を煽る戦略を実施していたんだなぁと思います。TOCやトヨタ生産方式では制約を市場の需要に持っていくまで改善せよと言っていますが、任天堂は当時からそれを実施して市場を制していたわけですから、とても花札を作っていた会社とは思えない変貌ぶりです。先駆けてカートリッジ式のテレビゲームの開発を行い、ゲームの内容のクォリティの高さを徹底し、さらにその製品の供給システムも完全に確立していたとは完全に抜かりない、勝つべくして勝ったとしか言いようがありません。

 そんなかんだで、ようやくファミコンとファミリーベーシックを購入したわたしは、叔父さんの期待とは裏腹に、本体と同時に買ったナムコのゼビウスにハマり、学校以外は明けても暮れてもゼビウスばかりの生活を3カ月、指が腱鞘炎になるまで続けました。

 ようやくファミリーベーシックの箱を空けたのは購入後4か月くらい経ったころだと思います。ファミリーベーシックに同梱されていた本のサンプルプログラムをキーボードで打ち込み、バクを修正して何時間もかけて自分で入力したゲームで遊ぶのはなんとも言えない達成感がありました。「657行目まではうまく動いてるけど658行目でどうやらおかしいらしい」みたいな会話が日常的に家族で行われていました。

 ベーシックはインタプリタ言語なので、とりあえず一通り遊んでみないとうまく入力できているのかどうかわかりませんでしたが、当時はインタプリタしか知らないので、これが当然だと思っていました。また、ゼビウスみたいなゲームは一体どうやってできているのだろう? という疑問ばかりで頭がいっぱいになりました(当時はゼビウスもファミリーベーシックで実装されていたと思っていました)。

 中学生になると、親の仕事の都合でNECのPC9800シリーズが家においてあるという家が同じクラス内にポツポツと出始めました。PC9800にもベーシックインタプリタが標準で付いていて、グラフィックを描画するプログラムを書いて実行し、友人たちから一目置かれたのを覚えています。

 綺麗な正弦曲線がディスプレイに表示できるのは周囲ではわたしだけでしたが、いまから思えば、喜んでいたのはわたしも含め、一部のオタクな友人たちの間だけでした。自分で書いたプログラムコードには愛着がありましたし、正しく動作するプログラムコードを表示させて眺めて悦にひたっていました。

●C言語との出会い

 そんなある日、「C言語はベーシックなんかよりもずっと早く実行するんだぜ」という友人が現れました。確かに、コンパイル言語の実行速度はベーシックで書いた同じプログラムよりも遥かに高速に実行されました。しかし、コンパイルとかリンクという言葉を初めて耳にしたのはいいですが、当時はさっぱり理解不能でした。

 その日以来C言語というコンパイル言語に夢中になり始めます。当時は高価だったコンパイラも、ましてやPC9800も持っていないわたしは、もっぱら本屋でC言語入門を立ち読みして友人の家でコンパイルさせてもらうという日々が続きました。ポインタや構造体など、いままで耳にしなかった単語が出てきて理解に苦労しました。コンピュータの書籍は当時のわたしにとっては高価で、基本的には立ち読みで勉強して覚えて帰ってコーディングするという日々でした。

 中学3年にして、ようやくシャープ製のパーソナルコンピュータX68000を購入しました。PC9800やFM-TOWNSを選ばすにX68000を購入した理由は、とにかくサウンドやグラフィックの機能が強かったのと、ゲームが充実していたことでした。とは言え、 X68000を購入後はなんとしてもCコンパイラを買わなければなりませんでしたが、当時X68000で動作するCコンパイラは定価が4万4800円もする大変高価なソフトウェアで、クリスマスプレゼントに両親に懇願してようやく買ってもらいました。

 X68000のCコンパイラはC言語のコンパイラ、アセンブラ、リンカという段階を全て手動で実行して実行モジュールが生成されるため、C言語だけでなくアセンブラもここで学ぶことができたのはおおきな経験になりました。コンパイラに付属してきた数千ページもある本を読み漁り、どうやってコンピュータの中でソフトウェアが実行されるのかの基本的な部分をここで学びました。

●綺麗なソースコードとは

 このころはプログラムコードを綺麗に書くという習慣は特に無く、自己流で書いていました。変数や関数名などのネーミングはローマ字まじりの英語だったり、同じ意味のコードが複数あったりと、今見たらとても見られないコードなのだと思います(当時書いたコードは5インチフロッピー内に記録されていて読み取ることができません)。

 その後、富士ゼロックス情報システムに入社すると、周囲の先輩方からは厳しい指摘を受け続けることになります。ソースコードのマナーがとにかく悪くて汚くて読めないなといった指摘を受けました。

 綺麗なコードって一体何なのだろう? プロになる前に自分ひとりでコーディングしていた時には考えもしなかった疑問が沸き始めました。コーディング一般に関して紹介してある名著は何冊も出版されていますが、当時はマイクロソフトプレスから出版されていた「コードコンプリート」と「ライティングソリッドコード」、カーニハンの著書である「プログラミング作法」を薦められて読みました。特にプログラミング作法はとても良い書籍だと思います。第1章に書かれている内容はプログラマ初心者必読の内容です。

 さらに、自分の書いたソースコードを熟練者にレビューしてもらうことで、綺麗なコードとは何なのか? また、綺麗なコードはどのようにして書くのか? ということを学びました。そういった経験の中から、わたしにとっての綺麗なコードというのは次の条件を満たしているコードという所に行きつきました。

  • コードで表現しようとしている内容が理解しやすい
  • 誰でもコードの修正や不具合の修正
  • 同じセマンティクスのコードが複数箇所に書かれていない
  • 無駄にトリッキーなコードが無い
  • コメントが適切
  • 単体テストコードが全て動く

 自分にしか読めないコードを書くことは誰にでもできますが、誰にでも読めるコードを書くことができる人間は限られています。まだプロになる前は、人が読めるコードを書くということに対して気を使うことがありませんでした。もし読めないコードに出会ったら単純に自分の能力が低いのだろうと思っていましたし、一方でわたしのコードが読めないならその人の能力不足だと考えていました。しかし、誰にでも理解できるコードを書くことのほうが高い能力と知識を必要としますし、実際に優秀な方が書いたコードは見やすく、修正もしやすいので、仕事がスムーズに行われるのです。

●原典を読む

 当時、周囲の先輩方は、技術面でもC言語ではなくオブジェクト指向言語であるC++を使いこなしている方ばかりで、自分の技術力の無さを嫌というほど思い知らされることになりました。まずCの基礎から学ぶ必要があるということで、カーニハン&リッチの「プログラミング言語C」を読み直しました。プログラミング言語CはC言語を開発した本人が書いた本で、このような本を原典と呼び、新しい技術を学ぶ際は必ず原典に目を通すということを学びました。C++ならばストラウストラップの「プログラミング言語C++」が原典として出版されています。

 これで、プログラミング言語の言語仕様については一通り理解できましたが、当時はそれ以外にもネットワークに関する知識やOSに関する知識、コードの書き方などなど、解らないことばかりでした。ネットワークについては「詳解TCP/IP」、OSに関する知識はアンドリュー.S.タネンバウムの著書「構造化コンピュータ構成第4版」。その他個別に業務で必要な知識については個別にその技術の原典を読む癖を身につけました。例えばJavaでGUIを作らなければならないなら、AWTを開発した本人が書いた「グラフィックJava」を読み、そのAPIについて一通り身に付けましたし、WindowsのWin32APIを扱う必要があればジェフリーリッチャーの「AdvancedWindows」を、メールを送る機能を実装しなければならなければ、SMTPの仕様を読みました。とにかく自分が業務で扱う技術については、その技術の仕様や原典を読む癖を身につけました。

 このようにして、プログラムを綺麗に書くこと、技術を原典から学ぶこと、それと闇雲に本を読むのではなく、名著と呼ばれる本をじっくり読むことを通じてプログラマとしての能力を高めました。この職業は、本を読むだけではなく、その本から得た知識を使って実際の業務を経験し、その経験の後、また本を読むと更に深く読めることがあります。特に名著と呼ばれる本であればあるほど、経験に合わせて読み取れる内容も変わってくるというものです。したがって良い書籍に出会うことはとても重要ですし、常日頃からこのようなアンテナを広げておくことが良いプログラマになる近道です。

 このようにして社会人1年目~3年目くらいまでは、業務をこなしつつも、まずはプログラマとして自分の道具となるプログラミングの知識とその他の仕様に関する知識を適切な書籍から学びました。また、「綺麗なコード」という概念に近い考え方を得て、職業人としてのプログラミングを行うための礎を構築した時期でした。

Comment(0)