優れたエンジニアになるとは、経験を積み重ねること
(addyosmani.com)- 小さなプロジェクトであっても、それぞれのプロジェクトは自分のツールボックスに新しい技術やツールを加える機会になる
- あるプロジェクトで学んだ技術を、別のプロジェクトで身につけたツールと組み合わせて問題を解決できるとき、より大きな価値を生み出せる。すべては積み上がっていく
- 最初は言語やライブラリを学ぶことから始まるが、キャリアが進むにつれて関心の範囲も広げていく必要がある
- それは技術面だけでなく、アプローチ、方法論、パラダイムの面でも同じ
- エンジニアとして成長するうえで本当の価値があるのは、単に孤立したスキルを積み上げることではなく、それらを各部分の総和を超える能力の複雑な網へと織り上げることにある
ツールボックス
- エンジニアリングのスキルをツールボックスとして考えると、新しいアルゴリズム、言語、フレームワークなどを学ぶたびに、基本的にはその箱に道具がひとつずつ追加されていく
- しかし、道具を持っていることと、その道具をいつどのように効果的に使うかを知っていることは、まったく別の問題
- まさにそこに経験の価値がある
- 各プロジェクトは、規模に関係なく、特定のツールを使うべき状況を理解するのに役立つ固有の課題を与えてくれる
-
"コンフォートゾーンは心地よいものですが、学びを与えてくれることはめったにありません。意識的に自分を伸ばせるプロジェクトを探しましょう。そうすればツールボックスが感謝してくれるはずです。"
- ただし、ツールボックスは固定されたものではなく、使う人とともに進化する
- 時間がたつにつれて、より多くのツールを追加するだけでなく、ますます複雑な問題を解くために新しい方法でそれらを組み合わせるようになる
- あるプロジェクトでRESTful APIを使った経験が、別のプロジェクトでサードパーティサービスをうまく統合する助けになることがある
- マルチスレッドへの理解は、データ量の多いアプリケーションの性能を劇的に最適化できる
- 重要なのは、プロジェクトごとに別々のツールボックスが必要なわけではないということ
- ひとつのツールボックスで、各プロジェクト固有の要件や制約を活かすことができる
スキルとツールの組み合わせ
- 優れたエンジニアとそうでないエンジニアを分けるのは、あるプロジェクトで学んだ技術を別のプロジェクトで身につけたツールと組み合わせる能力
- こうした交差受粉(Pollination)は、より効率的な問題解決を可能にし、しばしばより優れた解決策へとつながる
- ツールボックスの質は、「ツールの数」ではなく、「そのツールで解ける問題の豊かさ」によって決まる
- 実例
- 在庫数を正確に保つために、データベーストランザクションへの深い理解を活かしてECサイトで作業したと仮定する
- 別のプロジェクトでは、リアルタイムチャットアプリケーション向けのWebSocketプログラミングを深く掘り下げた
- ここで、在庫管理のためのリアルタイムダッシュボードを開発する任務を任されたとする
- このように、異なるプロジェクトで学んだスキルを統合して強力なソリューションを作ることができる
- データベーストランザクションへの深い理解を活かして在庫データの信頼性と一貫性を確保しつつ、WebSocketsを使ってダッシュボードへリアルタイム更新をプッシュできる
- こうした技術を組み合わせることで、単に問題を解決できるだけでなく、効率的で洗練された方法で解決できるという明確な利点が生まれる
- 安全地帯を越えて伸びること:自分のコンフォートゾーンを越えてストレッチすることの重要性
- 慣れていて負担の少ない、既存のスキルセットに合ったプロジェクトに引かれやすい
- しかし、多様な経験を積むほどツールの幅は広がり、こうした成果を生み出す能力も高まる
- 新しいことを学んだり、これまでにない考え方を迫られたりするプロジェクトを積極的に探すべきだ
- 一見まったく関係がないように見えるプロジェクトにも、多くの利点があると気づくだろう
機敏さと適応力を保つ
- 技術は常に進化しており、今日身につけたツールが明日にはそれほど役に立たなくなるかもしれない
- しかし、それはツールが無価値になるという意味ではない。むしろ、変化に適応し、革新する力を育てられる
- たとえば、クラウドネイティブアーキテクチャが登場したからといって、従来のリレーショナルデータベースに関する知識が無意味になったわけではない
- SQLとデータベース設計の基礎を理解していれば、最新のデータストレージソリューションを扱う能力を大きく高められる
価値ある経験を積むための実践的なヒント
- ツールをマスターすることは、それをいつどのように使うべきかを知っていく旅におけるひとつのマイルストーンにすぎない
- 経験を積むためのさまざまな選択肢がある
- 多様なプロジェクトをキュレーションする:規模、技術、問題領域が異なるさまざまなプロジェクトに取り組んでみよう。どのプロジェクトもツールボックスに固有の何かを加えられる
- 振り返り、文書化する:プロジェクトを終えたら、学んだことを振り返る時間を持とう。さらに良いのは文書化することだ。「学んだ教訓」をまとめた非公開リポジトリや公開ブログ記事を通じて、理解を定着させ、知識を共有できる
- コミュニティに参加する:オープンソースへの貢献や、開発者向けに特化したソーシャルプラットフォームを通じてコミュニティに参加すれば、他の方法では触れられない問題に出会える
- メンターを持ち、メンタリングを受ける:学んだことを統合する最も効果的な方法のひとつは、他の人に教えることだ。同様に、自分があまり知らない分野を専門とするエンジニアに助言を求めたり学んだりすることをためらってはいけない
- 学びを止めない:オンライン講座、ウェビナー、週末に新しい言語を身につけることなど、継続的な学習は絶えず進化するキャリアの潤滑油になる
結論
- スキルの交差受粉(Pollination)は単なる偶然ではなく、エンジニアリングの優雅さそのものだ
- 最高の解決策は、しばしば予想外の技術の組み合わせから生まれる
- だから次に新しい問題と格闘することになったら、自分の経験のツールボックスをじっくり見渡してみよう
- 解決策は、新しいツールを習得することではなく、長年かけて積み上げてきたツールを賢く使うことの中に見つかるかもしれない
- 問題解決に対するこの多層的でニュアンスのあるアプローチこそが、真にキャリアを前進させ、エンジニアとしてあなたを際立たせる要素である
6件のコメント
AIによって参入障壁が大きく下がり、このような転換がさらに速まったように思います
経験を積む機会をくれよ -_-
零細企業では積めない。特にPHP厨がいるならなおさらだ!
最近、痛感しています。
勉強だけではだめなんですよね。
良い会社(良い経験のため)へ転職することだけが答えなのでしょうか?
さまざまなプロジェクトを経験できる場所が良い会社だと言い切るのも、また難しいですね。
転職が必ずしも答えだとも言えない気がします。転職は本当に大変でもありますから。
今はサイドプロジェクトを進めてみるのがいちばん良いのではないでしょうか?
ありがとうございます。さっそく始めてみます(笑)