ソフトウェアエンジニアとして成長するために続けてきた活動と、学習を支えるモチベーションは何だったのか。Repro株式会社の橋立友宏(joker1007)さんに10年以上のキャリアを振り返っていただき、それぞれのステージで意識してきたことについて寄稿いただきました。
Repro株式会社でチーフアーキテクトをしている橋立です。ネット上ではjokerの名前(@joker1007)で活動しています。
私は神戸大学法学部を卒業し、野村総合研究所でテクニカルエンジニアとして勤務、株式会社ウサギィでの受託開発を経て、フリーランスエンジニアになりました。その中で縁があったRepro株式会社に正式にジョインすることになり、CTOとして6年ほど勤務。会社のステージの変化で、立ち位置がCTOという肩書と噛み合わなくなってきたため肩書を変更し、今はチーフアーキテクトとして勤務しています。
以前、自分のブログで「ソフトウェアエンジニアとしての能力を高める方法について考えてみた」という記事を書き、たくさんの反応をいただきました。今回はその内容を踏まえて、私自身がキャリアにおいてどういう選択をし、どのように成長してきたと考えているか、具体的にお話ししていきたいと思います。
- 近道は存在しない。成長するため「3つの活動」を続けてきた
- 常に変化してきた学習を支える「4つのモチベーション」
- Rubyコミュニティはいつも支えてくれた私の「ホーム」
- 「楽しい」と思える自分を維持していきたい
近道は存在しない。成長するため「3つの活動」を続けてきた
私が本格的にソフトウェアエンジニアとして働き始めて10年ちょっとになります。働き始めた頃に比べればやれることもかなり増えたし、技術者として成長できたと思います。
その中で自分の成長に大きく寄与したと思う活動は3つあります。
- できる限り公式に近いドキュメント、もしくは信頼できる著者による書籍をしっかりと読むこと
- 実際に学んでいる対象を使ってみること
- 学んでいる対象に関連しているOSSのコードを読むこと
キャリアの始めはRubyとRailsを中心にしたWebアプリケーション開発でしたが、とにかくこの3つの活動を長く継続してきました。
もともとリファレンスやドキュメントを読むのが比較的好きなタイプなのですが、とにかくRubyの公式のリファレンスやRails公式のAPIリファレンスやRails Guidesを繰り返し繰り返し読んでいました。このとき意識していたのは、それぞれの機能が何のために(何を便利にするために)存在しているのかを考えながら読むことです。最初は分からなくても、何度も読んで試しているうちに理解できるようになってきます。
手を動かして作ってみる
そして、実際に使ってみるため、自分の趣味活動を便利にするWebアプリケーションを作り続けていました。私はカラオケが好きなのですが、カラオケ機器に収録されていないインディーズの楽曲を歌うためのシステムをRailsとその周辺技術で制作。そして関連技術の進歩に合わせて、何度も潰しては作り直すことを繰り返しました。自分で目的を定め、それを実現するシステムを設計し、テストコードを書いて継続的に改善する――。そういったシステム開発の基本的なことを学べたのは、こういった活動を続けてきたおかげだと感じています。
本格的に仕事でRubyやRailsを活用するようになってからは、もちろん仕事で得た経験も重要な糧になりました。私がその中でも比較的恵まれていたのは、自分自身で設計し、手を動かして開発し、うまくやれたかどうかのフィードバックを実感と共に得られたことです。人に言われたことをただこなすだけ、実際の開発業務の試行錯誤を他人にやらせているだけでは、実感を伴った経験を得るのはなかなか難しいことだと思います。
テックコミュニティで学ぶ仲間を得る
ある程度アプリケーションが書けるようになった後は、Railsというフレームワークをより詳しく知るためにそのソースコードを読み、どうやって作られているのかを学ぶようになりました。こういった活動を一人で継続するのは難しいのですが、当時の私は地域RubyコミュニティやRails勉強会などの集まりにとても助けられました。
テックコミュニティでは、自分が興味を持ったものを一緒に学ぶ仲間も得られますし、他の人が書いたソースコードに触れる機会も増えます。優秀なエンジニアが書いたコードを読むことは、自分一人ではたどり着くのが難しくても、一気に理解に繋がる可能性を持った活動です。それを容易にしてくれるOSSという文化にも私は大いに助けられました。
これらは、言ってしまえばとても普通で何も特別なことではありません。大事なのは、知識を蓄えて自分のものにするために簡単な近道は存在しないということ、そして、学習を飽きずに続けられるかどうかです。自分の仕事やステージの変化で一つ一つの興味は移り変わってきました。しかし、エンジニアとしてよりうまくソフトウェアを開発したいという思いと、それを実現するためにそのとき興味があることをしっかり学び続けたことが、今の私を形作ってきたように思います。
常に変化してきた学習を支える「4つのモチベーション」
「3つの活動」を継続するには、もちろん何かしらのエネルギーが必要になります。先に述べた思いや好奇心はその中でも大事なものですが、それをもう少し言語化してみます。
あくまで私の場合ですが、エンジニアとしての学習を続けてこられたモチベーションは大きく分けて4つあります。
- 楽しさ・好奇心
- 責任
- 危機感
- 利益(お金)
「楽しさ・好奇心」と「危機感」は内発的な動機で、方向性としてポジティブかネガティブかという違いはありますが、最終的に自分の精神力に依存したものです。一方、「責任」や「利益(お金)」というのは外発的な動機で、環境や状況によって左右されます。
これらのモチベーションは常に一定ではなく、自分の立場やステージの変化と共に変わってきました。
私の経験から得た感覚ですが、自分の興味や感じ方はあまり自由にならないもので、環境や状況の方がコントロールしやすいところがあります。根本的な選択の指針として内発的な動機を活用しつつ、どういった環境に身を置くかをコントロールしていくことが、自分のキャリア形成の重要なポイントだったと思います。
「楽しさ」に駆られて就職するも「危機感」を募らせる
具体的にステージごとに振り返ってみます。
私は学生時代から趣味でプログラミングをしていましたが、その頃にあったのは純粋に楽しさや興味だけ。単に自分で自分の役に立つものが作れること、そしてプログラミングという行為自体が楽しくて、日々コードを書いていました。何者でもない時に、何かを学ぶ原動力になるのは、やはり自分がそれを好きかどうかに左右されます。
もともと文系学部の学生でしたが、プログラミングが楽しかったためソフトウェアエンジニアとして働きたいと考えて、そちらの方向で就職活動をすることに。当時(15、6年前)は今ほどWeb系のサービス開発を主軸としている会社が存在せず、特に自分が好きだったRubyで仕事ができる会社はとても少数でした。そのため、私は大手SIerの新卒採用で就職することになりました。
就職してSEという職種に就いたものの、大手のSIerはどうしても業務内容が管理寄りになること、自分の仕事を自分でコントロールしづらいことが自分の性格とあまり合わなかったため、急速に「危機感」が増していきました。就職した直後にリーマンショックの影響などで世界的な金融恐慌が始まったため、大企業といえどいつどうなるか分からないという意識と、この会社でいつまでも働き続けられるだろうか……という思いから、とにかく自分自身の能力で仕事が得られるようになりたいと考えていたことを覚えています。
技術者コミュニティをきっかけに転職して立場も変化する
会社だけでは自分が望んでいる経験を得ることが難しいため、就職して2年たった頃から社外の勉強会や技術者コミュニティに積極的に顔を出すようになります。そこで、著名な技術者の方々や同じような立場の人と実際に会って話をする中で、「このままでは世の中の進歩に付いていけなくなる」と思い、より危機感が増していきました。がむしゃらに勉強したり、新しいことを知ろうとあちこちに顔を出したり……。精神的には余裕がない時期でしたが、この頃の活動で技術者コミュニティに参加する取っかかりを掴むことができ、人の書いたコードを読む機会も大幅に増えたのです。
技術者コミュニティで活動している中で縁があって転職をし、幸いなことにRubyとRailsで仕事をすることができるようになりました。一気に少人数で開発することになったため、自分がどう作るかを考えて実際に手を動かさないと仕事が進まなくなりました。この頃から急激に「責任」の比重が重くなります。自分がやれないと仕事が完全に失敗してしまうし、そんなことが何度も続けば信用を失うことに繋がる。必死にならざるを得ませんでした。
その後、フリーランスを経て現在の会社でCTOを引き受けることになりますが、これは自分で「責任」や「利益」の影響をコントロールするために、狙って選択したものです。もちろん縁や運にも左右されてきたと思いますが、それぞれのタイミングで自分で環境や立場をコントロールすることで、より強い動機が得られるように意識してきました。
自ら「責任」と「利益」を背負う選択をすることが大事だ
このように、自分の立場の変化と共に何を行動の源泉とするかは変わっていくもので、私はそれで良いと思っています。根本的に楽しくないことを長くやり続けるのはとてもつらいし、楽しんで勉強している人をそうでない人が上回るのは現実的にはかなり難しいでしょう。そういった点で「楽しさ・好奇心」というのは学習の根源となる大事なモチベーションです。
一方で、若い頃は楽しさや興味だけで活動できても、仕事や人生の中で背負うものが増えたり体力が衰えたりと、思ったように活動できなくなることもあります。仕事においては長期的には立場が人を形作るものだと私は考えています。職業エンジニアとして長く活動していくなら、やはり自分ごととして何らかの責任を負うのも非常に大事ではないかと思います。
程良く負荷のかかる責任を負うというのは実際には難しいことで、ある種の生存バイアスでもあるので、万人に大手を振ってオススメすることはできないのですが、できるだけ責任と裁量から逃げずに自分の意志で背負っていくことは、未来の自分にとって大きな力になるはずです(その点、自分はかなり幸運に恵まれたのだと思います)。
Rubyコミュニティはいつも支えてくれた私の「ホーム」
10年以上仕事をしてきて面倒なことやしんどいこともたくさんありましたが、自分は今でもプログラマーという仕事を楽しいと感じていますし、だからこそ続けてこれたと思います。しかし、この楽しさは自分一人だけでは維持できなかったかもしれません。
先述しましたが、私は自身のキャリアの大部分を技術者コミュニティと共に過ごしてきました。特にRubyの地域コミュニティは私の「ホーム」と言える場所です。ここで出会った多くの人たちとの交流がプログラミングとシステム開発を楽しみ続けられるように支えてくれていたと思います。自分が学んだことや考えていることを、ちゃんと人に説明してフィードバックを得る機会があるというのは自分の成長の大きな助けになりました。
憧れや尊敬の念を抱くようなすごい技術者の方と何人も知り合うことができたし、そういった方々と話すことは大きな刺激になりました。同じようにすごいことができなかったとしても、そこで感じた憧れは自分にとって次の活動のための大事なエネルギーでした。特にAsakusa.rbの角谷信太郎さん(@kakutani)や松田明さん(@a_matsuda)からは、より楽しくより良く仕事をすることの大事さや、プログラマーはコードを書いてナンボだということについて大きな影響を受けたと思います。2019年に自分が「RubyKaigi」という大きな舞台で登壇することができたのも、こういったコミュニティ活動のおかげだというのは間違いないでしょう。
そして、自分も長くコミュニティで活動してきて、何度も登壇したり、『パーフェクトRuby』や『パーフェクトRuby on Rails』といった書籍を出す機会に恵まれたりしました。もしかしたら、誰かの目標になっているかもしれません。コードを書く楽しさを伝えるコミュニティの連鎖の中で、こんなふうに自分が受けた恩を誰かに返せているなら、それはとても幸せなことだと思います。
コロナ禍で活動を休止していたコミュニティも多くありましたが、「RubyKaigi 2023」を経て復活の兆しも見えてきました。もしRubyに興味があれば、ぜひRubyコミュニティに足を運んでみてください。プログラミングをより深く楽しむ助けになるかもしれません。私がよく参加しているAsakusa.rbはコロナ禍でも変わらず毎週火曜日に開催されていて、最近は月1でオフラインミートアップも復活しています。こちらにも興味があればぜひお越しください。RubyコミッターやRailsコミッターがよく参加しているので開発の裏話などを聞いたりする機会もあります。
参考リンク▶ RubyKaigi 2023 参加報告とちょっとエモい話 - joker1007’s diary
「楽しい」と思える自分を維持していきたい
改めて振り返ってみると、成長するための一つ一つの学び方は大きく変わっていません。一方で、今すぐ使えなくても、今後の会社の方向性を考えると準備しておいた方が良いことを先読みして学んでおく――。立場の変化に伴って「未来」を考えることが増えました。
現在はどうしても会社の長期的な成長維持を考えなければいけない立場のため、そのための現実的な対処方法を学ぶことに時間を費やさなければいけませんが、その中でも新しいことを知り実践することを「楽しい」と思える自分を、何とか維持していきたいと思っています。結局のところ「好きこそものの上手なれ」というのが真実だと思っていて、「楽しさ・好奇心」というのはとても大事なことです。その気持ちを長く持ち続けるために、今でもコミュニティや多くの友人に助けてもらっている自分がいます。
皆さんも一人で勉強し続けることに疲れたら、少し外の世界と交流する機会を探してみても良いかもしれません。そして、そこで得た「楽しさ」を指針として、自分の意志で環境をコントロールしていけると、少しずつ憧れていたエンジニア像に近付くことができるのではないかと思います。
編集・制作:はてな編集部
橋立 友宏(はしだて・ともひろ)
神戸大学法学部卒業のプログラマー。2009年野村総合研究所入社。フリーランスエンジニアになった後、2016年Repro入社、CTOを6年ほど務める。現在はチーフアーキテクトとして勤務する。主にRubyのコミュニティで活動しており、『パーフェクトRuby』や『パーフェクトRuby on Rails』といった書籍の執筆、RubyKaigiや地域RubyKaigiでの登壇経験がある。
ブログ: joker1007’s diary