(assumendo il codice di produzione)
Tendo ad andare un po 'oltre. Ho scritto di fare programmi "a prova di idiota", ma non sempre lo qualifico: scrivo un sacco di codice che altre persone non vedranno o non lavoreranno con (almeno, questa è l'aspettativa quando è scritta). Io sono l'idiota che sto cercando di difendermi da quel caso. È una buona cosa quando il tuo programma rileva problemi per te, e il problema è stato semplificato così tanto che è abbastanza ovvio che c'è un errore, e la sua origine. La verità è che i dettagli di implementazione sono evidenti quando si scrive un programma (a meno che non lo si implementa prematuramente), ma dovrebbero essere astratti e resistenti agli errori per i client (anche quando esiste la località modulo). Il motivo è che i programmi diventano molto complessi. A volte puoi separare i problemi, ma non sempre. Se si mantengono i componenti molto rigidi, semplici, ben incapsulati e a prova di idiota, tendono a scalare bene e la maggior parte dei difetti viene rilevata prima della spedizione. È più facile da riutilizzare e hai più sicurezza e un tempo più facile per riutilizzare i programmi. Inoltre, quei programmi complessi che scrivi diventano più complessi (anche per te) dopo qualche tempo lontano dal programma. Quando lo leggi in 6 mesi, può richiedere un'assurda quantità di tempo per comprendere e eseguire il debug rispetto alla versione a prova di idiota. Se un componente introduce un cambiamento di rottura, può passare inosservato per un lungo periodo altrimenti. I programmi sono complessi; non puoi sfuggire a questa realtà, ma puoi renderla una prova idiota, che ti renderà la vita molto più facile quando qualcosa va storto o quando deve essere riutilizzato o modificato. Pertanto, l'approccio a prova di idiota significa che il tuo software può essere compreso, riutilizzato o gestito dagli junior o dalle persone più recenti nel team (non solo da qualcuno che ha esperienza / esperienza come te). La sostituzione è una questione separata: se le persone amano lavorare con i tuoi programmi, stai facendo un buon lavoro - non preoccuparti della sostituzione. Certo, potrei inventare scenari in cui programmi incomprensibili potrebbero salvare il tuo lavoro, ma scrivere un buon programma che gli altri possono usare e mantenere è chiaramente il male minore (guarda le risposte degli altri). Se mi sorprendo a scrivere qualcosa che non è una prova idiota, cerco di risolverlo.
Apart from the scenario, where you need some documentation for yourself in order to continue a project after 6 months of pause, there seems to be a clear conflict of interest here between the developer and the software company.
Non hai davvero idea di cosa stavi pensando in un momento in cui rivedi le implementazioni dormienti. Quando sei veramente esperto, allora il problema è più semplice perché puoi fare affidamento su metodologie o approcci consolidati che usi. Ciò, tuttavia, presuppone anche che queste metodologie siano invarianti. Anche se la documentazione può risultare lassista, devi ancora essere difensivo nelle implementazioni (ad es. Sai meglio di passare NULL in questo scenario - prova questa condizione).
So as a programmer, should you really write excellent documentation and easily readable code for everyone; or should you write code and documentation in a way that it does the job and you yourself can understand it, but another person may have trouble understanding it?
Raccomando l'approccio a prova di idiota, che è ancora più chiaro e più resistente agli errori rispetto all'approccio basato sul fattore bus. Scrivi i tuoi programmi e la documentazione in modo che sia facilmente comprensibile da qualcuno esterno al progetto - è un bene anche per te. Così facendo aumenterai il tuo valore per la tua azienda e il tuo team, non vogliono vogliono per sostituirti.