Nicht-Programmierer dazu bringen, den Entwicklungsprozess zu verstehen


66

Wenn Sie ein Projekt für ein Unternehmen starten, das nicht in erster Linie ein Programmierunternehmen ist, ist eine der Erwartungen, dass am Ende ein fertiges Produkt frei von Fehlern ist und alles sofort erledigt, was benötigt wird. Dies ist jedoch selten der Fall.

Auf welche Weise können Erwartungen verwaltet und Nicht-Programmierern erklärt werden, wie sich die Softwareentwicklung von anderen Arten der Produktentwicklung unterscheidet?


Manchmal haben Sie "die Kontrolle" und Ihre nicht-technischen Mitarbeiter sind auf ihre Weise schlau, nicht unwissend, bescheiden und neugierig. Am anderen Ende des Spektrums (wie in meinem Fall) könnten Sie mit jemandem zusammenarbeiten, der Magie in einer Stunde ausführen möchte, und Sie finden heraus, warum ein Unternehmen die Entwickler respektieren sollte. Unnötig zu erwähnen, dass ich auf Jobsuche bin. In was für einer Umgebung bist du denn die Antwort könnte lauten: "Flieh, lauf weg!".
Job

Antworten:


34

Ziemlich jeder, der über einen Computer verfügt, ist heutzutage auf das Konzept der "Bugs" gestoßen, sodass Sie vielleicht dort anfangen. "Was ist die nervigste Art und Weise, wie eine Anwendung jemals bei Ihnen versagt hat? Multiplizieren Sie dies mit zehn, und Sie werden die Erfahrung unserer Benutzer haben, wenn wir nicht genügend Ressourcen für Tests und Wartung aufwenden."

Und unterschätzen Sie nicht den Wert einer guten Zusammenarbeit mit Nicht-Programmierern. Wenn Sie feststellen können, dass Ihr Urteil vertrauenswürdig ist, werden Sie ernst genommen, wenn Sie den Alarm auslösen, dass X auf spektakuläre Weise versagen wird, wenn Sie dies nicht tun, auch wenn sie Ihre Argumentation nicht vollständig verstehen.


+1 für diesen Hinweis. Nichts ist gefährlicher für ein Projekt, wenn die Techniker und die Nicht-Techniker wenig bis gar keinen Respekt zueinander haben.
22.01.13

28

Ein Ansatz, den ich für erfolgreich befunden habe, ist folgender:

Wir alle wissen, dass ein Computer nur das tut, was ihm gesagt wird.

Das Programmieren ist die Art und Weise, wie wir einem Computer jetzt mitteilen, was er später tun soll .

Dies bedeutet, dass Ihr Verhalten jetzt auf den gemeinsamen Absichten aller beruht, die Code geschrieben haben, der auf Ihrem Computer ausgeführt wird. Wenn man die Komplexität des Betriebssystems, der Treiber, der Programmierumgebung, der Bibliotheken usw. betrachtet, ist leicht zu erkennen, dass in den meisten Systemen mehr als 20.000 Personen beteiligt sein müssen und dass es über 100.000 sein können.

Der von jeder Person geschriebene Code spiegelt ihr eigenes Verständnis, ihre Motivation, ihre Absicht und ihre Fähigkeiten wider. Angesichts der Tatsache, dass der einwandfreie Betrieb des Systems voraussetzt, dass der gesamte von diesen 20.000 Mitarbeitern geschriebene Code fehlerfrei interagiert - dass sich der gesamte Code auf die Bedeutung und Interpretation des erforderlichen Verhaltens einigen muss dass wir so wenige von ihnen haben.


4
+1 für "Jetzt sagen, was wir später wollen". Auch mit der Vorstellung, dass die meiste Software neue Sachen macht.

12

Ich habe festgestellt, dass die Transparenz, die durch agile Prozesse (z. B. Scrum, Crystal usw.) geboten wird, einen großen Beitrag dazu leistet, dem durchschnittlichen Stakeholder zu zeigen, wie die Entwicklung funktioniert.


1
Dies ist eine hervorragende Strategie, wenn Sie 100% der Entwicklung durchführen. Wenn irgendein Teil des Entwicklers von einer anderen Partei gehandhabt wird, müssen Sie vielleicht ein bisschen Kompromisse eingehen.
JBRWilkinson

3

Erklärung durch Metapher ist eine undichte Abstraktion, aber hier sind einige Ideen, die oft für mich arbeiten:

Beachten Sie, dass keine dieser Erklärungen schlampige Arbeit entschuldigt.

Stellen Sie sich ein Computerprogramm als Maschine vor, bei der jede Variable ein sich bewegendes Teil ist. Das macht selbst ein triviales Programm zu einer Maschine, die aus Hunderten von beweglichen Teilen besteht.

Wenn dies fehlschlägt, greife ich auf die Tatsache zurück, dass es zwar mathematisch möglich ist, zu beweisen, dass ein Programm keine Fehler enthält, dass dies jedoch sehr viel Zeit in Anspruch nimmt und sich nicht lohnt.

Abschließend frage ich, ob Intel und Microsoft Fehler nicht vermeiden können. Wie erwarten sie das von uns?


2
Sehr guter Punkt über Microsoft
Casebash

1
Es ist nicht unmöglich zu beweisen, dass ein Programm dies und das tut. Es ist jedoch für den Computer unmöglich zu sagen, ob ein bestimmtes Programm irgendwann aufhören wird, dies und das zu tun.

1
-1 @ ThorbjørnRavnAndersen ist richtig. Dieser Beitrag ist falsch. Es ist sehr gut möglich, Programme als korrekt zu beweisen (bis zu einem gewissen Grad an Korrektheit), einige von uns tun dies die ganze Zeit. Ich denke, das Plakat missversteht die erkenntnistheoretische Konsequenz des Stillstandsproblems und verwechselt damit Nicht-Programmierer mit unwahren Behauptungen.
Philip JF

2

Ich habe eine ähnliche Frage ausführlicher beantwortet , aber das Wesentliche ist: "Programmieren ist wie das Bauen einer Fabrik oder einer Fertigungsstraße."


Das ist traurig. Ich glaube, dass Programmieren eine Kunst ist. Sie versuchen, etwas mit vielen Funktionen zu erstellen, das auf winzigen einfachen Befehlen, Methoden und Klassen aufbaut. Meistens arbeitet man nicht mit einem Hammer - man versucht, die Dinge sorgfältig so zu formen, wie man sie haben möchte ...
mhr 22.01.13

@mri - Jeder, der tatsächlich eine Fabrik gebaut hat, wird Ihnen sagen, dass, egal wie gut die Fabrikmaschinerie konstruiert ist, Teile davon noch von Hand montiert werden müssen. Unsere Werkzeuge vereinfachen möglicherweise die Handanpassung, aber wir (die meisten von uns) stellen keinen Assembly-Code mehr her, um Zyklen und Speichergrenzen auszunutzen. Ähnlich wie die schönen handgefertigten Möbel profitierten sie von der Automatisierung ihrer Zeit.
DaveE

2

Die traditionelle Darstellungsweise ist das Projektmanagement-Dreieck: die drei konkurrierenden Kriterien für Umfang, Kosten und Zeitplan; in der Regel ausgedrückt als "billig, schnell, gut - wählen Sie zwei".

Am Ende eines Design-, Entwicklungs- und Bereitstellungsprozesses ist die Erwartung, dass ein Produkt relativ frei von Designfehlern ist und mit einer bestimmten Funktionalität arbeitet, durchaus vernünftig. Dieselbe Erwartung ist in Bezug auf ein Projekt, einen Prozess oder einen Beruf völlig unvernünftig.

Welcher Fachmann, der auf harten oder weichen Wissenschaften basiert, durchläuft keinen Erkundungsprozess, bildet ungenaue und ungenaue Konzeptualisierungen, folgt einer nicht optimalen (oder einfach falschen) Taktik, entdeckt, was durch Ausprobieren funktioniert, und wiederholt das immer wieder verarbeiten, bis entweder die Ressourcen erschöpft sind oder ein ausreichendes Leistungsniveau erreicht ist?

Kein Verfahren ist jemals fehlerfrei, obwohl es asymptotisch höhere Qualitätsniveaus erreichen kann.

Dies trifft auf den medizinischen Beruf zu, in dem Taktiken häufig Rätselraten und Protokolle beinhalten, und ein Großteil der Aktivitäten besteht im Debuggen einer meistens Wetware-Maschine. Dies gilt für den Tiefbau und die Architektur, bei denen Anwendungen neuartiger technischer Werkstoffe vor Ort validiert werden müssen und trotz strikter Einhaltung der Normen nach jahrelanger Betriebszeit abrupt versagen können. Es trifft auf den Automobilbereich zu, in dem Alter und Änderungen der Betriebsbedingungen die Leistung ohne Verschulden der angewandten Ingenieurs- oder Reparaturdienste häufig bis zum Versagen beeinträchtigen. Die Softwareentwicklung unterscheidet sich in dieser Hinsicht nicht grundlegend von diesen Berufen, sondern hat nur einen größeren Schwerpunkt in der Entwicklung neuartiger, zielgerichteter Maschinen.


Ein großartiger Punkt im Vergleich zur Automobilindustrie. Dies ist eine großartige Möglichkeit, um die fortlaufende Wartung einer bereitgestellten Anwendung zu verdeutlichen.
Kingsolmn

0

Wenn Sie mit der Entwicklung von Hi-Rel-Software vertraut sind, z. B. für die Steuerung von Kernreaktoren, die Kommunikation im Weltraum oder medizinische Implantate (usw.), erläutern Sie möglicherweise die Kosten- und Lieferzeitstruktur für diese Ebene des Projektmanagements und der Qualitätssicherung Möglicherweise sind die Beträge höher als die, die typische Unternehmen für ihre Softwareprojekte leisten können.


0

Sie können es mit etwas vergleichen, das sie sehen können, und es, wenn möglich, täglich anwenden.

Zum Beispiel das Automobil. Autos fingen so viel weniger raffinierte und zuverlässige Geräte an als wir heute haben. Autos werden zwar schon seit über 100 Jahren hergestellt, Software aber wohl etwa halb so lang. Autos sind mit erheblichen Anpassungen erhältlich, einige sind im Preis enthalten (wie die Wahl der Farbe), andere wie Motorgröße, Getriebetyp, Rad / Reifen, Ausstattungsvariante sind bedeutende Kostentreiber.

Es gibt viele Merkmale, Qualitäts- und Kostentreiber für Autos und für Software. Anschließend können Sie diskutieren, wie die Softwaretechnologie, die Verfügbarkeit von Fachwissen und möglicherweise sogar der Ort, an dem es erstellt wird, einen großen Unterschied ausmachen. Entsprechende Entwicklungszyklen (z. B. jährliche Modelle mit kleinen Änderungen, Änderungen an Karosserie / Motor / Plattform etwa alle drei Jahre) werden von einer Kombination aus Kundenanforderungen und einem komplexen Konstruktionsprozess angetrieben. Einige Produkte sehen klein und pummelig aus (denken Sie an den Honda Accord), werden jedoch jedes Jahr verbessert, bis sie die besten Bewertungen erhalten.

Autos haben Rückrufe (oft viel teurer als Software-Upgrades) und inkrementelle Verbesserungen in Form von laufenden Änderungen an ihren Teilelisten (denken Sie an Fehlerkorrekturen), und oft brauchen sie langfristige Unterstützung (denken Sie an Rückwärts- / Vorwärtskompatibilität). Ein Großteil der Kosten für Ihr Auto entfällt, nachdem Sie es nach Hause gefahren haben. Ein Großteil der Softwarekosten entfällt nach der ersten Produktversion, wenn Sie Kunden aktualisieren und upgraden.

In einigen Fällen können Sie auf bekannte Produkte verweisen, die Software oder andere Softwareprodukte enthalten. Telefone verfügen beispielsweise über einen Veröffentlichungszyklus sowie Aktualisierungen und Methoden zum Hinzufügen von Funktionen nach dem ersten Verkauf, um mehr Umsatz zu erzielen. Telefone sind ein gutes Beispiel für die Vorwärts- / Rückwärtskompatibilität. Zu viel, und die Leute werden nicht die alte wegwerfen, um eine neue zu kaufen. Zu wenig, und die Kunden möchten unbedingt ein Telefon haben, das sie nicht hassen werden, bevor der Vertrag nicht zustande gekommen ist.

Bei Produkten wie Windows, Microsoft Office, Webbrowsern und Webseiten handelt es sich um Software, die für Diskussionen verwendet werden kann. Sie wurden im Jahres- oder Dreijahresrhythmus aktualisiert, haben jedoch möglicherweise häufiger automatische Aktualisierungen. Sie haben Fehler und Sicherheitslücken, die Kunden in unterschiedlichem Maße betreffen, aber trotz unserer Bemühungen Teil der Landschaft sind. Kunden können Fixes kostenlos erhalten, zahlen jedoch in der Regel für Erweiterungen, oft als Bundle, manchmal als einzelnes Modul oder über einen Lizenzschlüssel.

Branchenführer wie Microsoft, Apple, Google und Amazon bieten Anwendern relativ kostengünstige Kunden. Aber sie haben enorme Ausgaben, die diese Produkte ermöglichten. Ihre Erfahrung zeigt, dass Software teuer, aber wertvoll und rentabel ist. Sie gehen häufig Kompromisse ein zwischen Qualität, allen gewünschten Funktionen und dem Einstieg in die Märkte, wenn das Timing stimmt. Nicht jedes Produkt, das sie herstellen, ist ein Erfolg, und manchmal verwandeln sie Hunde in Gewinner, indem sie sie umbenennen, ihr Marketing und ihren Vertrieb verbessern oder ihre Verluste reduzieren und das verwenden, was sie in späteren Produkten gelernt haben.


0

Versuchen Sie, sie einzeln oder im Idealfall in kleinen Gruppen durchzuarbeiten, und verwenden Sie Beispiele für Software, die Sie entwickeln müssen. Identifizieren Sie bei der Beschreibung der Anwendungsfälle Punkte, an denen verschiedene Dinge passieren können (unerwartete, aber nicht unangemessene Fälle). Fangen Sie an, sie aufzuzählen, um Klarstellungen zu bitten, und veranschaulichen Sie alle Entscheidungen und Anweisungen, die getroffen oder festgelegt werden müssen, sowie die dabei erzielten Kompromisse. Mach weiter, bis sie ratlos sind und dir keine Antwort mehr geben können. Lassen Sie sie verstehen, dass das, was Sie jetzt mit ihnen tun, genau das ist, was Sie den ganzen Tag tun, wahrscheinlich auf eigene Faust, wahrscheinlich mit einer viel weniger klaren Richtung, sowohl bei der Entscheidung über den Kurs als auch beim Schreiben des Codes für Hunderte oder Tausende von Anwendungsfälle, die von irgendjemandem entworfen wurden oder nicht. Und wenn da ' Wenn Sie nicht an sich selbst gedacht haben, können Sie nicht garantieren, was das Programm tun wird. Vielleicht macht es die "richtige" Sache, vielleicht beachten. Und genau das ist ein Fehler. Und deshalb braucht das Schreiben von Software Zeit. Je weniger Zeit Sie haben, desto weniger Fälle hatten Sie in Betracht zu ziehen und zu berücksichtigen, und desto wahrscheinlicher wird das Programm unter unbekannten Umständen nicht das "Richtige" tun.


0

Kosten und Zeit.

Zeit

Stellen Sie die Erwartungen ein, dass Sie X in Y-Zeit liefern würden. Es wird nicht mehr und nicht weniger geben. Dann sag ihnen, was die nächste Version zu welcher Zeit haben wird. Zuerst werden sie vielleicht überrascht sein zu glauben, dass das Erstellen von X Y-Zeit in Anspruch nimmt - hier erklären Sie den Zeitaufwand und die Komplexität des Erstellens einer Software. Wenn sie nicht überrascht sind, haben Sie entweder sehr viel weniger Zeit veranschlagt oder sie wussten besser, als Sie über das Erstellen von Software nachdenken.

Kosten

Dies ist aus Steve McConnels Code Compete-Buch (aus dem Gedächtnis zitiert, entschuldigen Sie mich, wenn ich es nicht mit dem gleichen Effekt vermitteln kann) - Kunden können leicht nach neuen Funktionen fragen. Als Produktmanager sollten Sie nicht sagen, was der Kunde fragt. Sie sollten abschätzen, wie viel Aufwand und Kosten erforderlich sind, um diese neue Funktion zu erstellen. Sie werden langsam verstehen, dass das neue Feature das Geld / die Zeit nicht wirklich wert ist oder dass sie es vielleicht nicht einmal benötigen. Ich schlage nicht vor, dass Sie diese Waffe benutzen, um sie zu erschrecken, aber verwenden Sie sie ehrlich und es könnte helfen, den Punkt nach Hause zu bringen.


-2

Metaphern sind undichte Abstraktionen, aber sie sind nur ein kleiner Schritt, der Sie dem Verständnis näher bringt.

Mein Favourit ist, dass das Erstellen von Software oft ein Prozess ist, der dem Entwerfen eines Hauses ähnelt. Es ist jedoch präziser, ein System zu erstellen, das einen benutzerdefinierten Entwurf auf der Grundlage einiger Parameter druckt und für jeden Benutzer einen anderen erstellt. Im Geek-Talk wird das Meta-Architeting.


-2

Ich habe herausgefunden, dass es tatsächlich hilfreich sein kann, wenn Sie ihnen zeigen, was es bedeutet, Code zu schreiben. Zeigen Sie den Beteiligten die Codebasis, mit der Sie arbeiten. Selbst wenn Sie gute Variablen- und Methodennamen gewählt haben, werden die meisten Leute denken, dass Sie eine Art schwarze Magie verwenden. Vielleicht werden sie verstehen, warum Sie mehr als "ein paar Tage" brauchen, um eine neue Funktion für ihre Software zu implementieren.


Das ist eine schlechte Idee, IMO. Es ist, als würde man dem Kunden einen Mopp geben, um ihm zu zeigen, wie schwierig es ist, einen nassen Boden zu reinigen.
Sonntag,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.