ITとの出会い(前半・学部時代)

この記事では僕がどのようにしてプログラミングを知り、SIerに入社することになったのかを紹介する。

 

学部時代僕は流体系の学問を先行しており、情報学には大して精通していなかった。しかし、大学2年にて数値計算に強いFortranという言語を授業で習い、全くもって理解できなかった。あれは先生の教え方が悪い。標準出力ってなんだよ、、、一応言葉の定義は教えてくれたけど、なじみのないプログラミングの言葉で形式的に言われても教えたことにならんでしょ。あとあの先生はプログラミングに向いてないと思われる。課題の提出形式を「①学籍番号②名前③課題Aの答え④課題Bの答え」と指定した来たからその通り送ったら「答えだけ送ってきてんじゃねえぞ、ちゃんと挨拶文くらい書きなさい」だとよ。あなたが指定した通りの出力を返したんですよこっちは。システムにない出力を相手に求めるのはやはりコンピューターを触る人間として向いてない。

しかしながら、当授業の2期目に入ったところから、コツをつかみだした。プログラミングの意味を理解しようとか考えず、提示されたコードをただただコピペして動かしてみる。それを繰り返すうちに、頭が勝手に意味を読み取ってくれるようになった。そうして、その授業の期末試験ではクラスで1番に完答して途中退出した。課題何回か出さなかったから秀はつかなかったけどね。

 

学部3年に上がる頃、ある日本屋さんをぶらぶらしてたら何かC言語の本が目に入った。特に理由はないけど何か買ってみた。自分のPCで開発を行う方法がよく分からなかったので本を読んで頭で理解するにとどめていたが、4月になり新学期が始まると、選択必修の授業にC言語の授業があったので即受講した。みんながうんうん唸ってるときも余裕のよっちゃんでコードを爆速で書きまくり、毎回最初に退出していた。期末試験でも1番に完答して途中退出したのだが、相変わらず秀がつかなかった。これはこの講義を担当していた低能ゴミTAのせいである。まあTAとはいえど大して勉強もしていない学生が金のためにやってることがほとんどだから、多少学術的な質問に答えられないのは仕方ない。しかし日本語が喋れないのはいかがなものか。僕が、「今日の課題って出力結果だけだせばいいんですか?コードは出さなくていいんですか?」と聞くとTAは「コードも出してもいいよ」だってさ。出していいかどうかじゃなくて、出さなくていいかどうかを聞いてんの。日本語分かる?小学校からやり直して?って今は思ってるんだけど、その時は予想を超える相手の馬鹿さにこちらの脳がショートしてしまい「あ、はい」と答えてしまった。コードは出してもいいってことは当然出さなくてもいいんだと思って出さなかったら、どうやらコードは出さなければいけなかったらしい。そのTAのせいで評価秀がもらえなかったのは非常に腹立たしいが、プログラミングに得意意識を持つきっかけになったので、この授業は受けてよかったと思ってる。

 

 学部3年の後期は、当時付き合ってた子がVisual Basicの授業を受けていたので、僕は学科の都合上受講資格がなかったが勝手に潜り込んで一緒に受講していた。まあ行ったり行かなかったりなので大して身につかなかったので、Fortran, Cに続く3つ目の言語を学んでみて、言語ってどれもこれも似たような感じなんだなー、ということを知った。

 

学部4年になる前の春休み、サークルも引退したしとても暇だったので、プログラミングの勉強に本腰を入れようと思った。どういう経緯で知ったのかは忘れたが、そこで某プログラミング学習神神神神神神神神神神神神サイト、Progateを知ることになる。何から学べばいいか分からなかったので、とりあえずHTML & CSSのコースを一通り受講した。非常に便利なサイトである。無料コースは一瞬で終わってしまうので、即課金する必要がある。しかし月980円弱という破格の値段で、中身は月3万円くらいとられても文句なしのコンテンツ。コースを一通り終わらせたら、実際に模擬サイトみたいなものを作ってみた。作ったサイトのURLがどっかに行ってしまいもう見れなくなってしまったのが残念である。

 

春休みのある日、大学院で情報を専攻している先輩と飲みに行ったら、「これからはJAVAの時代だよ~」と言われ、よく分からずにProgateのJAVAコースを受講してみた。それと同時にJAVAの分厚い入門書も購入し、同時に読み進めた。書籍で言語の仕組みを理解し、サイトで実践練習を積む。このやり方でオブジェクト指向等一気に理解した。この頃が僕のプログラミング学習の中で一番はまっていた時期かもしれない。何時間でも集中でき、それまでめんどくさくてどうしてもやりたくなかった環境構築も何とか乗り越えた。Progateで覚えた内容は、VS codeで適当なコードを書いて実際に動かしてみた。当時新しくドトールでバイトを始めたので、レシピ学習用ソフトを作って自分で使ったりした。僕の実家は朝6時からごはんなので、その後歯磨きなど済ませても7時には余裕で活動開始できる。そこからプログラミングを行い、気付いたら12時、みたいなことがざらにあった。JAVAコースが終わったら他の言語も色々と適当にかじってみた。

 

学部4年に上がり研究室に配属されると、Fortranを使った入力値推定的なことを課された。カルマンフィルタといった制御装置を使うのだが、それがめちゃくちゃ難しかった。それはそれとして、その装置をFortranで実装する。とはいえ先生が入出力システムが僕の研究対象と異なるカルマンフィルタの完成版のコードを持っており、それを丸ごともらえた。今までのプログラミングでは三角形の面積を計算したりする程度だったのだが、ここで初めて「数値計算」なるものを知った。

僕は、数値計算と言う素晴らしく安直な人類の英知に驚き、敬意を示した。

ほんとに安直。マジで安直です。でもすごいんですこれが。

数値計算に触れたことのない人のために簡単に説明したいところですが上手い説明が思いつかないのでまた今度。

とにかく、数値計算を知って、今までFortranを学んできた意義をようやく理解した。ちなみに何を数値計算したかと言うと、一様流中に置かれた円筒が流体力を受けて振動する様子をルンゲクッタの式で解きました。ただそれだけなのにもう感動がすごくて、ちょっと初期値を変えたり速度を変えたり円筒の直径を変えたりして、色々いじって色々遊びました。もうそれだけで1週間は潰れた。物体を時々刻々と動かすだなんて、まるで神にでもなったかのような気分だった。そういう感じで色々とコードをいじってエクセルでグラフを書いてゼミで発表したら、「来週までにその結果をフーリエ変換してきてください」と言われた。そういや必修の振動学とかいう授業で習ったような習ってないような、、、と思いつつ、やり方をググってエクセルでやってみたのだが上手くいかなかった。すると、同じラボの先輩が「お前MATLAB使えよw」とか言っていきなりどついてきたので「教えてくださりありがとうございます」と言いつつどつき返し、MATLABをインストールした。真面目に使う言語はFortran, C, JAVAに続いて4つ目かなーと思いつつマニュアルを読んだ。インストール完了から3時間後には40通りくらいある数値計算結果を各々FFTし、支配的な周波数とその時の振幅をまとめたグラフを瞬時に出力した。それまでに学んだ言語は本読んだり授業受けたりして必死に習得したのに、遂にたったの3時間で習得し実装もできるようになるとは!もう俺は天才プログラマの域に達したわ、将来はグーグルにでも入って稼ぎまくろう。そう勘違いし、その週のゼミではその結果をどや顔で発表した。先生に「さらにこの40通り全てを条件を変えて20ケースくらいやってほしいんだけど、、、できるかな?」と言われたので、「プログラムで自動化したので1ケース3秒で終わりますけど?」と回答し先生と先輩たちを驚かせた。言ってしまえば素人が行うレベルのプログラミングレベルなら言語ごとの違いなんてほとんどないし、言ってしまえば標準語と関西弁の違いみたいなもん。どこが違うかだけピンポイントに抑えて頭に入れてしまえばもう習得できてしまうんだよね。さらにMATLABというのは研究者やエンジニアがコーディングに悩まなくて済むよう極力簡単に使えるよう開発されたものなので、簡単で当然。でもそんなこと知らない僕は舞い上がって調子に乗っていた。こうして、Fortran数値計算しつつMATLABFFTとグラフ化作業を行い、他にも自動化できるところは全て自動化した。こうして、プログラミング、ひいてはITに魅了されていった。

この経験は就職活動時SIerの面接で大いにアピールした。

 

しかしFortranMATLABではできることに限界がある。正確に言うと、この2言語は学術面では大いに使えるものの、家族や友達に「俺プログラミングできるんだぜ!」って紹介したときに「どんなことができるの?」って聞かれた時説明しづらい。仮に説明して伝わったとしても面白みがない。

また、プログラミングから生まれる最終的なアウトプットを、誰もが触れる(物理的にではなく視覚的に...??)というか、プログラミングを知らない人にも簡単に提供できるものが欲しかった。イメージとしては、B2BではなくB2Cをやりたい人の気持ちに似ていると思う。産業用ロボットを作るよりアシモ(古いなw)作る方が楽しい的な。さらには、コーディングから人に提供するまでの全てを自分でやりきってみたいという気持ちもあった。

これら2点の動機により、Androidアプリの開発を行ってみた。言語はJAVAを使うのでちょうどよかった。

まず、Android Studioという開発用ソフト(?)をインストールした。使い方は、ドットインストールというサイトを見て勉強した。これは、作業画面を映しながら音声付きで説明してくれる、いわば映像授業的なコンテンツである。Progate程の感動はないもののこれはこれで使いやすい。月額1000円課金するとオプション機能が使えるが正直なくてもそこまで困らない。Progateは言語の学習には使えるものの、ツールの使い方等は講座が用意されていない。ドットインストールにはAndroid Studioの講座があり、インストールの仕方から全部教えてくれたので、それに従って開発の準備を行った。Android Studioにはエミュレータという機能があり、PCの中で仮想的にAndroidのOSを立ち上げ、その上でアプリを動かす機能である。これを使えば、実機がなくてもアプリの挙動を試すことが出来る。しかし、これがものすごいCPU容量を食う(CPUの使い方合ってる??)もので、僕の4GBパソコンでは太刀打ちできなかった。そこで、せっかく実機があるので実機をUSBケーブルでPCにつないで、スマホ上で直接挙動を確認した。

何で初めからそうしなかったのかというとですね、そもそもエミュレータとは?sdkとは?sjkとは?second joshi kosei?的な感じだったので、実機を使えばエミュレータ使わなくて済むとかそんなことを判断できるレベルではなかったのだ。幸いサークルの後輩にAndroidオタクくんがいたので、彼に相談したところ「実機使えばいいんです」と言ってやり方を教えてくれたので、「なんだそんな簡単なことだったのか」と気づきエミュレータの設定をオフにした。ちなみに実機を使うには実機側での設定も必要なのだが、それはドットインストールでは触れられていなかったような気がする。そこも後輩君が教えてくれた。そうして無事、実機上に"Hello Android !"を表示した。

 

そこからは教本を読んで、技を増やしていった。オブジェクトを画面上で動かしたり、重力センサーつけたり、マップ使ったり。最終的にはポケモンのゲームを真似したものを作ってみた。で、ここで結局B2CからB2Bに戻ってしまうのだけど、研究で行っていた数値計算Android上で行い、物体の振動現象をスマホ上で示すという需要ゼロアプリを作成した。せっかく作ったし研究室の皆に見せたいと思って、playストアにアップした。これもまた一苦労で、何かよく分からない署名とかkeyとか所在地とか色々記入する画面があって、それらを済ませるとapkとかいう謎のファイルが出力される。それをgoogleの開発者向けサイトにアップし、他にも色々と情報を入力していくと、記入できる。どうやらアプリの審査なるものがあるそうで、アップロードからリリースまで半日くらいはかかった。リリースされた時は非常に感動した。

こうして、Androidアプリを作って公開してみよう!という試みは幕を閉じ、ひとまず卒業研究に専念した。

この経験も、SIerの面接では大いにアピールした。

 

卒論執筆ではLaTeXという文書作成用言語を使った。あまり真面目に研究を行っておらず卒論に書く内容も薄かったので、MATLABで画像を量産しまくって片っ端から貼っていくことでページをかさ増しした。数百枚に及ぶ画像を全て手作業で貼るのは骨が折れるので、そこでLaTeXが大活躍した。繰り返し計算を組んでボタンを1回押して放置したら、数分後には全画像が論文内に挿入されていた。

 

こうして卒論を無事提出し、卒業認定され、大学院へと進学した。