Il codice è già scritto e gli sforzi sono spesi
Inoltre non è necessario. Se non lo usi per niente, è (per definizione) inutile, a prescindere da quello che fa o da quanto impegno è stato speso per esso.
Il codice può essere testato su un ambiente sintetico e reale
Se è inutile, è ancora inutile anche se ci sono dei test. Se il codice è inutile, anche i test dovrebbero essere inutili (quindi mantenere il codice commentato lì, crea ambiguità - mantieni i test? Se avevi il codice client del codice commentato, commentate anche il codice client? )
Se ben organizzato (raggruppato, pacchetto separato, vagamente accoppiato ecc.) Non ti disturba sull'analisi complessiva del codice o sul refactoring
Non così. Tutti i tuoi strumenti (controllo del codice sorgente, analisi statica, estrattore di documentazione, compilatore, ecc.) Verranno eseguiti più lentamente, perché devono elaborare più dati (e una parte più grande o più piccola di quei dati è rumore).
Se il codice non è organizzato bene, d'altra parte, rovinerà l'analisi statica, il refactoring e qualsiasi altro.
Stai introducendo del rumore nell'input dei tuoi strumenti e sperando che lo affrontino correttamente.
E se il tuo strumento di analisi statica calcola un rapporto commenti / codice? Hai appena sbagliato tutto, con qualcosa di rilevante fino a ieri (o ogni volta che il codice è stato commentato).
Soprattutto, i blocchi di codice commentati introducono ritardi nella comprensione del codice per la manutenzione e l'ulteriore sviluppo e tali ritardi costano quasi sempre molto. Chiediti questo: se hai bisogno di capire l'implementazione di una funzione, cosa preferiresti guardare? due righe di codice in chiaro, o due righe di codice e altre ventisei di commenti che non sono più effettivi?
Il codice può essere utilizzato in futuro
Se lo è, lo troverai nell'SCM scelto dalla tua squadra.
Se utilizzi un SCM competente e fai affidamento su di esso per mantenere il codice morto (invece di ingombrare la fonte), dovresti vedere non solo chi ha cancellato quel codice (autore del commit), ma per quale motivo (messaggio di commit) e quale altro insieme ad esso sono state apportate modifiche (il resto delle differenze per quel commit).
Una volta cancellato, l'autore potrebbe sentirsi a disagio
Così?
Tu sei (presumo) un intero team di sviluppatori che viene pagato per creare il miglior software che sai fare, non "il miglior software che sai fare senza ferire i sentimenti di X".
È una parte della programmazione, che alla fine la maggior parte del codice scritto verrà scartata; per esempio, Joel Spolsky ha detto a un certo punto che per la sua azienda, circa il 2% del codice scritto vede la produzione.
Se dai la priorità all'ego degli sviluppatori rispetto alla qualità del codice di base, sacrificherai la qualità del tuo prodotto, per ... cosa esattamente? Preservare l'immaturità dei tuoi colleghi sviluppatori? Proteggere le aspettative irrealistiche dei tuoi colleghi?
Modifica: ho visto un motivo valido per lasciare il codice commentato nel codice sorgente, ed è un caso molto specifico: quando il codice è scritto in una forma strana / non intuitiva e il modo pulito di riscriverlo non lo fa lavorare per una ragione davvero sottile. Questo dovrebbe essere applicato anche solo dopo che si è tentato ripetutamente di correggere il problema e ogni volta che il tentativo ha reintrodotto lo stesso difetto. In tal caso, è necessario aggiungere il codice intuitivo commentato come commento e spiegare perché non funziona (in modo che i futuri sviluppatori non tenteranno di nuovo la stessa modifica):
// note by <author>: the X parameter here should normally
// be a reference:
// void teleport(dinosaur& X);
// but that would require that we raise another dinosaur and
// kill it every twelve hours
// as such, the parameter is passed by value
void teleport(dinosaur X);