Presupposti di programmazione errati e di lunga durata [chiuso]


281

Sto facendo delle ricerche sugli errori comuni e le ipotesi sbagliate fatte da ingegneri del software junior (e forse senior).

Qual è stata la tua ipotesi più lunga che alla fine è stata corretta?

Ad esempio, ho capito male che la dimensione di un numero intero non è uno standard e invece dipende dalla lingua e dal target. Un po 'imbarazzante affermare, ma eccolo qui.

Sii franco; quale ferma convinzione avevi e all'incirca per quanto tempo hai mantenuto l'assunto? Può trattarsi di un algoritmo, un linguaggio, un concetto di programmazione, test o qualsiasi altra cosa sulla programmazione, sui linguaggi di programmazione o sull'informatica.


Risposte:


545

Per molto tempo ho ipotizzato che tutti gli altri avessero questa super-padronanza di tutti i concetti di programmazione (modelli di progettazione, l'ultimo linguaggio nuovo, complessità computazionale, espressioni lambda, tu lo chiami).

Leggere blog, Stack Overflow e libri di programmazione mi è sempre sembrato di essere dietro la curva delle cose che tutti i programmatori devono solo conoscere intuitivamente.

Mi sono reso conto nel tempo che sto effettivamente confrontando le mie conoscenze con le conoscenze collettive di molte persone, non un singolo individuo e che è un livello piuttosto alto per chiunque. La maggior parte dei programmatori nel mondo reale ha una cache di conoscenza necessaria per svolgere il proprio lavoro e ha più di alcune aree di cui sono deboli o completamente ignoranti.


68
Così vero! Questo è il problema di questa età. Anche l'informazione è scoraggiante. Ho avuto questa rivelazione poche settimane fa quando mi sentivo un completo perdente in tutto ciò che ho fatto (non la prima volta) riguardo alla ricerca. I ragazzi che pubblicano i loro articoli in IEEE Transactions non hanno necessariamente le stesse competenze dei ragazzi che lavorano in Google, si vantano di StackOverflow, sono professori eccellenti o scrivono grandi blog di programmazione. Certo, i migliori ragazzi sono esponenzialmente più fighi di noi, ma non sanno tutto quello che sai di non sapere. Quindi stai calmo.
jbasko,

40
Aiuta anche a capire che quei blogger non stanno nemmeno scrivendo tutto in testa. I buoni blogger ricercano i loro argomenti e imparano cose nuove mentre scrivono post.
JohnFx,

47
Ogni giorno sono ossessionato dalle cose di cui non ho tempo per leggere e imparare. A volte mi lascia un senso di colpa orrendo.
Brad

9
@Zilupe: Amen a quello. Ho pubblicato alcuni giornali e riviste di conferenze internazionali. Agli occhi di alcune persone, sembrava fantastico. Fino a quando non ti sei reso conto che non ci vuole davvero molto sforzo per pubblicare un articolo. Non siamo un genio. Siamo proprio come tutti gli altri. Abbiamo fatto errori e pubblichiamo carte di merda. Bene, ad eccezione di un gruppo minoritario di veri geni ...
Hao Wooi Lim,

4
+1 Buona cosa ho letto questo. Pensavo di essere l'unico.
Randell,

308

Che la gente sapesse cosa voleva.

Per molto tempo ho pensato di parlare con le persone, avrebbero descritto un problema o un flusso di lavoro e lo avrei inserito nel codice e automatizzato. Viene fuori ogni volta che succede, quello che pensavano di voler non era in realtà quello che volevano.

Modifica: sono d'accordo con la maggior parte dei commenti. Questa non è una risposta tecnica e potrebbe non essere ciò che l'interrogatore stava cercando. Non si applica solo alla programmazione. Sono sicuro che non è nemmeno il mio presupposto più lungo, ma è stata la cosa più sorprendente che ho imparato in 10 anni brevi che ho fatto questo. Sono sicuro che sia stato puro ingenuo da parte mia, ma il modo in cui il mio cervello è / è stato cablato e l'insegnamento e le esperienze che ho avuto prima di entrare nel mondo degli affari mi hanno portato a credere che avrei fatto quello che ho risposto; che sarei in grado di usare codice e computer per risolvere i problemi delle persone.

Immagino che questa risposta sia simile a quella di Robin sulla comprensione / cura dei non programmatori di ciò di cui sto parlando. Si tratta di apprendere il business come un processo agile, iterativo e interattivo. Si tratta di imparare la differenza tra essere un programmatore di codice-scimmia ed essere uno sviluppatore di software. Si tratta di rendersi conto che esiste una differenza tra i due e che essere davvero bravi sul campo, non è solo sintassi e velocità di battitura.

Modifica: questa risposta è ora community-wiki per placare la gente turbata da questa risposta che mi dà rappresentante.


9
O cambia ciò che vogliono dopo aver visto ciò che desideravano in precedenza. Alla gente piace cambiare idea. Lo so, perché sono un popolo.
J. Polfer,

13
Stavi dando loro quello che chiedevano, non quello che volevano.
Brent Baisley,

47
Perché le noiose e senza risposte non controverse vengono votate così eccessivamente ?!
nes1983,

39
Wow. Sembra che qualcuno abbia bisogno di un abbraccio.
bzlm,

24
Mio dio @ gente che si lamenta, il rappresentante StackOverflow non è una competizione. Valuta se ti è piaciuta la risposta, non votare perché sei geloso di non averlo pubblicato per primo.
Dmitri Farkov,

292

Che io sappia dove si trova il problema delle prestazioni senza profilazione


10
Penso che sia per questo che l'ottimizzazione prematura è un luogo così comune.
Hao Wooi Lim,

10
+1 Caspita, qualcuno ha incluso una risposta non banale o fuori tema.
Mark Rogers,

3
Ho alcuni tablet che dovrebbero aiutare con l'ottimizzazione prematura ...
AndyM,

232

Che avrei dovuto avere solo un punto di uscita da una funzione / metodo.


91
Ottima realizzazione; uscire tutte le volte che è necessario. Si dovrebbe uscire da una funzione non appena non ha senso continuare ulteriormente in essa. In questo modo è possibile ridurre la complessità e aumentare la leggibilità, ad esempio evitando condizionali profondamente annidati, quando sono requisiti preliminari necessari per il corretto funzionamento del metodo. Nei linguaggi moderni con gestione della memoria e costrutti di risorse come l'utilizzo / infine, continuare fino alla fine di un metodo dogmaticamente non ha senso.
Triynko,

24
A proposito, chi l'ha inventato? È come una leggenda della programmazione urbana.
Brad

49
Le persone che devono eseguire il debug del codice di altre persone sono quelle che hanno inventato questo.
gatorfax,

23
Penso che questa idea comune ma sbagliata si basi su un malinteso. Quando si esce da una funzione, è necessario tornare sempre allo stesso punto. Questa era una regola importante in lingue come BASIC che non la applicava: la regola significava, ad esempio, che dovresti usare GOSUB invece di GOTO. In lingue come C # o Java che chiamano metodi, è automatico. Ma poiché è automatico, penso che si sia trasformato dal logico "solo un punto di ritorno" al non senso "solo un punto di uscita".
Ryan Lundy,

35
Da lingue come C dove è necessario rilasciare manualmente risorse. I punti di uscita multipli costituivano una buona possibilità per perdite di risorse. IMO non ha senso in lingue con eccezioni, poiché spesso non conosci più i tuoi punti di uscita o sono nel mezzo di un'affermazione. - In queste lingue, tutto ciò che rimane è "struttura per la leggibilità".
peterchen,

228

Che i non programmatori capiscono di cosa sto parlando.


243
capisci / cura ..
nickf,

8
Ne ho ancora uno a volte ... Pensavo che almeno mia moglie avrebbe iniziato a capire bene ormai: P
workmad3

3
Oh caro, temo che potrei ancora imparare questo!
thatismatt

3
sì, a volte dimentico il mio pubblico e finisco con un gruppo di persone con uno sguardo vuoto sulla loro faccia che mi fa scalpore, è bello quando la gente mostra un interesse però
Petey B

3
Questa è la mia più grande frustrazione per la professione.
Andres Jaan Tack,

219

Quel software privo di bug era possibile.


35
+1, sebbene la NASA ci sia quasi riuscita
Patrick McDonald,

55
Sì, ma il "quasi" costa qualche milione di dollari :)
Jem

15
@Triynko il tuo "possibile" e il "possibile" di JaredPar non sono gli stessi. Teoria e pratica potrebbero essere le stesse in teoria ma sono molto diverse in pratica.
Wilhelmtell,

13
@Joseph, parte del problema è che la gente pensa che i programmi Hello World siano privi di bug. Loro non sono. La maggior parte non verifica errori in printf, ad esempio, né tiene conto di altri tentativi IO falliti.
JaredPar,

9
@RussellH, no. Non è stato possibile specificare un valore di ritorno e il processo risultante restituirà una garbage memory casuale.
JaredPar,

199

Le variabili del membro privato erano private dell'istanza e non della classe.


192
Ho tenuto questa ipotesi fino a ... proprio ora.
TheMissingLINQ

9
@ebrown Di solito lo trovo utile solo quando scrivo un metodo equals ()
Dave Webb,

12
Sono in Ruby.
Mike Kucera,

17
Questo è così normale per me che questa risposta non ha avuto senso le prime volte che l'ho letta. Ora voglio imparare Ruby in modo che possa confondermi dall'altra parte. :)
jmucchiello,

16
@Kiewic Se hai una variabile membro privata chiamata myVar all'interno della tua classe, puoi fare riferimento a other.myVar direttamente nel tuo codice se other è un'istanza di questa classe. Avevo assunto perché era "privato" che dovevi usare other.getMyVar () anche all'interno della classe.
Dave Webb,

166

Pensavo che la digitazione statica fosse ferma sulla tastiera.


53
Sincero o no, questo mi ha fatto ridere forte alla fine di una lunga giornata di lavoro. : P
Olivier Tremblay,

5
++ per una bella risata. sembra qualcosa che mio marito (non tecnico) inventerebbe.
jess,

11
+1! Pensavo che anche la digitazione di anatre riguardasse la digitazione. O anatre. O entrambi.
SqlACID,

162

Che puoi comprendere appieno un problema prima di iniziare a sviluppare.


32
Questo, amico mio, dovrebbe essere: "Che tu possa comprendere appieno un problema". Ma è così vero. E apparentemente un concetto difficile da capire o persino accettare.
KarlP,

4
Non puoi capire il problema "completamente", ma sicuramente DEVI capire il problema (in una certa misura) prima di iniziare a sviluppare. bit.ly/kLXgL
OscarRyz

A volte devi iniziare a sviluppare per capire il problema. E / o, il problema cambia più si sviluppa.
Evan Plaice,

158

Le persone intelligenti sono sempre più intelligenti di me.

Posso davvero picchiarmi quando commetto errori e spesso mi viene sgridato per autoironico. Guardavo sbalordito molti sviluppatori e spesso supponevo che poiché sapessero più di me su X , sapessero più di me.

Mentre ho continuato a fare esperienza e incontrare più persone, ho iniziato a rendermene conto spesso, mentre loro conoscono più di me in una materia particolare, non sono necessariamente più intelligenti di me / te.

Morale della storia: non sottovalutare mai ciò che puoi portare in tavola.


Buona! Attualmente sto lavorando con un collega che conosce MOLTO sullo sviluppo di .NET. Mi ci è voluto un po 'di tempo per capire che sono più bravo a capire di cosa hanno bisogno i clienti.
Treb,

58
E d'altra parte, che conosco più di altre persone. Si scopre che sanno solo cose diverse. L'altra morale: non sottovalutare mai ciò che qualcun altro può portare sul tavolo.
giovedì giovedì

1
Ecco di nuovo la vecchia cosa "Fai agli altri" ... Sto coniando una nuova frase: Tech bullismo ~ Lo stato di sentirsi superiore perché conosci alcune cose e commetto l'errore di far sapere a tutti gli altri. @seealso: smartass.
corlettk,

1
Ottima osservazione - la mia versione è più negativa "Tutti fanno stupidi di tanto in tanto". In qualche modo correlato a "non capovolgere il bozo bit".
peterchen,

2
Devi preoccuparti solo quando le persone stupide sono più intelligenti di te.
Brad Gilbert,

131

Per molto tempo ho pensato che la cattiva programmazione fosse qualcosa che accadeva ai margini ... che fare le cose correttamente fosse la norma. Non sono così ingenuo in questi giorni.


30
Pensavo che la programmazione errata fosse stata eseguita solo da altri programmatori, fino a quando non sono stata eseguita da uno dei miei programmi errati. Ora faccio le cose correttamente! (Mi credi questa volta, vero?)
Jared Updike,

2
Totalmente. Sono passato da "Che non succede mai" a "Che non succede mai se non in questo lavoro" a "Ogni posto ha un codice errato".
Ryan Lundy,

1
L'hacking è la norma. L'ingegneria è di competenza del vero concorrente. Se mai incontrassi un ingegnere del software, te lo farò sapere.
corlettk,

3
@corlettk: Vuoi dire che la codifica delle scimmie è la norma, no? L'hacking è un'arte, un alto livello di arte, attenzione, che sono ben lungi dal realizzare.
hasen

2
@Hasen: No, l'hacking è un'analogia per portare abilmente un'ascia a un albero, scalpellare piccoli pezzi in un panico folle senza un vero piano e creare un gran casino sanguinoso fino a quando l'albero finalmente ti cade in testa. Un "hack" è "colui che produce un lavoro banale e mediocre nella speranza di ottenere un successo commerciale". Perché il campo informatico abbia cambiato "hack" in "abile", non lo saprò mai.
Lawrence Dol,

113

Ho pensato che avrei dovuto passare all'astrattismo il più possibile. Sono stato colpito alla testa con questo, a causa di troppe piccole funzionalità intrecciate.

Ora provo a mantenere le cose il più semplice e disaccoppiate possibile. Rifattorizzare per rendere qualcosa di astratto è molto più facile che prevedere come devo astrarre qualcosa.

Quindi sono passato dallo sviluppo del framework che li governa tutti, a frammenti di funzionalità che portano a termine il lavoro. Non ho mai guardato indietro, tranne quando penso al momento in cui ho ingenuamente pensato che sarei stato quello a sviluppare la prossima grande cosa.


26
Disaccoppiato = vera Astrazione. L'astratto per se stesso è ... ottimizzazione prematura.
Jared Updike,

1
Questo va di pari passo con quello che ho scoperto facendo il tuning delle prestazioni. Può esserci un bel programma con più livelli di astrazione. Quindi il carico di lavoro diventa pesante e indovina quanto costa continuamente ... tutte le astrazioni. I computer eseguono le istruzioni, non le astrazioni.
Mike Dunlavey,

5
Astrazione e generalizzazione sono strumenti potenti, purtroppo usati per generalizzare un caso d'uso astratto con un'unica implementazione. La cosa divertente è che ogni volta che è necessario cambiare l'implementazione, anche le astrazioni e le generalizzazioni devono cambiare ...
KarlP,

Sono totalmente d'accordo con Jared ... se sei riuscito a raggiungere il "semplice e disaccoppiato" hai raggiunto la vera astrazione. Come possono essere disaccoppiate le cose se non le hai estratte in interfacce, fabbriche ecc ...? Come può essere semplice se non si rimuove tutto il "if type = this then this this, or if the type is that then do then else code"?
Richard Anthony Hein,

Anch'io. Penso di aver imparato l'astrazione prima di fare un sacco di codice spaghetti. Avrebbero dovuto insegnare come fare le cose anche se il codice è spaghetti, e poi insegnarci su OO e astrazione.
hasen

103

Che le donne trovino i programmatori di computer sexy ...


70
Aspetta un secondo???
Çağdaş Tekin,

4
lui lui lui lui .. okey, stavo cercando qualcosa per mantenere il mio sorriso per il resto della giornata. Penso di averlo trovato !!! :)
OscarRyz,

17
"Ooh, piccola! Sì, dì" se "- lanciami alcune eccezioni .. Sì, sai come lo voglio": P
cwap,

5
Che cosa? I programmatori sono ricchi? Quando è successo?
Filip Navara,

3
Alcune donne (il giusto tipo) sono attratte da ragazzi intelligenti perspicaci. Che, meno la prototipica barba-collo e il budello di salsiccia, sono tratti piuttosto comuni dei programmatori. Spruzza un po 'di preoccupazione per l'immagine di te / igiene e l'eccitazione / eccitazione occasionali di sport estremi e sei sulla buona strada.
Evan Plaice,

100

Che la qualità del software porterà a maggiori vendite. A volte lo fa, ma non sempre.


37
Vendere software? È così 1999.
bzlm,

Molti siti web basati su abbonamento ora dicono ...
CG

11
Microsoft sicuramente lo uccide.
Bill Martin,

devo amare questo, così vero.
dott. male

18
Vorrei che il miglioramento della qualità / prestazioni del nostro software fosse considerato una funzionalità
Tom Leys,

82

Che tutte le lingue siano (principalmente) create uguali.

Per molto tempo ho pensato che il linguaggio scelto non facesse davvero la differenza nella difficoltà del processo di sviluppo e nel potenziale di successo del progetto. Questo non è assolutamente vero.

La scelta della lingua giusta per il lavoro è importante / critica come qualsiasi altra decisione sul singolo progetto che viene presa.


13
Sento che scegliere le librerie giuste è ciò che conta. Accade solo che spesso ci sia una corrispondenza 1 a 1 tra lingue e biblioteche ...
Kevin Montrose

7
Ma se due linguaggi di programmazione sono entrambi completi, allora qual è la differenza? Puoi scrivere qualsiasi programma in entrambe le lingue! ;)
Bill the Lizard,

8
Non sono d'accordo, la decisione su quale lingua usare è molto meno importante di chi realizzerà effettivamente il progetto. Come solo un esempio di molte altre decisioni più importanti.
Boris Terzic,

13
BrainFu ** è completo quanto Python.
hasen

9
Che le lingue complete di Turing siano in qualche modo ugualmente applicabili è un malinteso comune. Un linguaggio completo di Turing può calcolare tutto ciò che una macchina di Turing può (e spesso implicava anche il contrario). Non ci sono assolutamente implicazioni per quanto riguarda le prestazioni. Un'operazione che richiede tempo lineare in una lingua potrebbe benissimo impiegare tempo esponenziale su un'altra lingua e potrebbero comunque essere entrambe Turing complete. C'è un'enorme differenza tra ciò che è teoricamente calcolabile e ciò che è fattibile in pratica.
TrayMan,

81

Che un ampio rapporto commento / codice sia una buona cosa.

Mi ci è voluto un po 'di tempo per capire che il codice dovrebbe essere auto-documentato. Certo, un commento qui e là è utile se il codice non può essere reso più chiaro o se c'è un motivo importante per cui si sta facendo qualcosa. Ma, in generale, è meglio dedicare quel tempo al commento a rinominare le variabili. È più pulito, più chiaro e i commenti non vengono "fuori sincrono" con il codice.


1
Sono d'accordo nel codice attuale ... escluso commenti Javadoc (o equivalente).
corlettk,

11
+1, non farmi nemmeno iniziare con i trattati che scrivevo per 10 funzioni di riga
wds,

Per aggiungere a ciò, un'istruzione assert () è meglio che documentare una precondizione / postcondizione. Anche i contratti di codice .NET 4 possono essere automaticamente trasformati in documentazione!
Robert Fraser,

66

Quella programmazione è impossibile.

Non scherzando, ho sempre pensato che la programmazione fosse qualcosa di impossibile da imparare, e mi sono sempre tenuto lontano da esso. E quando mi sono avvicinato al codice, non sono mai riuscito a capirlo.

Poi un giorno mi sono seduto e ho letto alcuni tutorial di base per principianti, e da lì ho lavorato. E oggi lavoro come programmatore e adoro ogni minuto.

Per aggiungere, non penso che la programmazione sia facile, è una sfida e amo imparare di più e non c'è niente di più divertente che risolvere un problema di programmazione.


7
Amen! Ma, ehi, non proclamare questa vista dai tetti. Non vogliamo che tutti sappiano che la programmazione è divertente, ora lo facciamo? ;); P
Peter Perháč,

9
MasterPeter: Ci darebbe più foraggio per noi per aumentare il nostro rappresentante quando vengono qui a fare domande.
TheTXI

4
Direi che la programmazione è difficile da fare nel modo giusto . È, tuttavia, possibile, che sembra essere il tuo punto.
Steve S,

4
@Olafur: Perché vorresti che la domanda fosse wiki, ma non la tua risposta?
gnovice,

2
Questo rispecchia esattamente la mia esperienza. Vorrei aver iniziato prima: P
Skilldrick,

65

"On Error Resume Next" era una sorta di gestione degli errori


6
Ti sento ... ma in vbscript (in particolare asp), era l'unica opzione di "gestione degli errori" disponibile, combinata con il controllo giudizioso se si fosse effettivamente verificato un errore e una buona dose di preghiera.
flatline

2
Sì ... è un tipo ... solo un tipo da cui siamo felici di allontanarci
Matthew Whited,

6
Bene?! ma è. Inizi il blocco di gestione degli errori con On Error Resume Next, prova qualcosa e poi If (err.number <> 0) quindi
jpinto3912

Non è l'unico vbscript equivalente a un tentativo di cattura?
James,

-1: è un tipo di gestione degli errori. Non è poi così elegante.
JohnFx,

64

Quel software di programmazione richiede una solida base nella matematica superiore.

Per anni prima di iniziare a scrivere codice mi è sempre stato detto che per essere un buon programmatore devi essere bravo in algebra, geometria, calcolo, trigma avanzata, ecc.

Dieci anni dopo e ho dovuto fare una sola volta qualcosa che un alunno di terza media non poteva.


5
Verissimo. Nella maggior parte dei casi non è necessario essere un esperto di matematica. L'unica volta in cui ho davvero avuto bisogno di conoscere qualsiasi matematica avanzata è stato quando facevo la programmazione 3D come hobby. In effetti, è stata in realtà la programmazione 3D durante il liceo che mi ha ispirato a prestare maggiore attenzione nelle lezioni di trigiornali e pre-cal. Oltre a questo, però, la matematica di base è di solito tutto ciò che serve.
Steve Wortham,

29
Penso che tu sia stato male informato. Certo, per essere un buon programmatore , non hai davvero bisogno di usare matematica di livello molto più alto, ma per capire veramente e applicare alcuni concetti di informatica, avrai bisogno di qualcosa di più della matematica di terza media.
hbw

12
Penso che l'enfasi sulla matematica sia quella di insegnare le capacità di pensiero critico e la risoluzione dei problemi non come qualcosa che useresti ogni giorno nella programmazione del computer.
Zack,

14
Il tipo di astrazione di cui hai bisogno per comprendere la matematica avanzata è molto simile all'astrazione di cui hai bisogno per creare software.
OscarRyz,

6
Penso che i concetti di programmazione funzionale siano molto più facili da capire se hai basi più solide in matematica, semplicemente perché non sei spaventato tanto dalla sintassi. Sembra familiare. Ho fatto l'errore di usare semplici funzioni matematiche per dimostrare i concetti di programmazione funzionale nuovi in ​​C #. Alcune persone hanno immediatamente dichiarato che era troppo complesso.
Richard Anthony Hein,

63

Che ottimizzazione == riscrittura in linguaggio assembly.

Quando ho capito per la prima volta assembly (proveniente da BASIC) mi è sembrato che l'unico modo per rendere il codice più veloce fosse riscriverlo in assembly. Ci sono voluti alcuni anni per rendersi conto che i compilatori possono essere molto bravi nell'ottimizzazione e soprattutto con CPU con previsione delle succursali ecc. Possono probabilmente fare un lavoro migliore di quello che un essere umano può fare in un ragionevole lasso di tempo. Inoltre, spendere del tempo per ottimizzare l'algoritmo è probabile che ti dia una vittoria migliore rispetto al passare il tempo a passare da un linguaggio di livello alto a basso. Anche quell'ottimizzazione prematura è la radice di tutti i mali ...


8
Peek e Poke sono i tuoi amici :)
Matthew Whited,

4
Pervertito! Dillo al giudice!
Shalom Craimer,

1
È qui che entra in gioco la teoria della complessità. L'assemblaggio è generalmente micro ottimizzazione. Riducendo la complessità del tempo degli algoritmi, si ottiene la velocità.
PeteT,

@scraimer: Vorrei vederti qui, non me lo sarei mai aspettato ;-)
Robert S. Barnes,

@Matteo "Peek e Poke sono i tuoi amici :)": ** ESTREMAMENTE geloso non l'ho scritto per primo.
FastAl

63
  • Che i dirigenti dell'azienda si preoccupino della qualità del codice.
  • Che meno righe sia meglio.

2
a loro importa, ma devi combinare le abilità degli artisti con quelle dei lavoratori. Ogni pezzo di algoritmo non può essere anche un pezzo d'arte. Alcuni saranno plumper, quindi riutilizzare il "meno usato". Ricorda la vecchia regola 80/20. L'80% del programma viene utilizzato il 20% delle volte. Quindi concentrati sull'80% sul 20% del codice e realizza quel VERO PEZZO D'ARTE! : OP
BerggreenDK,

71
meno linee sono migliori! parte del motivo per cui non mi piace Java come linguaggio è che fare qualsiasi cosa occupa così tante righe di codice. meno righe di codice significa che è più facile cambiare il codice.
Claudiu,

7
Dipende da cosa stai rimuovendo per ottenere meno righe. Se il codice è ancora leggibile con meno righe, allora è buono. Tuttavia, ci sono molti modi per ridurre il numero di righe di codice che peggiorano il codice.
Herms,

2
Tranne quando le persone prendono la mentalità "meno linee è meglio" fino a che punto con il metodo incatenato chiama 7 in profondità in modo che quando uno di loro lancia un puntatore nullo, non hai idea di quale fosse. Oppure condensano così tante azioni in una riga che è lunga 150 caratteri ed esegue 4 operazioni. Ciò rende sia più difficile da leggere che più difficile da eseguire il debug, ma non è più veloce né utilizza meno memoria durante l'esecuzione.
Trampas Kirk,

17
Se la tua riga termina tra))))) e non stai scrivendo Lisp, hai troppe poche righe.

58

Direi che memorizzare l'elemento dell'anno di una data come 2 cifre era un presupposto che affliggeva un'intera generazione di sviluppatori. Il denaro investito su Y2K è stato davvero orribile.


1
Questa è l'unica risposta che voterò, anche se è un CW quindi non importa ...
Dan Rosenstark,

4
IIRC alcuni sistemi negli anni '60 e forse negli anni '70 usavano solo una cifra perché utilizzava meno memoria. Ho anche visto moduli cartacei in cui "196_" e "197_" sono stati prestampati.
circa il

3
Vedo ancora moduli con 200_ e presumibilmente ce ne sono alcuni ora con 201_ stampati.
Macha,

5
La parte triste è ... Unix avrà il suo secondo round in questo nel 2038
Evan Plaice

4
@Billy Solo perché l'architettura della macchina cambia non significa che il formato dei dati lo farà. Memorizzare 2 cifre di risoluzione in formato int renderebbe un formato data byte (8 bit) e, tuttavia, interesserebbe tonnellate di macchine con architettura hardware a 32 bit in 2k. Questo è solo un altro esempio del perché non permetti ai ragazzi hardware di basso livello di specificare i formati dei dati. Penny pizzicano i pezzi con la consapevolezza che ci sarà un SNAFU programmato in un lontano futuro.
Evan Plaice,

57

Che qualsiasi cosa diversa dall'inserimento / ordinamento a bolle era semplicemente magia oscura.


Haha, mi piace questo, che colpisce vicino a casa. Ordina più velocemente del tempo n-quadrato ?? Impossibile!
Ross,

È sorprendente come la maggior parte degli algoritmi di ordinamento siano semplici ed evidenti quando si ha una forte sensazione di ricorsione e divisione e conquista. Fino ad allora, la maggior parte di loro sembra magia nera.
Brian,

74
Sono un RICERCATORE di algoritmi di ordinamento! E si sentono ANCORA come una magia oscura.
SPWorley,

14
Una volta avevo una riga di codice nel mio programma che era lunga e complicata e non avevo voglia di romperla o spiegarla (era una formula di illuminazione complicata), quindi ho messo tutto su una riga e #define ' sarebbe DARK_MAGICK, e l'unico commento era un avvertimento contro il tentativo di svelare i misteri della magia oscura
Alex,

2
Bogosort è il più misterioso di tutti.
Alex Beardsley,

50

Quell'XML sarebbe un formato di dati veramente interoperabile e leggibile dall'uomo.


7
XML non è una panacea ma non vorrei tornare ai giorni in cui vedevo regolarmente applicazioni che cercavano di comprimere i dati relazionali in singoli file CSV.
Tony Edgecombe,

4
è una sintassi interoperabile, non c'è dubbio. È solo che la sintassi è spesso l'aspetto meno importante di qualsiasi soluzione.
Simon Gibbs,

2
+1, potresti aggiungere piccoli e veloci anche alla lista dei desideri.
MarkJ,

1
Vero ma un miglioramento rispetto a CSV e lunghezza fissa dove senza la documentazione si è fregati.
PeteT,

7
Amo XML per la standardizzazione che ha portato ai formati di dati e per la corretta gestione delle codifiche dei caratteri. Odio ciò che a volte viene fatto utilizzando XML, tuttavia.
Joachim Sauer,

48

Quel C ++ era in qualche modo intrinsecamente migliore di tutte le altre lingue.

Questo l'ho ricevuto da un amico un paio di anni prima di me al college. L'ho tenuto con me per un tempo imbarazzante (sto arrossendo proprio ora). Fu solo dopo aver lavorato con esso per circa 2 anni prima che potessi vedere le crepe per quello che erano.

Nessuno - e niente - è perfetto, c'è sempre spazio per migliorare.


5
"migliore" ti porterà tonnellate di commenti poco odiosi. Ma direi che è uno dei più veloci, flessibili, liberi da ostacoli. È anche uno che porta i tuoi giovani a impararlo correttamente, solo per scoprire che potresti fare più o meno la stessa app. (anche se richiede qualche tonnellata extra o due di carbone generatore di elettricità) con java o C #.
jpinto3912,

@JP: Sono contento della mia scelta di parole :)
Binary Worrier,

La produttività conta di più nel mondo delle applicazioni aziendali. ovviamente, ci sono alcune nicchie che è richiesto c ++ e l'unica opzione.
Shaw,

7
Ho sempre pensato che il C ++ fosse peggio del semplice ANSI C, semplicemente perché il tipo di problema che ho visto entrare nei programmatori C ++ è molto più complicato del tipo di problema che ho visto entrare nei programmatori C.
Nosredna,

1
In realtà, il linguaggio migliore di tutti gli altri è Common Lisp. C ++ non è male, però.
David Thornley,

47

Credevo che la creazione di programmi sarebbe esattamente come ciò che è stato insegnato in classe ... ti siedi con un gruppo di persone, vai su un problema, trovi una soluzione, ecc. Invece, il mondo reale è "Ecco il mio problema, ho bisogno di risolverlo, vai "e dieci minuti dopo ne ottieni un altro, non lasciandoti tempo reale per pianificare la tua soluzione in modo efficiente.


24
Penso che si chiami vita.
Robin Day,

9
hmmm .. è ora che salvi quella compagnia. ..
jpinto3912

8
@ jpinto3912: No. Perché anche la prossima compagnia farà parte della vita (vedi commento precedente).
Treb,

42

Ho pensato che i modelli di progettazione tradizionali fossero fantastici, quando sono stati introdotti in una classe CS. Avevo programmato circa 8 anni come hobby prima di allora, e non avevo davvero una solida comprensione di come creare buone astrazioni.

I modelli di design sembravano magici; potresti fare cose davvero ordinate. In seguito ho scoperto la programmazione funzionale (via Mozart / Oz, OCaml, in seguito Scala, Haskell e Clojure), e poi ho capito che molti dei modelli erano solo piatti o complessità aggiuntiva, perché il linguaggio non era abbastanza espressivo.

Naturalmente ci sono quasi sempre alcuni tipi di schemi, ma sono di livello superiore nei linguaggi espressivi. Ora sto facendo un po 'di codifica professionale in Java, e sento davvero il dolore quando devo usare una convenzione come modello visitatore o comando, invece di corrispondere al modello e funzioni di ordine superiore.


"molti dei modelli erano solo una calotta o ulteriore complessità, perché il linguaggio non era abbastanza espressivo". L'espressività è semplicemente un codice di targa cablato nella lingua.
Sconosciuto

4
Non è vero, come è possibile avere cose di prima classe invece di limitare le capacità di un programmatore, come nel caso di funzioni di ordine superiore. I lustrini ne sono un bellissimo esempio.
egaga,

38

Per i primi anni che stavo programmando non ho capito che 1 Kbyte era tecnicamente 1024 byte, non 1000. Sono sempre stato un po 'perplesso dal fatto che le dimensioni dei miei file di dati sembravano leggermente diverse da ciò che mi aspettavo essere.


114
I produttori di dischi rigidi non hanno ancora capito ...
Michael Myers

10
@mmyers Penso che intendi i marketer del disco rigido giusto? O le unità sono effettivamente costruite in quel modo?
Instantsoup,

16
Ehi, smetti di odiare il kibi. MeBi e KiBi sono almeno non ambigui.
bzlm,

21
Kilo significa 1000, Mega significa 1000000, Giga significa 1000000000. Sono i produttori di RAM e OS che hanno sbagliato, non i produttori di unità.
Mark Ransom,

39
Nessuno lo farà? Sul serio? Ok, lo farò ... xkcd.com/394
Erik Forbes,

36

Tale condizione verifica come:

if (condition1 && condition2 && condition3)

vengono eseguiti in un ordine non specificato ...


15
In che lingua? Linguaggi come C / C ++, Java e Python garantiscono che le condizioni siano valutate da sinistra a destra e che la valutazione si fermi alla prima condizione che restituisce false. Fa parte delle specifiche della lingua. Presumo che molte altre lingue offrano la stessa garanzia.
Clint Miller,

44
@Clint: Sì, quindi "si è rivelato errato".
bzlm,

sì, questo è bello. rende le cose wrint come se (myList! = null && myList.Count> = 0) {do stuff ();} molto più facile
Zack

4
in realtà, questo dipende dalla lingua e valuterà tutte le condizioni (non le scorciatoie). E ho visto molte persone usare And (&) in VB invece di AndAlso (&&)
Lucas,

2
. . . In realtà andrà in crash anche in VB.net a meno che non si usi il commento di AndAlso re Lucas
Binary Worrier,

35

Che la mia programmazione sarebbe più veloce e migliore se la eseguissi da sola.


Ma non può essere brutto come la programmazione in coppia :-) tranne forse il tuo codice
Egg

33
Tutto dipende dall'altra persona. =)
JohnFx
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.