ファーストキャリアの挑戦
Special Interview 02 スペシャルインタビュー

「技術力」を分解すると、新米エンジニアがやるべきことが見えてくる

2022年入社 デジタルトランスフォーメーション事業本部
大金 弦寛
2022年入社 デジタルトランスフォーメーション事業本部

上智大学 理工学部 情報理工学科卒業。2022年新卒としてSpeeeに入社。大学時代は、1年目でプログラミングスクール卒業後、大学生限定プログラミングコミュニティ「GeekSalon」のメンターや支部の立ち上げメンバーとして活躍。学生インターンで自社webサービスの開発やLP制作などで実務経験を積み、Speeeの夏インターンに参加。内定後はアルバイトとしてSpeeeに勤務し、新規プロダクト開発に従事。

夏のインターンで参加していたSpeeeの熱量に感銘を受け入社を決意し、その後内定者アルバイトとして3か月間勤務していました。

Speeeのエンジニアインターンに参加はしたものの、当時僕が受けたフィードバックは「技術力が足りない」というものでした。技術力に関して漠然と不安は持っていたものの、「他の人もそうだろう」程度の認識で深く考えた事はなかったのです。しかし現場で実際に指摘をされて初めて「技術力」という言葉に向き合い始めました。

ここではそんな僕が辿り着いた「技術力」の考え方、向き合い方についてお話します。

「技術力」とは?「作る」だけがエンジニアではない

夏のインターンでは基礎知識の不足を指摘され、更に内定者インターンでは技術的な意思決定力の弱さを指摘されました。一言で言えば、技術Aと技術Bがあった時にどちらが最適かを判断することをできなかったのです。根拠を持った選択や意思決定ができないのは、自分の技術の基礎知識が足りないからだと気づいたのはこの時でした。

僕は「技術力とは三層に分かれている」と考えています。まず一番上の層は「技術の扱い方」、つまりは業務に直結する、コードを書く力の部分。次に「技術の背景知識」。どのような歴史や流れがあってその技術が生まれたのか、技術と別の技術を繋ぐ情報です。最後に「コンピュータサイエンスの基礎知識」です。

例えば一番上の層、技術の扱い方だけが分かる状態でも業務自体は進めることができます。そして、僕を含む多くの人が、この一番上の層こそが「技術力」であると考えていると思います。現代はプログラミングの技術はとても発展していて、その技術の歴史やコンピューターサイエンスの基礎を知らなくてもすごいことができてしまうことが多いのです。

しかしそれでは問題が発生したときにコードを確認することしかできないということに、サマーインターンを通して気付かされました。書き方があっていたとしても何故か改善されない問題があった時、根本的な原因を探るには最下層にあたるコンピュータサイエンスの基礎知識が必要だったのです。

エラーが発生した際は、何よりも原因の特定が重要。どういう現象なのかを考えるよりも先にどこに原因を特定しないと手を加えた後に全然違った結果が出てきてしまうかもしれません。歴史や背景を知れば「ここは問題が起きるかもしれない」と事前に予測をすることもできますし、僅かな差も見つけられるようになると気がつきました。

技術力が上がり、新しい学びを得ることの「楽しさ」

エンジニアをしていて楽しい瞬間はやはり、知らないことが分かる時です。先輩のエンジニアから新しい技術や新しいやり方、考え方について学ぶときにはいつもわくわくしています。その話を理解して自分のものにするためにも、やはり基礎的な部分を知ることが自分の技術力を上げていくことの第一歩になっていくのです。

僕はJavaScriptという言語が何故生まれたのかを全く知りませんでしたし、「Webブラウザ上で動作するJavaScript」と「Webブラウザ上ではないJavaScript」があるというのも知りませんでした。しかしこれを知った途端一気に技術への解像度が上がったのです。実際にエラーが発生したときに「ああ、これはWebブラウザ側の話じゃないからここに問題があるんだ」と話しているのを聞いて理解ができました。まさに、基礎力が上がったからこそ自分の理解も上がった瞬間でした。

正直なことを言うと、今までは基礎であるコンピューターサイエンスをそこまで重視していませんでした。何よりもコードが書けることが重要だと勘違いしていたのです。実際にSpeeeに入社し学ぶうちに、その基礎の知識を身につけてこその「技術」であると思えるようになりました。何より、技術の基礎を知ることで、さらに技術の面白さに気付かされたのです。解像度を上げて仕事ができれば、吸収できることの量も幅も広がります。

イメージ

僕のなりたいエンジニアの姿

僕の思う理想のエンジニアには3つの要素があります。

1つ目は会社の一員という観点から「技術的な意思決定ができること」。事業のフェーズに合わせて最適な技術スタックを選択することができるようになりたいです。

僕がサマーインターンで指摘された、「技術的な意思決定力の弱さ」に関して、先輩に相談したことがあります。先輩からの答えは、「いきなりできる人はいないから今のうちに沢山経験を積んでほしい」、でした。意思決定ができる人は多くの「意思決定をしてきた人」です。Speeeで仕事をする中で、自分でどんどん意思決定をする機会を取りに行こうと考えています。

2つ目は、プロダクトをより良いものにするためにも「エンドユーザーに対して価値を届けられるようになること」です。

課題解決能力を高めるため、積極的に先輩に質問をし、ビジネスや事業への理解を深めています。話を聞くだけではなくて、事業プロダクトの内部ドキュメントを読み込んだりもしています。「どんなタイミングでどんな言葉が使われているのか」「その言葉はどんな定義なのか」を積極的に学ぶことで、「課題解決」を通じ、ユーザーへ価値提供が可能になっていくと信じています。その意思決定を、ビジネス目線・エンジニア目線の両方からできるようになることが理想です。

3つ目は、シンプルに「実装能力を上げること」です。早くて正確、綺麗なコードを書けること。これら3つを兼ね備えたエンジニアになりたいです。

コーディング能力は知識をつけたり、PCをカスタマイズしていくことでより効率的な作業を目指しています。「自分の中で綺麗なコード」をはっきりさせて指摘を受けたコードについては振り返りと反省。次はどうすれば良いのかをどうすれば良いのかをコンスタントに考えていく必要があります。

技術力への不安は、学びと経験が解消してくれる

「技術」と向き合ってみると自分がやるべきことが見えてきます。自分がどんなエンジニアになりたいのかを考えていく中で、自分が学ぶべきことや身につけるべき知識がわかるはずです。

僕自身も、自分の技術力で本当に仕事ができるようになるのか? 周りのレベルはどれくらいなのだろうか? と不安を抱えていました。新卒でエンジニアになる、と決めた人にとって、多かれ少なかれその不安はついて回るはずです。

だからこそ、「技術力」という言葉をしっかり分解して考えていくことが重要になります。冒頭にも書いた通り、「技術の扱い方」「技術の背景知識」そして、「コンピューターサイエンスの基礎知識」。この一つ一つを着実に積み上げていくことが、良いエンジニアになっていくために不可欠だと考えています。

高い技術力を得るためには基礎や背景の理解がとても重要です。僕を含めて、いきなり全てが完璧にできる人はいません。たくさんの機会に飛び込んで経験を積み重ねることで、少しずつできる様になっていきます。幸い、僕にとってのSpeeeは、学びと経験が多くできる職場でした。だからこそ、毎日がわくわくの連続です。

一つ一つの経験や、知識がいつか自分を支えてくれると確信しています。これからも、技術に、仕事に、エンジニアとして働くことに、わくわくし続けていきたいです。