CodeGym /コース /C# SELF /プログラマーの道

プログラマーの道

C# SELF
レベル 7, レッスン 6
使用可能

1. キャリア階段

プログラマーも資格に応じてグレードがあります。昔は「コーダー」「プログラマー」「ハッカー」といった用語が使われていましたが、今はすべてアメリカのIT業界の英語表記に切り替わっています。

開発者には主に6つの基本的なグレードがあります:

  • Intern Software Engineer
  • Junior Software Engineer
  • Middle Software Engineer
  • Senior Software Engineer
  • TechLead
  • Principal Software Engineer

国や会社によって細かいパラメータは異なることもありますが、だいたい次のような感じです:

  • 🌱 Intern Software Engineer — これはインターン。プログラミングを学習中で、商用経験や大規模プロジェクトの経験はなし。通常は経験豊富な先輩の監督のもとで働きます。主な仕事はコードベースや開発の基礎を学びながら、簡単なコーディングやテストに参加することです。
  • 🐣 Junior Software Engineer — これはもうプログラマーだけど、商用経験が1年未満の段階。経験豊富な開発者の指導のもと、プロジェクトの一部を実装したり、コードレビューに参加したりします。この段階は技術スキルやプロジェクト理解を深めることに集中します。
  • 🦾 Middle Software Engineer(または単に Software Engineer):より自主的に技術的な決定を下せるようになり、重要な部分の担当や、後輩の指導、アーキテクチャの議論に積極的に関わります。通常は2〜5年の実務経験を持ちます。
  • 🧑‍🔬 Senior Software Engineer: 複雑なシステムの設計と実装を担当し、チーム内でメンターやリーダーシップを発揮します。プロジェクトの戦略的計画に参加し、クライアントや関係者とのコミュニケーションも行います。通常は5〜10年の経験です。
  • 🧠 TechLead: プロジェクトの最終的な技術的成果に責任を持ち、開発をリードし、最も難しい課題を解決します。技術標準の遵守を確保し、開発者の活動を調整します。
  • 🏆 Principal Software Engineer: 最高レベルの技術者であり、しばしば会社の技術戦略の策定や革新的なソリューションの開発に関わります。技術的なメンターとしても重要な役割を果たし、複雑な技術的問題のエキスパートです。

面白いところです。大手企業では追加の役割やサブロールもあります。例えば、Googleには次のような役割があります:

  • Staff Software Engineer (L6): 自部署の技術方針に大きな影響を与える役割。
  • Senior Staff Software Engineer (L7): 大規模で複雑なプロジェクトに携わり、会社の技術的方向性を決定します。

2. Lego製品

昔(1975年頃)、ニクラス・ヴァルトというPascal言語の創始者が「Algorithms + Data Structures = Programs」という本を書きました。それから多くのことが変わりました。現代のソフトウェアは10年前と比べても全く違いますし、20年前と比べても別物です。1975年の話はもう古い話で、50年以上経っています⏳

今のプログラマーは手作業でプログラムを書かなくなったのです。むしろ、既存のパーツ(ライブラリ)を組み合わせて、これらのパーツが連携するコードを書いています🧩。現代のソフトウェアは数十から数百のプログラムで構成されることもあります。いくつかはユーザーのPCやスマホで動きますが、多くはデータセンターのサーバー上で動作します。

これらのプログラムの多くは既に書かれています。ただ正しく設定(コンフィグ)すれば動きます。ただし、設定作業が複雑になりすぎると、実質的に開発作業に近くなることもあります🤦‍♂️。

プログラマーは常に自分と戦っています。同じようなコードを何度も書く代わりに、ライブラリを作り、それを設定して使い回すことで、効率化を図っています。これにより、必要な場所に簡単に導入できるのです。

過去20年間で、何百万ものライブラリやフレームワーク、オープンリポジトリが作られました。もはやゼロから全部書くのは非常識です。代わりに、信頼できる良質なソリューション(ライブラリ、フレームワーク、パッケージ、モジュール)を組み合わせてプログラムを作るのが普通になっています🧱。

しかし、このアプローチも古くなりつつあります。ここ10年のトレンドはクラウドへの移行です。大規模なデータセンターが、あなたのプログラムに必要なすべてを提供します。データベースが欲しい?何百も選べます。珍しいウェブサーバーもあります!あらゆるニーズに応えるサービスが揃っています。

3. 「私はエンジニアだ」© イーロン・マスク

img

もう複雑で退屈なことを自分で書く必要はありません。必要な機能があれば、既存のライブラリやフレームワークを使えばいいのです。あなたの仕事は:a) それらの存在を知ること、b) 適切なものを見つけること(似たものが複数あって、品質や細かい違いもあります)、c) それを自分のプロジェクトにどう組み込むか理解すること🎓

これにより、仕事はずっと面白くなります。今では、新しい機能を10倍速く追加できるのです。30年前、Webサーバーが必要ならゼロから書いていました。20年前は買ってインストールして設定していました。今はクラウドのAzureやAWSにアクセスして、必要なサービスをオンにするだけです🌐

ちなみに、これがC#の人気の一つの理由です。大規模なソリューションだけでなく、さまざまなコンポーネントを「つなぐ」のにも最適です。.NETを使えば、ほぼ何にでも連携できます。データベース、マイクロサービス、REST API、メッセージキュー、クラウドサービスなどです。

それに伴い、C#/.NET開発者の職業は、すでにFullstack .NET Software Engineerに進化しています。現代の開発者は、データベース(SQL Server、PostgreSQL、MongoDBなど)の仕組みを理解し、適切に連携できる必要があります。フロントエンド(HTML、CSS、JavaScript/TypeScript、Blazor)の仕組みも理解し、C#のバックエンドと連携できるようにします。そしてもちろん、今や業界標準のDockerも必須です🐳

現代の開発は、20年前と比べて大きく変わっています。プログラマーはコードを書く時間は全体の50%以下で、残りはドキュメントの読解、新技術の学習、設計、チームミーティングに費やされます。ソロのプログラマーはもう稀です。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION