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): 大規模かつ複雑なプロジェクトに取り組み、会社の技術開発の戦略的方向性を決定します。
6.2 Legoプロダクト
かつて(1975年に)Pascal言語の創作者であるニクラウス・ヴィルトは「アルゴリズム+データ構造=プログラム」という本を書きました。それ以来、多くのことが変わりました。
現代のソフトウェア製品は、10年前とは全く異なり、20年前とはさらに異なります。1975年については言うまでもありません—その時から50年が経過しています。
現代のプログラマーはもう手でプログラムを書かないのです。彼はむしろ、既製の部品(ライブラリ)からそれを組み立て、それらの部品を相互に作用させるコードを書きます。
現代のプログラム製品は何十、何百ものプログラムから構成されることがあります。その一部はユーザーのコンピュータやモバイルデバイスで実行され、多くはデータセンターのサーバー上で実行されます。
これらのプログラムの多く、例えばWebサーバーやデータベースは既に書かれています。単に正しく設定することが必要です、そうすれば正しく動作します。しかし時が経つにつれて、設定プロセスが非常に複雑になり、実際には開発に変わります。(*facepalm*)
プログラマーは自分自身と常に戦っています。異なるプログラムで類似のコードを書きたくないので、彼らはライブラリを書き、必要に応じて設定(調整)し、必要な場所にそれらを接続するだけです。
過去20年間で、プログラマーによって非常に多くのライブラリ、フレームワーク、オープンリポジトリが書かれました。それらは実際に何百万もあります。そして今では、コードをゼロから書くことは悪いスタイルと見なされています。代わりに、質の高い検証済みの解決策—ライブラリ、フレームワーク、パッケージ、モジュールからプログラムを組み立てる必要があります。
しかし、このアプローチでもすでに古くなりつつあります。過去10年間のトレンドはクラウドへの移行、あなたのプログラムに必要なものをすべて提供する大規模なデータセンターです。データベースが欲しい?選択肢は何百とあります。ユニークなWebサーバーが欲しい?それもあります!お金さえあれば、どんな要望も叶えます。
6.3 「俺はエンジニアだ」© イーロン・マスク
もはや複雑で退屈なものを書く必要はありません。もしあなたが素晴らしく複雑な機能を必要としているなら、そのためのライブラリはすでにあります。あなたはただ: a) それがあることを知り、b) 必要なものを見つけ(異なる品質の数十の類似品がある可能性があります)、c) それをプロジェクトに統合する方法を理解するだけです。
このアプローチのおかげで、仕事はさらに興味深くなりました。今では、プロダクトに新しい機能を10倍速く追加できるようになりました。30年前、もしwebサーバーが必要なら、あなたはそれを自分で書かなければなりませんでした。20年前は、購入してインストールして設定する必要がありました。そして今では、ただクラウドの管理画面にログインして有効にするだけです。
これは、Pythonの人気の理由の一つです。Pythonは、大きくて複雑な解決策を書くのではなく、むしろ異なる部分を相互に「接着」するのに非常に適しています。そして、その人気から判断すると、それに非常にうまく対処しています。
それに、Python開発者としての職業はPython Fullstack Software Engineerに変わりました。現代のPython開発者は、データベースがどのように動作するかを理解し、適切に作業できるようにする必要があります。HTML & JavaScriptを理解し、pythonバックエンドとフロントエンドの動作を調整する必要があります。そしてDockerも必要です—これは今や業界の標準です。
現代の開発は、20年前とは全く異なります。現代のプログラマーは、コードを書くのに自分の時間の50%以上を使いません。残りの時間はドキュメントを読んだり、新しい技術を学んだり、ミーティング(会議)に参加したりしています。孤独なプログラマーははるか昔の話です。
GO TO FULL VERSION