So stellen Sie einem Programmierer eine Frage, ohne das Warum als Antwort zu erhalten

31

Wir haben alle diese Erfahrung gemacht. Sie gehen zu jemandem, von dem Sie wissen, dass er die Antwort auf eine Frage hat, stellen dieser Person die Frage und sie antworten mit der typischen Antwort: "Warum?" Sie erklären, warum Sie es wissen müssen, und sie versuchen, Ihr Problem zu lösen.

Es braucht Zeit, Armdrücken und Geduld, um das Gespräch wieder auf die ursprüngliche Frage zu lenken und nur diese verdammte Antwort zu bekommen.

Warum tun Programmierer dies ständig und warum wird das Verhalten umso schlimmer, je älter der Programmierer wird?

Wie können Sie einem Programmierer eine Frage so stellen, dass die Antwort auf die ursprüngliche Frage möglichst effizient extrahiert wird?

Reactgular
quelle
54
Es ist sehr wahrscheinlich, weil sie wissen, dass Sie diese Antwort sehr wahrscheinlich nicht brauchen. How do I walk on water? Why? I want to cross the river Build a boat.
Daniel Gratzer
30
Es ist ein Trick, der Sie davon abhält, unsere Zeit zu verschwenden. Sie werden entweder lernen, genau zu sein, oder aufhören zu fragen.
Yannis
17
Weil erfahrenere Programmierer wissen, dass die meisten Fragen, die ihnen gestellt werden, XY-Fragen sind.
Marjan Venema
12
"Viele Kommentare erklären, warum sich der Entwickler so verhält ... Dies ist keine Antwort auf die oben gestellte Frage." Es ist eine direkte Antwort auf die Frage "Warum tun Programmierer dies ständig und warum wird das Verhalten umso schlimmer, je älter der Programmierer wird?" das ist im Körper der Post enthalten. Dies zeigt auch, warum Programmierer so handeln: Die Leute, die die Fragen häufig stellen, möchten nicht die Antworten auf die Fragen, die sie stellen , sondern die Antworten auf die Fragen, die sie gemeint haben .
8
"Wie komme ich an etwas Plutonium?" Nein nein Keine Fragen bitte. Sag mir einfach wie.
Erik Reppen

Antworten:

91

Warum fragen Entwickler nach dem Warum, wenn sie gefragt werden, wie eine Lösung implementiert werden soll?

Weil es mehr Wissen erfordert, um zu bewerten, ob eine Lösung geeignet ist, als um die Lösung tatsächlich zu implementieren.

Es ist sehr schwierig, jemandem zu glauben, der sagt: "Ich weiß nicht, wie ich das machen soll, aber ich weiß genau, was ich tun muss." Programmierer bestehen ständig darauf, tiefer zu gehen, weil die Leute ständig darauf bestehen, die falschen Fragen zu stellen. Ja, manchmal kehrt es irgendwann zu Ihrer ursprünglichen Frage zurück, aber nicht immer.

Stellen Sie sich als Analogie vor, jemand käme zu einem Mechaniker und fragte ihn, wie er eine Autobatterie austauschen könne. Wenn Sie für die Diagnose einer defekten Batterie qualifiziert sind, können Sie in der Regel eine austauschen, sodass der Mechaniker Sie fragt, woher Sie wissen, dass die Batterie ausgetauscht werden muss.

Er weiß, wenn er das nicht tut, und es stellt sich heraus, dass Sie keine Batterie benötigen. Dann werden Sie immer wieder Fragen stellen, bis Sie schließlich herausfinden, dass Sie das Licht ausschalten müssen, wenn der Motor läuft nicht laufen. Wenn er Sie nach vorne fragt, scheint er Ihre Zeit zu verschwenden, aber er weiß aus eigener Erfahrung, dass er Ihnen beiden möglicherweise viel mehr Zeit spart.

Wenn Sie also die Frage vermeiden möchten, müssen Sie ihn von vornherein davon überzeugen, dass Sie wissen, wovon Sie sprechen.

Karl Bielefeldt
quelle
4
Genau das. Kunden, die keine Ahnung haben, was sie wollen, sind nervös. Kunden, die genau wissen, was sie wollen, sind oft schlechter. Lassen Sie die geschäftlichen Anforderungen nicht aus, wenn Sie nach Informationen fragen. Alles, was wir tun, ist oft sehr kontextbezogen.
Erik Reppen
14

"Die Frage ist speziell, wie man sich mit einem anderen Programmierer in Verbindung setzt, um eine Frage zu stellen, wobei der andere die Antwort hat und die Debatte darüber, warum die Frage gestellt wird, überspringt."

Sie können nicht, zumindest nicht deterministisch. Der andere Programmierer ist eine Person, kein Computer und nicht Ihr Diener. Wenn Sie ihnen eine Frage stellen, können sie wählen, was ihrer Meinung nach die beste Antwort ist. Wenn sie denken, dass sie mehr Kontext brauchen, können sie danach fragen.

Sie können Ihrer Frage eine Aussage voranstellen, die besagt, dass Sie nur eine kurze, fundierte Antwort suchen, die Sie jedoch nach eigenem Ermessen beantworten können.

Charles E. Grant
quelle
13

Die Frage ist speziell, wie man sich mit einem anderen Programmierer in Verbindung setzt, um eine Frage zu stellen, wobei der andere die Antwort hat und die Debatte darüber, warum die Frage gestellt wird, überspringt.

Das kannst du nicht. Programmierer, besonders gute, sind dazu verdrahtet , Probleme zu lösen und effizient zu sein . Wenn ein Kunde oder ein Programmierkollege nach einer Antwort sucht, muss er sicherstellen, dass er das zu lösende Problem kennt, bevor er eine Lösung vorlegt. Auf diese Weise sind sie effizient (sie verschwenden nicht Ihre und ihre Zeit, indem sie eine Antwort geben, die Ihr Problem nicht löst) und sie lösen echte Probleme (indem sie Ihnen Lösungen / Antworten auf Fragen geben, die Sie stellen sollten).

Beispiel - Wenn ein Kunde zu Ihnen kommt und sagt, dass er eine X-Funktion implementiert haben möchte. Manchmal braucht der Kunde wirklich eine X-Funktion, und manchmal muss man sich wirklich in den Kunden einarbeiten und ihn befragen, um herauszufinden, dass er kein X, sondern etwas völlig anderes will. Je älter und erfahrener die Programmierer sind, desto wahrscheinlicher ist es, dass sie in der Vergangenheit verbrannt wurden, indem sie das Problem nicht auf den Punkt gebracht haben, bevor sie eine Lösung vorgestellt haben.

Um es zusammenzufassen: Wenn Sie möchten, dass Ihre Fragen genau beantwortet werden, müssen Sie sicherstellen, dass Sie:

  • die richtigen Fragen stellen (daher müssen Sie das Problem im Voraus untersuchen)
  • Bereitstellung des Kontextes für das Problem
  • Teile einige deiner Forschungen mit, um sie schneller auf das Problem aufmerksam zu machen

Die meisten Menschen, die ich kenne, sind nur Menschen und keine Computer. Wenn Sie nur Antworten wollen, versuchen Sie es zu googeln.

Christian P
quelle
2
+1 Genau. Wie oft wollten die Kunden ein Feature implementieren, das in Bezug auf die Entwicklung Tausende von Dollar kosten wird, während der tatsächliche Geschäftsbedarf mit einem Tool, das bereits vorhanden ist, leicht und oft kostenlos gelöst werden kann!
Arseni Mourzenko
3
Analog dazu wird einem Chirurgen gesagt, dass er bestimmte Operationen an Ihnen durchführen soll. Ich wette, er wird Sie fragen, was genau Ihr Gesundheitsproblem ist, und Ihnen dann sagen, dass Sie überhaupt keine Operation benötigen, da Ihr Problem durch einen Chiropraktiker behoben werden kann.
Arseni Mourzenko
Genau :) Und genau das würden Sie wahrscheinlich von einem Chirurgen erwarten.
Christian P
9

Warum tun Programmierer dies ständig und warum wird das Verhalten umso schlimmer, je älter der Programmierer wird?

Leider ist es so weit von der allgemeinen Wahrheit entfernt, wie es nur geht.

Dieses Verhalten ist auf die Minderheit der wirklich Guten beschränkt. Und du solltest es besser auch lernen.

Nur die verdammte Frage zu beantworten, die über das Warum hüpft, ist eine gute Möglichkeit, schnell und sicher in einen Abgrund zu fahren.


Wenn Sie den gebildeten Teil wirklich überspringen möchten, können Sie Ihrer Frage ein paar Sätze zu Einschränkungen und Ihrem Wunsch, Fragen zu überspringen, voranstellen. Möglicherweise erhalten Sie eine Antwort oder werden sie einfach weitergeleitet. Es ist besser, wenn Sie Ihre eigenen Forschungsergebnisse zusammenfassen.

Balog Pal
quelle
Es ist nicht so sehr, ob sie gut sind, als ob sie denken, dass sie gut sind.
Florian F
4

Jede Antwort hier ist eine gute Antwort auf die "Warum" -Frage, aber niemand hat die Frage des OPs wirklich beantwortet.

Wie können Sie einem Programmierer eine Frage so stellen, dass die Antwort auf die ursprüngliche Frage möglichst effizient extrahiert wird?

Die Antwort ist überraschend einfach: Sagen Sie ihnen, warum dies getan werden muss, bevor Sie sie fragen, wie.

Das Beste, was Sie tun können, ist, die Entwickler in einige Besprechungen auf höherer Ebene über ein Produkt einzubeziehen - geben Sie ihnen einen Teil des Gesamtüberblicks, damit sie sehen können, warum genau dies getan werden muss. Sie können Sie sogar überraschen, wenn Sie sich das Wie als Erstes einfallen lassen.

HorusKol
quelle
Wie einfach es ist Geben Sie ein bisschen Kontext und erklären Sie, warum dies viel Zeit spart. Sie bringen den Entwickler auf den richtigen Weg, Ihnen von Anfang an zu helfen.
Joshp
3

Gute Programmierer wollen nicht nur irgendeine Lösung implementieren. Sie möchten die beste Lösung für das jeweilige Problem implementieren. Dies erfordert Informationen. Fragen sind der Weg, um Informationen zu sammeln. Ohne all die Informationen weiß der Programmierer, dass er in Gefahr ist, eine Lösung zu implementieren, die nicht allen Anforderungen entspricht und die nicht mehr funktioniert. Verstecken Sie keine Informationen vor Ihren Programmierern. Das Verbergen von Informationen kostet Zeit, zerstört die Moral und führt zu minderwertigen Lösungen.

Nullbandbreite
quelle
1

Programmierer sind "fest verdrahtet", um Probleme zu lösen.

Gute Programmierer werden versuchen, die "richtigen" Probleme zu lösen.

Nur das zu liefern, wonach jemand fragt, ist [oft] das falsche Problem.

In den Tagen, in denen die Automatisierung von MS Office noch im Trend lag, wurden in der Regel innerhalb weniger Wochen zahlreiche Fragen gestellt, wie "dies" in einem Office-Produkt und "das" in einem anderen Produkt zu tun ist , dann nochmal was anderes in einem anderen. Jedes dieser Probleme ist schnell gelöst, aber das "Problem", das noch nicht vollständig geklärt ist, ist noch nicht gelöst. Sie kommen immer wieder zurück, um das nächste "Glied" in ihrer Kette zu finden.

Wenn du sie aufhältst und fragst "Warum?" dann müssen sie wieder Spur und erklären mehr im Großen und Ganzen , was sie wollen erreichen und nicht nur beschreiben , das Problem sofort vor ihnen. (Übrigens leiden Programmierer genauso darunter wie (wenn nicht mehr als) alle anderen, für die Foren wie diese ein Zeugnis ablegen).
Die Benutzerkette "Die Daten aus der großen Datenbank in Access, dann in Excel, um sie ein wenig zu massieren, und dann in Word, damit sie die Ergebnisse per E-Mail zusammenführen und diese wöchentlich per E-Mail an andere senden können" wird schnell durch ein ersetzt Batch-Job, der all das erledigt , mit den Ergebnissen, die als Erstes an einem Montagmorgen in den Posteingängen der Benutzer gespeichert werden, ohne dass ein manueller Benutzereingriff erforderlich ist .

Benutzern gefällt das.

Wir müssen wissen, wohin Sie möchten, bevor wir Ihnen den besten Weg dorthin bieten können.

Alternativ (um Monty Python zu paraphrasieren): "Möchten Sie die 5-minütige Antwort oder die volle halbe Stunde"?

Es hat keinen Sinn, dass der Programmierer alle Details einer bestimmten Funktion abrüttelt, wenn Sie nur wissen möchten, ob sie zurechtkommt, wenn Sie eine Zahl mit drei drei Dezimalstellen eingeben.

Wenn Sie Ihre Perspektive kennen, kann dies die Antwort, die Sie erhalten, oft radikal verändern.

Phill W.
quelle
0

Ihre letzte Frage lautet: "Wie können Sie einem Programmierer eine Frage so stellen, dass die Antwort auf die ursprüngliche Frage möglichst effizient extrahiert wird?"

Sie sind zunächst verwirrend "effizient" und "effektiv". Um am effizientesten zu sein , schreiben Sie einfach "Was ist die Antwort?" auf ein Stück Papier und zeigen Sie es dem Programmierer. Das ist eine sehr effiziente Möglichkeit, eine Frage zu stellen. Es ist auch sehr unwirksam, eine Antwort zu bekommen.

Und zweitens gehen Sie davon aus, dass Softwareentwickler Fragen beantworten. Sie sind nicht. Sie sind Problemlöser. Ihre Einstellung zeigt deutlich, dass Sie das Lösen von Problemen nicht verstehen. Der effektivste Weg, ein Problem zu lösen, besteht darin, das Problem so weit zu verstehen, dass Sie es einem Problemlöser beschreiben und dann einem Problemlöser präsentieren können. Die andere Methode besteht darin, das Problem teilweise so gut wie möglich zu verstehen und dann einem Problemlöser Ihr unvollständiges Verständnis vorzulegen. Dieser wird Ihnen zuerst die Fragen stellen, die Sie fürchten, um daraus ein vollständig verstandenes Problem zu machen, und es dann zu lösen.

Ein sehr ineffizienter Weg ist die Methode, die Sie versuchen: Holen Sie sich ein unvollständiges Verständnis des Problems, raten Sie, wie dieses Problem gelöst werden könnte, und fragen Sie einen Problemlöser, wie diese Lösung erreicht werden kann. Der Problemlöser hat dieses Verhalten bereits gesehen. 10 Mal, wenn er unerfahren ist, tausend Mal, wenn er erfahren ist. Der Problemlöser weiß also , dass Sie in eine völlig falsche Richtung geleitet werden. Und der Problemlöser tut, was zu tun ist, um in die richtige Richtung zu gelangen. Er stellt Fragen, um das eigentliche Problem zu verstehen. Erste Fragen, um Ihr unvollständiges Verständnis des Problems zu verstehen, und zweite Fragen, um das eigentliche Problem zu verstehen.

gnasher729
quelle
0

Beginnen Sie die Frage, indem Sie erläutern, was Sie erreichen möchten und in welchem ​​Kontext Sie arbeiten. Wenn Sie genügend Kontext angeben, erhalten Sie kein "Warum". Sie erhalten ein "ist das wirklich notwendig?"

Denn statistisch gesehen sind die meisten vorgeschlagenen Funktionen nicht zu gebrauchen und die Implementierung lohnt sich nicht.

Eine typische Gegenargumentation wäre "aber das ist sein Job". Sein Job ist es, guten Code zu schreiben , und das Hinzufügen von Features widerspricht normalerweise dem, weil die meisten Features ein Redesign der funktionierenden Codebasis und dieses "Redesign-Ding" erfordern :

  1. dauert ewig
  2. fügt neue Bugs hinzu
  3. bricht Dinge, die früher funktionierten
  4. macht die Wartung undurchlässig

Das ist kein guter Code, guter Code ist minimal.

ZJR
quelle
Der Job des Programmierers besteht darin, keinen guten Code zu schreiben. Die Aufgabe des Programmierers ist es, Wert für das Unternehmen zu schaffen, das sie anstellt. In vielen Fällen ist das Schreiben von gutem Code ein Teil davon. In vielen Fällen ist das schnelle Zusammenstellen von funktionierendem Wegwerfcode ein Teil davon. Ich bin damit einverstanden, dass viele Funktionen nicht funktionieren - ich habe einen Vertrag für ein Unternehmen abgeschlossen, das neue Funktionen hinzufügen wollte, die von seinen Kunden nie verwendet wurden, weil sie nicht durch intelligente Prozesse entwickelt wurden, sondern nur von jemandem, der dachte: "Hey, das könnte nützlich sein ".
Maurycy