目次
■エンジニアの軌跡
2022.02.28 2024.03.06 約2分
「エンジニアとして成長している実感が湧かない…。」そんな悩みを抱えていませんか?しかし、どんなエンジニアも仕事を継続していれば必ず成長し続けます。
Ruby on Railsの開発者、David Heinemeier Hansson(通称、DHH)氏が中・上級エンジニアが成長するために重要な3つのルールとその理由を語ります。
初心者が自分の技術やスキルを大きく前進させることを楽しむように、新しいことを学び続けることは素晴らしいことです。継続的に成長するための一番簡単な方法は、全くの初心者の状態から一歩ずつ前進していく感覚に酔いしれることです。では、ある程度上達してからはどのようにして継続成長を実現すれば良いのでしょう。
初心者でなくても、大きな前進を感じることは不可能ではありません。日々成長し続けるための重要な実践ルールを3つ紹介します。
一つ目の実践ルールは、すべての機会をチャンスとして扱うことです。自分の知っている方法を繰り返すのではなく、自分自身の満足と楽しみのために違うことをやってみるのです。
私はコードを書くことに膨大な時間をかけています。「動作させるためには?」「どうしたら、もっとわかりやすく書けるか…」とあれこれ考えます。私のお気に入りのプログラミングツールの一つは、辞書とシソーラス(類義語辞典)です。別の名前を調べたり、メインモデルの中から別のものを見つけたりします。
自分が何でもできるほどの腕前になったとしてもそれはまだ学習のチャンスであり、必要がなくてもいろいろなことを試してみるのです。
二つ目の実践ルールは、いつもと違う方法でやってみることです。私はコードレビューが大好きで、主にGithubを使って他の人の考えを学んでいます。
全くの初心者が私とは異なる考えを持っていることがあり、何らかの学びを得ることがあります。これは逆もまた然りだと思います。
三つ目の実践ルールは、自らのエゴをチェックし成長の鈍化を受け入れることです。
何かを極めるときに一番危険なのは、「自分はもう何も学ぶことはない…」というエゴが芽生えることです。これは学習を続けるうえで絶対的な毒になり、何の満足感も得られません。
ある程度のレベルに達すると、何かを極める代償として成長スピードが遅くなることを受け入れる必要があります。しかしスピードは遅くとも成長は続きます。例えば 5年前、10年前よりも今現在の方がはるかに優れたプログラマーになっています。これは仕事を学習の機会と捉えて継続し、常にエゴをチェックしてきたからです。
「20年間Rubyのプログラミングをしてきたからって何なんだ?」 新しい技術や方法などまだまだ学ぶことができるはずだと考えるのです。
私は仕事で使わない技術も積極的に学ぶようにしています。例えばKubernetesやDocker、Elasticsearch、その他のストレージエンジンやセットアップなどを学ぶことに時間を費やすことで他の領域からの刺激を受けています。
新しい領域を学ぶことは、新たなアイデアを生み出すうえでとても重要です。自分の領域に応用できる可能性があるためです。また、新しいことを始めたときが一番勉強になると感じます。
HEY(hey.com)は新しいメールサービスで、開発に2年を費やしRailsから大量のコードを抽出しました。まだ半分も終わっていませんが、Hotwireの開発はここが原点です。自分自身を新しい課題に直面させることは、興味を持ち続けるための重要な要素です。同じことだけを繰り返していると成長は停滞してしまうので、新しい領域から学びを得る必要があるのです。
専門外の領域を学ぶことは能力の拡大につながります。例えばhey.comを作り始めたときは、専門外のことを多く学ぶ必要がありました。具体的には「膨大な量のインバウンドメールをどのように処理するのか」ということでした。
私たちはBasecampで1日に500万通のメールを送信していますが、それはすべてアウトバウンドでした。その一方hey.comではメールの受信や解析、受信中のメールの処理などはるかに難しい課題がありました。私はこの分野において初心者だったので、自分の専門ではないプログラミング分野を探究し多くの実践を積みました。
フロントエンド・プログラミングはその好例です。JavaScriptは25年以上の経験がありますが、集中できない時期もありました。しかしHotwireやStimulus、Turboに取り組み始めてからはJavaScriptに再び夢中になりました。未知の部分があることが楽しみでした。
専門外の領域で新たな答えを追求することで、自分の持っているバックグラウンドからその領域の専門家が考えているものとは違う答えが出てくることがあります。だからこそ、自分自身を新しい課題に直面させることが重要になります。
新領域の学習は成長や楽しみにつながりますが、「最先端」だけに囚われることは危険です。「最先端のフレームワークや言語、データベースを使いたい」、「すべてを一度にやりたい」と思うようになるのです。しかしそれではすべてにおいて初心者になってしまいます。
例えば、hey.comでは既存のVanilla Railsを使用しました。20年前から使っているActive Recordの続編を使い続けたのです。なぜなら「革新的」である必要がない分野だからです。しかし新しいインバウンドメールの処理では、Active Record以外の新しいものを作る必要がありました。こうして、Action Mailboxが生まれ、その後Railsに移行しました。
ここで重要なのは「選択」です。すべてをゼロからやるのでもなく、常に新しいことをやるのでもなく、1つか2つを選択し、ファクトに基づいて新しいアイデアを推論する必要があります。うまくいかなかった場合には、既知のものを使用することでしっかりとした軸を持つことができます。
hey.comのRailsコードは私が20年間書き続けてきたRailsのコードと同じで革新性はありませんが、そもそも革新的である必要がないのです。既知のものを利用すると、他のことに注力できるという利点があります。例えば、Hotwireを使ったフロントエンドやAction Mailboxを使ったインバウンドメールの処理など、いくつかのことに集中して他のすべてのことを安定して行えます。
ある程度上達したエンジニアが成長し続けるためには、以下の3つの実践が重要であることがわかりました。
上記の実践を継続することで、新しいアイディアが生まれエンジニアとしての能力がさらに向上するでしょう。しかし常に新しいことばかりに目を向けると逆効果になってしまうので、既知の領域も活用しつつ学習を継続することが重要です。