I metodi di sviluppo dovrebbero schiacciare l'individualismo di uno sviluppatore?


9

Sono nel mio ultimo semestre di college e sto seguendo un corso di ingegneria del software. Nella classe apprendiamo vari metodi di sviluppo del software. Quello su cui ci siamo concentrati, e utilizzato per sviluppare il nostro progetto, era il metodo a cascata.

Sento che l'istruttore potrebbe averlo implementato in modo sbagliato. Nei nostri diagrammi di classe, abbiamo dovuto elencare TUTTE le proprietà e i metodi, compresi quelli privati. Ho letto alcuni libri, in particolare Clean Code, che dicono di mantenere le funzioni più brevi e mirate possibile. Sembra noioso elencare ogni piccola funzione nei nostri diagrammi se non aiutano altri sviluppatori (sono privati, nessun altro li userà). Inoltre, potrei non pensare a tutte le minuscole funzioni durante la progettazione del programma, ma potrebbero presentarsi durante il refactoring.

L'istruttore ci ha detto male chiedendoci di elencare ogni funzione? E questi metodi di progettazione schiacciano l'individualismo dello sviluppatore per scrivere codice come possono comprenderlo meglio?


20
È piuttosto brutto che la tua classe stia insegnando il metodo Waterfall, che è un esempio canonico di cattivi processi per lo sviluppo del software.
whatsisname

6
Direi che questa lezione ti ha insegnato molto.
JeffO,

7
In realtà, la cascata originale ha iterazioni che si scambiano feedback. È l'insegnamento errato di Waterfall nel corso degli anni che ha distrutto la sua utilità. Anche con qualcosa come Scrum, i passaggi che una storia attraversa in uno Sprint emula quello di una cascata in se stesso. I diagrammi UML sono utili solo per la progettazione di alto livello. Non appena il codice viene scritto, tutti i documenti scritti prima di quel codice non sono più aggiornati. Questa è la realizzazione dell'ingegneria. Alla fine, il codice deve essere la documentazione.
Andrew T Finnell,

10
Praticamente ogni sviluppatore ha visto casi di individualismo degli sviluppatori che avrebbero dovuto essere schiacciati. (Anche se probabilmente non con la metodologia a cascata).
psr

2
@whatsisname, sono fortemente in disaccordo. Ogni sviluppatore dovrebbe imparare lo sviluppo di Waterfall in modo da COMPRENDERLO e ESPERARLO come un esempio canonico di cattivo sviluppo del software. Inoltre, molti negozi sono ancora Waterfall per giusto o sbagliato ed è importante che i laureati siano preparati per questo.
maple_shaft

Risposte:


10

Hai chiesto all'istruttore perché hai dovuto elencare tutti i metodi?

È possibile che, come con gran parte di ciò che viene richiesto in un ambiente di classe, l'intenzione non fosse quella di rendere i tuoi diagrammi di classe più utili per gli sviluppatori, ma di aiutare te e i tuoi compagni di classe a pensare a come progettare le tue classi. Quando gli studenti stanno imparando come scomporre i problemi più grandi in problemi più piccoli, è probabilmente utile per loro pensare a quali metodi privati ​​avrebbero probabilmente bisogno. Ed è probabilmente utile che l'istruttore abbia una migliore idea di quali metodi gli studenti stiano pensando di implementare per intervenire prima nel processo se il design di qualcuno è mal concepito. La documentazione in un ambiente di classe è spesso molto più coinvolta della documentazione in un ambiente del mondo reale perché l'istruttore "

Naturalmente, è anche possibile che l'istruttore ritenga che questo livello di documentazione sia utile in un progetto reale. In tal caso, l'istruttore è probabilmente obsoleto o proviene da un particolare background di nicchia in cui questo livello di pianificazione e documentazione è appropriato. Se stai costruendo il sistema di navigazione per la navetta spaziale o progettando dispositivi medici, ad esempio, è generalmente molto più appropriato investire pesantemente nella progettazione in anticipo piuttosto che nel refactoring del codice durante lo sviluppo. Se stai sviluppando un sito di social network, d'altra parte, un approccio più agile è più appropriato.


+1 per indicare come è necessario un design diverso per scopi diversi. Aspetti positivi anche sul design di classe; chiedere all'istruttore è una buona idea
Ethel Evans,

1
Ricorda la regola per passare un corso universitario: scopri cosa vuole il professore e consegnalo.
Christopher Mahan,

9

No, l'istruttore ha ragione nel dirti di elencare tutte le proprietà e i metodi in anticipo se stai usando il metodo waterfall. Wikipedia nota una critica alla cascata:

Molti sostengono che il modello a cascata sia una cattiva idea nella pratica: ritengono impossibile per qualsiasi progetto non banale completare perfettamente una fase del ciclo di vita di un prodotto software prima di passare alle fasi successive e imparare da esse. Ad esempio, i clienti potrebbero non sapere esattamente quali requisiti sono necessari prima di rivedere un prototipo funzionante e commentarlo. Possono cambiare costantemente le loro esigenze. I progettisti e i programmatori possono avere poco controllo su questo. Se i clienti cambiano i loro requisiti dopo che il progetto è stato finalizzato, il progetto deve essere modificato per soddisfare i nuovi requisiti. Ciò significa effettivamente invalidare una buona parte delle ore di lavoro, il che significa un aumento dei costi, soprattutto se una grande quantità delle risorse del progetto è già stata investita in Big Design Up Front.

Questi metodi di progettazione non schiacciano l'implementatore dell'individualismo del design in quanto ci sono ancora parti da interpretare e modi per mettere i tocchi unici sulla struttura, ad esempio l'immagine con uno scheletro e l'aggiunta di muscoli e altri tessuti per creare un animale chiedendosi quanto libertà hai dovuto progettare quell'animale?

Hai trovato una carenza di cascata sì, ma tutto ha i suoi punti di forza e di debolezza.


4

Nella classe apprendiamo vari metodi di sviluppo del software. Quello su cui ci siamo concentrati, e utilizzato per sviluppare il nostro progetto, era il metodo a cascata.

Probabilmente hai appreso il classico modello Waterfall, che la persona attribuita con l'introduzione nel mondo di sviluppo del software ha dichiarato fin dall'inizio inappropriato per lo sviluppo di sistemi software su larga scala. Probabilmente saresti interessato a leggere l'articolo di Winston Royce intitolato Gestione dello sviluppo di sistemi software di grandi dimensioni per saperne di più sui problemi con quello che molte persone considerano il modello Waterfall.

Tuttavia, il modello Waterfall è utile per insegnare il ciclo di vita dello sviluppo del software man mano che si procede e può trascorrere del tempo a conoscere ed eseguire ingegneria dei requisiti, progettazione architettonica, progettazione dettagliata, implementazione, test e manutenzione in fasi molto chiare e distinte.

Nei nostri diagrammi di classe, abbiamo dovuto elencare TUTTE le proprietà e i metodi, compresi quelli privati. Ho letto alcuni libri, in particolare Clean Code, che dicono di mantenere le funzioni più brevi e mirate possibile. Sembra noioso elencare ogni piccola funzione nei nostri diagrammi se non aiutano altri sviluppatori (sono privati, nessun altro li userà). Inoltre, potrei non pensare a tutte le minuscole funzioni durante la progettazione del programma, ma potrebbero presentarsi durante il refactoring.

Questi sono tutti punti molto validi.

Elencare tutte le proprietà e i metodi durante la fase di progettazione, anche quando si utilizza Waterfall, è probabilmente eccessivo. Dovresti assolutamente elencare tutto ciò che è pubblico, insieme alle proprietà essenziali. In realtà, tutto il resto è un dettaglio dell'implementazione che è possibile ottenere eseguendo il reverse engineering dell'implementazione in diagrammi.

Il consiglio di Clean Code (non l'ho mai letto - sto solo seguendo quello che hai pubblicato) sembra essere giusto e applicabile anche quando si utilizza la metodologia Waterfall. È possibile progettare le classi e i metodi rispetto al principio di responsabilità singola , alla separazione delle preoccupazioni e ad altri principi di SOLID . Waterfall non ti dice come progettare, proprio quando devi farlo. Detto questo, è più difficile in anticipo mentre impari e pensi a modi migliori per farlo durante l'implementazione.

Penso che ciò evidenzi il fatto che ci deve essere un'iterazione tra progettazione e implementazione molto chiaramente - un problema che Waterfall tradizionale non tiene conto.


1
@pillmuncher Così poche persone l'hanno letto, è un po 'triste.
Thomas Owens

3
La cosa più triste di quel documento è che la maggior parte delle persone ha effettivamente scoperto cascata attraverso di esso, mentre è un documento che scredita a fondo la pratica.
Joeri Sebrechts,

3

Sembra noioso elencare ogni piccola funzione nei nostri diagrammi se non aiutano altri sviluppatori (sono privati, nessun altro li userà).

Se ritieni che ciò sia noioso, attendi di ottenere una vera programmazione di lavoro. Considera, per un momento, che il software potrebbe non essere una carriera praticabile per te.

Inoltre, potrei non pensare a tutte le minuscole funzioni durante la progettazione del programma, ma potrebbero presentarsi durante il refactoring.

Così?

l'istruttore ci ha detto male chiedendoci di elencare ogni funzione?

No. È un requisito comune.

E questi metodi di progettazione schiacciano l'implementatore dell'individualismo di progettazione (lo sviluppatore) per scrivere codice come possono comprenderlo meglio?

Sì. Lo schiacciamento dell'anima degli individui è una parte importante dello sviluppo del software. Tutta l'individualità sarà sempre battuta da tutti i programmatori in tutti i modi possibili. Dice che da qualche parte nelle "Regole di programmazione di Dio" tramandate da qualche montagna ad un profeta.

No. Ti stai solo prendendo in giro per il tedio. Superalo e torna al lavoro.


1
@FreshDaddy. "Loro (per la maggior parte) non vedranno mai funzioni private." Falso. Dopo aver vinto la lotteria, altri programmatori assumeranno il tuo codice e vedranno le funzioni private. Anche. Alcune lingue (ad esempio Python) evitano questo tipo di privacy.
S.Lott

2
@ S.Lott - Elencare ogni funzione privata non è affatto un requisito comune. Succede, non fraintendetemi, ma un "elenco completo di tutte le funzioni private prima di scrivere il codice" è certamente piuttosto raro. C'è "tedio necessario" e poi c'è "tedio inutile". Considerando che i programmatori si occupano dell'eliminazione di "tedius senza valore", i clienti del mondo reale difficilmente richiederebbero qualcosa di così costoso e inutile come questo, a meno che non fosse un codice di tipo "vita o morte".
Morgan Herlocker,

1
@ironcode: "elencare tutte le funzioni private prima di scrivere il codice" è certamente piuttosto raro. " Non nella mia esperienza. È così che le persone imparano a progettare. I programmatori junior sono spesso tenuti a questo standard fino a quando non possono dimostrare che il loro lavoro non richiede questo livello di supervisione. Generalmente meno di un anno. Un'organizzazione che ha preso n00bs da scuola e li ha lanciati alla programmazione senza supervisione sta principalmente creando enormi problemi. Questo livello di supervisione è essenziale per essere sicuri che il codice abbia una possibilità combattiva di funzionare.
S.Lott

1
@S Lott - il mio motto è che se lo sviluppo del software è noioso, lo stai facendo male. Siamo programmatori. Automatizziamo il tedio. Non ci ripetiamo nel codice e non c'è motivo di ripetere nemmeno noi stessi nella documentazione.
Kevin Cline,

1
@kevin: questa risposta è puro sarcasmo. Come tale, è completamente inappropriato e l'ho segnalato.
Michael Borgwardt,

1

La programmazione è l'arte di lavorare entro limiti. La CPU fornisce un set di istruzioni limitato; IO è vincolato dalla progettazione dell'hardware; Le API del sistema operativo sono create per incoraggiare determinati comportamenti e limitarne altri; le lingue di alto livello sono spesso progettate per promuovere un insieme di idiomi su altri ...

E anche le metodologie sono progettate per limitare.

La tua sfida, in tutti gli aspetti del processo di sviluppo, è realizzare la tua visione entro quei limiti. Sfonderai la testa contro ogni muro abbattuto da hardware, lingua, API e metodologia? O troverai un modo per armonizzare ciò che desideri ottenere con ciò che è permesso e incoraggiato?

Pensi davvero che il tuo istruttore desideri leggere attraverso infinite pagine di minutia? Quindi prova questa teoria: spezza un programma e documenta ogni atomo. Quando la sua scrivania si abbassa sotto il peso, sospetto piuttosto che scoprirai che il suo vero desiderio è in qualche modo diverso da quello che ti aspetti.

Oppure prepara la documentazione come ritieni opportuno. Rendilo chiaro, rendilo comprensibile, fallo leggere come un romanzo di Dashiell Hammett. E poi siediti e parla con lui, mostragli quello che hai fatto, convincilo del suo merito.


1

Penso che l'istruttore sia geniale per averti fatto fare questo progetto, insegnandoti così i pro e (principalmente) i contro dello sviluppo di Waterfall.


1

Una semplice regola empirica per valutare la complessità dell'analisi del progetto è "Può lo sviluppatore o la società per cui lavora può essere ritenuto responsabile di qualcosa di abbastanza drammatico (in genere tra cui morte o enormi perdite di denaro) che sta accadendo con il software creato?".

Ho avuto la tua stessa esperienza per alcuni dei miei corsi. Le persone che avevano una formazione nel settore militare ci insegnerebbero l'analisi. E questa sarebbe un'analisi completa ed esaustiva, pianificando tutto il corso del progetto, anche nei minimi dettagli. Non puoi permetterti molte iterazioni con questo tipo di progetto (anche l'esplosione delle bombe può essere ok, l'esplosione del budget non lo è), quindi non c'è spazio per la creatività qui, devi seguire il piano.

D'altra parte, se hai letto un po ', sicuramente leggi delle metodologie agili. Di solito c'è meno documentazione e più spazio per lo sviluppatore di usare la sua creatività mentre sviluppa una soluzione al problema che incontra.

In conclusione, più esperienza ottieni, meglio è e ciò che il tuo istruttore ti sta mostrando si applica in alcune parti del settore. Basta essere consapevoli del fatto che esistono molti modi per gestire e progettare un progetto quanti sono i codici. E troverai difensori e critici per tutti loro. Mettili alla prova mentre studi e scegli quello di cui sei felice.


E fai attenzione a "Può uccidere le persone se si blocca" c'è un altro tipo chiamato "Può qualcuno andare in prigione se questo stampa dati errati" e che spesso tornerà al ragazzo che diteggia la tastiera, quindi è bello avere molto dettagliato requisiti, nei minimi dettagli.
Christopher Mahan,

@Christopher: adattato di conseguenza la mia risposta, grazie per il commento :)
Matthieu

0

Alcune lezioni di ingegneria del software, come quella che ho tenuto, sono tenute in uno strano stile in cui "il fallimento è successo", il successo è un'opportunità sprecata per imparare dal fallimento, e più è sempre meno. Se questo è uno di quelli, basta attenersi agli incarichi e godersi la stranezza.


0

Penso che il tuo istruttore sia fuori dal mondo. Il software commerciale è raramente progettato o documentato in tale misura. È troppo costoso e la documentazione risultante non può essere mantenuta senza ulteriori spese. Tali pratiche dell'IMO sono un retaggio dei giorni in cui la codifica veniva spesso eseguita in linguaggio assembly. Il tuo tempo sarebbe stato speso meglio cercando pratiche più agili: sviluppo guidato dai test, programmazione di coppie, refactoring continuo.

L'istruttore "ti ha detto di sbagliato"?

Credo di si.

Assegnare lavoro noioso ai lavoratori della proprietà intellettuale è uno spreco. A scuola, il lavoro noioso ha poco o nessun valore pedagogico, tranne forse per indurre gli studenti a un lavoro noioso. Tali esercizi hanno conseguenze negative, sia per gli studenti che per l'industria. Gli studenti sono feriti perché il loro tempo è sprecato. L'industria è danneggiata, perché alcuni studenti possono concludere che tale tedio è necessario e utile. Non è nessuno dei due. In trent'anni di software, l'unico lavoro a cui riesco a pensare è stato noioso e utile è stato cambiare i nastri di backup. C'erano dei robot che potevano farlo, ma erano proibitivamente costosi.


2
Oserei dire che non hai mai lavorato per un'azienda che guadagna con i contratti del governo. (modifica) Hai detto Software commerciale. La mia affermazione non ha senso ora.
Andrew T Finnell,

@Andrew Finnel: la verità è così dolorosa, su così tanti livelli.
Peter Rowell,

2
@Andrew - Ho lavorato con DOD2167. Era orribile e improduttivo come veniva praticato. Successivamente ho lavorato per un'altra società che sta facendo uno sviluppo agile per il governo con consegne frequenti. Il cliente è incredibilmente felice. Hanno avuto un'applicazione utile in sei mesi e hanno nuove funzionalità trimestrali.
Kevin Cline,

@Andrew Ho oltre 2 anni di esperienza nel lavoro nel DoD negli Stati Uniti, come dipendente del governo e come appaltatore. Sono stati adottati metodi agili. Un team su cui ho lavorato stava usando attivamente Scrum, producendo documentazione "appena sufficiente" "appena in tempo". Sì, la documentazione (anche la documentazione "quanto basta") è significativamente più estesa rispetto a molti altri luoghi, ma in genere è guidata dal numero di parti coinvolte (i contratti possono cambiare di mano, altre parti possono sviluppare altri sistemi e così via) e / o la sicurezza o la criticità della vita e l'importanza dei sistemi in fase di sviluppo.
Thomas Owens

2
@Andrew non sono solo i governi. Ho visto le specifiche di 40 pagine per "prodotti"; normalmente puoi selezionare tutto da questa tabella e darmelo, per favore. Nessuno potrà mai preoccuparsi di leggerli ...
Ben
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.