Nel libro The Pragmatic Programmer , gli autori menzionano concetto di programmazione per coincidenza . Spiega cos'è, perché è causato, quali sono i pericoli che potresti incontrare e si confronta con un campo di mine antiuomo in una guerra.
Do you ever watch old black-and-white war movies? The weary soldier advances cautiously out of the brush. There's a clearing ahead: are there any land mines, or is it safe to cross? There aren't any indications that it's a minefield—no signs, barbed wire, or craters. The soldier pokes the ground ahead of him with his bayonet and winces, expecting an explosion. There isn't one. So he proceeds painstakingly through the field for a while, prodding and poking as he goes. Eventually, convinced that the field is safe, he straightens up and marches proudly forward, only to be blown to pieces.
The soldier's initial probes for mines revealed nothing, but this was merely lucky. He was led to a false conclusion—with disastrous results.
As developers, we also work in minefields. There are hundreds of traps just waiting to catch us each day. Remembering the soldier's tale, we should be wary of drawing false conclusions. We should avoid programming by coincidence—relying on luck and accidental successes—in favor of programming deliberately...
Ma non sono molto soddisfatto del modo in cui descrivono il problema "come superarlo". Sì, devi pensare al futuro prima di scrivere il codice, ma come esercitarlo? L'unica cosa che posso pensare è aggiungere funzionalità a progetti Open source esistenti, in cui è necessario avere conoscenza sia del "cosa sto facendo ora" sia del "come funzionano gli altri pezzi di codice", e non è così pertinente quando stai scrivendo i tuoi progetti.
EDIT:
un riepilogo dai tuoi post:
- Non indovinare la tua prossima mossa, dimostra che è corretta
- Test unitario e refactor il più possibile, quando necessario
- Aggiungi funzioni-prova-compila spesso
- Se non riesci a spiegare il codice a un noob, probabilmente stai programmando per coincidenza.
A proposito, è difficile accettare una risposta, è davvero difficile. Tutte le risposte sono davvero fantastiche:)