Quando la programmazione "corretta" non ha più importanza?


49

Ho costruito un gioco Android nel mio tempo libero. Sta usando la libreria libgdx quindi un bel po 'di lavoro pesante è fatto per me.

Durante lo sviluppo, ho selezionato con noncuranza i tipi di dati per alcune procedure. Ho usato una tabella hash perché volevo qualcosa vicino a un array associativo. Valori chiave leggibili dall'uomo. In altri posti per ottenere cose simili, uso un vettore. So che libgdx ha classi vector2 e vector3, ma non le ho mai usate.

Quando mi imbatto in strani problemi e cerco aiuto in Stack Overflow, vedo molte persone che stanno semplicemente risolvendo le domande che utilizzano un determinato tipo di dati quando un altro è tecnicamente "corretto". Come usare una ArrayList perché non richiede limiti definiti rispetto alla ridefinizione di un int [] con nuovi limiti noti. O anche qualcosa di banale come questo:

for(int i = 0; i < items.length; i ++)
{
    // do something
}

So che valuta item.length su ogni iterazione. Tuttavia, so anche che gli articoli non saranno mai più di 15-20 articoli. Quindi dovrei preoccuparmi se valuto items.length su ogni iterazione?

Ho eseguito alcuni test per vedere come si comporta l'app utilizzando il metodo che ho appena descritto rispetto a quello corretto, seguire il tutorial e utilizzare gli esatti tipi di dati suggeriti dalla community. I risultati: stessa cosa. Media 45 fps. Ho aperto tutte le app sul telefono e sulla scheda galassia. Nessuna differenza.

Quindi immagino che la mia domanda per te sia questa: esiste una soglia quando non conta più che sia corretta? Va bene dire - "fintanto che fa il lavoro, non mi interessa?"


4
È una questione di grandezza. Prova a creare database multi-terrabyte serviti fino al mondo reale con ricerche e aggregazioni in tempi di risposta inferiori al secondo con migliaia di richieste al minuto. Il tuo problema non è abbastanza grande. Sebbene il tuo approccio vada bene, se segui quel percorso verso la sua inevitabile conclusione, è doloroso che ci vuole tempo per raggiungere.
Jimmy Hoffa,

8
Se la tua lingua avesse un vero ciclo FOR, quel problema di valutazione multipla non si sarebbe verificato. Sfortunatamente, la sintassi C lo richiede, perché in realtà non è un ciclo FOR; è un ciclo WHILE che indossa una parrucca e occhiali dal naso grosso, ed è necessario accettare qualsiasi condizione arbitraria (o nessuna) per la terminazione del ciclo.
Mason Wheeler,

2
Vedo la tua modifica, ma se stai cercando di rendere il caso che essere ubriachi e sconsiderati sia OK in qualsiasi contesto tranne che festeggiare un venerdì sera con un autista designato, probabilmente stai abbaiando l'albero sbagliato.
Robert Harvey,

17
Come fai a sapere che "valuta" item.length su ogni iterazione? I compilatori sono piuttosto intelligenti. E anche se recupera ripetutamente item.length, e allora? Non vorrei vedere codice come 'int itemsLength = items.length; per (; i <itemsLength; ...) 'a meno che non si sia verificato un problema di prestazioni misurato.
Kevin Cline,

6
Il tuo oggetto items.length non ha assolutamente nulla a che fare con la "corretta programmazione". È una micro-ottimizzazione e i buoni programmatori sanno meglio che perdere tempo con quelli fino a quando non hanno eseguito un profiler e sanno dove sono i reali problemi di prestazioni. Le micro-ottimizzazioni e il buon stile di programmazione sono spesso opposti, non la stessa cosa.
Michael Borgwardt,

Risposte:


65

Scrivi un programma per risolvere un problema. Tale problema è accompagnato da una serie specifica di requisiti per risolverlo. Se tali requisiti sono soddisfatti, il problema è risolto e l'obiettivo è raggiunto.

Questo è tutto.

Ora, il motivo per cui vengono osservate le migliori pratiche è perché alcuni requisiti hanno a che fare con manutenibilità, testabilità, garanzie di prestazione e così via. Di conseguenza, hai quelle persone fastidiose come me che richiedono cose come il giusto stile di programmazione. Non ci vuole molto più sforzo per incrociare le tue T e punteggiare le tue I, ed è un gesto di rispetto per coloro che devono leggere il tuo codice in un secondo momento e capire cosa fa.

Per i sistemi di grandi dimensioni, questo tipo di moderazione e disciplina è essenziale, perché devi giocare bene con gli altri per far funzionare tutto e devi ridurre al minimo il debito tecnico in modo che il progetto non collassi sotto il suo stesso peso.

All'estremità opposta dello spettro sono quelle utility una tantum che scrivi per risolvere un problema specifico in questo momento, utility che non utilizzerai mai più. In questi casi, lo stile e le migliori pratiche sono completamente irrilevanti; fai l'hacking insieme, lo esegui e vai avanti con quello successivo.

Quindi, come per tante cose nello sviluppo del software, dipende.


1
Tendo ad essere d'accordo. Al lavoro non faccio domande, è attraversato e punteggiato. Ma considera che molte cose che faccio per lavoro sono una tantum che in realtà non hanno bisogno di essere mantenute. Passando il genere di cose di tendenza. App di compleanno, cose che vanno e vengono. Tutto vero lì, ma in realtà non hanno bisogno di essere.
Kai Qing,

21
Si può affermare che essere disciplinati in ogni momento rende più facile essere disciplinati quando è necessario. Alcune persone fanno domande su Stack Overflow senza mai premere il tasto Maiusc, usando la logica che possono trasmettere adeguatamente le loro idee senza di essa e che la lingua inglese è comunque una cosa fluida e in evoluzione. Non trovo nulla di più esasperante, tranne forse gli autori di virus che pensano che il tempo della mia CPU sia libero.
Robert Harvey,

2
@KaiQing Qualcuno deve consegnarti un'applicazione legacy 5mloc che è nata in Pascal e portata avanti da allora, al tuo primo tentativo di aggiungere o modificare qualsiasi funzionalità su questa applicazione ti renderai immediatamente conto del perché esistono le migliori pratiche e di essere illuminato.
Jimmy Hoffa,

5
@KaiQing, Angry Birds deve funzionare su più piattaforme e se il gioco si blocca per 2 secondi x% del pubblico si arrenderà, il che si traduce in y meno dollari per la gente di Angry Birds. Scommetto che è stato scritto molto, molto attentamente. Forse questo risponde alla tua domanda. Se il codice è solo per te, a chi importa cosa fai? Se ci sono soldi o altre persone in gioco, allora è meglio essere molto, molto attenti.
Charles E. Grant,

2
@KaiQing Nessuno può dirti la soglia per questo, è variabile da progetto a progetto e su ciascun progetto nel tempo. Numero di variabili che influenzano la soglia tra il sistema che è gestibile e non si basa su: LOC, Base utente, Base sviluppatore, Tipo di applicazione (crittografia vs. crud vs. driver), Robustezza delle funzionalità, Requisiti di ridondanza, Criticità del software (server di posta elettronica vs dispositivo di supporto vitale contro widget orologio), piattaforme supportate, stack tecnologico, quantità di dati oggetto di transazione o analisi, vincoli di audit storici e molte altre cose influiscono su quanto può essere un codice
errato

18

C'è una vecchia saggia citazione: "Non seguire le orme dei vecchi saggi. Cerca quello che cercavano." Vi sono ragioni per tutte le regole della codifica "corretta". Sapere perché esistono queste regole è più importante che sapere quali sono quelle regole.

C'è una regola che non si dovrebbe mettere un test che potrebbe essere ricalcolato ripetutamente in un ciclo for in questo modo. Nei casi in cui la regola è stata inventata per porre rimedio (dove le prestazioni sarebbero davvero diverse), ha senso. In quel caso, c'è solo una risposta giusta. Nel tuo esempio, è noto che non ci sono differenze di prestazioni e che non possono esserci più di una dozzina di iterazioni. In questo caso, ci sono due risposte giuste, o per applicare comunque la regola, poiché è semplice e non danneggerà nulla e potrebbe aiutare a formare buone abitudini, o ignorare la regola, poiché non c'è alcuna differenza di prestazione di cui preoccuparsi.

Preferisco la prima risposta giusta e sembri preferire la seconda. Non ti sbagli. Penso che tu abbia torto nella tua idea di quale sia la "corretta" programmazione. Non si tratta di seguire una serie di regole scelte casualmente che non ti aiutano e non hanno alcuno scopo. Il fatto di non correggere il ciclo for nell'esempio sta effettivamente seguendo un'ottima regola contro l'ottimizzazione prematura.

Una vera programmazione adeguata riguarda il seguire buone regole che abbiano un senso in modo intelligente.


Non direi che preferisco il secondo. Qualcuno ha modificato il mio post per rimuovere la parte della mia realizzazione di questo gioco Android quasi interamente ubriaco (solo per divertimento) e di conseguenza sono sorpreso di vedere che le mie scelte da ubriaco non hanno fatto alcuna differenza in termini di prestazioni. Ho sostituito alcune strane classi con quelle giuste da testare. Concordo però sul fatto che conoscere le regole esiste è più importante che sapere quali sono le regole ...
Kai Qing,

Inoltre, la mia idea di programmazione "corretta" è il culmine delle opinioni ripetitive della comunità dello stackoverflow, nonché della raccolta di programmatori che sono venuti e venuti nell'azienda per cui lavoro. Alcuni con gradi CI, alcuni autodidatta. C'è un'opinione comune su cui basare le cose e tendo ad essere d'accordo con ciò che tutti dicono collettivamente prima di decidere che un modo è giusto e un modo è sbagliato. Grazie per aver partecipato.
Kai Qing,

1
Se sembrava che ti stessi dicendo di aver infranto le regole, allora l'ho espresso male. Nessuna delle cose di cui hai parlato di fare sono cose a cui mi oppongo. Stavo cercando di sottolineare che lo "spirito della legge" è più importante della "lettera della legge".
Michael Shaw,

Heh, no, non pensavo che mi avessi staccato. Stavo solo comunicando. Ho fatto questa domanda per un motivo e sono contento che molte persone abbiano risposto senza votarlo chiuso.
Kai Qing,

10

Il modo corretto di esaminare ciò è la diminuzione dei rendimenti: confrontare il vantaggio aggiunto dello sviluppo del programma con il costo dello sviluppo aggiuntivo.

I rendimenti decrescenti si verificano quando il vantaggio marginale è inferiore al tempo / sforzo marginale.

Puoi creare un caso aziendale per items.lengthuscire dal forcircuito? Economicamente, quel cambiamento può persino giustificare il tempo impiegato a giustificarlo? Poiché non vi è alcuna differenza nell'esperienza utente, non otterrai mai nulla nemmeno per il tempo trascorso a misurare (a parte una lezione utile da ricordare). Gli utenti non apprezzeranno il programma più di quanto non facciano loro e non verranno vendute più copie a seguito di tale modifica.

Questo non è sempre facile da valutare, perché i casi aziendali sono pieni di incognite e rischi, e sono quindi suscettibili di cadere in preda a fattori non considerati che diventeranno evidenti solo col senno di poi. Le modifiche proposte possono essere completamente non banali, in modo tale da fare una grande differenza.

Il tipo di pensiero a ritorni decrescenti può equivalere a una caccia alle scuse per non agire, ed evitare di correre rischi, che a posteriori potrebbe rivelarsi una serie di opportunità mancate.

Ma a volte è ovvio quando non fare qualcosa. Se qualche pezzo di sviluppo sembra richiedere un miracolo economico solo per pagare il costo dello sviluppo (pareggio), è probabilmente una cattiva idea.


Molto ben scritto Nel mio caso non è mai stato previsto un ritorno. Qualsiasi ritorno può essere casuale, ma non dovrebbe essere respinto poiché penso che alcuni dei maggiori successi siano iniziati come un colpo di fortuna. In termini di lavoro del cliente, in cui non sono in gioco tanti soldi in quanto potrebbe esserci solo un aggravamento se l'app si blocca o qualcosa diventa un piccolo inconveniente, è una soglia più spessa. Se i benchmark sembrano buoni, ma è noto che il codice non è il più efficiente, allora nessuno verrà mai a controllarlo prima dei tempi di avanzamento del codice e forse richiederà comunque una migrazione ... difficile da dire su quello.
Kai Qing,

Infatti. Non possiamo sempre presentare una sorta di caso oggettivo. Non tutti danno valore al programma allo stesso modo. Supponiamo che l'utilità principale nel programma sia il piacere di lavorarci sopra. Questo potrebbe non essere di alcun beneficio per nessun altro e nessuno pagherà per i miglioramenti (se anche ci sono utenti oltre al programmatore), ma è sufficiente giustificare il miglioramento in alcun modo.
Kaz,

Due parole utili da aggiungere alla tua risposta ben scritta - "Investimento speculativo" - lo fai perché speculi che ci sarà un ritorno in futuro.
mattnz,

@mattnz - quello che dici è vero in quanto nessuno fa qualcosa per nessun ritorno, anche se il ritorno è una bella risata. Quasi tutti i miei progetti personali sono realizzati per l'umorismo. Quasi tutti fanno abbastanza per giustificare le loro esigenze. Nessuno di loro mi ha permesso di smettere.
Kai Qing,

Esatto, tutti quanti. Quindi prima determiniamo cosa speriamo di uscire dalla stesura di questo programma o dal continuare a farlo. Quel qualcosa potrebbe essere "passare il tempo in modo che sia divertente". Ma anche allora, possiamo pensare: lavorare su qualcosa del genere in un programma del genere è il modo migliore per ottenere il massimo divertimento o dedichiamo del tempo a qualcos'altro.
Kaz,

3

Quando non dovresti preoccuparti che il tuo codice sia "corretto"

  • Se riesci a rispondere all'obiettivo aziendale e a mantenerlo nel tempo con bassi costi generali. (gli utenti non visualizzano la fonte prima di pagarti)
  • MVP / POC - Se scrivere un codice corretto significa perdere tempo su un concetto prima di sapere come guadagnare da esso (se spendi anni e 45 milioni di dollari scrivendo la tua app e finisci per chiudere il negozio perché non aveva mercato, a nessuno importa come era proprio il codice)
  • Quando si trovava in una situazione pericolosa per la vita (ad esempio iron man prototipo 1 era un trucco sporco, ma lo ha portato fuori dalla caverna giusto?)
  • o se semplicemente non sai come scrivere il codice corretto (se somene riesce a guadagnarsi da vivere scrivendo un codice non corretto, nella disoccupazione di oggi, dico, è meglio scrivere codice cattivo piuttosto che essere senzatetto)
  • se sai semplicemente cosa stai facendo o pensi di poterla fare finta di farlo

Quando scrivere il codice corretto

  • Se avrà un impatto aziendale significativo, ad esempio le prestazioni influiranno sulle entrate o impediranno le vendite
  • Se non è così corretto che il mantenimento del codice diventa un problema aziendale (elevati costi di manutenzione)
  • Se sei un programmatore noto che sta lavorando a un grande progetto open source
  • Lo stesso vale per una grande azienda che contribuisce al mondo con una biblioteca interna
  • Se vuoi mostrare il tuo lavoro come portfolio in future interviste

1
Purtroppo ce n'è un altro nella lista che non si preoccupa di essere corretta che molte persone hanno la fortuna di non sapere: quando un cliente vomita un vecchio sistema nelle tue cure e ti dice che ne hanno bisogno in una settimana. A volte il tempo e / o il budget non si prestano alla corretta codifica e la tua attenzione al progetto è più una grazia che una transazione commerciale. Ad esempio, se il loro codice utilizza metodi ampiamente deprecati ma necessita di alcune patch (parlando in uno scenario web). Non posso aggiustare il tutto. Deve sporcarsi.
Kai Qing,

"Se non è così corretto che mantenere il codice diventa un problema aziendale (alti costi di manutenzione)." Questa soglia è in realtà considerevolmente inferiore a quella che molti sviluppatori inesperti sono inclini a credere. Scrivere codice solido spesso si ripaga in poche ore, non giorni o mesi.
PeterAllenWebb,

2

Le prestazioni sono la tua principale preoccupazione? È quello che stai cercando di massimizzare?

In tal caso, c'è una lezione fondamentale da imparare e, se lo fai, sarai uno dei pochi.

Non cercare di "pensare" a cosa dovresti fare per renderlo più veloce - è una supposizione. Se stai chiedendo "Dovrei usare questa classe di contenitori o quella?" O "Devo mettere lengthla condizione del ciclo?", Sei come un dottore che vede un paziente e cerca di decidere quale trattamento somministrare senza effettivamente interrogare o esaminare il paziente.

Questo è indovinare. Lo fanno tutti, ma non funziona.

Lascia invece che il programma stesso ti dica qual è il suo problema. Ecco un esempio dettagliato.

Vedi la differenza?


Direi che la mia unica preoccupazione era che nei miei test non ho notato differenze di prestazioni tra l'uso improprio e corretto dei tipi di dati per lo scenario specificato. Come nel tuo suggerimento, ho sovraccaricato la classe con più dati per vedere se era troppo poco per fare la differenza. Alla fine, entrambi si sono comportati allo stesso modo. Certo, sto solo realizzando un gioco di base di tipo RPG. Non è come un software bancario o qualcosa di complesso. Ma mi ha fatto chiedermi se sarebbe meglio per le aziende non essere sempre così appropriate.
Kai Qing,

Poiché la performance è la tua preoccupazione, dovresti chiedere al programma cosa dovresti guardare, non chiedere se la tua domanda preconcetta fa la differenza. Fai clic su questo link e fai quello che dice. Ti dirà in che cosa sta trascorrendo davvero il programma, e questo ti dirà come renderlo più veloce.
Mike Dunlavey,

Bene, la prestazione è stata la mia base per la procedura di interrogatorio, non necessariamente una preoccupazione. Non sto cercando un benchmark per dire. Osservare semplicemente che il codice inefficiente non ha fatto alcuna differenza nelle prestazioni. È essenzialmente trasparente all'utente quanto fosse efficiente o inefficiente il programma, rendendo quindi irrilevante la preoccupazione per tale profilazione. Certo, ho dovuto preoccuparmi di fare un benchmark in primo luogo, ma era soprattutto curiosità. E se il prodotto è finito ed è notevolmente lento, allora sì, un profiler ha un senso. Grazie per il link
Kai Qing,

2

La tua domanda è "finché finirà il lavoro, non mi interessa?"

La mia risposta è "non sai mai cosa succederà al tuo codice". Sono stato coinvolto in così tanti progetti che sono iniziati come "hey fammi scrivere questa cosa veloce per occuparmi del problema di un utente". Scrivilo, mettilo là fuori, non pensarci mai più.

Una volta, quella cosa che ho scritto si è trasformata in "oh, ora l'intero dipartimento dell'utente vuole usare quel codice", che prima che potessi girare è diventato "l'intera società sta usando quel codice e ora devo dimostrare che sopravviverà a un audit e domani è prevista una revisione del codice di 20 persone e alcuni vicepresidenti lo hanno già venduto ai nostri clienti ".

Mi rendo conto che stai "scrivendo un gioco Android nel tuo tempo libero" ma non sai mai se quel gioco decollerà e diventerà il tuo biglietto per fama e fortuna. Peggio ancora, quel gioco potrebbe diventare il tuo biglietto per l'infamia perché continua a mandare in crash i telefoni delle persone. Vuoi essere la persona che riceve un'offerta di lavoro perché i figli di qualcuno non riescono a smettere di giocare sui loro telefoni o vuoi essere la persona che viene vilificata su bacheche come questa?


1

La risposta è che non importa mai, e importa sempre ...

Non importa mai perché la programmazione, corretta o no, è un modo per raggiungere un obiettivo, non un obiettivo in sé. Se questo obiettivo viene raggiunto senza una programmazione "corretta", va bene (dal punto di vista aziendale è spesso meglio se l'obiettivo può essere raggiunto senza alcuna programmazione).

Importa sempre perché una corretta programmazione è uno strumento che ti aiuterà a raggiungere i tuoi obiettivi. Il modo corretto di fare le cose è semplicemente il riconoscimento che farlo in un altro modo provoca più dolore a lungo termine di quanto non risparmi.

Che risponde alla domanda su quando puoi ignorarlo - quando sei sicuro che un altro modo sarà più facile a lungo termine (forse perché non ci sarà lungo periodo).

Gli strumenti una tantum vengono generalmente eseguiti il ​​più rapidamente e sporco possibile, con un controllo degli errori minimo o nullo o altra convalida, nessuna registrazione delle eccezioni, codice cut-n-paste con modifiche minori o addirittura nessuna modifica invece di funzioni generiche, e così via .

Fai attenzione: a volte quelle app veloci e sporche prendono vita da sole, il che significa che tutte le scorciatoie ti mordono nel ...


1
"mai" e "sempre" si annullano a vicenda. Rendi la tua risposta sia buona che cattiva.
Tulains Córdova,

@ user1598390: il punto era cancellarsi a vicenda. Annulla il dogma e rimarrai come sembra utile. E sbaglierai e imparerai da quello.
jmoreno,

Voglio dire che sono d'accordo con te ma non lo avrei portato a tali estremi. Non penso che una sola volta venga semplicemente sputata, sfuggendo ai test o al debug. Solo perché non è ottimizzato e progettato perfettamente non lo rende un prodotto in meno se le prestazioni e la stabilità non sono influenzate dalla scorciatoia. Quale è in definitiva il mio punto e perché mi chiedo perché tutti facciano un tale puzzo su esempi di codifica che non sono al top della linea. Succede molto su StackOverflow.
Kai Qing,

@KaiQing: i test e il debug avvengono ovviamente, ma sono generalmente limitati a ciò che esiste al momento - quindi, ad esempio, se il processo potrebbe non riuscire con un file con una codifica UTF e nessuno dei file su cui stai effettivamente lavorando fai, non lo metti alla prova. L'ottimizzazione dovrebbe essere eseguita quando è stato identificato un problema di prestazioni. Per quanto riguarda il motivo per cui una puzza su esempi di codifica non di punta su SO - Penso che sia una funzione degli obiettivi del sito. Ha lo scopo di essere una risorsa permanente, il codice nelle risposte (e persino le domande) sono quindi considerati come se fossero un modello che gli altri usano.
jmoreno,

1

O anche qualcosa di banale come questo:

for(int i = 0; i < items.length;i ++) {
     // do something 
}

So che valuta item.length su ogni iterazione. Tuttavia, so anche che gli articoli non saranno mai più di 15-20 articoli. Quindi dovrei preoccuparmi se valuto items.length su ogni iterazione?

In realtà nel codice finale, items.length non verrà valutato in ogni iterazione perché il compilatore lo ottimizza. E anche se non lo fosse, la lunghezza è un campo pubblico nell'oggetto array; accedervi non costa.

Quindi immagino che la mia domanda per te sia questa: esiste una soglia quando non è più> importante essere corretta? Va bene dire: "Fintanto che fa il lavoro, non mi interessa?"

Dipende davvero da cosa ti aspetti dal tuo prodotto finale; la differenza tra un prodotto medio e un ottimo prodotto si basa sui dettagli. Un'auto come Tata Nano e un'auto come Mercedes S "fanno il lavoro" - ti porta da un posto all'altro. La differenza sta nei dettagli: potenza del motore, comfort, sicurezza e altro. È lo stesso con qualsiasi prodotto esistente, compresi i prodotti software; ad esempio perché qualcuno dovrebbe pagare a Oracle, IBM o Microsoft per database Oracle, DB2 o MS SQL Server poiché MySQL e Postgre sono gratuiti?

Se vuoi prestare attenzione ai dettagli e ottenere un prodotto di alta qualità, dovresti preoccuparti di queste cose (e di altre cose, ovviamente).


Non penso di essere d'accordo con quello però. Nel mio post non menziono alcuna differenza nelle prestazioni. Ciò suggerirebbe che non esiste un prodotto medio o ottimo, ma un equilibrio uguale nonostante le carenze di uno. Concordo con la tua affermazione, tuttavia, se ci fosse un progetto specifico di grande importanza che stavamo tutti usando come confronto. Ma astrattamente, l'osservazione generale è che in questo progetto anonimo, una classe decisamente inefficiente si è comportata allo stesso modo con una ottimizzata. Quindi, va bene adottare un atteggiamento rilassato su questo o discutere ogni volta la perfezione?
Kai Qing,

@Kai Qing Una singola classe non fa (o non dovrebbe) fare molta differenza. L'ho detto: se ti aspetti che il tuo prodotto sia un prodotto di alta qualità, presta attenzione ai dettagli (anche se ciò significa una possibile piccola ottimizzazione o un design accurato); d'altra parte se l'unica cosa che desideri è un sistema funzionale, probabilmente non dovresti prestare molta attenzione ai piccoli dettagli.
m3th0dman,

Sì, hai ragione, non dovrebbe fare la differenza anche se solo una piccola attenzione è posta nel suo design. Ma può fare la differenza a seconda del suo scopo o se in generale il suo scopo si è trasformato nel tempo e è diventato qualcosa che non doveva essere. L'ho visto prima, ma sto solo andando su una tangente qui. Ad essere onesti, un prodotto può essere di alta qualità senza essere altro che funzionale.
Kai Qing,

1

Se stai programmando a casa per te, forse puoi tagliare alcuni angoli; e quando stai sperimentando e provando le cose questo è completamente giustificato.

Comunque abbi cura di te. Nell'esempio che dai non c'è davvero bisogno di tagliare quell'angolo, e devi stare attento. Questo potrebbe iniziare una tendenza e cattive abitudini che fai a casa potrebbero insinuarsi nel tuo codice di lavoro. Molto meglio esercitarsi e migliorare le buone abitudini a casa e lasciare che penetrino nel tuo codice al lavoro. Ti aiuterà e aiuterà gli altri.

Qualsiasi programmazione tu faccia e ogni pensiero che fai sulla programmazione è esercizio. Rendilo utile, altrimenti tornerà e ti morderà.

Guarda il lato buono però. Hai chiesto questo, quindi forse sei già a conoscenza del punto che sto sollevando.


1
Sì, lo so, ma il punto della domanda è soprattutto che nel contesto più piccolo e contenuto non sembra esserci una ragione per essere così appropriata. In tutti i miei anni di programmazione, non ci sono stati molti tentativi di morderci. Dubito che siamo così corretti. Penso che le lingue e le aspettative cambino come un normale software. Alcuni meno di altri. Ma alla fine l'inefficienza di un progetto può essere realizzata solo quando il progetto è passato e non è più essenziale. Rende difficile giustificare il mal di testa di essere così rigido.
Kai Qing,

Questo è un punto giusto. Le regole di oggi possono essere le restrizioni di domani. Non mi piace sentirmi dire cosa fare, ma ho rispetto per gli altri che sono andati prima e hanno imparato a fatica. A volte però può essere interessante scoprire quali regole sono utili e quali sono ormai passate la data di scadenza.
Daniel Hollinrake,

1

Se un produttore di mobili stava realizzando un mobile da utilizzare laddove la qualità non era della massima importanza o dove la qualità poteva passare inosservata, dovrebbero comunque cercare di rendere i loro tagli dritti e fare un lavoro adeguato unendo i pezzi?

Molte persone vedono il software come arte. Ciò che costruiamo non dovrebbe solo svolgere una funzione, deve essere affidabile, mantenibile, robusto. La realizzazione di tale software richiede abilità e tale competenza deriva dalla pratica.

Quindi, anche se la scelta di un costrutto a ciclo continuo per ciò su cui stai lavorando oggi potrebbe non avere importanza, il fatto che ti sforzi di usare i costrutti adeguati in ogni momento, ti renderà nel tempo un programmatore migliore.


Ho riscontrato istanze nella programmazione in cui il codice non doveva essere mantenibile o funzionare al di fuori delle esigenze. Come i programmi di utilità per chioschi per fiere o eventi molto specifici e che probabilmente non verranno riutilizzati. Nel caso del mio gioco, sono l'unico a mantenerlo, quindi tale argomento potrebbe non essere il più applicabile. Ho ancora dubbi sulla prospettiva comune di "miglior programmatore" perché la rigida aderenza alle linee guida, la manutenibilità e il corretto utilizzo dei tipi di dati possono essere abbastanza scoraggianti da non completare il progetto. Se il codice funziona come previsto, perché perfezionarlo?
Kai Qing,

Anche se il software che stai costruendo right_now non ha bisogno di essere mantenuto, scrivere il software come se rafforzasse le tue capacità di programmazione. Quando alla fine devi scrivere codice gestibile, sarai in grado di farlo più facilmente.
Bryan Oakley,

Devo scrivere sempre un codice gestibile. Solo in alcuni casi non deve essere. Tuttavia, ho molta esperienza, quindi in genere so quando e dove tagliare gli angoli. Il punto di questo post è stato solo quello di suscitare una conversazione sulla soglia del proprio e sciatta per qualsiasi scopo. Il mio esempio lo sfiora solo leggermente poiché l'esempio fornito è per lo più innocuo in un'applicazione più piccola. Tuttavia, se scrivessi un software bancario non sarei mai così imprudente.
Kai Qing,
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.