プログラミングが、いつまでも楽しくあるように ─ 長いフリーランスを経て就職した今、思うこと

Hakata

どうも、きしだなおき(@kis)です。LINE Fukuokaで働いています。
長らくフリーランスとして活動した後で就職したので、そのときは福岡をはじめ、ネットでつながっている全ての人が驚いたのですが、なんだかんだでもうすぐ4年が過ぎようとしています。

会社員になってJJUG CCCのスポンサーセッションで発表してきた - きしだのはてな

このコラムでは、フリーランスのプログラマーになった経緯などを振り返りつつ、就職した今はどういう感じで生きているかを書いていきたいと思います。

プログラミングを始めて、仕事にするまで

初めて「プログラム」に触れたのは、小学校4年生から5年生に上がる3月だったと思います。父親がMSXという規格のパソコンを買ってきたので、主にパックマンなどのゲームをやっていたのですが、そのうち関連雑誌も買ってもらえるようになりました。

当時のパソコン雑誌にはゲームのソースコードが掲載されていて、打ち込んで遊ぶということが広く行われていました。はじめはただ機械的に入力するだけだったのですが、だんだんプログラムが理解できるようになり、5年生の夏くらいには簡単なプログラミングができるようになっていました。

よく「10歳の壁」といって、10歳あたりで抽象的思考ができるようになるタイミングがあると言われますが、ちょうどその時期だったのだと思います。

人に頼まれたプログラムを最初に書いたのは、中学2年生のときです。担任でもあった理科の先生が、磁界と電流の関係を分かりやすく表したいということで、ボタンを押すと銅線が動くアニメーションのプログラムを作りました。人の期待の通りにプログラムを組むのは難しいなぁと思ったものです。

プログラムを書いて最初にお金をもらったのは、高校2年生の3月です。短いプログラムを雑誌に投稿すると、採用されて掲載料がもらえたのです。たくさん投稿すれば儲かるぞ! と思ったのですが、投稿できるようなプログラムは、その後5年くらい作れませんでした。採用されるプログラムのアイデアを考え出すのは難しいなと思いました。

商売に使うプログラムを作ったのは、大学4年目のときです。インターネットプロバイダーが提供するチャットと麻雀ゲームのWindows版を作り、テストと称してずっとチャットをしていたおかげでキー入力が速くなりました。このときに、Win32 APIとインターネット(TCP/IP)のプログラミングを覚えました。初めて触ったMSXに比べると大量のメモリが使えてすごく速い、そしてインターネットはすごいなと実感しました。

その後、スーパーマーケットのシステム開発子会社でバイトして、Visual Basicに触れたりAccessでリレーショナルデータベースに触れたりと、プログラマーとしての知識と経験は順調に増えていきました。同時に九州システム情報技術研究所(ISIT、現・公益財団法人九州先端科学技術研究所)の手伝いをして、ソフトウェア工学など科学的にプログラムを組むことに触れました。

しかしながら、ぼくの大学は九州芸術工科大学芸術工学部(現・九州大学芸術工学部)の音響設計学科というところで、プログラムとは関係なく音を扱う学科だったので順調に単位を落としており、8年目に1科目の単位が足りず、タイムオーバーとなりました。

ろくに就職活動もしていなかったのですが、インターネットバブルの真っ只中で、起業ブームでもあった頃です。ちょうど新しくサービスを始めたいのでプログラムを組める人を探しているところがあり、そのままWebサイト構築の仕事を請け負ったのでした。それが、フリーランスとして最初の仕事です。

そのうち仕事も途切れるだろうし、そうなったら就職をがんばろう。と思っていたら、なんだかんだでそのまま仕事が続いていたのです。

Javaとの出会い・Javaの面白さ

Webサイトの構築にはPHPを使っていたのですが、プログラミングの講師をしていた友達が東京に就職するので代わりを探しており、職業訓練学校でプログラムを教えることになりました。その言語がJavaだったので、言語仕様や標準ライブラリを、教えることができるレベルまで勉強しました。

それから開発にもJavaを使うようになったり、さらに教えるために書いたテキストをまとめて『創るJava』として出版したり(毎日コミュニケーションズ、初版2005年)、Javaを中心にプログラムを考えることが始まったのです。

「創るJava改訂版」発売 - きしだのはてな

それからずっとJavaを続けています。何が面白くてここまで続いたのかと考えると、そのときそのときで技術的に面白い機能が、ハードウェアに近いものからフレームワークまで広い範囲で提案されて、飽きなかったということがあるのかなと気付きました。

さまざまなアプローチのフレームワークが出たかと思えば、ラムダを導入するというような言語仕様レベルの変更もありました。また、スレッドをうまく使うといった実装レベルの話もあったり、ガベージコレクタや実行時最適化のような実行系の話もあったりします。

最近では、動的言語を効率的に処理するGraalVMのような言語実装の話もあったり、複数データを同時に扱うCPUコードを利用して高速化を行ったりといった低レイヤーの話もあります。OracleによるJavaのサポートモデルが変わって、いろいろな会社がサポートを提供するというビジネスの話もありますね。

このように幅広く変化があって飽きないのが、Javaの良いところです。ビジネス的な変化は頻繁に起こってほしくないですけど。

大きなテクノロジーを求めてフリーランスから会社員に

フリーランスで仕事を始めてJavaに触れ、それなりに生きてきましたが、福岡でLINE Fukuokaが立ち上がったことをきっかけに就職することにしました。理由としては、LINEが大きいサービスを運用しており、Javaを使っているところです。

また、引っ越しの必要がなかったことも大きいです。東京に引っ越そうとはずっと思っていたのですが、飛行機を降りて山手線に乗るときに毎回その気持ちが萎えていました。

なぜ会社員になることを選んだのかというと、フリーランスとして働く中で、このままでは今後プログラマーとして必要になる能力を得られないと思ったからです。具体的には、仕事が細切れでリスクが取れず、大掛かりなテクノロジーに触れることができないためです。

フリーランスでは契約が単発で、仕事を長い目で見ることがないため、次のプロジェクトを見越して「このプロジェクトではこういう機能を入れる」ということができません。フレームワークの選定やコードを書く上での工夫はできますが、機能的なものを踏まえて先のことを考えることは、なかなかできませんでした。

また、仕事としてはシステムの構築までで、実際のデータを見ることもできません。大掛かりな、例えばデータベースをクラスタ化するということも、なかなか機会がありませんでした。

そういったことをフリーランスでやろうとするなら、3年など長期の契約で仕事をするとか何人かのグループで仕事をするということが考えられますが、3年契約なら会社員でも同じでは? グループでやるなら会社では? と考えて、それなら就職することにしたのです。

この課題は4年近くたって解決できたのか? それはこのコラムで一番の話題ですので、最後にお話することにしましょう。

f:id:blog-media:20181205171105j:plain
2018年10月に米国で開催されたOracle Code One登壇する筆者(櫻庭祐一 @skrb さん撮影)

会社員になって気付けたいくつかのこと

就職して4年がたつ中で、周りのことや自分のことでいくつか発見がありました。自分のことの前に「エンジニアの勉強法」について書いてみたいと思います。

コードが書けるようになるプログラミングの勉強について

最近、「LINEの採用試験に受かるにはどういう勉強をすればいいか」という話をする機会がありました。LINEのエンジニア試験では、コードが書けることが重要視されています。では、どういう勉強をすれば採用試験をパスできるようなコードが書けるようになるかという話です。

プログラムが組めるようになるには、知識・トレーニング・実践の3つが大切です。そこで、ぼくは次の3つをおすすめしています。

  1. 応用情報技術者試験(以下、応用情報)の範囲を勉強する
  2. プログラミングコンテストの過去問を解く
  3. アプリケーションを作る

応用情報を勧めるのは、必要な分野がよくまとめられているからです。テクノロジー系、マネジメント系、ストラテジ系と3つに分かれていますが、ここで必要なのはテクノロジー系の範囲です。

IPA 独立行政法人 情報処理推進機構:試験要綱・シラバス など

また、目的は「資格を取ること」ではなく、「内容を理解すること」です。資格はある程度の目安になりますが、試験を通るだけなら問題の解答方法だけ分かれば十分です。ここではプログラミングの力をつけたいわけなので、内容を理解するために勉強する必要があります。

そうすると、それぞれの分野についての解説書も必要になりますし、全ての範囲を勉強するには結構な時間がかかります。けれど、焦る必要はありません。受験と違って、プログラミングの勉強にはタイムリミットはありません。

ひげぽんさんも「人には人のペースがあります。遅くても問題ありません」と書かれています。効率がいい必要もなく、大事なのは「続けられること」です。何かすれば、必ず前に進むと考えて、気長にやるのがいいでしょう。

プログラミングのトレーニングと実践

プログラミングコンテストの過去問とは、例えばAtCoderの過去のコンテストの問題です。

Contest Archive - AtCoder

英語でも構わなければ、LeetCodeがおすすめです。このサイトには、いろいろな企業が採用のコーディング面接で出題した過去問が載っていて、難易度別に並んでいるので手をつけやすいです。

Problems - LeetCode

応用情報が「知識」、プログラミングコンテストが「トレーニング(訓練)」とすれば、あとは「実践」としてアプリケーションを作ることも大切です。

これは自戒でもありますが、知識だけとかトレーニングだけでは、実際にアプリケーションを書くときに必要なことを体験せずに終わってしまいます。やはりアプリケーションとして入力から出力までを行うコードを書き、泥臭いところまで体験することも大事だと思います。

起きれない

就職してしばらくすると、どうしても昼まで起きれないことがあると気付きました。プログラミングの話からは離れますが、Twitterで同じように悩んでいるプログラマーを見かけることもあるので取り上げてみます。

起きれないことに気付いた頃、ネットで「睡眠相後退症候群」という症状を薬で調整したという記事を読み、これは自分にとても当てはまるのではないかということで、睡眠外来にも行き、睡眠相をずらす努力を始めました。ただ、一時的に良くなることがあるのですが、どうも長続きしません。

そこで、Fitbitという活動量トラッカーをつけて、睡眠の記録を取り始めました。しかし、Fitbitは睡眠に関して「何時間寝たのか?」にしか興味がないようなインターフェースで、ぼくのように「いつ寝て、いつ起きるのか?」が知りたい場合に良いグラフが表示できません。

APIが公開されていたので、自分でデータを加工してグラフを表示してみました。すると、きれいにずれていっていることを発見。

睡眠のグラフ

これは噂に聞く、非24時間型の概日リズム睡眠障害ではないかと気付きました。つまり、体内時計のサイクルが24時間よりも長い症状です。そう考えて毎日を過ごしてみると、確かにしばらく調子よく起きれる日が続いたあと、昼まで起きれなくなってきます。11月中はサンフランシスコ帰りの時差ぼけもあって午前中に起きることができていましたが、やはりどんどん寝られる時間や起きる時間が後ろにずれています。もう少し日中の運動量を増やせば眠くなるんじゃないかとか、いろいろ工夫しているところです。

Twitterで見かけるプログラマーにも、概日リズム睡眠障害のような人がよくいますが、ここでは次のことを知っておいてもらえればと思います。

  • 睡眠は、ある時間に寝たら8時間後に起きれる、という相対時間だけでできるものではない
  • 何時に眠くなって、何時に目が覚めるかという、それぞれ人が持っている睡眠相がある
  • 多くは科学の力で解決・緩和できる(根性だけでは無理があります)

ところで会社員になってどうだったの?

さて、寄り道をしましたが、最後に、フリーランスのときに感じていた不満が、LINE Fukuokaに入社して解消されたのか? という話です。

大きな流れで仕事ができるか? という点については、できていると思います。今、技術イベントの運営を行っており、まだ始めたばかりで課題もありますが、長い視点を持って動けています。

単発のイベントをうまく実施するだけではなく、どういうテーマでどれくらいの頻度で何を目的にイベントを行うかということから考え、そして考えた通りにやらせてもらえています。その中で、うまくいくかどうか分からない形態やテーマのイベントも試すことができ、プログラミングとは違いますが、面白いです。

大掛かりなテクノロジーについては、たくさんの流量を扱うのが当たり前の環境で、直接は触っていないものの、話は聞けるし、コードも読めるし、負荷の状況も見られる。そして、もし有効なアイデアがあれば提案もできる環境になっていて、もくろみ通りです。

もう少しJavaをやりたいとも思っていて、例えばJava 11をLINEのプロジェクトでどのように導入していくかという話に参加したり、移行時にコードレビューを行うことを考えたり、そういったことに手を出せるようになっています。総じて、やりたいことがあれば、やりたいと言えばやれる環境です。

さて、こう書くと、フリーランスより会社員がいいという話をしているように見えてしまうのですが、これはあくまでぼくの特性や環境での話であって、一般論ではないことはお断りしておきます。

会社員になったときから、環境も変わり、クラウドは浸透し、インターネット全体の流量も増え、コンテナやコンテナオーケストレーションのような技術も広まり、小さい組織でも流量の大きいシステムを扱うことが珍しくなくなっています。フリーランスのままであってもそれなりに面白いシステムに触って、面白い仕事ができていたかもしれないなぁと思っているところです。

楽しく仲よく

先ほど少し書いたように、最近はプログラムの開発を少し離れて、福岡や京都での開発者向けイベントを運営したり、LINEの技術者と外部の技術者の接点を作ったりという仕事をしています。

LINEには面白い技術者がたくさんいるので、そういった人たちをもっと外に紹介するため、いろいろな技術の話を聞いたり、ついていけるように勉強したり、外部に紹介する機会を作ったりといったことをやろうとしています。

そんな中で、技術者が技術を楽しみ、周りの技術者とも仲よくということを目標にしようと、Twitterのプロフィールも「楽しく仲よく」に変えています。

とりとめなく書いてきましたが、プログラミングの世界は面白いなぁと改めて思っているところで、これからも楽しくプログラムに接していければなぁと思っています。

そして、仲よくしてください。

楽しく仲よく。

きしだ なおきkis / kishida

kishida

九州芸術工学部音響設計学科を満期退学後、フリーランスでの活動を経て、2015年からLINE Fukuokaで社員として働いています。言語はJava。あと、ビールが好きです。好きな銘柄はトリプルカルメリート。
ブログ:きしだのはてな