今年は2020年。まもなく30代を終えようとしている歳になった今、改めてなぜプログラミングを始めたのか。そのことを振り返ってみようと思います。

6つの節「コンピュータを購入するきっかけ」「購入してから開発を始めるまで」「インターネットに接続できるようになってから」「PDCAを自然と知り始める」「就職に至るまで」そして「今、昔の自分に何を伝えるか」にわたって書いていきます。

まあ、思い出話なので、軽い気持ちで読んでください。そして、現代は状況がまるで違いますから、この状況をそのまま適用できるわけではなく、今の生き方に参考にはならないことを、あらかじめお断りしておきます。

TL;DR

ソフトウェアエンジニアリングは、僕が社会につながって価値を提供することができる、素晴らしい技術であることを10代の頃に知ることができました。

でも、学校の勉強はちゃんとしておくべきで、ストレートで大学院を修了して、人生の選択肢をたくさん持てる状況を作ることが大切だと今は思っています。

コンピュータを購入するきっかけ

1997年、23年前、僕が高校1年生の頃にまでさかのぼります。父に、高校入学祝いにコンピュータを買って欲しいとお願いしたのが直接のきっかけです。

そもそもコンピュータを購入したい理由は、中学校の技術家庭科でN88-BASIC(86)でプログラミングの授業を受けた時、教科書にあったコードを写経して発表する際、友達からRND命令(乱数)を教えてもらって、コードを改造して図形の花火を飛ばしてみんなを驚かせることができ、「プログラミングって人を驚かせられるのか、こりゃすごいな!」という原体験がありました。

また、当時アマチュア無線をしている際に出入りしていたアマチュア無線機店が店舗オリジナルの自作PC/AT互換機のキットを販売しており、コンピュータって組み立てできるのか、面白そうだなということを知ったのもありました。ちなみに技術家庭科のプログラミングの宿題は、アマチュア無線機屋に置いてあったコンピュータでやっていました。

こうして、当時としては結構高めのPC/AT互換機、CPUがPentium 200MHz(単位はGHzではありません)、RAMが64MB(こちらもGBではありません)と共に、プログラミングを始めるためにMicrosoft Visual Basic 4.0を添えて買ってもらったのでした。

購入してから開発を始めるまで

当時、コンピュータを買ってもすぐにはインターネットに接続はしていませんでした。今のように常時接続の固定回線は一般家庭には普及しておらず(OCNエコノミーが最も安くて38,000円/月(3,800円ではありません), 128Kbps(Mbpsではありません)のベストエフォート)、一般家庭からはアナログの電話回線にモデムを繋ぐか、ISDNのTAかルーターを使って、従量課金またはテレホーダイという11pm〜8amまでの時間限定固定料金で接続するのが主流でした。

では、どうやってプログラミングの勉強をするかというと、公式ドキュメントか本しかありません。しかし、当時高校1年生の僕には公式ドキュメントをどこから読めば良いかさっぱりわからず、本屋に行って限りあるお小遣いから入門書を買うのでした。

先生や質問できる人は誰もいなかったため、一通り写経して、あまりよくわからない時に、Windowsのヘルプ形式で割と検索しずらかった公式ドキュメントを開いて、それを往復するというのをやっていました。

そのうち、だんだん慣れてきた頃に、なんか作ろうかと考え始めた際、アマチュア無線機屋さんで「フォントの管理って大変だよな」「フォントをいっぱい入れるとWindowsのリソースを食ってよくない(当時フォントを入れすぎるともともと不安定なWindows 95がさらに不安定になった)」そして「フォントはディスク容量を食うから選別して入れたい」という話を耳にしました。

それなら、試しに管理ツールを作ってみようと考えて作り始めたのが、Font Managerというフォント管理ツールでした。このWindowsアプリケーションは僕のソフトウェアエンジニアとしての原点となるソフトで、この後も言及していきます。

インターネットに接続できるようになってから

親にどうしてもネットに繋がせて欲しいとずっとお願いして、学校の成績が良ければ敷こうという約束を取り付けました。その約束を達成すべく、その時だけ勉強をし(!)、見事にクリア。33.6Kbps(やはりMbpsではありません)アナログモデムからでしたが、インターネットに接続する環境を得ることに成功しました。

直ちにWebサイトを作成(記録では1997/10/27)し、続いてFont Managerもフリーソフトウェアとして公開を始めました。これを機に、様々なオンラインソフトウェア収録サイトや雑誌から収録依頼があり、少しずつですが拡散していく手応えを感じることができるようになっていました。
検索してみましたら、インプレスの窓の杜にある新着ソフトウェア一覧にピックアップされている記録が残っていました(1998年「8月28日掲載のオンラインソフト」にあります)。
また、ソフトバンクの月刊紙「PCJapan」をはじめとした雑誌に定期掲載をしていただけるようになり、コンピュータ雑誌が自由に読めてよきかなよきかなと思っていたりしたのでした。

Webサイトを公開するようになると、当時多くの人が手を出したのが「掲示板」のCGIアプリケーションでした。Webアプリケーションの走りですね。
CGIレスキューさんをはじめとしたコードを公開しているサイトからコードを取り寄せ、プロバイダのマネージドのWebサーバにFTPで(もう使わないですね…)Putし、パーミッションを書き換えて、実行…しようとしたら動かない、というご経験をされた人はおそらく30代以上です。
printデバッグを駆使してコードを書き換え、なんとかHTTP 200が返って来るようになってうれしかった覚えがあります。

開発情報を取り寄せる方法は、もっぱらニュースグループでした。ニュースグループとは、ニュースサーバ間をリレーしてメッセージをやり取りできる、分散型の掲示板みたいなものです。当時高校生だった僕からすると、結構怖い人がいっぱいいて容易に質問できる状況にはなく、半年ROMる大切さはここで覚えた気がします。

PDCAを自然と知り始める

そうこうしているうちに、PerlでCGIアプリケーションを少しずつ書けるようになり、WindowsアプリケーションはVisual C++も使うようにして低レベルAPIも叩きながら開発することができるようになってきました。その際、メモリのヒープ一覧やブレークポイントを使えるVisual Studioって素晴らしい、ということでした。今だとWebアプリケーション開発でも使えるようになって、良い時代になったなと思います。

英語を覚えたのは、Visual C++で開発する際に、MSDNのAPIドキュメントが当時英語で書かれていたため、それを読破するためでした。高校の英語の勉強はさっぱりしなかったのに、英語の開発ドキュメントは読むのかと親から呆れられた覚えがあります。とはいえ、今になって英語のドキュメントに抵抗がないのはこれのおかげだと思っています。

また、インターネット上にソフトウェアを公開すると、利用者からメールで、質問やバグレポートが届くことがよくありました。ここで、世の中にはカスタマーサポートってのがある、ということを知りました。しばらくすると徐々に同じ質問が来るようになるので、FAQのページを作って問い合わせ量をコントロールするようになりました。

そして、利用者の声を反映してソフトウェアを改善していくプロセスも、ここで自然と取り組み始めるようになります。この時はPDCAサイクルという言葉は知らず、知ったのは20代にスタートアップに転職した時ですが、自然と取り組み始めていたようでした。

ただ、後で知ったことですが、東京の進学校に通っている人には、学校にコンピュータ部があり、部活内で教えあったりする文化があったとのことです。僕は当時、福岡市内にある普通の私立高校に通っていて、プログラミングに関する人の交流は全くありませんでした。こういう機会があれば、もっとプログラミングのスキルを伸ばせたのかもしれません。

就職に至るまで

ソフトウェアエンジニアとしていい感じにやられていたんじゃない?そう思われるかもしれません。いやいや。プログラミングをやりすぎて、学校の成績は絶望的な状況にまで落ちていまして、赤点すれすれの低空飛行を続けていたのでした。数学の解析と、物理の電気関係以外。

当然、大学受験には失敗します。一度浪人して再チャレンジしようとしましたが、これも失敗。父親に泣いて詫びて、就職します、と話したのが2000年です。割とその時は絶望していました。

その後、運良く大手総合電機メーカーの子会社に契約社員としてソフトウェアエンジニアの道に本格的に踏み入れることになります。この話以降は、以前に書いた「私のキャリアキーノート 2017年版」に続いていきます。

今、昔の自分に何を伝えるか

ちゃんと勉強して、ストレートに大学院に進んで、選択肢を持って就職して欲しいと伝えます。しかし、こういうのって多くの人は親から言われてきた言葉で、また多くの人はちゃんと勉強していたはずです。僕は高校生時代にプログラミングにハマってしまい、勉強の理由を見つけることができなかったのがよくなかったと思っています。こういうの、ちゃんと理解が進むように誰かに壁打ち相手になってもらい、話し合って理解しておく必要があったのかもしれません。

僕の場合、運良くソフトウェアエンジニアの仕事を見つけることができて、今も運良く仕事をすることができています。

僕の知る限り、現代において、ソフトウェアエンジニアになるには、大学院で計算機科学やソフトウェア工学を十分に学んでおく必要があり、僕のようなぽっと出の人がソフトウェアエンジニアとして活躍できるような時代ではないという実感があります。
それとも、尖った技術を使ったソフトウェアをOSSとしてGitHubなどでコードを公開し、社会に価値と提供しつつ存在感を出すことで、自らの道を切り拓いていくこともあり得るかもしれません。
または、ソフトウェアエンジニアリングとは違う部分で地に足のついた知識と経験がある人が、ソフトウェアエンジニアリングを学んで新たな価値を生み出すかの、いずれかだと思います。例えば、経理や法律に詳しい人が、ソフトウェアエンジニアリングを学ぶケースが当てはまります。

なので、この方法を真似することは一切お勧めしないし、参考にもしないで欲しいと思っています。この記事は僕が書きたくて書いた昔話で、僕のことに興味がある人が読んでくだされば良さそう、というものです。

あえて書く学びがあったとすれば、コンピュータソフトウェアの技術は、僕が価値を提供しつつ社会につながれる、素晴らしい技術であることを10代の頃に知ることができたことでしょうか。