odiak.net

プログラミングを始めてから今に至るまでを振り返る

フルタイムでプログラマーとして働き始めて7年くらい経つので、
最初にプログラミングを始めてから今までのことを、少し振り返ってみようと思う。

だらだらと長く書いてしまったけど、よかったら読んでね。

中学生時代

九大のイベントで、プログラミングの楽しさに出会う

今は開催されていないと思うけど、当時、九州大学が夏休みに電子工作やプログラミングなどを中学生に体験してもらうようなイベントが行われていた。

ある時、母親がそのチラシをどこかで見つけてきて、僕に渡してくれた。
面白そうだなと思い、参加を申し込んでみたら、参加できることになった。

イベントはいくつかのコースがあって、それぞれ別のことをやっていた。
レゴのマインドストームでなんか作るコースとか、レーザーでなんか切って作るコースとか、いろいろあった気がする。
僕は、ロボットとプログラミングのコースに参加した。(自分でそれを選んだのかどうかは忘れた)

最初は、P!MOTという、市販のプログラム可能なロボット(の改造品だった気がする)を動かした。
本体の後ろにあるボタンを使って簡易的なプログラムを打ち込んで、ロボットを動かすことができる。

プログラムは、進むとか回転するとかの基本的な動作に加えて、繰り返しや、近接センサーの値を元にした条件分岐なども記述できた覚えがある。

僕たちは、それを使って決まった図形を描くように動かしたり、障害物を避けて走らせたりした。

その後は、超簡易的なCPUのシミュレーターみたいなもので遊んだ。
確か、加算器とかレジスタとかがあって、値を出し入れしたり演算したりする命令を書いた気がするが、詳しくはよく覚えていない。

とにかく、「CPUってこんなにしょぼいことしかできないのかー。でもこれがコンピューターの中身なわけ?すごくない?てか意味不明」みたいなことを思った。
そして、プログラミングはなんだか楽しかった。

おうちでプログラミング

家に帰って、プログラミングをやってみようと思ったものの、どうやったら良いのか分からない。
九大の人には、「Webで検索して調べるといいよー」と言われたものの、家にあったのは古いMacOS 9のマシンだった...。

なんかいろいろ調べていると、MacOS 9ではAppleScriptというプログラミング言語を書いて実行できることがわかった。
ちなみにこれは、Macのいろいろな機能にアクセスして処理を自動化したりできるスクリプト言語で、文法は英語っぽい変なやつだが、今でもちゃんと生きている。

で、OS9でプログラムを書く方法は他には分からなかったので、AppleScriptを書いた。
Webで見つけたコードをコピペして、数字を当てるプログラムとか、壁紙を変えるプログラムとか作ってた。
でもWebにもそれほどたくさん情報はなかったし、やってることもかなりショボかったと今は思うけど、当時はなんか楽しかった。

余談だけど、マシン(というかOS)が古すぎたせいでブラウザでFlashが使えず、インターネットの体験が最悪だった。
当時まだ割と新しかったYouTubeは見られないし、成人向けコンテンツも見られないものが多かった。

高専のことを知る

数学の先生に進路のことを相談していて、「高専なんかもありなんじゃない?」と言われたのがきっかけで高専を知った気がする。
あ、それとは別に、高専の案内が配布されたこともあったような。

そんな感じで、高専に興味を持つようになった。
オープンキャンパスみたいなのにも参加して、ここならいろいろ楽しいことができそうだな〜と思った。

高専の他に、とある普通高校の理数科にも興味があった。
そちらでは技術に関することは学べなさそうだけど、理数系の科目に尖っている感じに惹かれたし、さらに高専よりも偏差値が高いとされていた。

どちらにするかは最後まで悩んで、とりあえず両方受験することにした。
が、入学手続きの日程の関係で両方の結果を待って考えるということができず、結局先に受験して合格した高専に進学した。

しかし、今でもこの選択はなかなか悩ましいものだったと思う。
プログラミングとかわざわざ高専に行かなくてもネットで勉強できたよー、とも思うが、高専でプログラムやる人たちと出会えたのも良かったし。
普通高校の方がより良い大学に行くことができた可能性が高い?という気もするが、高専行っても結局辞めてるじゃん、という現実もあり。
本当は高専を辞めずに大学に編入するべきだったんだよな...(こればかりは悔やんでもしょうがない)。

続・おうちでプログラミング

中3の頃、新しいiMacを買ってもらい、これで家のコンピューター環境がようやく近代的になった。

あと、時期は少しずれるが、iPod touchを買った。本当はiPhoneが欲しかったけど。

iPhoneへの興味と同時に、アプリを作ることへの興味もあった。
それで、iPhoneアプリ開発の本を買って、やってみることにした。

だけど、書いてあるプログラムのことがさっぱり分からないし、本の通りにやっているはずがうまくいかなかったりして挫折してしまった。

その頃、Apple製品の知識やインターネットの知識は、Mac系の雑誌(MacFan、Mac Peopleなど)を立ち読みする(たまに買ってた)ことで得ていた。
雑誌を見ていると、Twitterというのが流行っているらしかったので、僕もやってみることにした。

Twitterでは、プログラミングをやっている中学生や高校生がぽつぽついて、なんとなくフォローした。
そういう人たちから、iPhoneアプリを作るならまずC言語をやった方が良いということを聞いて、C言語をやることにした。
(ところで、もう少し社交的でもう少しやる気があったら、もっとネットで人と交流していろいろ吸収できていたかもなぁ。)

C言語は、基本的なところはそれなりに分かった。
でも結局iPhoneアプリは作れなかったし、作らなかった。

同時期に、HTMLって面白いよーと言われて、Webサイトの作り方を学んでみた。
とほほのWWW入門を読んで、HTMLやCSSを覚えた。

そのうち、PHPやJavaScriptというものの存在を知り、コピペしながらいろいろ遊んでいた。
以後、いろいろやったものの基本的にはWebプログラミングが僕の中心にあったと思う。

そういえば、中学生の頃は、AppleやGoogleで働きたいなーと思っていたっけ。
そのために、アメリカの大学または大学院に行けたらなあと思っていたが、その夢を貫き通すほどのやる気はなかったのだった。

高専時代

高専に入ってみると、情報系に限らず技術のことに関心がある人がとても少ないことにがっかりした。
入る前は、自分みたいな人がたくさんいると思っていたのに。

それでも、そういう人はゼロではなかった。
特にプログラミングラボ部(プロラボ)という部活に入ると、面白い人たちがたくさんいた。

プロラボの先輩たちの一部とは、なぜかTwitter経由で入学前から繋がっていた。
しかも、その先輩たちの一人に、自宅を特定されて真っ青になったという思い出がある。

プロラボの人たちは、競技プログラミングをやったりゲームを作ったりしている人が多かった中、僕はWebプログラミングをちまちまやっていた。
その後徐々にそういう人は増えていったけど、当時は少数派だった。
僕も競技プログラミングを多少はやってみたが、あまり楽しめなかった。

そうやって作ったものの一部は、文化祭の部活紹介で展示されたり、先輩のやっているサービスに組み込まれたりしたこともあった。

部活のメーリングリスト的なシステムを、Pythonで作ったこともあった。

プロラボでの一番の成果といえば、最後の年に出場した高専プロコンだと思う。
何人かのチームで作品を作って発表する自由部門に出場したんだけど、その時は本戦に行って、小さいけど賞をもらった。
災害時に使用するシステムのプロトタイプのようなものだったのだけど、夏休みを使ってハードウェアとソフトウェアの両方を自分が中心になって作ったのはなかなか楽しかった。
(というかほぼ自分一人で作った。)

あ、授業の話をしていなかった。

僕のいた学科は、「制御情報工学科」というところで、機械と電気と情報と制御をバランスよくやるような学科だった。
情報に関しては、僕が辞めるまでの間に受けた授業で、役に立ったなと思うものはほとんどなかったし、そもそも情報系の授業はかなり少なくて、残念だった。

電気とか電磁気学とかの授業はまあまあ面白かったけど、怠けていたら分からなくなってしまった。

そんな感じで学校へのやる気がなくなってしまい、そこに体調の問題が重なって、もういいやーと思い4年を終える直前で辞めてしまったのであった。

福岡のITコミュニティーへ

学生時代、Twitterを見ていて、エンジニアの人はなんか勉強会なるものに参加しているぞということに気づいた。
自分もなんか参加してみたいなーと思い、地元のコミュニティーを探してみた。

自分のやっている・興味のある技術に関連するものがないかなーと思って見ていると、Pythonの勉強会があったので、恐る恐る参加してみた。

行ってみると中の人たちはとても親切で、イベント自体もとても楽しいものだった。
学生の参加は珍しいようで、終わった後に焼肉をごちそうしてもらったりもした。

それがきっかけで、ITコミュニティーの知り合いが少しずつ増えていった。

Pythonの勉強会で知り合った人の会社で、少しアルバイトをさせてもらった。
正直なところ全く貢献できなかったけど、プログラマーの仕事の雰囲気みたいなものが分かったし、なかなか楽しそうだなと思った。

その後、もう一つ別の会社でアルバイトをした。

そこでは、当時は割と新しかったWebRTCを使ったビデオ会議システムを作ろうとしていて、僕はそのプロトタイプみたいなものを作った。
ライブラリを使ってハックして、無理やり複数人で通話ができるようにし、テキストチャットも作った。
僕の仕事はそこで終わったが、僕の作ったプロトタイプはその後、ちゃんとした製品へと進化していてすごく嬉しかった。

1社目: カラクル

入社のきっかけ

先ほどのような縁で、カラクルという会社の社長(通称: ハカセ)とお話をする機会があった。
大学院を出てから会社を作ったそうで、これからすごいことをやろうとしていてエンジニアが欲しい、ということだった。

大学での研究の話も聞いて、半分も分からなかったけど、面白そうだなと思った。
こちらも高専でやったことなどを話した。

そんな感じで、こちらも興味を持ったし、向こうも高専を卒業した後とかに来てくれないかな〜という程度に考えていたと思う。

その後、「もうダメだー。学校やめるかー」と思ったタイミングがあった。

そこで「学校を辞めて入社していいですか?」とハカセに聞いてみると、「本当にいいの?卒業したら?」と返ってきたが、僕がどうしてもと言うとOKしてくれた。

そうして学校を辞めて、入社することになった。
その時、僕を含めて、社員は3人だった。

社内SNSの開発

最初に作ったのは、会社内SNSサービスのColorcle(カラクル)だった。
これは、会社で使うFacebookのようなアプリケーションで、最近だとSlackとかChatworkが担っているような社内コミュニケーションのためのツールだった。

僕はこれのWeb版と、スマホ版に提供するJSON APIを開発した。
バックエンドはRailsで、Angular.jsで書いたフロントエンド(SPA)から、スマホ版と同じAPIを呼び出して使っていた。

JavaScriptは以前から書けたが、こんなに複雑なものを作るのは初めてだったし、Angular.jsも本格的に使ったのはその時が初めて。
Railsは頼れる人がいたものの、フロントエンドをやるのはほぼ自分一人だったので、ひとりでもくもくとコードを書いていた。

コードはカオスだったけど、開発自体はなかなか楽しかった。
アプリの開発者と相談しながらAPIの仕様を決めたり、リッチでリアルタイム性の高いWebのフロントエンドを作ったり、プッシュ通知と戦ったり。

そのままColorcleを1年以上作り続けていた気がする。
受託の仕事も同時に動いていたのもあって、作ってはいるがリリース時期は未定、という感じになっていた。
それで、そろそろリリースしますかということでリリースされた。
アルファ版ということで、何ヶ月か無料で使えるよーということになっていた。

申し込みはぼちぼちあったが、実際にアクティブに使ってくれる会社は指で数えるくらいだった。

その後も色々と機能を追加したり、既存の機能を改善したり、開発は続いた。

しかし、そのまま顧客は掴めず、サービスは事実上の開発停止となってしまった。
(その後も、バグ修正などのメンテナンスは続けられたし、既存のユーザーはそのまま無料で使用できた。)

ちなみに、それまで1年ちょっとの間、何人かのエンジニアがほぼフルタイムでこのプロジェクトに取り組んでいた...。(すごい資金力)

今思うと、もっと早くにリリースすべきだった気がするし、そのために僕ももっと高速に実装できたらよかったなぁと思うけど、当時はただ作ることしか考えていなかったし、まだ未熟だったしな。
そして、どうやったらプロダクトが成功できたのかな〜?

ところで、開発とは関係ないけど、この頃は会社に遅れて行って、注意されまくっていたっけ。
勤務時間は決まっていなかったんだけど、あまりに遅いとアカンということで、10:30が始業だけど事情があって遅れる場合は連絡せよ、みたいな感じに決まった。
高専にいた頃から夜更かししてしまって次の日起きられない(またはひどく眠い)という問題はよくあって、ちゃんと寝る習慣があったら高専生活ももっと良いものになっていただろうなぁと思ったりする。

最近は、子どもが早く寝るのとそこで僕も疲れて寝てしまうのとで、ちゃんと寝るようになった。

Androidアプリの開発

ハカセに「そろそろ新しいことやる?」と言われて始めたのがAndroidアプリの開発だった。
社内ではすでにAndroidのプロジェクトが動いていたので、しばらく本やWebを見ながら手を動かしてからプロジェクトを手伝い始めた。

その後、新しく受託の案件が始まることになり、僕ともう1人のエンジアで1からアプリを作ることになった。

ちょうどその頃Kotlinの1.0がリリースされたため、Kotlinを使って開発することになった。
Kotlinという新しい言語を学んで使うのは楽しかったし、Android開発も楽しかった。

最初は2人で作っていたが、最初のリリースが終わったくらいからひとりでやるようになった。
知らないことはまだ多かったが、ある程度は自分でできるようになっていた。
そんな感じで1年ちょっと開発を続けていた。

このプロジェクトで印象深いのは、途中で設計の欠陥を見つけて「アチャー」と頭を抱えたことだ。
ざっくり言うと、DRYにしすぎて後に必要な変更がやりづらくなってしまった感じ。
早い段階で問題を発見できなかったことを非常に後悔した。

占いサービスの開発

とある会社が開発・運営する占いのサービスの、開発チームのお手伝いをした。
その会社のオフィスに行って仕事をすることもしばしばあった。

やったのはスマホアプリが使うJSON APIや管理画面などを含んだバックエンド・管理画面のフロントエンドの改善や機能の追加など。
サービスを運営している人たちとミーティングして、本当に何をすべきなのかを探り、実装した。

他の人が今まで蓄積してきたコードを読み解いていくのも面白かったし、何より違う会社の仕事の様子が見られたのが個人的にはよかった。

番外編: 数学やAIの勉強会

これは厳密には仕事とは関係ないが、
九工大のF先生(後述)の好意により、社外の人も呼んで、会社で数学やAIに関する勉強会がたびたび行われていた。

数学の方は、線形代数の本を読んでちゃんと理解するぞー、というものだった。
行列の概念を導入するのに連立方程式から始めたりする面白い本だった。
授業ではないので、無限に立ち止まって脱線できたのがすごくよかった。

AIの方は、機械学習を始め、神経細胞の話や大脳と小脳の話などをしてもらいつつみんなでお喋りするというもので、なかなか楽しかった。

2社目: ZOZOテクノロジーズ

(当時と会社や組織の名前が変わってたりするけど、現在の名称で書く。)

ある日、カラクルがZOZOから買収されるかも、ということが社内で発表され、しばらく経つと確定した。
確か2018年の年始に買収が発表され、2018年の4月からZOZOテクノロジーズという会社で働くことになった。

ZOZOテクノロジーズは、前身のスタートトゥデイ工務店と、カラクルと、割と近い時期に買収されたVasilyという会社を合わせてできた会社である。
(具体的な会社間の合併の流れとかはよく知らない。ちなみにST工務店はその前身の会社から数えると設立されたのは90年代だったはず。)

ZOZOテクノロジーズには、ZOZO研究所という部署ができて、Vasilyとカラクルの人たちはそこの所属になった。
ZOZO研究所は、ファッションに関する研究開発を行うために作られた。

九工大との共同研究

九工大の大学院に、F先生の研究室があり、元カラクルのメンバーのうち3人はそこの卒業生である。
F研究室では、教師なし学習を用いて情報を可視化する研究を行っている。

ZOZOのデータとその技術を組み合わせて面白いことができないだろうか?ということで共同研究が行われることになった。

そのチームで僕は、色々やった。

まず、研究の内容を理解して、Pythonで学習部分を実装した。
Numpyで実装してみたり、Tensorflowを使ってみたりもした。

可視化部分はWebブラウザ上で、TypeScriptとReactで実装した。
後に、そのコアとなる部分をReactコンポーネントとして切り出して、社内用のnpmパッケージにした。

また、ある時期はアルゴリズムをいじって改良しようとしてみたこともあった。

最後には、それまで書いていたコードを抽象化して、新規のデータに対してもコードをほとんど書かずに学習から可視化まで行える仕組みを作ってみたりもした。

そして、それらを社内のデータに適用し、可視化部分はデプロイして社内から自由に閲覧できるようにした。

可視化に関する新しい試みを学会でポスター発表したこともあった。

そんな感じ。

高専を卒業すらしていない僕が大学院生や大学の先生と一緒に仕事ができたのはなかなかすごい機会じゃない?と思うし、
研究自体も理論的なところから理解できて非常に面白かった。

機械学習をやってはいたが、特定の方面だけをやっていたので、明日から他の会社で機械学習のエンジニアになれるかというと若干怪しい気がする。
もう少し王道なやつもやっておけばよかったかなーと思う。

その他の仕事

メインは共同研究のプロジェクトだったが、他にもいくつかやった。

レコメンドのようなことを2件ほどやった。1つは、共同研究で使用しているアルゴリズムを使って、もう1つはもっと単純な機械学習ですらない方法を用いて。
共同研究の方でもそうだけど、BigQueryにデータを出し入れしたり、インフラの方を少し触ったりして楽しかった。

あと、Androidのコードを書く仕事も少しやった。
これは、アプリに入るかもしれない新しい技術の検証で、なんか色々大変だったけどやっていることは面白かった。

その時に触ったKotlinのcoroutineが面白かったのでその後調べて書いたのがこちらのブログ

会社のこと

この会社に入って3年になるけど、その間に会社はけっこう変わったと思う。
少しずつ新しい人が入ってきて少しずつ雰囲気が変わっていく感じもあったし、会社の制度などもいろいろと良くなっていった。
例えば、COVID-19が流行る前にリモートワークができるようになって、それに合わせて社内システムが使いやすくなったりとか。

仕事で関わる人は、みんな良い人たちだった。
Slackの分報チャンネルは雑談の場所も兼ねていて、みんなでよくくだらない話やくだらなくない話をしていた。
出社していた頃は、オフィスでおしゃべりしたり、たまに何人かで飲みに行ったりもしていた。
この雰囲気はカラクル時代からずっと続いていて、とても良い雰囲気ができていたと思う。

その後

さて、ここまで読んで勘付いた人もいるかもしれないが、2021年3月いっぱいで、ZOZOテクノロジーズを退職した。

1年以上前から、Webフロントエンドの開発を本業にしたいなーと思っていた。
それなら、社内のフロントエンドのチームに移ることもできるが、違う会社も覗いてみたいと思って転職することにした。

以前から気になっていた2社に応募してみたが、1社は落ちてしまった。(これはけっこう悲しかった。)
もう1社は受かって条件も悪くなかったので、4月中ばに入社することになった。

カラクルに入る時はまともに就職活動をしたり面接を受けたりしなかったので、今回初めて会社に応募して面接を受けたのが新鮮だった。
ZOZOテクノロジーズでは採用の面接にも入っていたのに。

2社とも落ちたら社内で仕事を探すかーと思っていたが、1社受かった時は本当にほっとした。こういう感覚も初めて。

自分にとって新しい会社というのもあるし、フロントエンドエンジニアとしてやっていけるのかな〜という思いもあり、とてもどきどきしているし、同時にわくわくしている。

2年後とかに振り返ったら、入社時はなんて無能だったんだ!とか思うんだろうな〜。()

ちなみに、その受かった会社というのは、LINE Fukuokaという会社です。(前職と、どちらもZホールディングスのグループ企業じゃん)

振り返ってみての感想

Webを中心にしてはいるけど、いろいろなことをやってきた。
少しずつ成長してはいるけど、なんというか、ただものを作れるようになっただけのような気がする。
だけど、それでも問題はないと思う。
コーディングは楽しいし、楽しいから続けられてきたわけなので。

そこに足りないものといえば

  • もう少し深い知識 (例えばブラウザのこと、OSやネットワークのこと)
  • ソースコード読みの能力と経験
  • 個人で何か作った経験 (久しぶりにちゃんとしたものを作ったのがKakeruだった)

この辺だろうか?

自分の知識や能力が向上すると、できる仕事の幅も広がってもっと楽しくなれるはずなので、それらも意識しつつ楽しくコードを書いていきたい。