どのようにプログラミングの勉強をしたか

いろいろと思うところがあり、もしかすると誰かの参考になるかと思い、過去を振り返ってどのように勉強をしたのかを書いてみます。

上のスクリーンショットはターミナルをtmuxで分割し、neovimでRustプログラムの勉強をしていたときのものですが、これを見ているとプログラミングの勉強を始めた頃、GUIのなかった時代のことを思い出します。

自分は文系学科卒で就職するまで一度もコンピューターに触れたことがありませんでした。就職した最初の会社は小さな商社でしたが、多少は英語がわかるということで、配属されたのは社長室という秘書業務と貿易実務を担当する部署でした。そこでたまたま「椿くんは若いからそのパソコンで在庫管理表を作って」と言われて初めてコンピューターに触れることになります。NECのPC98でした。最初にやったのはInformixというリレーショナル・データベースで表を作ることでした。プログラミングはやりたくて始めたのではありません。

右も左もわからない状態だったので、これは不味いと思って最初のボーナスで勉強用にPC98を買いました。価格は覚えていませんが、ボーナスが無くなったのを覚えています。確かPC購入と同時にLattice CというCコンパイラー、Smalltalkというオブジェクト指向言語開発環境の小規模版、「プログラミング言語C」ともう一冊C言語の書籍を購入しました。大きな書店に行ってもC言語の本はこの2冊しか置いていませんでした。

この会社では米国から情報機器を輸入して国内の商社に販売していたのですが、当時ミニコンと言われたUNIXが動作するコンピューターを英文ワープロのサーバーとして販売していたので、PC98で動かしていたデータベースプログラムをUNIXでも動かしていました。この頃にシステム部門への転属を希望したのですが、営業経験も必要だということで1年間営業をやってからシステム部門に移りました。何も売れない営業マンでした。この時点で就職してから3年が経過していました。

自宅でC言語の勉強をしていたので、会社のUNIX機でもC言語でプログラミングしながら学ぼうと思いました。とは言っても、C言語でのプログラミングを教えてくれる人は周りにいませんでした。どうすれば良いか思慮した結果、良いお手本を真似ることにしました。

選択したお手本はMicroEmacsというテキストエディターでした。記憶が曖昧ですが、購入したCコンパイラーに付属として提供されていました。このPC用に書かれたMicroEmacsをUNIXに移植することにしました。やることはほぼ写経。PC用のソースコードを見ながら、UNIXの端末でviエディタを立ち上げて一行一行書き写しながら、MS-DOSとUNIXの違いを調べながらソースコードに修正を加えて、ソースファイル1つずつをエラーがなくなるまで編集・コンパイルを繰り返します。半年くらい会社と家でやっていたと思います。

フルスクリーンエディターというのは、様々なプログラミングテクニックが使われてるし、小型版とはいえEmacsのソースコード量はそこそこ多いです。写経することで、プログラミングテクニックを覚えながら、大量のタイピングをすることで頭に染み込ませるようにしました。

そうして完成したUNIX版MicroEmacsはその後、UNIX機でのプログラミングを行う際の自分の道具になっていきました。

これでC言語がマスター出来たので、次は実際の業務に活かす段階です。

ある時受注した顧客のシステムはIBMのメインフレームのデータをSNA3270ゲートウェイを介してUNIXミニコンに転送し、そのデータを加工して英文ワープロに渡すというものでした。このシステムの受注のために、データを加工するサンプルプログラムをC言語で書いて見せました。

基幹系システムから部門系システムへデータを流して、事務作業を効率化するというワークフローができたことで、顧客の信頼を得られました。それがきっかけで、その顧客のIT部門に誘われて転職することになりました。

この頃はNetscape社が生まれた時期です。インターネット黎明期と言っても良いと思います。メインフレームからクライアントサーバーへ、ネットワークを使おうという機運が高まった時代です。

転職した部署では、メインフレーム以外の分野を任されました。専用線を敷いてWebサーバーを立ち上げたり、クライアントサーバー型のアプリケーションを開発したり、MacOSベースで研究所のデータ解析システムを開発したりと大変でしたが、ここでも学ぶことが多く、その甲斐あってかコンピューターOSを開発している某シリコンバレー企業の日本支社に転職することができました。開発者向けのトレーニングやコンサルティング、OSの日本語化などの業務に従事しました。この時点で、Smalltalk、C++、Objective-Cなどを学んでいました。30歳になったばかりの頃です。Macを買ったりNeXTSTEPを買ったりと、随分と投資をしました。

その後、某シリコンバレー企業が他の某シリコンバレー企業に買収され、買収した会社に転籍することになりますが、2年ほどで退職し、小さなソフトウェア開発企業、某シリコンバレーB2B企業、ソフトウェア会社経営、証券会社のIT部門と転々することになります。この間、ネットバブル崩壊やリーマンショックの煽りをもろに受ける会社にいたので、リストラされたり、会社がなくなったりと嫌な経験をしました。この頃はJavaでプログラムを書くことが多かったです。

どうせ会社勤めしていてもいつリストラされるか、いつ廃業するかもわからないので、いっそのこと会社には属さずにモノづくりの道を歩もうと決意し、ギターやロードバイクを作りながら、生活費を補うためにソフトウェア開発の受託仕事をしたりして生き延びてきました。この間、JavaScriptやSwiftを習得しました。

その後は、モノづくり塾の運営に100%力を注ぐために、ソフトウェア開発の受託はしていません。

そんなこんなで、35年以上ソフトウェア開発を経験してきましたが、新しい技術を理解するために勉強を続けています。今はPythonとRustを主に学んでいます。

世の中は知らないことだらけです。知らないことを考えることはできません。考える幅を増やすには知識の幅も広げないといけません。

高給が得られるからという理由で、プログラマーやエンジニアを目指したことはありません。

やりたいことを中心に仕事をしていません。やりたいことは仕事の外でやれば良い。

勉強に終わりはない。

最初は嫌でも、少しできるようになると好きになることもある。なので、ちょっとの辛抱は必要。

すぐに出来ることは大したことじゃない。安易な方向に流れてはならない。

好きなことを中心にしたいなら学者になるのが良い。

道具を使って道具を作るのが人間らしさ。

モチベーションは「知りたい」だけで十分。

振り返ってみてそんな風に思います。

コメントする