ソフトウェアエンジニアリングは他のエンジニアリング分野よりも専門的であることをどのように説明しますか?[閉まっている]


9

私は、優れたソフトウェアエンジニアはどのソフトウェアテクノロジでも開発でき、特定のテクノロジの経験は優れたソフトウェアの構築に関係ないと主張する人と協力しています。彼のアナロジーは、あなたが言っている製品を製造する組立ラインを構築する方法を知るために、あなたが構築されている製品の知識を持っている必要がないということでした。

「上手くいけば、すべてが上手だ」というような目で見られるのは賛辞ですが、ある意味では、「Codemonkey、ゴー・スリング・コード」のように、職業を簡単にすることもできます。特定のソフトウェアフレームワークの経験がなければ、トラブルにすぐに巻き込まれる可能性がありますが、それは重要です。

私はこれを説明しようとしたが、彼はそれを購入しなかった。これに関する私の見解や考えは、私の経験が1つのことですべてのものに変換されるわけではないことを説明するのに役立ちますか?


7
反対票を投じる場合、少なくともその理由についてコメントしていただけますか?特にあなたの入力は質問を言い換える/焦点を合わせるのを助けることができるので。
スペンサーコルモス

11
第一にこれは問題ではなく暴言であり、第二にそれは欠陥のある仮定の暴言であり、これは反対票が投じられ閉鎖される必要があります。

6
@JarrodRobersonここに正当な質問があると思います。一部の人がソフトウェアエンジニアリングを他のエンジニアリング分野よりも多かれ少なかれ専門化していると考える理由の説明を求める良い説明を求めています。
maple_shaft

7
@SpencerKあなたの質問は「ランダムな男が悪いアナロジーを作ったのですが、どうすればよいですか」であり、それは実際には問題ではありません。彼の立場を裏付ける確固たる証拠や参照を求めれば、あなたはここで自分自身を証明する必要はありません。
yannis

5
-1私はあなたの前提に同意しません。ソフトウェアエンジニアリングは、他のエンジニアリング分野ほど専門的ではありません。それらは高度に専門化され一般化されます。優れた電気機械エンジニアは、優れた生物医学エンジニアではない可能性があります。一方、優れた電気技師は家と車の両方で作業する可能性があります。
zzzzBov 2012

回答:


23

しかし、ある意味では、「Codemonkey、go sling code」のように、それは職業を簡単にすることにもなります。

私は全く反対を主張します。優れたソフトウェアエンジニアは、テクノロジーにとらわれない高品質のソフトウェアを概念化、設計、および設計する能力を持っています。この範囲の反対側は、.NETまたはJavaまたはPHPのみの「codemonkey」であり、方向性や仕様を指定し、ツールを利用してソフトウェアを実装するのが得意です。

ソフトウェアエンジニアは、すべてのツールのマスターである必要はありませんが、それらの大部分が何であるか、彼らがテーブルにもたらすもの、および特定のプロジェクトに最も適切である可能性が高いものについてかなり高いレベルの理解が必要です。 。私は、コードモンキーが、特定のツールで宣言されている専門知識の習得者になることを期待しています。

私はメカニックの仕事をする方法を知らないフォードのエンジニアを信用しません。

それでも、ソフトウェアエンジニアリングはこれらの分野の1つであり、多くの場合、エンジニア、ビルダー、およびメカニックが同時に存在することが期待されています。


8
言語とツールよりも概念と原則を理解することの重要性も強調します。
2012

+1私の不満の1つは、「私はC#開発者です...」と言う人です。そして、クールエイドを飲み、MSからゴスペルとして何でも受け入れます。10年間のプログラミングで11を超えるプログラミング言語を学びました。それぞれが他の言語でのプログラミング方法を大幅に改善しました。ソフトウェア工学を学ぼう!2年後になくなるプラットフォームではありません。
ティモシーボールドリッジ

フォードエンジニアの参照用に+1。これまでソフトウェアエンジニアとプログラマを比較することはありませんでした。
Dalin Seivewright、2012

プログラマーはエンジニアのサブセットであり、その逆ではありません。
Spencer Rathbun 2012

11

一緒に仕事をする人とある程度同意します。優れたソフトウェアエンジニアは、設計とソフトウェア生産の一般原則を扱います。実際の言語とフレームワークは詳細です。

これは、新しい言語やフレームワークを簡単に選択できるようにするためのものではありません。それらに関連する学習曲線は常にありますが、要点はそれが曲線であり、優れたソフトウェアエンジニアにとって垂直の壁ではないということです。

優れたソフトウェアエンジニアは、さまざまなツールやテクノロジーで幅広い経験を持っています。そうでない場合、彼はどのようにしてその仕事に最適なツールを選ぶことができますか?古い決まり文句を使い果たすために、ハンマーの使い方を知っている人にとって、すべての問題は釘のように見えます。ねじ回しの専門家でなくても、ねじをおかしな見栄えの釘ではなく、ねじとして認識できるように、それらを理解しておくことは重要です。


「優れたソフトウェアエンジニアは、設計とソフトウェア生産の一般原則を扱います。」組み込み制御システムとWebアプリケーションの作成はほぼ同じですよね?
Marcin

@Marcin:はい、いくつかの原則があります。私が作成した点は、(たとえば)Cまたはアセンブラーで組み込みシステムを設計する場合、ツールが異なっていても同じ種類の原則を採用しているということです。
JeremyP 2012

これらのツールはそれほど異なっておらず、非常に類似した問題領域に対応しています。これがまったく役に立たない理由です。
Marcin

1
@Marcin:アセンブラーでプログラミングされていないか、Cでプログラミングされていないことは明らかです。一般的な神話にもかかわらず、Cはアセンブラーではなく、これらのツールでのプログラミングは、CやRubyでのプログラミングとは異なります。
JeremyP 2012

1
@Marcin、確かに、そしてボウリングはすべてのピンを倒すだけの問題です。本当にケーキ。Webプログラミングと組み込みプログラミングは、いくつかの高レベルの原則とベストプラクティスを共有する場合がありますが、日常業務を実際に管理しているのは、これらのプラクティスの実装を管理する制約です。最終的には、Webプログラマーや組み込みエンジニアとして再教育することができます、その逆も可能です。
Charles E. Grant、

5

TLDRバージョン:他のエンジニアリング分野では、使用している材料についての知識が必要です(たとえば、建築家は、設計で使用している材料がどれだけの負荷に耐えられるかを知る必要があります)。ソフトウェアエンジニアリングに使用する言語とフレームワークには一定の制限があり、それらを効果的に設計および開発するには、それらに精通している必要があります。

私たちが行うことには、2つの異なるフェーズがあります。最初は概念設計です。これは高レベルおよび低レベルのシステム設計です(UMLを使用するなど)。高レベルの設計は理論的には実装にとらわれない場合があります(ただし、高レベルの設計では、データベースプラットフォーム、既製のミドルウェアなどの詳細を考慮する必要がある場合があります)。低レベルのデザインは少しトリッキーです。インフラストラクチャの詳細を組み込まずにビジネスロジックの詳細を設計できます。これらは理論的にはプラットフォームに依存しません。

2番目のフェーズは実際のプログラミングです。一部のプログラミングは構築と見なしていますが、他の(私を含む)は、コーディングは依然として設計規律であると主張しています(PPPでは、ボブマーティンは著者がこの効果について非常に良い議論を提唱している記事を参照していますが、私は今、私はこの記事へのリンクでこの回答を更新します)。実際の構築は、コンパイルを押すと発生し、事実上無料です。

建築家が使用している建築材料の引張強度や圧縮強度などを考慮する必要があるのと同じように、ソフトウェアエンジニアも、コードを作成するときに開発するプラットフォームの機能を知る必要があります。プラットフォームの選択も考慮しない場合、低レベルのシステム設計はあまり効果的ではないと私は主張します。


5

ソフトウェアエンジニアリングの学位プログラムを卒業した人として、あなたの同僚は部分的に正しいと言えます。優れたソフトウェアエンジニアは、数学、統計学、コンピュータサイエンス、およびドメインエクスペリエンスを応用してシステムを構築することに重点を置いています。ソフトウェアエンジニアが使用する方法は、通常、テクノロジや言語に依存しません。ツールは、基本的な原則ほど重要ではありません。

とはいえ、同僚のアナロジーには欠陥があります。ドメインの問題を理解することは、あらゆるエンジニアリング分野に不可欠です。解決しようとしている問題と満足しようとしている人々を完全に理解していない場合、それらの問題に対して可能な限り最良のソリューションを構築することは無限に困難になります。

結局のところ、ソフトウェアエンジニアリング(および任意のエンジニアリング分野)は、問題を解決するためにいくつかの概念を適用することです。同じツールを頻繁に使用すると、それらのツールに習熟することができます。これらのツールで解決できる問題、それらのツールを使用した場合のリスクまたは落とし穴を特定し、それらのツールを使用してソリューションを構築する方が簡単です。


根本的な原則は非常に異なる場合があります。
Marcin

1
@Marcinいいえ、ありません。テクノロジーが変化しても、コンピュータサイエンスは変化しません。数学は変わりません。統計は変わりません。要件分析、システム設計、構成管理の実践、検証と検証の戦略、品質の原則も行いません...
Thomas Owens

実際、「要件分析、システム設計、構成管理の実践、検証と検証の戦略、品質の原則」はすべて、問題ドメイン間で変化をもたらします。あなたがそれを認識しない場合、あなたはあなたが知らないことを理解するには傲慢すぎるので、あなたは知らないドメインで働く非常に、非常に貧しい仕事をする可能性があります。また、適用される数学はかなり大きく変化しますが、数学についてもすべて知っていると思います。
Marcin

@Marcin私は組み込みシステムからWebアプリケーションまで、あらゆる分野で働いてきました。彼らはそれほど変わらない。適切な要件の品質は、ドメインに応じて変化しません。システムの設計に使用されるツールは変わりません。高品質なシステムを測定して実現する方法は変わりません。
トーマス・オーエンス

1
はい、そうです。世界中のすべてのソフトウェアプロジェクトは同じであり、すべてのプロジェクトを管理する方法を理解しました。おそらく、すべてのソフトウェアを作成および管理するためのOne True Wayを説明する本を書く必要があります。
Marcin

4

彼のアナロジーは、あなたが言っている製品を製造する組立ラインを構築する方法を知るために、あなたが構築されている製品の知識を持っている必要がないということでした。

これはほぼ間違いなく間違っています。専門の製造エンジニアは、自分たちの管理下にある製品についてかなり理解する必要があります。

いずれにせよ、より良い例えは機械工学コースの卒業生です:誰もが(メカとソフトウェアの両方で)ほぼ同じスキルで始めたとしても、誰も「機械エンジニア」のままではありませんが、代わりに彼らが構築するもの。同様に、ソフトウェア開発にも非常に異なるサブフィールドがあります。

組み立てラインの類推に戻ると、すべての組み立てラインは製品ごとに異なり、異なるタイプのソフトウェア開発には異なる方法が必要です。ゲームを構築するのと同じ方法でセキュリティソフトウェアを構築することはありません。


1
同じレベルのソフトウェア構造は、ソフトウェア製品に関係なく同じです。アセンブリラインではなく方法論と呼びますが、概念的には同じです。

1
@JarrodRobersonいいえ。組立ラインは均一ではなく、方法論は一般に適用できません。
Marcin

2
Marcinに同意します。製品の組み立てラインを組み立てるには、製品についての知識が必要です。正しい最終結果を得るために使用するツールを正確に選択できる必要があります。ソフトウェアでは、方法論は特定のツールまたはタスクになります。1つのタスクが特定のタスクを完了することである場合、全体の知識は必要ありません。しかし、あなたはオペレーターであり、エンジニアではありません。組立ラインを形成するための正しい方法論のセットを選択すると、他のエンジニアリングと同じようにエンジニアになります。その専門性や違いはありません。
RJay75 2012

2

さまざまな専門分野に関わる学習曲線があります。組み込み/リアルタイムプログラミング、Webアプリプログラミング、システム/ OSプログラミング、シッククライアントプログラミング、モバイル開発などの違いについて話しています。

あるタイプのプログラミングのエキスパートである人は、要件が異なるため、すぐに別のタイプにクロスオーバーできない場合があります。確かに、ソフトウェアエンジニアはそのための基本を持っていますが、何かに特化するには時間がかかります。


1

警告を追加しますが、同僚が提案する前提に同意します。

優れたソフトウェアエンジニアは、あらゆる技術で優れたソフトウェアを構築できるようになります...新しい技術で少し学んだ後。

最初は明らかではないいくつかの癖があるかもしれませんが、すぐれたソフトウェアエンジニアはすぐにそれらを学びます。

彼が本当に意味していることは、開発者が2年間のC#の確かな経験を持っているからといって、Javaのバックグラウンドを持つ優れたソフトウェアエンジニアが、C#を一度も経験せず、すぐにC#を習得できなかったということではないと思います。最初の人よりも優れたC#開発者になる。

言い換えれば、Javaの人をC#で「やり遂げた」からといって、仕事のJavaの人を割り引く必要はありません。


これは当たり前のことだと思いますが、それは本当にROIに関するものです。6か月後にC ++プロジェクトを開始したいのであれば、Javaの主要な経験を持つエンジニアを雇うつもりはありません。ただし、6か月以内にリリースする必要があるSwingプロジェクトがある場合でも、主要なサーバー側エンジニアは資格を得る可能性があります。
Spencer Kormos 2012

@SpencerKは完全に同意します。ROIがどれだけ早く必要かによって異なります。待機する時間が長い場合は、優れたソフトウェアエンジニアが「勝つ」必要があります。
ozz

また、あなたならきついマイナス!
ozz

1
いいえ、私ではありません。理由についてはコメントせずに反対票を投じません。それよりマナーがいい!
スペンサーコルモス2012

1

適例:10年前には存在しなかったと思われる専門的な経験を持つことが非常に重要であると思われるソフトウェアフレームワーク、または存在した場合に大幅な変革を経験しました。私たちの職業の性質上、自分のキャリア全体に特化することは不可能です。それぞれのスキルレベルに応じて、スペシャライゼーションは、特定のフレームワークを使用したことがない人よりも1〜6か月間有利になります。その後、あなたは同等です。


2
本当に?私は、セキュリティエンジニアが6か月以内にゲームをコーディングしてコーディングし、経験豊富なスペシャリストと見分けがつかないことを期待していると思います。
Marcin

私はMarcinに同意します。それは、プログラミング言語またはプラットフォームの知識だけではありません。私は2つの異なる分野で働いており、それぞれに数年を費やしてきました。1つの分野で本当にプロフェッショナルで生産的であるのに十分慣れるまでには時間がかかります。もちろん、経験豊富なソフトウェアスペシャリストであることはスピードアップしますが、6か月ではなく2、3年と考えます。
ジョルジョ

1

私はヘリコプター会社に勤めています。ここの航空エンジニアは、使用できる航空機のタイプに特化しています。それらは「タイプ定格」である必要があります。技術的には、Robinson R22からJumbo Jetまで何でも処理できますが、変換トレーニングがなければできませんでした。

「変換トレーニング」がソフトウェアエンジニアにとってより非公式であることを除いて、これはソフトウェアエンジニアリングとかなり似ていると思います。


1

画家と話すとき、彼は彫刻に問題はないと彼に言ったでしょうか?

新しい言語や新しいドメインの詳細を学ぶことは、主に鉛筆とインクを扱い、ペイントする方法を学ぶアーティストと似ています(またはその逆)。これは、他のほとんどの回答が話していることであり、友達が部分的に正しい方法です-同じ概念の多くが適用されます。

しかし、3Dオブジェクトをスカルプトする方法や小説(両方の形式の芸術的表現)を書く方法を画家に教えることは、まったく別の獣です。それがあなたの視点です。

Webベースのソフトウェアには、デスクトップソフトウェアとはまったく異なる考え方が必要です。ゲームと作業環境に適用すると、どちらも完全に異なります。OSや統合システムで作業するには、別の方法で考える必要があると思います(ただし、私はそれらについての経験はありません)。そして、別の考え方も必要な他のドメインがあることは間違いありません。

まとめと例:

「芸術」には、彫刻、小説、漫画、絵画が含まれます。スキルの重複は次のとおりです。

  • 体形と色彩理論:彫刻、漫画、絵画
  • テキストによるコミュニケーション:小説や漫画

... 等々。しかし、前述のように、漫画家は彼らの最初の小説でうまくいくとは思えない。彼らは違う考え方をする必要があります。

同様に、プログラミング/ソフトウェアエンジニアリングのさまざまな分野で重複がありますが、それらのほとんどはあまりにも明確であり、すぐには参入できません。次に例を示します。

  • アルゴリズム:OS /統合システム、ゲーム、その他速度やメモリを最適化する必要のある場所。ウェブ開発ではめったに重要ではない
  • デザイン:Web開発のあらゆる場所で使用できますが、UIのない​​統合システムではそれほど重要ではありません。
  • クライアント/サーバーソフトウェア:「クライアントを信頼しない」という考え方は、必ずしも一部のドメインに存在するとは限りません(シングルプレイヤーゲームや他のスタンドアロンデスクトップソフトウェア。

プログラミングやソフトウェアの設計は、科学や工学と同じくらい芸術であるといつも主張してきました。これは、それらが似ている別の例だと思います。
イズカタ

ああ、そして誰かが私に噛み付く前に、「アルゴリズム」によって、私は高レベルのCS-yのものについて話している。フィボナッチヒープとTimsortが思い浮かぶ2つです。(私はそのようなアルゴリズムの複雑さのレベルで作業することはほとんどないので、そのトピックについてはほとんど知りません)
Izkata

0

すべての道路建設労働者は、現場であらゆる機器や機械を使用できますか?答えはいいえだ。彼らが知っていて、他の人には馴染みのある機械の一部があります。同じことがソフトウェアエンジニアにも当てはまります。xの言語とフレームワークはx個あります。毎日それらを使用しているためですが、トレーニングをしなくても他の人の正確な操作を知ることはできません。それは手持ち削岩機の労働者を取り、彼にセメントミキサーを運転する仕事を割り当てるようなものです。

プログラミング言語とフレームワークは、ソフトウェアエンジニアのツールベルトの単なるツールです。経験上、他のツールよりもよく知っているツールがいくつかあります。結局のところ、最良のツールは、コンピューティングのコアコンセプトと原則を理解することです。言語とフレームワークの選択は、どのドライバーでどのドライバーを使用するかを選択するだけです。


2
これは悪いアナロジーであり、たとえ彼らが問題の比喩を混ぜ合わせたとしても、彼らは建設労働者ではなく工学について話している。そのため、道路を建設するすべての土木技術者は、あらゆる種類の道路を建設できると期待されています!アスファルトを建設現場まで運ぶダンプトラックの運転手があらゆる種類のダンプトラックを運転できるように。

1
@JarrodRoberson私はそれが貧弱なアナロジーであることに同意しますが、私はあなたの土木技師の主張がもっと良いとは思いません。確かに、土木技師は道路の計画を読むことができるはずです。しかし、滑走路や氷の道路を建設する場合、何年も高速道路の建設に費やした人を雇いたいですか、それとも滑走路や氷の道路で特別な経験を積んだ人を雇いたいですか。
カレブ

0

この種のことは私が働いている場所ではよく起こります。

私は妻の叔父の職業-自動車修理工-と比較したいと思います。

彼はメルセデスを専門としており、彼の知識を他の車種に応用することができます。その中にはかなり珍しいものもありますが、それは、あなたが騒々しいと言っているので、彼がすぐにメイクXを修理できるという意味ではありません。

私はいくつかの言語でプログラミングしていますが、MacBookのSafariがタブを変更するたびにページをリロードする理由がわかりません(今日の奇妙な呼び出し)。私はその理由を理解しようと試みますが、コンピューティング分野は非常に大きいので、頭の上を知るつもりはありません。

どちらの場合も、それぞれの分野を調査してしばらく時間を費やした後、おそらく「車で作業する」または「コンピュータで作業する」という理由で人々が考える10秒では答えを見つけることができませんでした。

人々は地元の医者にそのようなことを言いますか(「私はどんな病気にかかっているのか頭痛がしますか?」など)-ほとんどの人は実際に彼らの即時の期待以上に何かがあることを理解していないので彼らがそうするでしょう上記の職業の。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.