コーダー、プログラマー、ソフトウェアエンジニアについて

Habrに関する最近の記事「 プログラマーとは誰ですか? 」と「 Pythonが科学計算に非常に優れている理由 」は、私にこの投稿を促しました。



それらのコメントを読んで、開発者を「コーダー」、「プログラマー」、「ソフトウェアエンジニア」などのラベルに分割するという議論に何度も出くわしました。



これらすべてが私を特定の思考に導きました。そのいくつかはすでに投稿の1つに対するコメントで述べていましたが、今では別の出版物として補足し、手配することにしました。



画像






ストーリーをご覧ください。 コンピュータと最初のプログラムはどのようにそしてなぜ現れたのですか? 数学的計算とアルゴリズムの精度を向上させ、向上させるため。 暗号学者は、秘密のメッセージを解読するために何千もの組み合わせをブルートフォースできる機能を望み、軍隊は砲弾とミサイルの飛行経路を迅速かつ正確に計算する能力を望み、建築者は異なるソースデータを含む構造の強度を計算する能力を望みました



順番に、プロセスは次のようになりました。まず、サブジェクト領域が調べられ、アルゴリズムが考え出され、計算式が導出され、その後、全体がソフトウェア(マシン)コードに変換されます。



最後の点を除いてすべてを行ったのは「エンジニア」であり、数式、フローチャート、または自然言語の形式で概説されたアルゴリズムを翻訳した人は「コーダー」(または「プログラマー」)でした。



画像



年が過ぎました。 技術が開発され、高レベルの言語が登場し、OSが登場しました。 「コーディング」がより簡単になり、数式を自分で導出したエンジニアや研究者は、プログラミング言語でそれらを既に設定し、コンパイルおよびデバッグすることができました。 両方のポジションを自分で組み合わせた人々がいて、彼らは「ソフトウェアエンジニア」でした。 これまでのところ、すべてが大丈夫です。



そして、楽しみが始まりました。 コンピューターとマイクロコントローラーは、大規模なデータセンターからハンドヘルドデバイスまで、あらゆる場所に浸透しました。 それらの使用範囲も大幅に拡大しました-科学および工学アプリケーションだけでなく、情報システム、文書管理、コミュニケーション、エンターテイメント、ゲームなども含まれます。



非常に多数のタスクの(アルゴリズム的および科学的)計画の複雑さは(主に大規模ではないにしても)減少し始めましたが、ソフトウェア製品は複雑さと機能性で成長し始め、テクノロジーとライブラリの数は増加し、プログラミング言語は再び複雑になり始め、ソフトウェアの品質を評価するための深刻な基準は、以前のように「機能する」だけでなく、「最適に実装され、よく考えられた拡張可能なアーキテクチャ、読み取り可能なコードおよびドキュメントなどが必要」でした。 そして、「プログラマー」は「人間からコンピューターへの翻訳者」から「ソフトウェアエンジニア」に変わりました。言い換えれば、プログラミングと建設を比較すると、集団農民は小屋を建てることができますが、それでも長い間立つ超高層ビルや橋は遠く離れていますどれでも。 これについては、「 ソフトウェアの開発とプログラミングを混同しないでくださいという記事で詳しく説明されています



画像



そして、もう一つの変化が起こりました。すでに経営社会的です。 90年代に誰もが理解していたように、プログラマーがUI / UXを開発しているとき、次のようにひどいものになりがちです。



画像



そして最後には、UI / UXデザイナーのような別の職業がありました。 少し後に、誰もがソフトウェア開発の分野の専門家と特定の分野の専門家の両方を組み合わせることを要求することは困難で高価であることを認識しました。 例として、1S'nikovを見てください(前もって失礼します。私は誰も気分を害したくありません。兄弟の元1S'nikを持っています)。



これは、両方の雇用主に問題をもたらしました(たとえば、取引所での取引の分野で専門家を見つけることは容易ではなく、ソフトウェア開発の分野で専門家を見つけることは容易ではなく、両方を組み合わせた人を見つける可能性ははるかに低いです)、問題これにより従業員自身も同じようになりました(あなたの街にはJava署名者が必要な10の会社があるかもしれませんが、それぞれが対象分野で異なる専門性を持っています)、そして素晴らしい考えが頭に浮かびました:対象領域の分析、TKの策定、 1人が行うべきこと(ビジネスアナリスト、マネージャー、技術者)、および別の人(プログラマー)が結果を得るためのソフトウェアを開発するために。



誰もが黒人でした。 そして、これは良いことであり、ますます多くの企業がこのモデルに取り組んでいます。 ヘッドハンターのサイトの履歴書を見てください-彼らはまさに「マイクロサービスJavaバックエンドのシニア開発者」または「ReactJSミドル開発者」を探しています。 「。



画像



確かに、「1つはアルゴリズムを記述し、もう1つはそれらをエンコードする」という概念は少し変更されました。一方で、現在ではタスクの90%で新しいアルゴリズムやデータストレージ構造を発明しないで、既存の概念を選択して最適化することがより重要であるため、または特定の場合の変更。 しかし、「アルゴリズムの作成」がなくても、原則として機能することは不可能です。 「配列の割り当て、要素ごとのパッセージのためのループの作成など」という形式のタスクを既に策定している人はいません(これはコンピューターサイエンスの授業で学校でのみ発生します)。現在、開発者は「何が、何をすべきか」という情報を操作のシーケンスを開発しています。 実際、基本的なSQLクエリでさえすでにアルゴリズムです。



そのため、「 コーダー 」と「 プログラマー 」の区分は20年前には時代遅れであったと言えますが、現在これらの概念はぼやけており、分離は意味をなしません。



しかし、ここでは、単に「アルゴリズムを思いついてそれをコードの形で設定する」人と「ソフトウェア開発」に従事する人をどうにか分離したいと思います。

ここで、古い部門が再び役立ちます。 単にアルゴリズムを発明してそれにコードを書く人は、「 コーダー 」として十分に正しく考えられますが、アルゴリズムとコーディングの作成だけでなく、テスト、ドキュメント、アーキテクチャとAPIの作成を扱う人も、読みやすさと信頼性を考慮します。コードは、他の多くのプロセスに参加し、「 プログラマー 」とみなすことができます。



しかし、「 ソフトウェアエンジニア 」についてはどうでしょうか。 冒頭で述べたように、昔とは異なり、ソフトウェア開発はエンジニアリングおよび技術的なタスクに限定されず、コンピューターを扱うすべての人が高度な技術教育を受ける必要はありません。 現在、「ソフトウェアエンジニア」と「数学者プログラマー」に加えて、「化学者プログラマー」、「金融プログラマー」、「ゲームマスタープログラマー」(ロールプレーヤーが理解します)、さらには「ミュージシャンプログラマー」さえいる可能性があります。 つまり、実際には、この概念は人間のタスクの範囲のみを示しており、その目的のために彼はプログラミングに従事しています。



そして、エンジニアリングの分野でソフトウェア開発がどれほど頻繁に行われるかを考えると:

「恐ろしい秘密をお伝えします。組み込みソフトウェアのテストは、枯れたWebサーバーよりも少なくとも1桁少なく、悪い結果になります。 そして恐竜はしばしばそれを書き、デバッガは弱虫用であり、「コードがコンパイルされれば、すべてが機能する」。

...残念ながら冗談を言っているわけではありません。」[ コメントから ]


「当然です。 私の観察によれば、多くのハードウェア開発者は、デバイスの製造は選挙の対象となると考えていますが、彼はひざの上で自分でコードを書くことができます。 まあ、これは一般的に些細なことです。 それは静かな恐怖を働かせることになります。 彼らがコードに悪臭を放つ理由を指で説明すると、彼らは非常に気分を害します。


および科学活動:

「私自身の科学研究の経験から、1人から数人がタスクに取り組むとき、音声コードは使用しないと言えます。 彼らは結果を書き、最小限の言語機能を使用しますが、ほとんどの人はバージョン管理システムについて知りません。」[ コメントより ]
多くの場合、定義はより正確に「エンジニアエンコーダー」または「数学者エンコーダー」に聞こえます。



誰かが他の解釈や名前を提供したい場合、私はオープンで実証されたコメントを見て喜んでいます。



All Articles