Welche spezifischen Praktiken könnten als "Software-Handwerkskunst" und nicht als "Software-Engineering" bezeichnet werden? [geschlossen]

11

Obwohl dies keine neue Idee ist, scheint das Interesse an Software-Handwerkskunst in den letzten Jahren stark zugenommen zu haben (insbesondere der häufig empfohlene vollständige Titel des Buches Clean Code lautet Clean Code: Ein Handbuch für agile Software-Handwerkskunst ).

Persönlich sehe ich Software-Handwerkskunst als gutes Software-Engineering mit einem zusätzlichen Interesse daran, sicherzustellen, dass das Endergebnis eine Freude bei der Arbeit ist (sowohl als Endbenutzer als auch als jemand, der diese Software wartet) - und dass der Fokus eher auf der Codierungsebene liegt von Dingen als die übergeordneten Prozesssachen.

Um eine Analogie zu ziehen: In den 50er und 60er Jahren wurden viele Gebäude in einem sehr modernen Stil errichtet, bei dem die Menschen, die in ihnen leben würden oder wie diese Gebäude im Laufe der Zeit altern würden, kaum berücksichtigt wurden. Viele dieser Gebäude entwickelten sich schnell zu Slums oder wurden lange vor ihrer erwarteten Lebensdauer abgerissen. Ich bin sicher, dass die meisten Entwickler mit ein paar Jahren Erfahrung ähnliche Codebasen erlebt haben werden.

Was sind die spezifischen Dinge, die ein Software-Handwerker tun könnte, die ein Software-Ingenieur (möglicherweise ein schlechter) möglicherweise nicht tut?

FinnNk
quelle
1
Die Analogie scheint nicht zu passen. Sowohl Software-Handwerkskunst als auch Software-Engineering haben das gleiche Ziel (und das gleiche Interesse), den langfristigen Nutzen der Software zu verbessern.
Rwong
3
Ich denke, diese Angelegenheit ist hauptsächlich eine Frage, ob Sie "Ingenieur" oder "Handwerker" als den cooleren Titel betrachten, und die aktuellen Antworten scheinen dies zu beweisen. Welchen Titel Sie auch bevorzugen, impliziert natürlich , dass diese Person schließlich weiß, was sie tut.
Ben Brocka
Ich würde sagen, der Unterschied zwischen den beiden ist, dass ein Handwerker alleine arbeitet, ein Ingenieur als Teil eines Teams. In großen Zügen scheint dies die Hauptbeschreibungen der beiden Rollen zu erfüllen, nicht dass beide unterschiedlich qualifiziert sind, sondern dass ihre Ansätze aus unterschiedlichen Positionen stammen.
Gbjbaanb
Es klingt einfach nach einem wirklich anmaßenden Titel, den man sich selbst geben kann.
michaelsnowden

Antworten:

13

Ich würde sagen, der einzige Unterschied zwischen einem Profi und einem Handwerker besteht darin, sich mit ein wenig Leidenschaft zu beschäftigen . Es gibt keine spezifische, beobachtbare Praxis, die einen als Handwerker einstufen würde, sondern eine Sammlung von Eigenschaften:

  • Ein Handwerker kümmert sich um die tatsächliche Qualität seiner Arbeit und nicht nur um die wahrgenommene Qualität.
  • Ein Handwerker hat ein Interesse an seinem Handwerk, das über die Erledigung seiner Aufgaben hinausgeht und sich natürlich für sein Handwerk interessiert.
  • Ein Handwerker kümmert sich um seinen Beruf und strebt danach, seine Fähigkeiten zu verbessern und nicht nur seine Karriere voranzutreiben .
  • Ein Handwerker verbringt einige Zeit außerhalb seiner bezahlten Arbeitszeit (auch wenn es nur wenig Zeit ist) damit, etwas mit seinem Handwerk zu tun, sei es zu diskutieren, zu lernen oder sogar darüber nachzudenken.
  • Ein Handwerker weiß, wie wenig er tatsächlich weiß, und ist demütig darüber.
  • Ein Handwerker ist bereit, diejenigen zu unterrichten, die bereit sind zu lernen, diejenigen zu führen, die Führung suchen, und diese Dinge selbst zu suchen, wenn er sie braucht.

Ein bisschen Leidenschaft deckt all dies ab, ohne ins Schwitzen zu geraten.

Allon Guralnek
quelle
Ich denke, der letzte ist besonders wichtig
Lovis
7

Persönlich sehe ich Software-Handwerkskunst als gutes Software-Engineering mit einem zusätzlichen Interesse daran, sicherzustellen, dass das Endergebnis eine Freude bei der Arbeit ist (sowohl als Endbenutzer als auch als jemand, der diese Software wartet) - und dass der Fokus eher auf der Codierungsebene liegt von Dingen als die übergeordneten Prozesssachen.

Ein Professor von mir sagte einmal (umschrieben): "Als Softwareentwickler ist es nicht nur Ihre Aufgabe, Software zu liefern. Es ist Ihre Aufgabe, Software zu liefern, die Ihre Kunden glücklich macht."

Was sind die spezifischen Dinge, die ein Software-Handwerker tun könnte, die ein Software-Ingenieur (möglicherweise ein schlechter) möglicherweise nicht tut?

Nichts - ein Ingenieur ist ein Handwerker ... aber mehr. Engineering baut auf Handwerkskunst auf.

Als Handwerker und Ingenieur sind Sie durch eine Kombination aus Ausbildung und Erfahrung qualifizierte Einzelpersonen. Sie befolgen etablierte Verfahren. Sie sind auch pragmatisch und erkennen, was kaputt ist und besser sein muss.

Ein Ingenieur fügt jedoch noch Bedenken in den Bereichen Wirtschaft, Theorie und Wissenschaft hinzu. Es geht Ihnen darum, den größten Nutzen bei geringsten Kosten zu erzielen. Sie möchten Theorien aus Psychologie, Soziologie, Management, Mensch-Computer-Interaktionen und Informatik anwenden, um Ihre Probleme (sowohl zwischenmenschlich als auch technisch) zu lösen. Und Sie haben definitiv eine Ausbildung, um Ihre Erfahrungen zu sichern.

Thomas Owens
quelle
2
Und Sie haben definitiv eine Ausbildung, um Ihre Erfahrungen zu untermauern - froh, dass Sie nicht "formal" gesagt haben.
Treecoder
@greengit Um den Titel "Ingenieur" zu verwenden, müssen Sie vielerorts eine formale Ausbildung haben. In Europa bedeutet dies einen Abschluss mit einem Ingenieurabschluss. Italien fügt außerdem die Anforderung hinzu, eine Zertifizierungsprüfung zu bestehen. In Nordamerika, Texas, Florida und Kanada müssen diejenigen, die den Titel "Ingenieur" verwenden (einschließlich Software-Ingenieure), eine Lizenzprüfung bestehen.
Thomas Owens
Obwohl das nicht bedeutet, dass jemand ohne diese formale Ausbildung kein Ingenieurwesen praktizieren kann. Sie können sich einfach nicht als Berufsbezeichnung Ingenieur bezeichnen.
Thomas Owens
1
Ich bin anderer Meinung, ein Ingenieur ist nicht unbedingt ein Handwerker.
Nicole
2
@Renesis Engineering ist per Definition ein Handwerk. Definition von Handwerk: "eine Kunst, ein Gewerbe oder ein Beruf, der besondere Fähigkeiten erfordert, insbesondere manuelle Fähigkeiten". Ingenieurwesen ist ein Beruf, der besondere Fähigkeiten erfordert, daher ist es ein Handwerk. Es ist jedoch auch die Anwendung der wissenschaftlichen Theorie (unter anderem), die es mehr macht.
Thomas Owens
2

Die Software-Handwerksbewegung wurde als Reaktion auf die Fehler und unbefriedigenden Ergebnisse des "traditionellen" Software-Engineerings ins Leben gerufen, die (zusammen mit der Nachlässigkeit einiger Entwickler) heute zu Misstrauen von Stakeholdern und Benutzern gegenüber unserem Beruf führen.

Es hat zwei Ziele: das Vertrauen in Programmierer wiederherzustellen und dazu die Messlatte für Softwarequalität und Entwicklerfähigkeiten höher zu legen.

Sw Handwerkskunst fördert technische Praktiken wie:

  • FESTE Konstruktionsprinzipien
  • Designmuster
  • TDD (Metapher "Double Entry Accounting")
  • ...

Und Team- / Organisationspraktiken:

  • Paar-Programmierung
  • Mentoring
  • Code katas
  • Dojos / Code-Retreats
  • ...

Ich würde also sagen, dass der Unterschied zwischen den beiden klar ist: Software-Handwerkskunst versucht, einen großen Teil der Probleme zu lösen, die Software-Engineering in mehr als 40 Jahren hatte und die unsere Disziplin heute unzuverlässig und mit einer Geschichte von Fehlern verkrüppelt erscheinen lassen.

guillaume31
quelle
1
Ich bin anderer Meinung - der Grund, warum das Software-Engineering fehlgeschlagen ist, ist, dass es keine Ingenieure gab, sondern nur Handwerker, die vorgaben, Ingenieure zu sein. Die NASA hat keine Raumschiffe mit Handwerkern zum Mond geschickt!
Gbjbaanb
@gbjbaanb Ich denke, es ist ganz im Gegenteil - wir hatten Ingenieure, und deshalb haben sie versucht, ein traditionelles Konstruktionsmodell und eine Denkweise aus anderen Branchen auf Software zu übertragen, aber es hat nicht funktioniert.
Guillaume31
Raumschiffe bestehen nicht aus immateriellem Material, das immer wieder umgebaut, überarbeitet und neu eingesetzt werden kann. Die Gesetze, denen sie gehorchen, unterscheiden sich stark von denen von Softwareprogrammen.
Guillaume31
Das Space Shuttle verfügt zumindest über wieder einsetzbare Booster und zweifellos wiederverwendete Teile (oder zumindest Wissen) früherer Raketen. Und Raumschiffe haben viel Software in sich. Ich glaube nicht, dass sie bei jedem neuen Satelliten oder jeder neuen Sonde von vorne anfangen und kaum Updates anwenden, wenn sie einmal bereitgestellt sind. Software-Engineering kann und funktioniert natürlich - aber nur, wenn Sie es mit der Denkweise eines Ingenieurs angehen, nicht mit einem Handwerker.
Gbjbaanb
Bitte definieren Sie "Engineer's Mindset" im Kontext von Software.
Guillaume31
1

Unter http://manifesto.softwarecraftsmanship.org/ würde ich Folgendes ableiten.

Ein Handwerker unterscheidet sich von den traditionellen Wahrnehmungen eines "Ingenieurs", weil

  • Sie konzentrieren sich auf den Wert und erfüllen nicht nur die Anforderungen.
  • Sie konzentrieren sich auch im Stil ihres Codes auf Qualität und erfüllen nicht nur die Anforderungen.
  • Sie beteiligen sich an der breiteren Softwareentwicklungsgemeinschaft, nicht nur an ihrem Arbeitsplatz.
  • Sie verstehen nicht nur, dass der heutige Stand der Technik der Müll von morgen ist, sie sind aktiv dabei, ihn auf der einen oder anderen Ebene zu verwirklichen.
  • Es ist nicht nur ein Job, es ist wer sie sind .
MIA
quelle
4
Ehrlich gesagt beschreiben all diese Stichpunkte einen guten Ingenieur. Besonders 1, 2 und 4.
Thomas Owens
@ ThomasOwens Und was ist mit einem schlechten Ingenieur? Ist er auch ein Handwerker? Oder guter oder schlechter Handwerker?
Euphoric
@Euphoric Ich glaube nicht, dass Sie ein guter Ingenieur sein können, ohne ein guter Handwerker zu sein. Es ist wie eine Inszenierung. Sie müssen "guter Handwerker" erreichen, bevor Sie "guter Ingenieur" erreichen. Sie können jedoch ein guter Handwerker und kein guter Ingenieur sein.
Thomas Owens
1

Onkel Bob deutete irgendwie an, dass das Programmieren eine sehr junge Disziplin ist, die noch keine stabilen Gesetze oder Regeln hat, die von den Regierungen anerkannt werden (oder war es Frederick Brooks?). Ich zitiere hier nicht wörtlich.

Sie können niemandem die Erlaubnis zum Programmieren aufgrund von Fehlverhalten widerrufen. Der Programmierung fehlen eine Reihe von Gesetzen und Regeln, die durch Gesetze, die einem "Beruf" entsprechen, gesetzlich durchgesetzt werden. Ein Arzt tötet einen Patienten aufgrund von Inkompetenz und riskiert, dass ihm sein Arzttitel oder seine Erlaubnis genommen wird.

Ein Programmierer erstellt ein fehlerhaftes Programm oder lässt ein Projekt aufgrund von Inkompetenz scheitern, und er kann die Programmierung fortsetzen.

Ich denke, das macht das Programmieren zu einem Handwerk. Ein Tontopfhersteller stellt keine zwei identischen Töpfe her. Sie haben auch noch nie von einem Tontopfhersteller gehört, der gezwungen ist, defekte Töpfe zurückzurufen. Das Programmieren ist immer noch eine sehr manuelle, persönliche Arbeit. Manchmal kann man sogar erkennen, wer einen Code geschrieben hat, gemessen am Stil.

Tulains Córdova
quelle
0

Refactoring zu Mustern.

Erstellen Sie also etwas, das 90% der Softwareanforderungen erfüllt, und überarbeiten Sie dann das gesamte Projekt in ein klares, elegantes Design.

Normalerweise würde das Software-Engineering Sie daran hindern, da die Erfüllung von 90% der Anforderungen bedeutet, dass die Software für den Kunden einen ausreichenden Geschäftswert hat, sodass sie nicht wesentlich geändert werden sollte (mit Ausnahme von Bugfixes mit hoher Priorität).

Das Software-Engineering empfiehlt Ihnen stattdessen, die Software an dieser Stelle zu stabilisieren .

Wenn ein Projekt nicht von Anfang an mit diesem eleganten Design beginnt, wird es laut Software-Engineering als schlecht ausgeführtes Projekt angesehen (unabhängig vom Projektergebnis).

Spike-Lösung.

Ein Design, das von einer Spike-Lösung inspiriert ist, ist nach der geltenden Software-Engineering-Methodik normalerweise nicht akzeptabel.

Abwertung , aus welchem ​​Grund auch immer.

In der Softwareentwicklung darf jede Art von Abwertung nur am Ende des Lebenszyklus eines Softwaresystems erfolgen. Dies muss im Rahmen des SDLC geplant werden.

In der Praxis ist es eher üblich, dass die Mängel eines bestimmten Teils der Softwareschnittstelle einige Jahre nach Produktionsbeginn entdeckt werden und dieser bestimmte Teil mitten im Lebenszyklus veraltet sein kann, ohne den Rest der Software ungültig zu machen. Dies hätte laut Software-Engineering eine erneute Zertifizierung des gesamten Softwaresystems nach der Abwertung erforderlich gemacht.

Letztendlich ist Software-Handwerkskunst ein persönliches Streben nach guten Urteilen von Einzelpersonen, während Software-Engineering ein konservativer Wissensbestand ist. Dieses gute Urteilsvermögen bei der Entscheidungsfindung des Projekts zuzulassen, unterscheidet Software-Handwerkskunst von Software-Engineering.

rwong
quelle
-1

Ich würde sagen, dass Unit-Tests, die 100% des Codes abdecken, gut wären. Dadurch kann das überschüssige Material entfernt werden.

Manchmal vergleiche ich Softwareentwicklung mit Skulptur. Es ist nicht das, was du hinzufügst, es ist das, was du wegnimmst.

Natürlich können Sie das zu weit gehen. Niemand wird sagen, dass ein kleiner glänzender Kiesel eine gute Skulptur ist: S.

Antony Scott
quelle
3
Wie glänzend reden wir hier? :-)
Chris
1
Die meiste Zeit stimme ich dem zu - aber ich bin mir nicht sicher, ob sich strenge 100% immer lohnen - zB Getter / Setter, bei denen sie keine Logik haben. Auch generierter Code wird im Allgemeinen besser ohne
Komponententests
@ FinnNk - ich stimme zu. Ich habe kürzlich dotCover verwendet und das besagt, dass ein Getter / Setter abgedeckt ist, wenn er in einem anderen Test verwendet wird. Also meinte ich nicht wirklich eine Testmethode für jeden Getter & Setter
Antony Scott