@bmused, conosco troppo bene il tuo dolore. Gran parte di questo per me deriva dallo straordinario codice WTF che ho avuto a che fare in vari posti. È professionalmente imbarazzante imbrogliare gli altri. Ci sono anche 2 volte che ricordo chiedendo alla squadra di rifiutare di permettere qualche codice nel sistema. Oh bene; alla fine la consegna supera la qualità anche se il codice viene riconosciuto come non valido . Il codice che tutti abbiamo a che fare lo dimostra.
Motivazioni
- Un buon scout lascia sempre il suo campeggio meglio di come l'ha trovato. Amen.
- È ancora meglio dell'horror esistente.
- Divertimento. Un buon design rende la codifica più semplice e divertente.
- Evitare il dolore, sia il sé che il capo inflitti. Ho semplicemente imparato a essere abbastanza buono. È stato difficile, e devo sempre stare attento a questo.
- Un "atteggiamento di miglioramento continuo" mi ha permesso di non preoccuparmi così tanto in anticipo.
Buono, premuroso, completo , design all'avanguardia è estremamente importante. Non cercare di essere troppo intelligente per il tuo (e nostro) bene. Non sto dicendo "elegante", "brillante", "realistica implementazione di caratteristiche linguistiche oscure", ecc. Sto dicendo completo, diretto, orientato agli oggetti. Combatti per il tempo necessario per creare un design decente prima della codifica.
Un buon design si presta naturalmente a codifiche "abbastanza buone" che ti permettono di dormire la notte. Codice completo (un gioco su un titolo di un libro) in modo da non preoccuparti di inventare posti per future estensioni. Ed essendo "completi" c'è meno voglia di continuare ad armeggiare con esso.
Ho avuto 2 esperienze molto diverse con la stessa base di codice. Il ben progettato più di qualsiasi altra classe di dominio aziendale completamente definita per soddisfare i requisiti; è stato criticato da PEBCAK OO-collaboratori ignoranti per "troppo", "troppo occupato" - ma codificato più facile e veloce ( potresti rimanere sorpreso di quanto tempo hai bisogno di miglioramenti durante la codifica! ), e navigato attraverso test in pochi giorni. Rispetto all'altro tempo in cui il design era incompetente nella migliore delle ipotesi e siamo rimasti bloccati in un ciclo infernale di prova e fallimenti di 3 mesi. Immagina come potresti provare a renderlo assolutamente perfetto la prossima volta, date queste due esperienze.
Il miglioramento continuo è un posto più felice. Ottieni il tuo nuovo codice abbastanza buono e le opportunità che si presentano migliorano.
- Il codice base di uno sta peggiorando o migliorando; miglioramento continuo o busto.
- Migliorare in seguito, di fronte a requisiti mutevoli conosciuti, o solo il tempo di pensarci, è molto preferibile pensare a ogni potenziale futuro in anticipo.
- Impedisce consapevolmente la sovraingegnerizzazione in previsione di cambiamenti che non arrivano mai: il mio punto debole è l'interfaccia implementata da una sola classe. Una cosa innocente che penseresti, ma la vedo troppe volte e IMHO in un grande code base ogni bit inutile e inutile è doloroso.
Buone pratiche di refactoring insieme a unit test è il modo per implementare il miglioramento continuo. Consiglio vivamente Refactoring di Martin Fowler.