初心者レベルのソフトウェア エンジニアとして学んだ教訓
公開: 2022-08-301 年前にソフトウェア エンジニアとは何をしているのかと聞かれたら、「コードを使って問題を解決する」と答えていたでしょう。 それは、私たちが制作した作品がどのように評価されるかを示す簡単な答えです。 製品主導のチームのエンジニアにとって、これらの問題には、顧客が求めていた新しい機能を実装する方法や、既存の機能のパフォーマンスを向上させる方法が含まれる場合があります。
もしあなたが今日私に同じ質問をしたら、私は少し違う答えをするでしょう。 ソフトウェア エンジニアは、コードを通じて適切な問題を解決する任務を負っており、効果的に解決されたときにビジネス目標を達成します。 どの問題をどのように解決するかを理解することは、開発者にとって最も重要な部分であり、実際の実装の詳細は二次的なものです。
私のソフトウェア エンジニアリングへの道
プログラミングに興味を持ったのは、大学 1 年生の前の夏に Upperline Code でクラスを受講した後です。 私がこの機会を得たのは、私が参加していた The Opportunity Network という大学およびキャリア準備プログラムを通じてでした。
Upperline Code は、私が初めてプログラミングに触れたときで、すぐにコーディングの学習に興味があることに気付きました。 その夏の後半、私はノートルダム大学の入学許可証を受け取り、文学部から工学部に切り替えて、コンピューター サイエンス (CS) を専攻しました。
私のお気に入りの CS コースのいくつかは、アルゴリズムの設計/分析、クラウド コンピューティング、およびプログラミング チャレンジでした。 問題は興味深く、教授は新しいアイデアを提示し、概念を説明するのが得意でした。
学部生の間、私はソフトウェア エンジニアとして働き、得た技術的スキルを活かしたいと思っていました。 ありがたいことに、4 年生の前の夏、Kantata でソフトウェア エンジニアとしてインターンをし、他のエンジニアとペア プログラムを組んで機能を提供する機会がありました。
インターンシップの経験と、教授からの励ましの言葉のおかげで、最初に仕事に応募し始めたときに、他の役割に妥協しないという自信が持てました。 オフィスアワーに多くの時間を費やした後、私は 2021 年に CS の学位を取得して卒業し、ここ Sprout Social のアソシエイト ソフトウェア エンジニアになるという申し出を受け入れました。
Sprout Social に落ち着く
この役割と会社にとって新人であることの一部は、一般的なソフトウェア エンジニアリング スキルと Sprout 固有のドメイン知識の両方を開発する必要があったことです。 理解するのに一般的なプログラミングの知識が必要なタスクが、私にとって最も簡単に解決できることがわかりました。 しかし、Sprout のアーキテクチャに関する知識が必要なタスクは、取り組むのに時間がかかり、チームの助けを借りなければなりませんでした。 ドキュメントをオンラインで読むことで解決できる問題もありますが、自分が行っている作業に関連する情報が常に見つかるとは限りません。他の人にガイダンスを求めることができることが重要です。
Sprout に入社して最初に驚いたことの 1 つは、開発プロセスがいかに協力的であるかということです。 チーム全体で機能を開発する必要があることは知っていましたが、それが実際にどのように行われるかは知りませんでした。 成功した機能をリリースするには、プロジェクトの要件を定義するプロダクト マネージャーから、モックアップを作成するデザイナー、機能を実装するエンジニアまで、さまざまな役割を持つ多くの人々が協力する必要があることにすぐに気付きました。 コラボレーションはオプションではなく、チームの目標を達成するために必要なものでした。
さまざまなコードベースをナビゲートする方法を学び、さまざまなサービスがどのように相互作用するかのメンタル モデルを構築することは、急な学習曲線でした。 Sprout のコア ビジネスはソフトウェアであるため、そのアーキテクチャはビジネス要件によって大きく形作られます。 仕事を増やしていくと、開発者が解決しようとしているビジネス上の問題と、以前にアーキテクチャに関する決定が下された理由を認識しなければなりませんでした。
最初は、プル リクエストがコードベースにマージされる前にレビューが必要であることに少し不安を感じていました。 コード レビューの主な目的は知識の共有とコード標準の維持であることを理解することで、私の見方が変わりました。
コード レビューを行うことで、技術的なスキルが向上し、プル リクエストの品質が向上しました。 何を変更すべきかについてアドバイスをくれたり、新しいパターンを紹介してくれたり、コードベースの関連領域を教えてくれたりする仲間がいて、とても役に立ちました。 他のエンジニアのプル リクエストを読むことで、私が直接取り組んでいない他のサービスについても貴重な情報を得ることができました。
これまでの経験が重要
人生の新しい段階に入ると、以前の経験はもはや重要ではないという一般的な考えがあります。 大学に入ってしまえば、高校時代の経験は関係ありません。 社会人になったら、大学での経験は関係ありません。
しかし、見過ごされがちなのは、私たちの経験、知識、習慣が複合的な影響を及ぼしているということです。 私たちは通常、以前に行った作業のおかげで、新しいことを達成することができます. 以前に得た知識とスキルは、初心者レベルのソフトウェア エンジニアとして新しい課題に取り組む方法に大きな影響を与えています。
Sprout での日々の仕事に最も直接的な影響を与えた学部生の授業は、プログラミングの課題とデータベースの概念でした。 前者は、大きな問題をより小さな断片に分割して、より効率的に解決する方法を教えてくれました。 コードをどのように構造化するかについてより意図的になるようになり、コードの可読性を向上させるのに役立ちました。
データベースの概念では、基本的なリレーショナル データベースの概念を学び、データベース スキーマの設計や SQL などのトピックを扱いました。 問題を解決したり質問に答えたりするために頻繁にデータベースにクエリを実行する必要があるため、クエリの書き方を学びました。
教室の外で得た機会も同様に価値がありました。 Java は私のコースのほとんどで扱われる言語ではありませんでしたが、教授の 1 人が率いるビジネス プロジェクトで Java に取り組む機会がありました。 Java の作成、MySQL データベースの操作、Docker イメージの作成などの実践的な経験を積みました。 Sprout のほとんどのサービスは Java で書かれているため、Java を学ぶことは特に役に立ちました。
コマンド ラインの操作やコア プログラミングの概念の理解など、学部生時代に得たスキルは他にもたくさんあります。 学部でカバーされるトピックのほとんどは本質的に理論的なものであるため、ソフトウェア エンジニアリングのキャリアの準備にはならないというのはよくある誤解です。 しかし、私はその逆だと思います。学部で学んだスキルは、たとえ日々の仕事に直接適用できなくても問題です。
コンピュータサイエンスは非常に広い分野です
CS は、人工知能、機械学習、データ サイエンスなど、さまざまな専門分野をカバーしています。 学部生で得た経験は、ソフトウェア エンジニアリングだけでなく、さまざまな初級レベルの役割に役立つ基礎知識として役立ちます。 学部生からフルタイムの職に就くことは、どのような役割と専門性が自分に適しているかを探る機会を提供します。
ソフトウェア エンジニアリングのキャリアを始めたいと考えているなら、Sprout は始めるのに最適な場所です。