Sebbene non riesca a elencare tutte le insidie, spesso, formulare una domanda e inscatolarla in un problema autonomo spesso richiede così tanto lavoro che, quando l'hai preparata a sufficienza, hai risposto alla tua domanda in più tempo di quanto avrebbe impiegato diversamente.
Provo lo stesso per> 75% delle domande che invio.
Tuttavia, questo non è un argomento per non preoccuparsi di farlo. Questo è effettivamente il debug di paperelle di gomma. Si sta trovando le risposte alle domande che si pensi che potrebbe sorgere in risposta alla tua domanda; il che significa che stai pensando al problema da diversi punti di vista; il che significa che stai pensando al problema da tutte le direzioni possibili; che è il modo migliore per trovare il difetto.
Nella migliore delle ipotesi, hai definitivamente dimostrato che non puoi chiaramente pensare alla risposta qui. Nel peggiore dei casi, si finisce per rispondere alla propria domanda. Fai attenzione alle citazioni, perché questo non è affatto male. Forse è stato un po 'inefficiente, ma risolvere il problema lentamente è meglio che decidere rapidamente di non affrontare il problema . Alla fine sarai più veloce nel risolvere il problema.
Caso in questione:
Quando ero uno sviluppatore alle prime armi , mi sono occupato della pagina di errore ASP.Net molte volte. Avevo bisogno di Google il messaggio per capire cosa non andava. potrebbero volerci diverse ore prima di ottenere la soluzione giusta. Fondamentalmente ho commesso tutti gli errori nel libro e successivamente ho dovuto affrontare le conseguenze di dover eseguire il debug dei problemi.
Ora, quando viene visualizzato un errore, conosco già i "soliti sospetti" di ciò che potrebbe causare il problema. La mia lista mentale di "soliti sospetti" si basa effettivamente sui problemi con cui ho avuto più problemi durante la mia carriera. Senza prima aver fatto il lavoro inefficiente per le gambe di ore di googling, non avrei mai fatto questo elenco mentale . Ma ora che ho quell'elenco mentale, sono molto più veloce nella risoluzione dei problemi.
Inoltre, anche se non riesco proprio a metterlo al dito, la reattività della conversazione gratuita non può essere eguagliata da qualsiasi forma di discussione testuale su Internet a cui riesco a pensare.
Non sono abbastanza d'accordo qui. Hai ragione sul fatto che la comunicazione su Internet è meno reattiva, ma (a mio avviso) sbagli che questo è un male per te.
Come sviluppatore solitario, dovrai fare affidamento sul debug di paperelle di gomma. L'ingrediente chiave per far funzionare RDD è che anticipi le domande che l'anatra di gomma potrebbe avere per te. Ovviamente non puoi fare affidamento su ciò che dice effettivamente l'anatra di gomma.
Quando si ha a che fare con i sistemi di messaggistica lenti (invio su StackOverflow o comunicazione tramite scrittura di lettere), si è intrinsecamente incentivati a assicurarsi di ottenerlo correttamente la prima volta. Perché la necessità di correggere un errore sarà un processo lento e arduo.
In confronto, considera che i sistemi di messaggistica rapida (conversazione, messaggistica istantanea), puoi immediatamente correggere qualcosa. La capacità di correggere rapidamente qualcosa rende le persone meno incentivate a garantire che sia corretto.
Quattro casi in questione:
- Quando creo la mia personale lista di analisi / todo come sviluppatore, uso ancora carta e penna. Ho notato che cerco assunzioni e falsità quando scrivo le mie note, perché la mia mente pensa che "posso facilmente risolvere questo problema in seguito". Tuttavia, dover correggere qualcosa che hai scritto su carta è fastidioso, devi cancellare le cose e scrivere tra le righe e il documento appare molto peggio quando contiene scarabocchi. Scrivere su carta mi fa controllare i fatti prima di impegnarmi a scriverlo. Questo coglie molti malintesi all'inizio, prima ancora di scrivere un codice che produca bug.
- Mia nonna era una segretaria (età della macchina da scrivere). Fare un refuso in un documento formale significava dover digitare nuovamente l'intera pagina. Mia zia è una segretaria (età dell'elaboratore di testi). Può contare su un controllo ortografico automatico e gli errori possono essere corretti facilmente e con il minimo sforzo. Non sorprende che mia nonna commetta errori di battitura e errori di ortografia notevolmente inferiori rispetto a mia zia.
- I videogiochi venivano stampati su cartucce. Risolvere un bug dopo il rilascio era quasi impossibile. Dovresti ristampare tutte le cartucce, distribuirle a tutti i fornitori e sperare che i fornitori possano in qualche modo mettersi in contatto con i clienti che hanno già acquistato il gioco. Costerebbe tonnellate di denaro (il doppio del costo di produzione fisico) e non raggiungerebbe comunque alcuni clienti. Ora, nell'era delle patch Internet, gli sviluppatori di giochi hanno dimostrato di essere notevolmente meno investiti nel testare i loro giochi in modo da poter evitare i bug del giorno del rilascio, perché è molto più semplice semplicemente inviare una correzione direttamente a ogni cliente. L'impatto di fare un errore è ridotto al minimo fino a quando è meglio risolvere una manciata di problemi dopo il fatto, rispetto al dover testare tutto il possibile errori che potrebbero verificarsi.
- Vivevo in un appartamento al terzo piano, senza ascensore, e dovevo spesso parcheggiare una o due strade dal mio edificio. Non ho quasi mai dimenticato di prendere qualcosa dalla mia macchina. Ora vivo in una casa con la mia macchina proprio accanto a me sul vialetto. Ho dimenticato di prendere le cose dalla mia auto per tutto il tempo .
L'idea di base qui è che un sistema di scambio difficile incentiva le persone a fare scambi corretti e verificati . La gravità della punizione (= difficile processo di correzione) ti insegna a non commettere errori.
Inoltre, nascondere i dettagli per porre una domanda ben definita elimina la possibilità che qualcuno possa individuare problemi a cui non avevi pensato.
Quando crei un MCVE , non dovresti semplicemente crearlo e pubblicarlo nella domanda. Dovresti prima farlo da solo , in modo da poter isolare il problema. E poi, quando pensi che il problema non possa più essere ridotto, e ancora non vedi la causa; allora hai una domanda valida per StackOverflow.
Caso in questione:
Ho sempre un secondo Visual Studio in esecuzione con una semplice app console chiamata Sandbox. Ogni volta che incontro un problema tecnico, copio il codice offensivo nella sandbox e inizio a giocarci.
- Cosa succede quando cambio questa impostazione?
- Posso riprodurre il problema se accorco il codice?
- Quali impostazioni rendono possibile / impossibile riprodurre il problema?
Nel 90% dei casi, trovo la causa del problema perché il sandbox mi ha aiutato a guardare il codice offensivo senza essere distratto dal contesto circostante (o, ad esempio, qualsiasi incertezza sui valori che provengono da diverse parti del codice.
Nell'altro 10% dei casi, mi rimane il codice minimo per riprodurre il problema, che funge da perfetto esempio di frammento da pubblicare su StackOverflow.
Ultimo ma non meno importante, non voglio pubblicare il mio intero progetto affinché il mondo guardi il resto dell'eternità, per ovvie ragioni.
Quando hai già il tuo MCVE, non dovresti avere molto in termini di informazioni personali (o aziendali) al suo interno. Se lo fai, poiché il codice è minimo, è facile rinominare le cose in un esempio foo / bar / baz più semplice.