Lavorare come unico sviluppatore: ottenere il codice controllato


39

Non ho altra scelta che lavorare da solo e non riesco a trovare una soluzione adeguata per controllare il mio lavoro, controllare la sanità mentale, avere qualcuno con cui fare brainstorming di idee, discutere delle migliori pratiche e così via.

Ho pensato di ottenere una risposta dall'articolo di Jeff Atwood: In Programming, One Is The Loneliest Number , il migliore che ho trovato sull'argomento, ma si è rivelato solo per ribadire la mia domanda.

So che siti di Stack Exchange come questo e Code Review sono una risposta ovvia potenziale, ma come molti apprezzerebbero, è LONTANO dall'ideale:

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. Inoltre, nascondere i dettagli per porre una domanda ben definita elimina la possibilità che qualcuno possa individuare problemi a cui non avevi pensato. 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. Ultimo ma non meno importante, non voglio pubblicare il mio intero progetto affinché il mondo guardi il resto dell'eternità, per ovvie ragioni.

Ci sono altre risposte oltre a pagare un consulente per controllare il mio codice?


3
Anch'io ho questo problema (con progetti per divertimento), solo che ho la fortuna di avere alcuni amici programmatori intimi disposti a consultare il mio codice.
Austin Hyde,

23
Potresti sempre parlare da solo - questo è particolarmente utile per i controlli di follia :-)
Danny Varod

4
Se te lo puoi permettere, questo è uno dei motivi per cui è bene affittare un ufficio / una scrivania in un parco aziendale (idealmente dove si raggruppano le persone IT). Ho avuto molte buone chat con le persone IT nei miei uffici vicini quando ero un programmatore solitario che lavorava in un ufficio.
JW01,

6
Lavorare da soli può essere meglio che lavorare con gli idioti.
Giobbe

2
Non è davvero una soluzione, ma puoi uscire con una chat SO o un canale IRC appropriato; ciò potrebbe alleviare alcuni degli oneri di lavorare da soli.
Tikhon Jelvis,

Risposte:


36

Sono stato nei tuoi panni e non credo che ci sia una soluzione semplice. Pagare un consulente per esaminare il tuo codice non è un buon modo per spendere soldi. Se il tuo problema è che ti senti solo e non hai nessuno con cui parlare di programmazione, non posso aiutarti lì, ma se sei davvero interessato a migliorare la qualità del tuo codice, la cosa migliore da fare è impostarlo a parte e tornarci tra circa una settimana. Se il codice è davvero pessimo, sarà ovvio perché non sarai in grado di dargli un senso e puoi iniziare a rifattorarlo per avere un senso. Dopo alcune iterazioni di questo processo inizierai a notare i modelli di codice che rendono il codice facile da capire e la qualità del tuo codice migliorerà.


Buona! ... 15
Marjan Venema,

2
In teoria questo potrebbe funzionare, in pratica NON C'È NESSUN MODO IN SALONE tornerà a guardare il codice che ha scritto 2 settimane fa se funziona. Né dovrebbe, probabilmente .. Se funziona tornare indietro per passarci del tempo per il solo motivo di renderlo "più bello" è una perdita di tempo, dovrebbe essere fatto quando e se viene toccato di nuovo.
Thomas Bonini,

3
@Krelp: guardo sempre il codice passato e non è possibile aggiungere funzionalità e in generale mantenere il software senza guardare il codice precedentemente scritto. Non esiste un'architettura perfetta e le astrazioni che perdono sono la regola piuttosto che l'eccezione, quindi è inevitabile guardare il codice precedentemente scritto. So che i programmatori della maratona sono idolatrati nei circoli di programmazione, ma la codifica della maratona porta rapidamente a burnout e progetti abbandonati, quindi oltre a migliorare la qualità del codice fare pause e tornare mi mantiene sano di mente.
davidk01,

@david: hai accennato a guardare indietro al codice dopo un determinato periodo di tempo, anche se non è necessario al momento. Inizialmente non hai detto di guardare indietro al codice solo quando devi farlo per aggiungere nuove funzionalità .. Quindi se - secondo quello che hai detto - alla fine devi guardare indietro a tutto il vecchio codice, perché non farlo quindi in un momento che è rilevante invece che dopo un periodo di tempo fisso?
Thomas Bonini,

3
@Krelp: se sei abbastanza sicuro delle tue capacità, vai avanti e guarda il codice di lavoro solo quando ne hai voglia, ma se hai appena iniziato e non sei sicuro di come stai strutturando il tuo codice, allora cerca continuamente tornando a ciò che hai scritto poche settimane fa e il refactoring è un ottimo modo per imparare la corretta struttura del codice. Il mio consiglio è stato per le persone che cercano di migliorare e raggiungere il punto in cui la ristrutturazione del codice precedentemente scritto diventa sempre meno necessaria perché la versione iniziale ha la struttura estensibile adeguata. Sei il benvenuto per ignorare il mio consiglio.
davidk01,

17

Ci sono altre risposte oltre a pagare un consulente per controllare il mio codice?

No.

Il mio consiglio è di unirmi a un gruppo locale di sviluppatori / utenti e di esprimere le tue idee con gli altri. Parla del tuo design. Chiedi ad altri come hanno affrontato determinati problemi.

Se verificano il tuo progetto, anche senza guardare il tuo codice, dovrebbe essere abbastanza buono.


4
Molti scrittori professionisti lo fanno.
JeffO,

10

Esistono tecniche di autocontrollo come lo sviluppo test-driven che possono aiutare a fornire feedback. Quando diventa difficile sapere che la tua architettura è probabilmente fuori di testa.

formulare una domanda e inscatolarla in un problema autonomo spesso richiede così tanto lavoro che nel momento in cui l'hai preparata a sufficienza, hai risposto alla tua domanda in più tempo di quanto avrebbe impiegato diversamente.

Problema risolto. Non è necessario un feedback esterno su ogni singola riga di codice per migliorare, solo un buon campionamento nelle forcelle chiave della strada e accurati autocontrolli nei punti intermedi.

Devi superare l'idea che puoi mantenere lo stesso livello di qualità lavorando da solo nello stesso lasso di tempo di qualcuno che lavora in una squadra. C'è un motivo per cui le persone lavorano in gruppo. La buona notizia è che non hai conflitti sulle decisioni di progettazione. La cattiva notizia è che non hai conflitti sulle decisioni di progettazione. Speriamo che il tempo extra impiegato per mantenere la qualità sia in qualche modo compensato dai vantaggi di lavorare da solo.


Non riesco a vedere come TDD sia una risposta qui.
Aaronaught,

1
@Aaronaught Sono nella stessa barca del TS e posso assicurarti che scrivere test (prima del codice come in TDD o dopo) è IL modo per verificare se il tuo codice è sano. Se non puoi provarlo, è male.
stijn,

1
@stijn: Potrebbe essere (in qualche modo) vero che scrivere codice di prova è più difficile per scrivere codici di prova, ma non è mai impossibile - è il modo in cui i sistemi legacy vengono aggiornati. Anche se accettassimo al valore nominale l'affermazione dubbia che un buon codice porta a buoni test, l'affermazione inversa non è ancora provata; un test di superamento non significa che il codice abbia una qualità ragionevole. In realtà, la premessa di TDD - "rosso, verde, refattore" significa essenzialmente scrivere codice sciatto che supera il test e quindi riformattarlo per migliorare la qualità, quindi alla fine della giornata sei proprio dove hai iniziato, solo con i test.
Aaronaught,

2
@Aaronaught: fai punti validi, ma continuo a sostenere che i test sono un ottimo modo per verificare la sanità mentale del codice (anche se non l'unico modo); l'esperienza mi ha dimostrato così, è particolarmente utile vedere dove viene violata pesantemente la SRP.
gennaio

@Mark: È bello, ma tutti questi aneddoti valgono anche meno di un reclamo pubblicitario "Ho perso 50 sterline in 2 settimane", perché la cosa di cui si parla non è nemmeno stata effettivamente misurata , e tanto meno osservata in condizioni controllate. Sì, ci sono prove che TDD riduce i difetti di pre-release, ed è una cosa grandiosa; le revisioni del codice risolvono un problema completamente diverso e non vi è alcuna base per presumere che TDD risolva lo stesso. I test unitari "di vecchia scuola" sono probabilmente migliori in questo senso perché pongono vincoli di testabilità su singole classi anziché su gruppi di esse.
Aaronaught,

6

Consiglierei di fare il maggior numero possibile di reti in occasione di conferenze e gruppi di utenti locali. Conosco molti sviluppatori che sparano continuamente codice sanitized avanti e indietro tramite e-mail o im solo per mantenere la nitidezza e guardare insieme gli algoritmi. No, non è una conversazione faccia a faccia, e sì, a volte è un problema sanificare il codice, ma una revisione di 20 messaggi di messaggistica istantanea di volta in volta può essere piuttosto utile, specialmente quando sei alla disperata ricerca di un secondo paio di occhi.


4

Sono in una situazione simile e faccio molto affidamento su Stack Overflow per ottenere feedback su domande nodose. Trovo anche in virtù del fatto di dover scrivere una descrizione del problema che la risposta diventa spesso ovvia. In termini di best practice, sono uno sviluppatore .Net e utilizzo ReSharper che offrirà suggerimenti di alternative di buone pratiche al codice che sto scrivendo (che a volte ignoro, può essere un po 'pedante). E un altro strumento utile è FxCop che eseguirà un'analisi del codice statico ed evidenzierà eventuali problemi che non corrispondono al suo set di regole.

Altrimenti spetta a te leggere e rimanere aggiornato sulle pratiche correnti. Mi piace la rugiada mattutina di Alvin Ashcraft per i collegamenti a ciò che è nuovo e migliorato nel mondo .Net.


4

Suggerirei di provare a creare (o trovare) un piccolo gruppo di utenti. Rendi disponibile il tuo codice e fai in modo che tutti si impegnino a farlo funzionare - mezz'ora o più ogni giorno.


3

Un feedback costruttivo dalla mia esperienza è che durante i primi anni del tuo sviluppo sarebbe molto importante, sebbene non obbligatorio, che uno sviluppatore esperto riveda il tuo codice per gettare le basi. Una volta che hai esperienza, puoi seguire l'approccio suggerito da @ davidk01, ovvero rivedere periodicamente il tuo codice per migliorare la qualità del codice.


2

Non conosco i dettagli della tua situazione, ma dove sono ora ci sono molti studenti affamati di esperienza che sono più che felici di lavorare come stagisti e imparare qualcosa.

Può sembrare un lavoro extra per te gestirli e insegnare loro questo e quello, ma siamo stati tutti lì quando abbiamo iniziato e credo che sia il nostro turno di rimborsare.

Non sono esperti e potrebbero anche ingannarti a volte, ma di solito sfidano tutto e sono pieni di idee e sono l'ideale per una discussione in cui devi difendere ogni dettaglio del tuo codice.


2

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.