Come fare a un programmatore una domanda senza ottenere "Perché" come risposta

31

Abbiamo tutti avuto questa esperienza. Vai da qualcuno che conosci la risposta a una domanda, poni a quella domanda la domanda e loro rispondono con la tipica risposta: "perché?" Spieghi perché devi sapere e tentano di risolvere il tuo problema.

Ci vuole tempo, armarsi di torsione e pazienza per riportare la conversazione alla domanda originale e ottenere quella dannata risposta.

Perché i programmatori lo fanno costantemente, e perché il comportamento peggiora, più il programmatore diventa più anziano?

Come si può porre una domanda a un programmatore nel modo più efficace per estrarre la risposta alla domanda originale?

    
posta cgTag 16.06.2013 - 18:49
fonte

9 risposte

91

Why do developers ask "why" when someone asks them how to implement a solution?

Perché richiede più conoscenze per valutare se una soluzione è appropriata rispetto a quella per implementare effettivamente la soluzione.

È molto difficile credere a qualcuno quando dicono "Non so come farlo, ma so per certo che è ciò che devo fare". I programmatori insistono costantemente nel sondare più a fondo perché le persone insistono costantemente nel porre domande sbagliate. Sì, a volte alla fine ritorna alla tua domanda iniziale, ma non sempre.

Per analogia, immagina se qualcuno si è avvicinato a un meccanico e gli ha chiesto come sostituire la batteria di un'auto. Di solito se sei qualificato per diagnosticare una batteria difettosa, sei qualificato per cambiarne uno, quindi il meccanico ti chiederà come sai che è necessario sostituirlo.

Sa che se non lo fa, e si scopre che non hai bisogno di una batteria, allora continuerai a tornare a chiedere più domande finché non capisci che devi spegnere le luci quando il motore non funziona Chiedendoti in anticipo, sembra che stia sprecando il tuo tempo, ma in realtà sa per esperienza che potrebbe potenzialmente risparmiare a entrambi molto più tempo.

Quindi, se vuoi evitare la linea di domande, devi convincerlo in anticipo che sai di cosa stai parlando.

    
risposta data 16.06.2013 - 20:00
fonte
14

"La domanda riguarda in particolare come interagire con un altro programmatore per porre una domanda, dove l'altro ha la risposta e saltare il dibattito sul motivo per cui viene posta la domanda".

Non puoi, almeno non in modo deterministico. L'altro programmatore è una persona, non un computer e non il tuo servo. Se fai loro una domanda, loro possono scegliere quella che pensano sia la risposta migliore. Se pensano di aver bisogno di più contesto, possono chiederlo.

Potresti provare a prefigurare la tua domanda con una dichiarazione che stai cercando solo una risposta breve, in fondo, ma sono comunque liberi di rispondere come pensano meglio.

    
risposta data 16.06.2013 - 19:42
fonte
13

The question is specifically how does one engage with another programmer to ask a question, where the other has the answer and skip the debate about why the question is being asked.

Non puoi. I programmatori, specialmente quelli buoni, sono cablati per risolvere i problemi e per essere efficienti . Quando un cliente o un collega programmatore viene a cercare una risposta, prima di presentare una soluzione, farà in modo di conoscere il problema che sta risolvendo. In questo modo sono efficienti (non stanno sprecando il tuo e il loro tempo dando una risposta che non risolverà il tuo problema) e stanno risolvendo problemi reali (fornendoti soluzioni / risposte alle domande che dovresti porre).

Esempio: quando un cliente viene da te e dice che vuole implementare una caratteristica X. A volte il cliente ha davvero bisogno di una funzione X e talvolta devi davvero scavare e interrogare il cliente solo per scoprire che non vogliono X ma qualcosa di completamente diverso. Più i vecchi sono esperti e più esperti, più è probabile che siano stati bruciati in passato non affrontando il problema prima di presentare una soluzione.

Quindi riassumendo: se vuoi che le tue domande rispondano con precisione, devi essere sicuro di essere:

  • ponendo le domande giuste (quindi è necessario ricercare in anticipo il problema)
  • fornendo il contesto per il problema
  • condividere alcuni di voi è una ricerca per indirizzarli più velocemente al problema

La maggior parte degli umani che conosco sono solo umani e non computer. Se vuoi solo risposte prova a cercarlo su google.

    
risposta data 16.06.2013 - 21:48
fonte
9

Why do programmers constantly do this, and why does the behavior get worse the more senior the programmer becomes?

Sfortunatamente è lontano dalla verità generale.

Questo comportamento è limitato alla minoranza di quelli veramente buoni. E tu dovresti imparare anche tu.

Solo rispondere alla dannata domanda saltando i perché è un buon modo per guidare in una voragine, veloce e sicura.

Se vuoi davvero saltare la parte colta, puoi anteporre la tua domanda con alcune frasi sulle limitazioni e il tuo desiderio di saltare le domande - potresti ottenere una risposta o semplicemente espellerla. Presentando un sommario la tua ricerca è un'idea migliore.

    
risposta data 16.06.2013 - 20:43
fonte
4

Ogni risposta qui è una buona risposta alla domanda "perché", ma nessuno ha davvero risposto alla domanda degli OP.

How can you ask a programmer a question in a way most efficient in extracting the answer to the original question?

La risposta è sorprendentemente semplice: dì loro perché questo deve essere fatto prima di chiedere loro come.

La cosa migliore da fare è includere gli sviluppatori in alcune riunioni di livello più alto intorno a un prodotto - dare loro un quadro più ampio in modo che possano capire perché questa particolare cosa deve essere fatta. Potrebbero anche sorprenderti con il primo come.

    
risposta data 09.10.2016 - 14:45
fonte
3

I bravi programmatori non vogliono solo implementare alcuna soluzione; vogliono implementare la migliore soluzione per il problema specifico. Ciò richiede informazioni. Le domande sono il modo per raccogliere informazioni. Senza tutte le informazioni, il programmatore sa di essere a rischio di implementare una soluzione che non soddisfi tutti i requisiti e rimarrà bloccata a farlo di nuovo. Non nascondere le informazioni dai tuoi programmatori. Nascondere informazioni spreca tempo, distrugge il morale e porta a soluzioni inferiori.

    
risposta data 08.10.2016 - 14:24
fonte
1

I programmatori sono "cablati" per risolvere i problemi.

I bravi programmatori cercheranno di risolvere i "giusti" problemi.

Fornire semplicemente quello che qualcuno sta chiedendo per <è spesso il problema sbagliato da risolvere.

Nei giorni in cui l'automazione di MS Office era di gran moda, ricevevi una serie di domande, di solito nel corso di poche settimane, chiedendo come fare "questo" in un prodotto Office, quindi "quello" in qualche altro prodotto, poi qualcos'altro ancora in un altro. Ognuno di questi viene trattato rapidamente, ma il "problema" - non ancora del tutto affermato - non è risolto. Continuano a tornare per il prossimo "link" nella loro catena.

Se li fermi e chiedi loro "Perché?" quindi devono eseguire il back-track e spiegare più in generale ciò che vogliono ottenere e non solo descrivere il problema immediatamente di fronte a loro. (BTW, I programmatori soffrono di questo tanto quanto (se non di più) di chiunque altro, per cui è simile a questo testamento dell'orso).
La catena dell'utente di "Ottenere i dati dal grande database in Access, poi in Excel per massaggiarli un po ', poi in Word in modo che possano unire i risultati e inviarli via email alle persone ogni settimana" viene rapidamente sostituito da lavoro batch che fa tutto di quello, con i risultati seduti nelle caselle di posta in arrivo della gente per la prima volta il lunedì mattina, con il comando no per gli utenti.

Utenti come .

Abbiamo bisogno di sapere dove stai cercando di arrivare, prima di poterti offrire il modo migliore per arrivarci.

In alternativa, (per parafrasare Monty Python): "Vuoi la risposta di 5 minuti o la mezz'ora completa"?

Non ha senso che il Programmatore tocchi tutti i dettagli di una particolare funzione quando vuoi solo sapere se ce la farà se gli dai un numero con tre e tre cifre decimali.

Conoscere la tua prospettiva spesso può rimodellare radicalmente la risposta che ottieni.

    
risposta data 10.10.2016 - 13:10
fonte
0

La tua domanda finale è "Come puoi fare una domanda a un programmatore in un modo più efficace per estrarre la risposta alla domanda originale?"

Prima confondi "efficiente" ed "efficace". Per essere più efficiente , scrivi semplicemente "Qual è la risposta?" su un pezzo di carta e mostrarlo al programmatore. Questo è un modo molto efficace per fare una domanda. È anche molto inefficace nell'ottenere una risposta.

E in secondo luogo, si presume che gli sviluppatori di software siano in grado di rispondere a domande. Non sono. Sono risolutori di problemi. La tua attitudine mostra chiaramente che non capisci la soluzione dei problemi. Il modo più efficace per risolvere un problema è capire il problema fino al punto in cui è possibile descriverlo a un risolutore di problemi e quindi presentarlo a un risolutore di problemi. L'altro metodo è quello di comprendere il problema in parte il più possibile, quindi di presentare la tua comprensione incompleta a un risolutore di problemi, che prima ti porrà le domande che temi di trasformare in un problema completamente compreso e poi risolverlo.

Un metodo molto inefficiente è il metodo che stai provando: ottieni una comprensione incompleta del problema, indovina come risolvere questo problema e chiedi a un risolutore di problemi come questa soluzione possa essere raggiunta. Il problem solver ha già visto questo comportamento in precedenza. 10 volte se non ha esperienza, mille volte se è esperto. Quindi il risolutore di problemi sa che sei diretto in una direzione completamente sbagliata. E il risolutore di problemi fa ciò che deve fare per entrare nella giusta direzione, che sta facendo domande per comprendere il problema reale. Prime domande per comprendere la comprensione incompleta del problema e altre domande per capire il vero problema.

    
risposta data 09.10.2016 - 10:51
fonte
0

Inizia la domanda esplicitando ciò che desideri ottenere e in quale contesto stai lavorando. Se offri contesto sufficiente non otterrai "perché?" , avrai un "è veramente necessario?"

Perché statisticamente , la maggior parte delle funzioni proposte fanno schifo e non valgono la pena di implementare.

A typical rebuttal would be "but that's his job." His job is writing good code, and adding features usually goes against that, because most features require a redesign of the working codebase and this "redesign thing:"

  1. takes forever
  2. adds new bugs
  3. breaks things that used to work
  4. makes maintenance impervious

That is not good code, good code is minimal.

    
risposta data 10.10.2016 - 14:10
fonte

Leggi altre domande sui tag