はじめに
MENTA、Twitterなどでプログラミング初学者の方と関わっていると、ふと「自分が駆け出しのころはどんな勉強していたんだっけ?」と思うことがあります。
私がプログラミングという作業に関わり始めてから30年近く経っていますが、今のスキルに至るまでにどんな学習や体験をしてきたのか、思い出しながら書き出してみたいと思います。
結論だけ見たい方は、最後のまとめをご覧ください。
更新履歴
2023.03.12 小学校時代に加筆、「おわりに」項を追加
プログラミング学習の歴史を振り返る
小学校入学以前
この頃はまだプログラミングという行為はしていなかったはずですが、「ファミリーコンピューター」という名称のコンピューターで遊んでいた記憶があります。
小学生時代
厳密にプログラミングと言えるかどうかはわかりませんが、小学生低学年の頃からワープロを使って文書作成を行っていた記憶があります。
主な用途は長ったらしいパスワードを要求するファミコンゲームのパスワードメモだったり、難解な3D迷路ゲームのマッピングを入力していた記憶があります。
この時、3Dマップの罫線を素早く出力するためにマクロ機能を使っていたような気がします。マクロもプログラミングの一種と見做せるならばこの作業がはじめてのプログラミングだったと思います。
また、友人の家で「ファミリーベーシック」なるものを見て、なんじゃこりゃと思った記憶もあります。触らせてはもらえませんでした。
小学生高学年あたりから、パソコンに対する強烈な憧れがあったと記憶しています。電気屋さんに陳列していたFM-Towns、デモで流れているシムシティを眺めて、すげーすげーと思っていた記憶があります。
自宅にあった百科事典
私の自宅には書籍の百科事典がありました。100冊を超える本が自宅の本棚を埋め尽くしておりました。購入費は想像もつきません。破ったら怒られるだろうなと思いながら主に自然科学に関する項目を読み耽っていました。当時NHKの番組「地球大紀行」という番組が大好きで、惑星の成り立ちや生物の進化の変遷などを調べていたかと思います。
図書で調べる、という行為が後のインターネット検索能力と調べ物に対する粘り強さを育てたのかなと思います。
中学生時代
シンセサイザーを使い倒す
当時音楽少年だった私は、中学校の音楽室にあったシンセサイザーを遊び倒していました。音色の合成、リズムパターンやメロディの記録などを駆使してとっても妖しいゲーム音楽を弾いていました。授業の発表会で12分も使ってごめんなさい。これでもカットできる部分はカットしたんです。
ノート(音符)の打ち込みもプログラミングと見做せるならば、これが第2のプログラミング行為だったと思います。
生徒会に入り浸る
きっかけは全く覚えてないのですが、中学校3年間の間、ずっと生徒会室に入り浸っていました。なお私自身は一度も生徒会役員になったことはありません。
学校行事の資料などを生徒会室に設置されていたワープロで作っていました。なぜなんだろう。やりたかったのか。この作業を通じて「かな入力」によるタイピングを本格的に覚えました。
また、生徒会主催行事の録画、録音などの仕事も何故かやっていました。音楽が好きだったからかな。この作業を通じてマイク・ミキサーなど音響機器の基本的な使い方を覚えました。
パソコンとの出会い
中学3年生になって、授業でパソコンを操作する機会がありました。この頃の情報分野教育では、
- ワープロ、表計算ソフトを使ってみる
- ペイントソフトで絵を描いてみる
- N88 BASIC で至極簡単なプログラムを書く
くらいの内容でしたが、はじめてコンピューターを本格的に触り、しかも作ったものが実際に思い通りに動作する、ということに感動を覚えた記憶があります。
授業の課題は一瞬で片付け、周りの友人に操作方法を教え回った記憶があります。
この授業の際に、はじめて模写ではない自分で考えたコードを書いて実行する、という体験をしました。
一番最初に作ったオリジナルプログラムは、オリンピックのロゴをPC-98の画面上に出力するBASICのプログラムでした。
(輪っかの重なりなどは完全再現できませんでした)
パソコン通信との出会い
当時吹奏楽部で文字通り楽器をブイブイ吹かしていた私ですが、そこそこ上手だったので近隣の学校の吹奏楽部との交流や地域選抜メンバーにもなっていました。その時にお邪魔したとある中学校で、吹奏楽顧問の先生がパソコン通信(おそらくNiftyServeだと思います)を使って音楽データをやりとりしているのを見せていただきました。
これを見て、パソコン通信って便利なんだなーと思っていた記憶があります。
セガサターン・シロ!
私が中学3年生のころ、テレビゲーム業界では「セガサターン」か「プレイステーション」のどちらが次世代機として台頭していくかの論争がありました。
その頃の私の嗜好は若干セガよりだったので、セガサターンが流行る(当時絶賛流行していたファイナルファンタジーの次回作がセガサターンで発売されるという噂もあり)と信じでセガサターンを定価で購入しました。
(見出しはシロですが、発売直後のセガサターンは当然黒です)
結果は・・・惨敗だよ!
しかし、セガサターンを購入したことがきっかけで「美少女ゲーム」というジャンルを知り、美少女ゲームイラストにハマり、その後ギャルゲー友達からTRPG友達が増えていくことになります。
小学校〜中学校時代の学業成績
この頃の成績は、音楽≧算数・数学>英語・国語・社会科>体育≧美術、といった感じでした。
特に算数は得意で、小学生時代に習っていた算盤で段位を取っています。当時珠算優良生という地域(市町村単位)で最も成績の良い子供に贈られる称号をもらった記憶があります。
美術、体育が苦手でしたが相対的なもので学校成績は平均以上はありました。漫画やイラストに手を出し始めてから美術の成績は上がり、美術>社会>体育、くらいになりました。
全体的には、算数・数学が超得意な子供でした。
高校生時代
高校進学祝いとしてDOS/Vパソコンを買ってもらいました(今思えばこれは父親が勤めていた某IT企業の型落ちか訳あり品だったと考えています)。私はPC-98系のパソコンが欲しかったので非常に落胆した記憶があります。PC-98で豊富にラインナップされているゲームが遊びたかったんですね。
そうは言っても当時にしては最新の機種、最新のOS(Windows95!)のパソコンで、しかもインターネットに接続できるモデムまで買ってもらえた(これは父親と共有)のです。パソコン通信に憧れがあった私は早速インターネットでネットサーフィンをしながらさまざまなコンピュータに関することを覚えていきました。
DTMを始める
まずは中学生時代にパソコン通信でも見た音楽データのやりとりです。当時ゲーム音楽のMIDIファイルを登録、配布していた有名なサイトがあり、そのサイトからお気に入りの曲のMIDIデータをダウンロードして聞いていました。そのうち自分でもMIDIデータを作りたくなり、フリーソフトを探し回ってDTMができる環境を整えました。ゲーム音楽やJPopなどの耳コピから始まり、オリジナル曲の作曲も行なっていました。
DTMによる音楽の作成、いわゆる打ち込み作業はプログラミングに近いものがあります。中学生時代にシンセサイザーで打ち込みをやっていた関係でDTMの打ち込み作業は全然苦になりませんでした。
個人ホームページを始める
上記DTMで作成したMIDIデータや、その頃私は下手くそながらも漫画やイラストも描いていたのでこれらを公開する個人サイトを作成していました。契約していたプロバイダが無償で提供しているサイトスペースを利用しました。そしてこれらを公開するためにHTMLを覚え、FTPでドキュメントをアップロードして...という作業が日課になりました。
HTMLを覚えるために入門書のような本を1冊購入した記憶があります。その後は、今も現存するとほほのWWW入門を見ながら少しずつHTMLタグの使い方を覚えていきました。
HTMLでデータを公開し始めたら、他のホームページにも存在するアクセスカウンターや掲示板も設置したくなりました。幸い契約しているプロバイダはCGIの利用が可能だったので、見よう見まねでアクセスカウンターや掲示板のPerlプログラムを入手、自身のサイトに設置していきました。この頃はまだ設置するだけで中のプログラムの修正などはやっていなかったと思います。指定された変数の設定変更を行うくらいがせいぜいだったと思います。
Microsoft Access を触り始める
この頃、私は未だ小学生時代から行なっていたゲームのパスワードやマッピングデータの入力をワープロで行なっていましたが、パソコンを手に入れたあたりから入力をワープロからパソコンに切り替えました。
また、中学生あたりからお気に入りの楽曲の歌詞をワープロに入力していて、この歌詞データの入力もパソコン側で行うようになりました。
この頃父親が会社を早期退職し、自営業でシステム開発を始めました。その際購入したMicrosoft Accessを私も使わせてもらい、年賀状作成時の住所録と歌謡曲の歌詞データベースをAccessで作成しました。この際に参照した資料は分厚いAccessのマニュアルのみです。父親の助言も一切なかったと記憶しています。
このAccessを使ったアプリの作成から本格的にプログラミングを行うようになりました。プログラミングを行うようになって「かな入力」では英数字を入力するのが大変であると気づき、「ローマ字入力」にシフトチェンジし、ついでにタッチタイピングができるようタイピング練習用のフリーソフトを使って練習をしました。また、タイピングの練習には、上記の歌謡曲歌詞データベースにデータ入力を「歌を聴きながらリアルタイムで」行うことでかなり上達しました。
高校3年時には1分600文字近くのペースでタイピングができていたと思います。今ではちょっと無理な数字です。
Perlを触り始め、勢いでJavaも始める
趣味のコンテンツを置いていたホームページに設置していたアクセスカウンターや掲示板もやがて細かい点をカスタマイズしたくなり、当時CGI言語として名を馳せていたPerlをちょっとずつ覚えていくことになります。また、いわゆる5C問題に幾度となく悩まされた記憶があります。許すまじShift-JIS、と思っていました。文字コードに罪はないわけですけど...
Perlは高校生が終わる時点で認証のいらない掲示板やメールフォームなどは作成できるくらいの実力にはなっていたと思います。
また、高校2年生〜3年生あたりからJavaをやり始めていたと思います。この頃のJavaは「アプレット」と呼ばれるブラウザに埋め込みして実行するもので、ちょっとしたゲームが中心でした。そもそもゲーム大好き少年だったのでJavaアプレットのゲーム、具体的にはブロック崩しなどのカジュアルゲームにハマり、その勢いで自分でも同じようなゲームを作ろうとJavaアプレットのプログラムをちょいちょい作成していたと思います。この時代はまだJavaでは大したプログラムは作っていませんでした。結局しっかり動作するゲームが完成した記憶はありません。
高校生時代の勉強環境と交友関係
この頃の交友関係は今考えると信じられないくらい広かったです。
小学生・中学生時代から続く友人
近所の高校に進学したので小学校・中学校からずっと同じ学校に通う友人が比較的多かったです
小学校時代からの友人H君から紹介されたK君につながる仲間
イニシャルで記載していますが、小学校からの近所の友人で中学校時代にとある事件から不登校になってしまったH君がいました。高校に進学してから持ち直し、久しぶりに出会ったH君からH君と同じ高校の友人K君たち(複数人いましたがみんなイニシャルがKだったのでK君たちとまとめてしまいます)と出逢います。
K君は小金持ちのオーディオマニアで、中学時代にオーディオ知識を生徒会活動を通じて叩き込まれた私と気が合い意気投合。社会人になる直前まで交流が続くことになります。マッキントッシュもこの頃K君を通じて触るようになり、同じくDTMをやっていたので共同で楽曲作成もやっていました。
また、このK君の影響でプレイステーションを購入。FF7は発売日にコンビニで登校前に購入するくらいの入れ込みっぷりを発揮します。
セガサターンとプレイステーションのダブル持ちになった私は高校生から親に叱られつつゲーム三昧の日々になってきました。
なお、このK君の友人が自分と同じ高校にもいる(T君)ことが後で判明し、高校3年間を通じて仲良くなっています。
セガサターン→サクラ大戦友達
同じ高校でサクラ大戦ファンの友達ができました。この友人たちの影響で深夜ラジオにもハマっていきます。
プレイステーション→ときめきメモリアル友達
FF7が発売する前後でときめきメモリアルも購入し、全キャラ攻略分岐データを作るくらいにはどハマりしていました。おそらく生涯で最もハマったギャルゲーです。インターネット上でもときメモファンはたくさん存在し、一時期「館林見晴ファンクラブメーリングリスト」に加入していました。
これらのゲームからインターネットを通じで得た友人
主にイラスト関係で、同じ系統のイラストを描くインターネット仲間が数名いました。
日常的にイラストを送りあったり掲示板で交流していたりしました。
- DTM関連で交流があった人たち。当時私の作成するゲーム音楽のMIDIデータはいわゆる「完コピ」相当であり、公開していたデータは高い評価を受けていました。
- 前述のときメモファンクラブ関連の友人
- ときメモの次にハマったメディアワークス系ギャルゲー(エターナルメロディや悠久幻想曲の系列。これは前述のK君に繋がる友人から紹介されハマりました)。インターネットのイラスト関係友人もこの系統が好きなメンバーです。
同じ高校のイラスト仲間
私の通っていた高校は非常に力の入った進学校です。学力の高さが売りではなく、勉強時間の多さが売りの高校でした。毎日通常の授業とは別に0時間目、七時間目と呼ばれる朝夕の補習、土日も関係なく補習、とにかく補習の多い高校で地域でも悪い意味で有名でした。
そんな中、同じ高校に通う、自分と同じようにイラストや漫画を描くことを趣味とするメンバーと仲良くなりました。私が一番下手でした。他のみんな絵が上手です。
このクラスターの友達はイラスト仲間であり、ゲーム仲間であり、音ゲー仲間であり、マジック・ザ・ギャザリング仲間でもありました。高校を卒業してからも彼らとは社会人時代初期まで交流がありました。
バスケ仲間
SLUM DUNK という素晴らしい漫画に影響されてバスケが好きだった私は学校の昼休みや放課後に結構な頻度でバスケを遊んでいました。運動神経は人並み以下だったのでやっぱり下手の横好きでしたが、それなりに楽しく遊んでいた記憶があります。
このバスケ仲間の一人(中学時代からの友人でゲーム仲間でもある)がバスケ中に骨折する怪我を追ってしまい、以後休み時間中のバスケが禁止されてしまったのを覚えています。大学受験前だったので致し方なし。
吹奏楽関連
中学からやっていた吹奏楽の延長で、高校でも吹奏楽部に入りつつ社会人楽団にも入って吹奏楽を続けていました。しかし社会人楽団は練習不足が祟ってクビになり、高校の部活でも人間関係の形成に失敗し、女性陣からそうスカンを喰らい部内で孤立することになります。音楽自体は嫌いにならなかったけどリアル女性と吹奏楽は嫌いになってしまいました。なので高校時代に仲良くなった友人は全員が男性です。
当時の生活状況
友人関係やコンピュータ関連、学業関連を総合すると、
- 朝から晩まで勉強と大量の宿題(とイラストの内職)をこなし
- 宿題が終わったら深夜ラジオを聴きながらゲームしたり漫画を描き
- 休日にパソコンでネットサーフィンしながらプログラミング
- それらをネット上に公開
という本当にいつ寝ているんだという生活を送っていました。今思い返しても怒涛の生活をしていたなと思います。
高校時代の成績
高校のころから少しずつ数学が苦手になってきました。苦手になったのは主に数学Ⅲ、Cの分野で、クイズノックの須貝駿貴さんがいう「算数」の分野は得意だったのですが、そこから本当の数学に至る橋渡し的な内容が上述の数学Ⅲ、Cで、この範囲の内容(高階関数や行列)は今でも苦手です。大学に入ってからこの苦手意識がもっと拡大していきます。
その他の教科の成績は中学の頃から傾向は変わらず。ただ日本史などの暗記メインの教科は非常に苦手でした。歴史もの自体は好きなんですけどね。
当時の私は私なりに日本史の試験の点数が取れない原因を分析し、
- 「年号と事実をセットで丸暗記する」勉強方法がよくないと考察、
- 「年号を覚えるのは最低限とし、歴史的事実の繋がりをインパクトのあるイラストで重点的に覚える」方法の方が点数が稼げると結論を下し、
- 日本史の授業をボイコットして別室で「まんが日本の歴史(20巻)」を読み耽る
という暴挙を半年間行ったのでした。
その結果、センター試験ベースで日本史の点数が45点底上げすることに成功し、無事目標の進学先に合格しました。
なお、その時一緒にまんが日本の歴史を読み漁った仲間が前述のT君です。T君の点数は底上げできたのでしょうか。最終結果は聞いていません。
大学生時代
私はとある国立大学の情報技術学科に進学しました。当時は珍しい人工知能の研究がメインの学科です。
特に人工知能そのものにはそんなに興味はなかったのですが、高校時代から細々とやっていたプログラミング能力を今後役立てたいという思いから進学先を選びました。この選択は大正解だったと思います。
大学では主に以下のようなカリキュラムをとっていました。
- 線形代数、幾何数学などの大学基礎数学。前述の通りこの分野の数学が苦手になっていたので履修は非常に大変でした。
- 情報科学の基礎教科。ブール代数や論理学、計算機理論、アルゴリズムとデータ構造、などが当てはまります。今思い返してみればこのような分野の学習を真面目にやっていたことが今日の技術スタックに大きく影響したと思います。
- プログラミング演習系。元々プログラミングはそこそこ嗜んでいたので大学講義程度のプログラミング演習は楽勝でした。前述の情報科学基礎教科との相乗効果も大きかったと思います。
Visual C++ に手を出して、すぐにあきらめる
大学生になって一番最初に購入したものは、Visual C++ のアカデミック版です。
前述の通りFF7のためにプレイステーションを買ったくらいFFバカな私ですが、FF7はC++で開発されていることをいろんな媒体で知っていました。ならば自分も!と思いC++でゲーム作成に挑戦したのですが、これがとても難しい。ゲームを作成することがこんなに大変だとは思っていませんでした。結局ぷよぷよのように連鎖が可能なパズルゲームを1回作成したきりでVisual C++は封印されました。
この後何度かC++を触る機会はありましたが、Visualな部分は苦手意識ができてしまい今日に至るまで触っていません。なのでUnityも食わず嫌いです。
大学生時代の交友関係
高校時代から引き続き交流がある友人の他に、
- 大学で得た同じ学科の友人
- インターネットを通じで得た友人
ができました。
同じ学科の友人
大学の中でできた友人は個性的な友人が多かったように思います。基本的に全員プログラミングがそこそこできて、演習室のコンピューターを前にいろいろ議論しながら課題を片付けて行った記憶があります。
インターネットを通じて得た友人
テレホーダイという悪魔のサービスを手に入れた私は深夜帯はずっとインターネットで遊ぶ生活になっていました。その頃出会って交流があった友人は
- TRPG系(オフラインでTRPGすることもあればWeb上のチャットでTRPGを行うこともある)の友人
- MMORPG系の友人
です。特にMMORPGで出会った友人は自分の人生を大きく変えていくことになります。
ターニングポイント・プログラミングが趣味から業務になった瞬間
大学生時代にプログラミングに関する大きな事件が2つおきました。いずれも今後の人生や職業に関する考え方に大きく影響したと思っています。
1.巨大掲示板の改造
前述のK君が運営するインターネット上の掲示板がありました。Perlで作成されています。ものすごく盛況で100万PV/日という当時としては恐ろしいアクセス量を誇っていました。
この掲示板がアクセス数が増えるにつれて動作が重くなり、ついにはタイムアウトが頻発するようになってしまって困っている、という相談をK君から受け、できる限りで原因究明と改造を行うことになりました。
この掲示板はスレッド形式の掲示板で、全ての投稿データを1ファイルで管理していました。今では考えられないような実装形式ですが1999年当時ではこの形式が普通でした。
私は大学で習った情報教育の基礎知識と、今は5ちゃんねると呼ばれている「2ちゃんねる」の実装を参考に1スレッドごとにファイルを分割するように掲示板を改造し、入念なテストを重ねた上で稼働中の掲示板を1日ほど止めてもらい、その間にデータ移行と新プログラムの本番化を行いました。
掲示板の動作は非常に軽快になり、友人からは何度も感謝された記憶があります。
この出来事が、人生において一番最初に行った「システム開発業務」で、プログラミングでものづくりを行いユーザーに感謝された最初の体験だったと思います。
2.TRPG掲示板の不正(とバグ)を暴く
当時遊んでいたPBW(Play By Web: Web上でキャラクターになりきって遊ぶTRPGのようなコンテンツ)上で双六のようなイベントが行われていました。
参加していたPBWサイトの掲示板にはサイコロを振る機能が備わっており、投稿時に1D6とか、1D10とかのダイスを振った結果を付与することができました。ターンごとにダイス付きの投稿をして合計数が最も大きい人が優勝というルールでした。
プレイ中、やたらサイコロでいう6の目を大量にだすプレイヤーがいました。運がいいにしては6が続き過ぎている。何か不正をしているのではないかと考えた私はそのサイトの他の掲示板(掲示板はイベント用、通常用、テスト投稿用など複数ありました)を巡回し、そのプレイヤーがテスト投稿用掲示板に大量のダイスつき投稿を行なっていることを発見しました。
当時だいぶんプログラミングに慣れていた私は、ファミコンなどのゲームがどのように乱数を生成しているか、ゲーム内でどのようにランダム性を担保しているかにも興味があり、いろいろな資料を読み込んでいました。FFのように小さい乱数テーブルを使い回しているもの、ファイヤーエムブレムのように乱数が階段上になっていたり、スペランカーのように実は乱数は全くなくゲーム開始からの経過時間で出現するアイテムが変わるもの、といろいろな乱数生成方法があることを知っていました。
テスト掲示板には投稿時間が秒数まで表示されていました。テスト掲示板以外には秒数の表示はありません。そしてこのテスト掲示板の大量投稿から、当該プレイヤーは
「ダイスの値は秒数に依存しており、テスト掲示板で投稿タイミングを取ってイベント掲示板にダイスの値が6になるタイミングで書き込んでいる」
という推論を行い、イベント中ですが掲示板の運営管理者にダイレクトメッセージを送りました。この推論は正解で、不正を行っていた当該プレイヤーは永久追放、掲示板のダイス機能は秒数依存から完全ランダムに修正されました。
この出来事は人生において初めてのシステムトラブルシューティングになりました。
その後のこと
この2つの事件があった後も、大小いろいろなトラブルシューティングや既存システムの改修をこの時代に行なっています。
今思い返せばこれこそが私がプログラミングを続けている動機であり、モチベーションになっていたのだと思います。私は当時このことに気づかず、大学卒業後の方向性を見失っていくことになります。
アルバイトについて
大学2年まではコンビニでアルバイトをしていましたが、大学3年時は地元のシステム会社でホームページ制作を行うアルバイトで今まで趣味でやってきたHTMLの知識を生かしCSSやJavascriptを覚え、大学4年次にはタイピング速度を生かしてメルマガ打ち込みのアルバイトをスポットで行っていました。メルマガ打ち込みのバイトはともかく、ホームページ制作のバイトはアルバイト身分にも関わらず顧客の職場まで取材に行ったり、なかなか得難い体験をしたと思っています。
なお、大学生時代に一度はやりたかったバイトは競馬場のファンファーレを演奏するバイトです。すごく実入りがいいらしい。吹奏楽の経験から大抵の楽器を吹けていたので楽器を所有していたのであれば一度はやっていたと思います。
大学院生時代
私は大学卒業後就職せず、大学院に進学しました。
理由は「院卒の方が初任給が高い」、その1点でした。
そもそも私は大学レベルの数学が苦手で、情報科学の研究は必ず数学が絡みます。また大学院のゼミは基本的に英語で進められます。私の英語レベルは研究論文を書くまでは達していなかったので英語にも非常に苦労することになります。
また、ちょっとした気の迷いで本来やりたかった分野とは異なる分野のゼミに入ってしまいました。音声工学分野で今まで音響を趣味にしていた私に取っては多少関わりのある分野ですが、研究内容には全然興味を持てませんでした。
以上のことが重なり、私は徐々に学校に行かなくなってしまいました。(なおゼミ以外の講義は大学時代と同じくらいのレベルだったので基本的には楽に単位を取れました)最後の半年間は完全に寮に引きこもってネットゲームばかりやっていました。おそらくうつ病に近い状態だったと思います。
修士課程の2年間が終わる3ヶ月前の12月ごろ、私の修士論文は当然進んでいません。この日、私は重大な決断を行います。
MMORPGで知り合った人の会社に押しかける
前述通り身体極まった私はMMORPG、具体的にはラグナロクオンライン(以下RO)で毎日現実逃避していました。当時の私はRO内では廃人まではいかないけどレベル90代のキャラクターを5、6体もつそこそこのヘビープレイヤーで、ゲーム内資産をばら撒いて音楽フェスみたいなイベントを行なったり、人間関連トラブルに巻き込まれて悪評を流されたり、MMORPGの闇には一通り触れていたと思います。
マイキャラ専用の情報サイトもインターネット上に開設し、自作のプログラムを併用してイベント運営を行なっていました。
そんな中、「どんなことでもOK、悩みを聞きます」みたいなイベントがあり、学業に詰まった私は気まぐれで現状をどうすれば打開できるかを相談しに行きました。
私の経歴や現状を聞いたそのプレイヤーさんは、「もしやる気があるなら自分が勤めている会社で働いてみないか」と提案してきました。事業拡大に際してプログラマーが足りないそうです。ただし待遇はアルバイト。私は悩んだ結果、残り3ヶ月で卒業ではあるものの大学院を中退してアルバイト先である東京に行くことにしました。
私はすぐさま両親と連絡を取り、現状の状態の説明と学校を中退して働きたいこと、研究という分野に肌の合わなかったこと、本当にやりたいことを見つけられそうな気がすることを説明し、真摯に頭を下げました。私の精神状態がよくないことを両親も気づいていて、退学の手続きや引越しの支援をしてもらうことができました。この時の両親の対応には今でも頭が下がる思いです。
私は12月中に大学院を退学し、翌年1月から誘われた会社でアルバイトとしてプログラマー人生をスタートすることになります。
アルバイト時代(東京)
前述通り、東京のシステム開発会社で働くことになりました。業務内容は
- 着メロ(当時はまだスマホがなく、ガラケー全盛の時代でした)を各機種ごとに最適化するプログラム
- 入力データは専用に作られたMIDIファイル、出力はケータイ用に最適化、圧縮された小さなファイル
- バックエンドプログラムはJavaで開発されている(最適化するDLLはC++)
- フロントエンドのプログラムはJava(オフラインデータ作成用途)とASP(ケータイ向けサイト用)
今までの経歴でも書いた通り、私の能力、経験は音楽関連に偏っていて、さらにDTMやMIDIの知識があり、趣味や大学教育を通じてJavaにも精通している。これ以上ないくらい当時の私のスキルにマッチした職場でした。
担当業務は主にJavaのプログラム改修ですが、ちょっとだけ自作のMIDIデータも作って着メロデータの業務に貢献しました。当時流行っていた「恋のマイアヒー」とかを作っていた記憶があります。
この仕事を通じて、今まで学校で習っていたプログラミング技術がいかに未熟かを思い知らされました。そこそこできるプログラマーを自負していましたが、まだまだ上は存在するし自分の腕もまだまだ未熟。当時のJavaはバージョン1.4でしたが日本語に訳されたプログラム言語自体の仕様書が公開されていましたので必死に読みながら内部構造を理解していきました。ここで勉強したことと仕様書を読み切った経験はのちの業務に大いに活かされていきます。
ケータイサイトの新機能リリース前は本当に祭りでした。全員総出でテストサイトを触りまくり、ホワイトボードに不具合を書いた付箋を貼って、ASP担当のエンジニアがカンバン形式でバグを片付けていく、という繰り返しです。ちゃんとしたプロダクトリリースの経験はその時は初だったのでとても新鮮かつ鮮明に覚えています。無事リリースできてレビューも届き始めると、「やりきった!」という喜びで胸がいっぱいになりました。
やっぱり、私は研究よりはものづくりがやりたかったんだな、と再認識することになりました。
彼女ができる。将来に悩む。
アルバイト生活は順調でしたが、私の人生の転機なる大きな事件が起きました。
彼女ができました。
いや、今までも付き合っている人はいたのですが、高校生の時は同じ吹奏楽部内での恋愛で、結局別れてしまい部活クラッシャー。大学生の時は地元のコミケイベントで偶然出会った大学の同級生と付き合い始めるもののすぐトラブルを起こして破局、またMMORPGではよくあるネット上の男女トラブルに一通り遭遇し、以降女性とは無縁の生活でした。
それがひょんなことからSNS経由で知り合った人と付き合うことになります。人生何が起こるかわかりません。
この彼女は今も人生のパートナーなのですが、付きあい続ける上で大きな問題が1つありました。
遠距離恋愛なのです。
私は首都圏に住んでいましたが彼女は四国在住です。定期的に東京まで遊びに来てくれるのですが、その交通費を払わせるのがとても忍びなかった。かといって交通費を全額支給すること私の稼ぎもありません。
アルバイト開始から半年が経ち、このままアルバイトを続けるか正社員として登用するかの交渉が始まりました。
交渉結果は、「契約社員であれば登用する。その代わり担当業務は拡大する」というものでした。拡大する業務はサーバー保守管理業務で、主にレンタルサーバーの死活管理や管理スクリプトなどの作成で、perlを使うとのこと。私の持ってるスキルスタックにもピッタリ合致します。
この交渉と当時に、四国(高松)でも仕事がないか転職サイトを探すことにしました。すると四国ではないが岡山にある人材派遣会社で、高松にも仕事があるという会社を発見。業務内容もJavaやperlを使った仕事ということでこの会社に転職し、四国に引っ越すことにしました。
最初の会社に在籍した期間は9ヶ月。しかし非常に密度の濃い9ヶ月間で、私の業務に対する姿勢はこの会社での体験であらかた形成されたと思っています。
残念なことに、四国へ引っ越した際に高校時代から続いていた人たちとのつながりは断たれてしまいました。
しかし、タコ足配線が過ぎた人間関係に疲れていた私にとって、この人間関係の断捨離はちょうど良かったのかもしれません。
会社員時代(四国)
四国で仕事がある、と言われて入った2社目の会社ですが、実際に四国には仕事がなく、岡山に本社を持つ有名な教育系企業の子会社に派遣されシステム開発業務を行うことになります。
この時の業務内容は、
- サーバーサイドjavaで情報サイト、通販サイトの管理
- perlを使って顧客データベースから属性検索し、メルマガの宛先を作成する
- 社内用語辞典の作成。これもperl。
と、今までと同じjavaとperlを主軸としてそれぞれのプログラミングスキルがどんどん磨かれていきました。
要求される技術レベルは1つ目の会社より高かったと思います。
また、情報サイト運営保守の業務については、大学生時代に行った「大規模掲示板の改修」の経験が地味に活きました。掲示板の高速化にある程度貢献できていたと思います。
スキマ時間の学習
この頃の業務はあまり忙しくありませんでした。ちょくちょく待ち時間が発生します。
この待ち時間で行える自主学習の方法として、「質問サイトで投稿されたプログラミング系の質問に全力で答える」という手法を編み出しました。
質問内容は選びません。Java、perl、HTML分野に限りましたが、とにかく上から全部答えます。自分にとって未知の内容であれば、調べて追試した上で回答します。そういうマイルールを課して質問サイトに全レスしていました。
この学習法で「調べる技術」が格段に向上したように思います。
高校生時代に日本史で実践したマイ勉強法の成功体験がこの学習法の成功に大きく影響しているかなと思っています。
そして四国で職を探す
職務内容については全然不満がなかったのですが、辛かったのは通勤です。
住んでいる高松から岡山までは電車で一時間程度。乗車前後の時間を含めると片道一時間半ほどの通勤時間です。
この時間もそれほど苦ではないのですが、問題は悪天候時に電車がストップしてしまうことです。
電車は瀬戸大橋を通ります。瀬戸大橋は安全と近隣住民の騒音問題に配慮し、橋頭上で10m以上の風が吹くと運行が停止されてしまいます。通勤時間帯に運行が停止されたら電車で帰宅できません。
その場合は振替輸送としてフェリーで帰ることになります。しかし岡山駅からフェリー乗り場がある宇野まで早くて一時間半、フェリーの待ち時間が最大一時間(一度に全員の乗客が乗れるキャパシティがフェリー側にない)。これが冬だと積雪の中長時間外に待たされることになりますし、電車が止まるのは冬が多いです。
こういった通勤事情も踏まえて、四国内、できれば高松で通勤できるシステム会社を探して転職することにしました。
幸いにも転職先はすぐ見つかりました。大手電力企業の子会社で、電力企業向けの案件が常にあります。2社目は2年半ほどで退職し、3つ目の会社に転職しました。
コミュニケーションスキルと「顧客の本当に必要なもの」を見破るスキルの重要性
3社目の会社で重要と感じた能力は、上記にも書いた2つのスキルです。
入社して1年目で指摘されたのが、「技術レベルに比べて会話レベルが低い」という事実です。
確かに私は会話レベルが技術レベルに比べて低いです。引きこもり生活が長かったのもありますし、今まで書いていませんでしたが軽い吃音を持っています。会話自体があまり得意ではありません。
しかし、この指摘は裏を返せば「技術レベルは申し分ない、技術を磨く時間で会話を磨いたほうがより業務に役立つ」ということになるわけです。この指摘を受けてから、顧客とたくさんいろんなことを喋るよう心がけるようになりました。
誤って退会してしまったブログを復活させた話
ここでちょっと小話。
当時共同でブログを執筆している人たちがいまして、私もライター兼管理者として関わっていました。
ある日の夜、同じブログを共同執筆している方から電話で連絡がありました。曰く、間違えてブログの退会処理をしてしまったと。これは大事です。
ブログの管理ページにログインしようとしたら、確かにアカウントが存在しないとしてログインできません。
しかし、ブログの記事自体は閲覧できています。どうやら管理ページにアクセスできなくなっただけで、ブログ本体はしばらく残る仕様のようです。
ここで私は以下の作業を行いました。
- 残っているブログの記事を全てクローリングしてHTMLファイルとして保存する(情報の保全)
- HTMLファイルをスクレイピングして記事の見出し、本文、コメントを抽出
- 新しいアカウントを作成し、上記スクレイピングした情報を自動で投稿するプログラムの作成
- 実際に自動投稿プログラムを動かして内容の確認
という一連の作業を一晩で行いました。ジョバンニもびっくりの速さです。
この時、私は本格的にサイトのクローリング、スクレイピングを行ったのは初めてで、やり方を一から調べながらコーディングした記憶があります。確かperlで作成しました。その頃はpythonを知らなかったし、bs4なんてモジュールもなかった時代です。スクレイピングは正規表現で頑張りました。
ブログの画像素材などは元々私が作っていたので新アカウントの再現は簡単でした。
このことで誤ってブログを削除してしまった方からは非常に感謝され、結構お値段のするお酒をいただけました。とてもおいしかったです。
この出来事がきっかけでスクレイピングに興味を持ち始め、スクレイピング技術の向上とそれに伴う法的責任の重さを勉強することになります。
相手の目線に立つ、相手の知識レベルに立つ
よく「顧客目線」とも言われますが、システムを使うエンドユーザーの立場を考えてシステム開発を行うのは重要なことです。システム開発側が良かれと思って作った便利機能が実はエンドユーザーには使い勝手が悪い、というのはよくあることです。
私は「三方よし」を常に心がけるようになりました。
- エンドユーザー(システムを実際に利用する人)
- システム運用者(発注元)
- システム開発者(つまり自分)
非常に難しいことですが、この3つが同時に「ヨシ」になったシステムはとても使い勝手が良く、保守性も高く、発注元にも喜ばれてまた受注がもらえる、という良い循環になります。
この会社に在職中、何度も「○○さんがプロジェクトリーダーならまた発注したい」と言われています。
また、「エンドユーザーの知識レベルと同じラインに立つ」努力を怠りませんでした。
ただ仕様書通りにプログラミングするのではなく、システムを使用するエンドユーザーの業務知識なども覚えながらシステム開発を行います。これはある程度開発業務に余裕がないとできないかと思いますが、これができるかできないかでエンドユーザーとのコミュニケーションの円滑さが大きく変わるかと思います。
エンドユーザー側から見るとシステム開発者が自分の担当業務に興味を持ってくれる、という事実が信頼関係の形成につながっていきます。特に顧客と仕様策定を行う立場の人は実践して絶対に損はないと覆います。
業務上の内容でジョークが言えるようになるレベルまで業務知識が得られれば最高だと思います。
見た目のインパクトも重要?
当時私はボルタリングが趣味で、週3くらいでジムに通っていました。
ある時壁からの落下した際の落ちどころが悪く、足の裏を骨折してしまいました。人生初の骨折です。
骨折治療中の定時後に、前年にシステムを納品した会社から急ぎの連絡が。自社で開発したシステムではないが連携先のシステムに不具合が発生し、バッチ処理が止まってしまったので急遽対応策を考えたいのできてくれないかという連絡でした(連携先システムの開発会社は時間がないと来社を断られた)。
その時即応できるのが私しかいなかったんで、松葉杖を持って急ぎタクシーで客先へ。
出迎えてくれた客先の担当者は私の骨折姿にとても驚き、こんな状態にも関わらず駆けつけたことへ大きく感謝をしていただけました。
その後の打ち合わせで、たちまちの対応と根本対策を私と客先の上長で巻き起こし、その場の問題は解決できました。その場で一時凌ぎのバッチを作成して根本対応は元々のシステム会社に修正依頼を出す形になったはずです。
後に聞いた話ですが、この件は数時間で対策を巻きとれたのも大きいのですが、文字通り骨を折っても駆けつけてくれるその姿勢に感動を覚えた、とのことで怪我人コスプレ(いやコスプレじゃなく本当に怪我をしていたのですが)もコミュニケーションスキルの一つなのかなぁと思った出来事でした。
良いアウトプットが、次の良いインプップを呼ぶ
これはいろんなメンティーさんにもお話ししていますが、目下の業務に不満点があっても、「会社が期待する水準以上で業務を遂行する」ことが重要です。
業務上のアウトプットの質が良ければ、次回アサインされる案件はだんだん「無理がない」案件になっていきます。会社にとって有用な人材であると認知されれば、いちかばちかで使い潰されるような案件にアサインされにくくなります。もしこの法則に反することが起こるのであれば、その会社は質の良いインプットの案件が存在しない、尻に火がついた会社ということになります。
新しい技術をキャッチアップできる環境にいられるかは運が大きい、でも本当は?
システム開発は、いわゆる「枯れた技術」をメインに行う開発と、新しい技術を取り入れつつ行う開発があります。
どちらの案件に回されるかは完全に運であると思います。しかし、日頃の業務に対する姿勢から「未知の技術が必要そうな案件にはこの人をアサイン使用」と会社が判断し、そういった案件にアサインされやすい人が確かに存在します。私のことです。
そのおかげでWindows8.1のタブレット端末を使った業務システムにもいち早く触れました。当時難しかった「Bluetoothの端末と自動ペアリングしてデータを送受信する」というミッションもやり切りました。この案件ではエンドユーザーの使い勝手が私が手がけた改良で大幅に上昇し、現場の人からも発注元からも感謝されました。
感謝という承認欲求は仕事のモチベーションになる
承認欲求という言葉はあまり良い意味で使われることがない言葉ですが、私にとってシステム開発のモチベーションはまさに承認欲求の賜物だと思います。
システム作成は大変だけど、開発したシステムを使ってもらい、喜ばれる。そういった体験が次の仕事のモチベーションに繋がり、新しい技術のキャッチアップのモチベーションになったりします。
逆にいうと、頑張ってシステム開発を行っても誰からも感謝されない、そんな案件が続くとモチベーションは一気に低下します。当時勤めていた会社で管理職になった際に、ミッションとして「新しい分野(技術スタック)の業務を開拓する」というものがありました。私は前述のタブレット端末向けの開発案件をその後の保守案件も含め成功させ、事業所の売り上げの10%くらいは貢献したはずなのですが、当時の上司から「このタイプの案件はもう受注しない」と宣言されてモチベーションを失いました。顧客からは「ぜひまたあなたに担当してもらいたい案件」と名指しでお願いされていたのにもかかわらず、でした。この時点で3社目の会社を退職し、自分を必要としてもらえる会社に転職するかフリーランスでやっていく決意を固めました。
その後いろいろなことで心労が重なり、予定よりも早めに退職することになります。
製造業のプログラム開発担当となり、そして
その後半年ほど心を体を休め、産業機械の製造を行う会社に転職しました。
前職は管理職、今職はヒラからのスタートなので給与面はガタ落ちです。しかし、3社目でSES派遣で勤めたとある製造業の生産管理システムを開発保守していた際に、気難しい職人気質のお客さんとシステム開発を通じて最終的に意気投合した経験があり、製造業の情報システム担当も楽しそうだなぁ、というのが転職を決めた大きな理由です。
実際に、今まで知らなかった産業機械の電子制御や、今までうろ覚えだった電気関連の知識を再度学習する機会に恵まれます。35歳を超えてから心機一転未経験の業種に転職でしたが努力する姿勢と技術のキャッチアップの速さから周りからの評価は高かったと思います。
入院から復帰できず退職、そして
4社目の試用期間が過ぎて1ヶ月が経った時、発熱から突然ひどいめまいに襲われて2週間以上入院することになりました。
原因はウイルス性の喉頭炎で、子供の頃罹患した水疱瘡の再発です。水疱瘡のウイルスは耳の神経に滞留し、通常は帯状疱疹という体に帯状に発疹ができる病気になり、それが完治するともう二度と罹患しない病気なのですが、この際に耳の神経を傷つけることが稀にあるそうで、私はその稀なパターンだったようです。
右耳の機能がほとんど失われました。
耳は音を聞く機能の他に三半規管という体のバランスを取る仕組みがあり、この仕組みに傷が着くと常時めまいが起こったりまっすぐ歩けなくなったりします。私は聴力低下、常時耳鳴り、体のバランスが取れなくなり転倒しやすくなる、常時強度のめまいが起こるといった全部入りの症状が発生、めまいは2ヶ月ほどで「常時軽いめまい」まで回復しましたが他の機能は今現在も回復していません。
入院中に長期傷病休暇という立場になり、退院してから業務復帰に向けて歩行訓練を行なっていましたが、このタイミングでコロナ禍が始まります。4社目の会社で製造している機械はホテル向けのクリーニング用機械で、旅行業が大打撃を受けたせいで会社の業績は急速に落ち込んでいきました。そんな中転職したばかりの人員でしかもめまい持ち、工場での作業も危険となると雇う余裕はないでしょう。結局傷病休暇期間を使い切った後退職となりました。
今の自分に何ができるか?
傷病期間中に「もうこの会社に居場所はない」と悟った時点で私は「現状の体調でできることは何か」を模索し始めました。通常の通勤を伴う仕事はできません。特に朝方の目眩が強くフルタイムで働くことはできません。幸いコロナ禍でリモートワークに世間はシフトしています。リモートワークでアルバイトのように働けないか、また体調がいつ悪くなるかわからないのでパートタイムよりは業務委託か就業時間に自由がきく業態はないか探し始めました。
その時に見つけたのがメンタリング業務です。思い返せば昔から「誰かに何かを教える」ことは好きでした。小学生の頃は算数の課題を最速で終わらせて周りの児童に解き方を教えていましたし、中学生の頃はそれがプログラミングに変わっています。社会人になっても自分の後輩で直接新人教育を実施したメンバーはすくすく育っています。この方向で少しでも仕事ができないかと考え、そのために足りないスキルは何なのか?を分析しました。
出した結論は、「お客となる生徒が満足する教え方を身につける」ということです。
私はそのスキルを身につけるため、以前2社目の会社で行った「質問サイトでの回答」で上記の訓練をすることにしました。今回の対象サイトはteratailです。
ただし、今回は目標を変更しました。
- 極力既存回答のついていない質問に答える
- 技術内容の選り好みはしない。全然知らない分野の質問でも全力で調査する。
- ベストアンサーを得ることを目的とする。これが最優先目標とする。
- (ベストアンサー目的と関連して)ソースコードだけを欲する質問には答えない
回答するのであれば、絶対にベストアンサーに選ばれるように回答する、というのを最優先にします。
ベストアンサーに選ばれるということは、質問者が求める回答ができたということです。今後お金をとって質問に答えていく以上、顧客満足度が高くなければリピーターはつきません。顧客満足度を上げるような回答ができるようにいろいろ試行錯誤しながら3ヶ月ほどteratailへの回答に集中しました。
その結果、ベストアンサー率は63%。週間ランキングにも何度か10位以内に入りました。これは常連回答者では驚異の数字ではないかと思います。
ともかく、この3ヶ月の訓練で質問者である顧客が満足できる回答方法の傾向はだいたい理解できました。ほどなく退職し、MENTAを主戦場として「教える」を商売にしていこう、と思った矢先でした。
退職した会社から業務委託を受ける
退職した4社目の元々の業務は、産業機械の電子制御プログラム作成ではなく、新しく導入する生産管理システムのリプレースを主導的に行うシステムエンジニアリングでした。ただしこの会社の規定上産業機械の製造に関わらないと著しく給与が減らされるので産業機械の製造にも関わるような立場になっていました。
私が辞めてしまったことで生産管理システムのリプレース作業に欠員が出てしまったわけですが、発注先のシステム会社も人員的余裕がなく、システム開発を手伝ってほしい、業務委託という形で受けてもらえないかという打診が来ました。
この案件は、傷病休暇期間中に人事担当の方や当時の社長と業務の姿勢について根気よく話し合った結果だと思います。
元々この会社に転職できたのも社長をはじめ主要な役員メンバーが私の業務経験と新業務に対するやる気を買ってくれたからということもありますし、元々担当していた生産管理システムの要件定義に事務方の要望をうまく取り込めていたという実績もありました。
この業務委託を受けるには私自身が個人事業主として開業する必要があります。会社の規定上さすがに開業していない人には発注できないからです。
私は急遽個人事業主として開業届をだし、受注先のシステム会社からの業務委託という形で1年以上お仕事を受けています。
開発言語はC#ですが、今まで使ったことのないBlazorというフレームワーク、そしてWebAssemblyという未知の技術に翻弄されていますが少ない資料を漁りながらなんとか仕事をこなすことができました。
会社員時代にプロジェクトリーダーとして見積から納品まで行ってきた経験が全て活かされた瞬間でもあります。
体調の不安もありますが、それさえなければフルスタックのフリーランスエンジニアとして十分太刀打ちできると自信がついた出来事です。
MENTAの活動について
業務委託の案件がない時期はMENTA専業のようになっています。
MENTAでの私はプログラミングについてのメンターとして登録していますが、特にプログラミング言語やフレームワークについて指定はしておらず、「なんでも相談してもらって大丈夫」というスタンスでやっております。
そのため、自分自身全く知らない分野の相談がちょくちょく舞い込んできます。
そういった相談を受け、自分自身の知識の糧としたり、新しい分野への切り込みのきっかけをつくったりしています。
MENTAではメンティーさんに自分の知識を教える立場ですが、逆にメンティーさんから教わることも多いです。
MENTAでの活動は、基本的に「受動型」です。
なんらかの相談を受けてから、私が調査した結果を回答します。
その過程でいろいろなお話が聞けたり、新しい技術のキャッチアップができたりします。
私の学習モチベーションは、現在こんな感じで続いています。
まとめ
非常に長々と、自分の人生を思い出しながらどんな勉強をしてきたか?を書きました。
簡単に学習の変遷をまとめると、
- 趣味で始めたこと(プログラミング然り、DTM然り)が
- 業務上必要に迫られるような要件や問題解決があり
- その解決に向けて足りない知識やテクニックを全力で勉強しながらこなしていく
というサイクルの繰り返しであると思います。
結局のところ、必要に迫られなければ本格的に勉強しません。その「必要に迫られる事態」はほとんどが仕事です。
なので、なんでも良いからこの業界の仕事に関わり、仕事を通じて勉強していくのが一番の勉強法であるかと思います。
では全くの未経験、スキル水準が不足している状態でどうやって仕事にありつくのか?
これはもう「手当たり次第応募して拾ってくれるところを探す」しかないです。ホワイト、ブラック企業関係ありません。
なんでもどこでも良いので、とにかく今の自分を雇ってくれる会社を探してください。
変な選り好みをしなければ、どこかには引っかかると思います。
おわりに
私がプログラミングスキルをここまで上げてきた背景には幼少時代からの積み重ねがとても大きかったことに改めて気付かされます。
このくらいの経験がなければプログラマーにはなれない、ということは当然ありません。しかし、プログラミングという行為を続けるモチベーションはさまざまなものに繋がっていて、いろんなことに興味を持てる人ほどプログラミングスキルが高い傾向にあるのではないかと思います。
皆様においても、モチベーションを保てるような興味あることとプログラミングをつなげてみてください。
少なくとも私の経験上、金銭面のみではモチベーションは保てません。