Vedo alcuni seri problemi con questa domanda. Iniziamo.
Come smettere di perdere tempo nella progettazione di architechture
Questa domanda è piuttosto carica. Inoltre, non si progetta architettura. Tu architetto . Architettura e design sono attività complementari e correlate, ma non sono le stesse, anche se potrebbero sovrapporsi.
Allo stesso modo, allo stesso modo è possibile perdere tempo a fare architettura (sovra-progettando), si può anche perdere tempo a progettare eccessivamente e sovracodificare (codificando le cose in un modo molto più complesso del necessario, o non riuscendo a codice per le cose che sono richieste.)
La corretta architettura mira a prevenire tale spreco nella codifica. Lo fa limitando, restringendo e documentando i possibili modi in cui un sistema complesso deve essere 1) progettato, 2) codificato e testato, 3) consegnato, 4) mantenuto, 5) recuperato da un guasto e 6) alla fine messo fuori servizio.
La mia esperienza è stata che le persone a cui piace semplicemente programmare, semplicemente programmano senza pensare a come un sistema debba funzionare e mantenere a lungo termine, passando alla patata bollente successiva lasciando qualche povera anima per mantenere un brutto golem.
Ma sto divagando ...
Questo è il punto: per i sistemi abbastanza semplici, l'architettura è evidente ed emana da solide pratiche di progettazione e implementazione.
È solo per sistemi di grandi dimensioni che coinvolge un numero piuttosto elevato di persone o software a livello di sistema che esegue operazioni molto complesse che richiedono un'architettura esplicita.
Mi sono recentemente laureato alla uni e ho iniziato a lavorare come programmatore. Non trovo così difficile risolvere problemi "tecnici" o eseguire il debug, cose che direi avere 1 soluzione.
Questo è il minimo richiesto per questa professione e sono contento che tu non abbia problemi a svolgerli (sarei preoccupato se lo facessi.)
Ma sembra esserci una classe di problemi che non hanno una soluzione
Questi sono il pane e il burro della nostra professione, il tipo di problemi per i quali i datori di lavoro sono disposti a pagare i nostri stipendi (in genere) molto al di sopra della media.
È un dato di fatto, i problemi che vale la pena risolvere sono quelli che possono avere più di una soluzione. Problemi del mondo reale, sono così. E il mondo richiede la nostra esperienza, come sviluppatori di software, di trovare compromessi accettabili.
- cose come l'architettura software.
L'architettura delle cose è una caratteristica inevitabile di sistemi complessi, siano essi virtuali / software o nel mondo concreto. Ogni sistema che opera, che accetta input e produce output, sarà complesso e avrà un'architettura.
Quando sviluppiamo software per tali sistemi (un sistema bancario, un sistema di monitoraggio dell'alimentazione, un sistema di vendita dei biglietti, ecc.), Miriamo a produrre un software che imiti le funzioni e i requisiti di tale sistema.
Non possiamo semplicemente alaarlo e codificarlo in stile cowboy. Abbiamo bisogno di una sorta di architettura. Ciò è particolarmente vero se il progetto richiede dozzine di ingegneri, se non di più.
Queste cose mi confondono e mi causano grande angoscia.
Va bene. Non è una materia facile da imparare o da insegnare, non senza molta pratica.
Passo ore e ore a cercare di decidere come "progettare" i miei programmi e sistemi. Ad esempio, divido questa logica in 1 o 2 classi, come posso nominare le classi, se dovessi renderla privata o pubblica, ecc. Questo tipo di domande occupa così tanto tempo e mi frustra molto. Voglio solo creare il programma, l'architettura sia maledetta.
Sfortunatamente, questa non è architettura software.
Non è nemmeno design, ma solo codifica. Fornirò alcuni suggerimenti in fondo a questo post.
Come posso superare più rapidamente la fase dell'architettura e la fase di codifica e debug, che mi piace ?
Sto facendo fatica a trovare un modo per rispondere a questo, perché è piuttosto emotivo.
Stiamo cercando di fare un lavoro, o stiamo solo cercando di goderci la pratica? È bello quando entrambi sono la stessa cosa, ma nella vita reale, molte volte non lo sono.
È bello fare cose che ci piacciono, ma in una professione complessa come la nostra, concentrarsi solo su ciò che ci piace, non è conduttivo avere una carriera fruttuosa.
Non progredirai, non maturerai o acquisirai nuove conoscenze.
C'è questo detto nell'esercito: "abbraccia la schifosa".
Altre frasi hanno consigli simili. "Se non fa schifo, non ne vale la pena" e il mio preferito, "Se fa schifo (ed è importante), fallo fino a quando smette di succhiare."
I miei consigli:
Mi sembra che stai ancora lottando per capire le differenze tra
codifica (come codificare classi, moduli o altro, convenzioni di denominazione, visibilità dell'accesso, ambito di applicazione, ecc.),
progettazione (quanti livelli, front-end / back-end / db, come ciascuno comunica, cosa va dove) e le decisioni implicite sull'architettura che derivano dalla progettazione di sistemi semplici,
architettura (come si trova in sistemi complessi che richiedono migliaia, se non centinaia di migliaia di ore-uomo).
Quindi suggerirei di approfondire la prima materia (codifica) per portarla al livello successivo.
Codice pulito
"Clean Code" di Robert "Zio Bob" Martin è un buon punto di partenza.
Coesione del software
Inoltre, ti suggerirei di familiarizzare con una specifica metrica software orientata agli oggetti chiamata LCOM o piuttosto LCOM4.
Può diventare piuttosto matematico e non a prova di proiettile, ma il tuo obiettivo dovrebbe essere quello di capire e rilevare empiricamente (o il bulbo oculare se lo desideri) se una classe è coesiva o se manca di coesione.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Principi del software
Ciò è strettamente correlato al "Principio della singola responsabilità" o SRY con cui tutti dovremmo avere familiarità. SRY è uno dei 5 "SOLIDI" di cui tutti abbiamo bisogno per acquisire familiarità se vogliamo diventare esperti nella codifica.
Mentre passiamo attraverso i principi SOLIDI, dobbiamo anche familiarizzare con i principi "GRASP" , che regolano o piuttosto guidano il modo in cui codifichiamo le classi.
Libri aggiuntivi
Infine, suggerirei anche quanto segue:
"Refactoring" di Martin Fowler e Ken Beck sarebbe il prossimo libro che avrei letto in questa lista.
"Design by Contract, by Example" di Richard Mitchell, Jim McKim e Bertrand Meyer (l'ultimo della fama di Eiffel.) Questo libro è esaurito, ma è possibile trovare copie usate a basso costo in Amazon.
Con questo, dovresti avere una buona conoscenza di come iniziare a programmare e progettare, e con la pratica, di spostare e padroneggiare (o almeno afferrare) l'architettura del software.
Sono sicuro che ci saranno altri professionisti che aggiungeranno, sottrarranno o obietteranno a questi suggerimenti. Verranno forniti altri suggerimenti, probabilmente convalidati dalla propria esperienza.
Tutto quello che posso dire è questo: non ci sono scorciatoie.
Ti auguro il meglio.