Sto cominciando a rendermi conto che lo sviluppo di software è (tra gli altri) un processo di costante ponersi domande. Domande riguardanti la qualità del codice, la separazione delle preoccupazioni, la riduzione al minimo delle dipendenze, ...
Ma la domanda principale è: quanto lontano puoi andare senza finire in un ospedale psichiatrico?
Mi sto candidando per un nuovo lavoro. Ieri ero con un possibile futuro datore di lavoro che voleva testare le mie capacità di programmazione. Uno degli esercizi era: spiegare cosa fa questo codice. Ho esaminato il codice dell'applicazione (winforms in vb.net) che hanno sviluppato (è un'applicazione amministrativa per un ospedale). Questo mi ha dato l'opportunità di vedere davvero come si avvicinano alle cose ed è stato piuttosto deludente.
Qualche esempio:
- Ho visto da qualche parte: chiama [inserisci il nome della subroutine qui] -> Sono stato colpito: non è qualcosa da VB6?
- Hanno un datalayer separato, usando ado.net, ma un metodo che ho dovuto esaminare restituisce un set di dati al layer chiamante. Quindi, separatore di dati separato o no, l'applicazione è legata ad ado.net (che potrebbe anche non essere mai un problema se non passano mai a un altro approccio di accesso ai dati).
- Quel set di dati viene letto così com'è, quindi è ancora un approccio incentrato sui dati (ovviamente, si può discutere di quanta logica / comportamento si può mettere in classi come "Paziente" o "LabAnalysisRequest".
- Credo anche di aver visto la costruzione di una query sql mediante concatenazione di stringhe.
- Usano le procedure memorizzate (che, per me, significa: diffusione della logica)
- nessuna menzione di viste / controller: è tutto guidato dalla forma
- La cosa più brutta che ho visto è stata:
Se TestEnvironment.IsTesting quindi someVar = [qualche valore hard coded] altro someVar = [un valore recuperato dinamicamente] finisci se [resto della funzione qui]
È tutto così diverso da quello che ho imparato a scuola: livello di dominio (persistenza agnostica), livello di persistenza, livello di presentazione, test di unità, ...
Quindi riformulo la mia domanda: quanto fondamentale o dogmatico dovrebbe essere? In che misura un programmatore dovrebbe attenersi ai suoi principi o semplicemente scrivere un codice che funzioni?