CodeGym /コース /JAVA 25 SELF /プログラマーの道

プログラマーの道

JAVA 25 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 言語の創始者 Niklaus Wirth が『アルゴリズム+データ構造=プログラム』という本を書きました。それ以来、多くのことが変わりました。現代のソフトウェア製品は、10年前のそれとも違いますし、まして20年前のものとはまったく別物です。1975年の話は言うまでもありません—すでに50年が経ちました ⏳

現代のプログラマーはもはや一から手作業でプログラムを書きません。むしろ既存の部品(ライブラリ)を組み合わせ、それらが相互に連携できるようにするコードを書くほうが主です🧩。現代のソフトウェア製品は数十、数百のプログラムから構成されることもあります。その一部はユーザーのコンピュータやモバイル端末で動きますが、大半はデータセンターのサーバー上で動作します。

これらのプログラムの多く(たとえば Web サーバーやデータベース)はすでに作られています。正しく構成(コンフィグレーション)すれば、求めるとおりに動いてくれます。とはいえ、設定作業があまりに複雑化し、実質的に開発そのものになってしまうこともあります 🤦‍♂️

プログラマーは常に「同じことを繰り返さない」よう自戒します。各所で似たコードをまた書くのではなく、用途に合わせて設定可能なライブラリを作り、必要な場所に再利用していきます。

過去20年で、プログラマーは非常に多くのライブラリ、フレームワーク、オープンリポジトリを作ってきました。本当に数百万単位で存在します。いまやすべてをゼロから書くのはマナー違反とみなされます。代わりに、品質が高く実績のあるソリューション—ライブラリ、フレームワーク、パッケージ、モジュール—を組み合わせてプロダクトを構築するのが一般的です 🧱

しかし、このアプローチさえも古くなりつつあります。ここ10年のトレンドはクラウドへの移行です。巨大なデータセンターが、あなたのアプリに必要なものを何でも提供してくれます。データベースが欲しい? 選択肢は何百とあります。珍しいニッチな Web サーバーだって用意されています。どんな要望にも、あなたの支払い次第で応えます。

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

img

もはや複雑で退屈なものを自分で一から書く必要はありません。必要な機能があるなら、すでに対応するライブラリやフレームワークが存在します。あなたの課題は、a) その存在を知っていること、b) 複数あることの多い代替候補の中から品質や特性を踏まえて適切なものを選ぶこと、c) それを自分のプロジェクトにどう統合するかを理解することです 🎓

その結果、仕事はむしろ面白くなりました。いまや新機能を10倍の速度でプロダクトに追加できます。30年前、Web サーバーが必要ならゼロから書いていました。20年前は購入してインストールと設定を行いました。現在は Azure や AWS のクラウドポータルにアクセスして、必要なサービスを有効化するだけです 🌐

ちなみに、これは Java が人気であり続ける理由の一つでもあります。Java は大規模なエンタープライズ向け開発だけでなく、豊富な JVM エコシステムを通じてほぼ何とでも統合できるため、さまざまなコンポーネントを「つなぎ合わせる」用途にも適しています。データベース、マイクロサービス、REST API、メッセージングシステム、クラウドサービス、分析プラットフォームなど、幅広く連携できます。

その結果、Java Software Engineer という職種はすでに Fullstack Java Developer へと変容しています。現代の開発者は、適切に連携を設計するために、データベース(PostgreSQL、MySQL/MariaDB、MongoDB など)の仕組みを理解していることが重要です。また、Java(Spring Boot、Micronaut、Quarkus)で実装するバックエンドと連携させるために、フロントエンド(HTML、CSS、JavaScript/TypeScript、React、Angular)の成り立ちを理解しておく必要があります。そしてもちろん、今や Docker は欠かせません—業界標準です 🐳。

現代の開発は、20年前とはまったく様相が異なります。プログラマーがコードを書く時間はせいぜい50%程度で、残りはドキュメントの読解、新技術の学習、設計、そしてチームでのミーティングに費やされます。孤高のプログラマーは、いまやむしろ稀な例外です。

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