「ソフトウェアエンジニアリング」ではなく「ソフトウェアクラフツマンシップ」と呼ばれる特定のプラクティスはどれですか。[閉まっている]


11

ない新しい発想年の最後のカップル以上のソフトウェアクラフトマンシップへの関心に大きな増加(特に、多くの場合、お勧め書籍クリーンコードの完全なタイトルがあるされているように思わ:アジャイルのAハンドブッククリーンコードソフトウェア職人)。

個人的には、ソフトウェアクラフツマンシップは優れたソフトウェアエンジニアリングであり、最終結果が(エンドユーザーとしても、そのソフトウェアを保守する人としても)楽しめることを保証することに追加の関心を抱いています。物事のより高いレベルは物事を処理します。

類推するために-50年代と60年代に非常に近代的なスタイルで建設された多くの建物があり、それらに住む人々やそれらの建物の経年変化をほとんど考慮していませんでした。これらの建物の多くは急速にスラム街に発展したか、予想される寿命よりもずっと前に取り壊されました。数年の経験を積んだほとんどの開発者は、同様のコードベースを経験しているはずです。

ソフトウェアの職人がソフトウェアエンジニア(おそらく悪いもの)ができない特定のことは何ですか?


1
類推は当てはまらないようです。ソフトウェアの職人技とソフトウェアエンジニアリングの両方には、ソフトウェアの長期的な有用性を向上させるという同じ目標(および既得権益)があります。
rwong

3
この問題は、主に「エンジニア」と「職人」のどちらがクールなタイトルであるかを考える問題であり、現在の答えはそれを証明しているようです。あなたが好むタイトルは、明らかに、その人がやっていることを知っていることを意味します。
ベンブロッカ

両者の違いは、職人が一人で働き、エンジニアがチームの一員として働くことです。大まかに言えば、これは2つの役割の主要な説明を満たしているように見えます。どちらかが異なるスキルを持っているということではなく、そのアプローチは異なる立場から来ています。
gbjbaanb

それは自分自身を与えるために本当に誇大なタイトルのように聞こえます。
マイケルズノウデン

回答:


13

プロと職人の唯一の違いは、少しの情熱が入り混じっていることです。職人として分類する特定の観察可能なプラクティスはありませんが、むしろ品質のコレクションです。

  • 職人は、知覚される品質だけでなく、自分の作品の実際の品質を重視します。
  • 職人は仕事に興味を持ち、仕事を成し遂げるだけでなく、自然に自分の工芸品に引き寄せられます。
  • 職人は自分の職業を気にかけ、キャリアを向上させるだけでなく、スキルを向上させたいと考えています。
  • 職人は、議論したり、学習したり、考えたりするために、給料労働時間以外の時間を少しでも過ごします(たとえわずかな時間であっても)。
  • 職人は、自分が実際にどれだけ知っているかを知っており、それに謙虚です。
  • 職人は、学ぶ意欲のある人に教え、指導を求める人を導き、必要なときにそれらを自分で探すことをいとわない。

汗をかくことなく、これらすべてを少しの情熱でカバーしています。


最後の1つは特に重要だと思う
ロヴィス

7

個人的には、ソフトウェアクラフツマンシップは優れたソフトウェアエンジニアリングであり、最終結果が(エンドユーザーとしても、そのソフトウェアを保守する人としても)楽しめることを保証することに追加の関心を抱いています。物事のより高いレベルは物事を処理します。

私の教授がかつて言ったように(言い換え):「ソフトウェアエンジニアとして、ソフトウェアを提供するのはあなたの仕事だけではありません。顧客を幸せにするソフトウェアを提供するのはあなたの仕事です。」

ソフトウェアの職人がソフトウェアエンジニア(おそらく悪いもの)ができない特定のことは何ですか?

何もありません-エンジニアは職人です...しかし、もっと。エンジニアリングは職人技に基づいています。

職人でありエンジニアでもあるあなたは、教育と経験の何らかの組み合わせを通じて、熟練した個人です。確立された手順に従います。また、あなたは実用的であり、何が壊れており、改善する必要があることを認識しています。

ただし、エンジニアはさらに、経済学、理論、科学の懸念を追加します。最小のコストで最大の利益を得ることに関心があります。心理学、社会学、管理、人間とコンピューターの相互作用、コンピューターサイエンスの理論を適用して、問題を解決します(対人的および技術的)。そして、あなたは間違いなくあなたの経験をバックアップするための教育を受けています。


2
そして、あなたは間違いなくあなたの経験をバックアップするための教育を受けています -「正式」と言わなかったことをうれしく思います。
ツリーコーダー

@greengit多くの場所で、「エンジニア」というタイトルを使用するには、正式な教育を受けなければなりません。ヨーロッパでは、これは工学の学位を取得して卒業することを意味します。イタリアでは、認定試験に合格するという要件も追加されています。北米、テキサス、フロリダ、およびカナダでは、「エンジニア」というタイトル(ソフトウェアエンジニアを含む)を使用している人は、ライセンス試験に合格する必要があります。
トーマスオーエンズ

これは、この正式な教育を受けていない人がエンジニアリングを実践できないという意味ではありません。彼らは自分自身をプロのタイトルとしてエンジニアと呼ぶことはできません。
トーマスオーエンズ

1
エンジニアは必ずしも職人とは限りません
ニコール

2
@Renesis定義により、エンジニアリングは技術です。クラフトの定義:「特別なスキル、特に手動スキルを必要とする芸術、貿易、または職業」。エンジニアリングは特別なスキルを必要とする職業であるため、クラフトです。しかし、それは(特に)科学的理論の応用でもあり、それがより多くをもたらします。
トーマス・オーエンズ

2

ソフトウェアクラフツマンシップ運動は、(一部の開発者の不注意に加えて)今日の利害関係者やユーザーから私たちの職業への不信をもたらす「伝統的な」ソフトウェアエンジニアリングの失敗と不満足な結果に反応して開始されました。

その目標は2つあります。プログラマーへの信頼を回復し、そのためにソフトウェアの品質と開発者のスキルの水準を高めます。

Swの職人技は、次のような技術的実践を促進します。

  • ソリッドデザインの原則
  • デザインパターン
  • TDD(「ダブルエントリアカウンティング」メタファー)
  • ...

そして、チーム/組織のプラクティス:

  • ペアプログラミング
  • メンタリング
  • コードカタ
  • Dojos /コードリトリート
  • ...

だから、2つの違いは明らかだと思います:ソフトウェアの職人技は、ソフトウェア工学が40年以上にわたって存在してきた問題の大部分に対処しようとしています


1
私は同意しません-ソフトウェアエンジニアリングが失敗した理由は、エンジニアがいなかったためであり、エンジニアを装った職人だけでした。NASAは職人を使って月に宇宙船を送りませんでした!
-gbjbaanb

@gbjbaanbそれはまったく逆だと思います-エンジニアがいたので、他の業界の伝統的なエンジニアリングモデルと考え方をソフトウェアに取り込もうとしましたが、うまくいきませんでした。
-guillaume31

宇宙船は、何度も何度も改造、再設計、再配備できる無形のものでできていません。彼らが従う法律は、ソフトウェアプログラムの法律とは大きく異なります。
guillaume31

スペースシャトルには、少なくとも再配備可能なブースターがあり、以前のロケットのビット(または少なくとも知識)を再利用したことは間違いありません。また、宇宙船には多くのソフトウェアが含まれています。新しいサテライトやプローブのすべてからゼロから始めたのではなく、一度展開したアップデートを適用することはほとんどないと思います。ソフトウェアエンジニアリングが機能することは明らかですが、職人ではなくエンジニアの考え方でアプローチする場合に限ります。
gbjbaanb

ソフトウェアのコンテキストで「エンジニアの考え方」を定義してください。
-guillaume31

1

http://manifesto.softwarecraftsmanship.org/に行くと、次のようになります。

職人は「エンジニア」の伝統的な認識とは異なります

  • 要件を満たすだけでなく、価値に焦点を合わせます。
  • 要件を満たすだけでなく、コードのスタイルでも品質に重点を置いています。
  • 彼らは職場だけでなく、より広範なソフトウェア開発コミュニティに参加しています。
  • 彼らは、今日の最新技術が明日のジャンクだということだけを理解しているのではなく、何らかのレベルでそれを実現することに積極的です。
  • それは単なる仕事ではなく、彼ら誰なのかです

4
正直なところ、これらの箇条書きはすべて優れたエンジニアを説明しています。特に1、2、および4
トーマス・オーエンズ

@ThomasOwensそして、悪いエンジニアはどうですか?彼も職人ですか?良い職人と悪い職人のどちらですか?
陶酔

@Euphoric良い職人でなくても良いエンジニアになれるとは思いません。まるで舞台のようです。「良いエンジニア」を達成する前に、「良い職人」を達成する必要があります。ただし、優れた技術者ではなく、優れた職人になることができます。
トーマスオーエンズ

1

ボブおじさんは、プログラミングが非常に若い規律であり、政府によって認められた安定した法律や規則がまだないことをほのめかしました(または、フレデリックブルックスでしたか?)。ここでは詳細な引用を行っていません。

医療過誤のためにプログラムの許可を取り消すことはできません。プログラミングには、「専門職」に準拠する法律によって法的に強制される法律や規則がありません。医師は無能のために患者を殺し、彼は彼から医師の肩書きまたは許可が取られる危険を冒します。

プログラマーは、バグのあるプログラムを作成したり、無能のためにプロジェクトを失敗させたり、プログラミングを自由に続けることができます。

それこそがプログラミングを工芸品にしているのだと思います。粘土ポットメーカーは、2つの同一のポットを作成しません。また、欠陥のあるポットをリコールすることを余儀なくされた粘土ポットメーカーについて聞いたことはありません。プログラミングは依然として非常に手作業で個人的な作業です。場合によっては、スタイルによって判断するコードを誰が書いたかを知ることさえできます。


0

パターンへのリファクタリング。

つまり、ソフトウェア要件の90%を満たすものを構築し、プロジェクト全体をクリーンでエレガントなデザインにリファクタリングします。

通常、ソフトウェアエンジニアリングではこれを行うことができません。要件の90%を満たすことは、ソフトウェアが顧客にとって十分なビジネス価値を持っていることを意味するためです。

その代わりに、ソフトウェアエンジニアリングは、この時点でソフトウェアを安定化することを勧めます。

さらに、プロジェクトが最初からそのエレガントなデザインで始まらない場合、ソフトウェアエンジニアリングによると、プロジェクトの成果に関係なく、プロジェクトは不十分に実行されたプロジェクトと見なされます。

スパイクソリューション。

スパイクソリューションから着想を得た設計は、一般的なソフトウェアエンジニアリング方法論では通常受け入れられません。

何らかの理由で廃止

ソフトウェアエンジニアリングでは、ソフトウェアシステムのライフサイクルの終了時にのみ、あらゆる種類の廃止が許可されます。これはSDLCの一部として計画する必要があります。

実際には、ソフトウェアインターフェースの特定の部分の欠点は数年で生産に発見され、その特定の部分はライフサイクルの途中で非推奨となり、残りのソフトウェアを無効にすることはできません。これには、ソフトウェアエンジニアリングによると、廃止後にソフトウェアシステム全体の再認証が必要になります。

最後に、ソフトウェアの職人技は個人からの良い判断を求める個人的な努力ですが、ソフトウェアエンジニアリングは保守的な知識の集まりです。プロジェクトの意思決定に対する適切な判断を可能にすることが、ソフトウェアクラフトマンシップとソフトウェアエンジニアリングを区別するものです。


-1

私は、コードの100%をカバーする単体テストがあると良いと思います。それにより、余分なものを取り除くことができます。

ソフトウェア開発と彫刻を比較することもあります。それはあなたが追加するものではなく、あなたが奪うものです。

明らかに、あなたはそれをやりすぎます。小さな光沢のある小石が良い彫刻だと言う人はいません:S


3
私たちはここでどのくらい輝いていますか?:
クリス

1
ほとんどの場合、これに同意しますが、厳密な100%が常に価値があるかどうかはわかりません。たとえば、ゲッター/セッターがロジックを持たない場合です。また、生成されたコードは通常、単体テストなしで残すほうが適切です(ただし、統合テストが適切な場合があります)
FinnNk

@FinnNk-私は同意します。最近dotCoverを使用しましたが、それは別のテストで使用された場合にゲッター/セッターがカバーされると言います。だから、私は実際に各ゲッターとセッターのテスト方法を意味していませんでした
アントニースコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.