Sto iniziando a rendermi conto che lo sviluppo di software è (tra gli altri) un processo in cui ti poni continuamente domande. Domande sulla qualità del codice, separazione delle preoccupazioni, riduzione al minimo delle dipendenze, ...
Ma la domanda principale è: fino a che punto puoi andare senza finire in un ospedale psichiatrico?
Sto facendo domanda per un nuovo lavoro. Ieri ero con un possibile futuro datore di lavoro che voleva testare le mie capacità di programmazione. Uno degli esercizi è stato: 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 effettivamente come si avvicinano le cose ed è stato piuttosto deludente.
Alcuni esempi:
- Ho visto da qualche parte: Chiama [inserisci il nome della subroutine qui] - > Sono rimasto colpito: non è qualcosa di VB6?
- Hanno un datalayer separato, usando ado.net, ma un metodo che ho dovuto esaminare restituisce un set di dati al livello chiamante. Quindi datalayer separato o no, l'applicazione è legata ad ado.net (che potrebbe anche non essere mai un problema se non passano mai ad un altro approccio di accesso ai dati).
- Il set di dati viene letto così com'è, quindi è ancora un approccio incentrato sui dati (ovviamente, si può argomentare quanta logica / comportamento si possa inserire in classi come "Paziente" o "LabAnalysisRequest".
- Credo anche di aver visto la costruzione di una query sql tramite concatenazione di stringhe
- Usano stored procedure (che, per me, significano: dispersione della logica)
- nessuna menzione di viste / controller: è tutto basato sulla forma
- La cosa più brutta che ho visto è stata:
If TestEnvironment.IsTesting then someVar = [some hard coded value] else someVar = [some dynamically retrieved value] end if [remainder of the function here]
È tutto così diverso da quello che ho imparato a scuola: livello dominio (persistenza agnostica), livello di persistenza, livello di presentazione, test di unità, ...
Quindi riformulo la mia domanda: quanto dovrebbe essere fondamentale o dogmatica? In che misura un programmatore dovrebbe attenersi ai suoi principi o semplicemente scrivere un codice che faccia il lavoro?