martedì 24 marzo 2015

Senti la saggezza dei vostri anziani di programmazione, o subire le conseguenze di codice fondamentalmente errata

In un episodio 1.06 della serie HBO "Silicon Valley", Richard, il fondatore di una startup, entra in un vicolo cieco e si rivolge per aiuto a un ragazzo che sembra 13 o 14.

Il ragazzo genio prende uno sguardo a Richard e dice: "Ho pensato che saresti più giovane. Cosa sei, 25? "

Tutti gli occhi sul API
Una volta che un umile cornice per lo sviluppo di software real, progettazione API sta affermando la propria identità, con una pletora
LEGGI ORA
"26," Richard risponde.

"Yikes".

L'industria del software venera il giovane. Se avete una famiglia, sei troppo vecchio per il codice. Se si sta spingendo il 30 o anche 25, si è già oltre la collina.

Ahimè, i whippersnappers non sono sempre la soluzione migliore. Mentre i loro cervelli sono pieni di dettagli circa i più recenti, architetture trendy, quadri, e pile, non hanno l'esperienza fondamentale di come il software funziona davvero e non. Queste esperienze vengono solo dopo molte settimane perdute di frustrazione a carico di insetti strani e inspiegabili.

Come gli spettatori di "Silicon Valley", che entro la fine dell'episodio 1.06 avere la soddisfazione di vedere il crollo ragazzo genio e bruciano, molti di noi graybeards programmazione godono un pochino di schadenfraude quando coloro che ci hanno ignorato per essere "passato il nostro prime "finire con un mucchio fiammeggiante di codice semplicemente perché non hanno ascoltato i loro anziani di programmazione.


Nello spirito di condivisione o di agitare semplicemente un dito saggio ai giovani ragazzi, ancora una volta, qui ci sono diverse lezioni che non possono essere imparate saltando sulle ultime treno hype per un paio di settimane. Essi sono noti solo ai tizi che hanno bisogno di due cifre esadecimali a scrivere la loro età.

Questioni di memoria

Non è stato molto tempo fa che RAM del computer è stata misurata in non megabyte gigabyte. Quando ho costruito il mio primo computer (a Sol-20), è stata misurata in kilobyte. C'erano circa 64 chip di RAM su quel bordo e ognuno aveva circa 18 pin. Non ricordo il numero esatto, ma ricordo saldare ogni ultimo uno di loro me stesso. Quando ho incasinato, ho dovuto risaldare fino al test della memoria passata.

Quando si passa attraverso i cerchi del genere per la RAM, si impara a trattarla come l'oro. I bambini di oggi allocare RAM a destra ea sinistra. Lasciano puntatori penzoloni e non puliscono le loro strutture di dati, poiché la memoria sembra a buon mercato. Sanno fanno clic su un pulsante e l'hypervisor aggiunge un altro 16 GB all'istanza cloud. Perché qualcuno dovrebbe programmare cura oggi di RAM quando Amazon affitteranno un'istanza con 244GB?

Ma c'è sempre un limite a quello che farà il garbage collector, esattamente come c'è un limite a quante volte un genitore ripulire la vostra stanza. È possibile assegnare un grosso mucchio, ma alla fine è necessario ripulire la memoria. Se sei uno spreco e correre attraverso RAM come i tessuti di stagione influenzale, il garbage collector potrebbe cogliere fino macinazione attraverso quella 244GB.

Poi c'è il pericolo di memoria virtuale. Il software verrà eseguito da 100 a 1000 volte più lento se il computer esegue di RAM e comincia lo swapping su disco. La memoria virtuale è grande, in teoria, ma più lento di fanghi in pratica. I programmatori di oggi devono riconoscere che la RAM è ancora prezioso. Se non lo fanno, il software che viene eseguito rapidamente durante lo sviluppo rallenta a passo d'uomo, quando la folla si presentano. Il tuo lavoro semplicemente non scala. In questi giorni, tutto è di essere in grado di scalare. Gestisci la tua memoria prima il software o il servizio cade a pezzi.

RECENTI JAVA HOW-TO s
grandi di dati grafici grafici user analisi donna
Imparare a macinare grandi dati con R
vacanza luci flusso di rete neuroni
Programmazione socket per sistemi scalabili
WebTools
Responsive web design con Google Web Toolkit
Le reti di computer sono lenti

La gente di marketing che vendono la nube piace fingere cloud è una sorta di calcolo cielo, dove gli angeli si muovono i dati con un lampeggio. Se si desidera memorizzare i dati, che sono pronti a vendere un semplice servizio Web che fornirà permanente, di storage back-up e non sarà necessario preoccuparsi mai su di esso.

Essi possono essere di destra in quanto potrebbe non essere necessario preoccuparsi, ma avrete sicuramente bisogno di aspettare per questo. Tutto il traffico in e fuori del computer richiede tempo. Le reti di computer sono drasticamente più lento del traffico tra la CPU e il disco rigido locale.

Graybeards Programmazione cresciuto in un'epoca in cui Internet non esisteva. FidoNet avrebbe percorso il messaggio chiamando un altro computer che potrebbe essere più vicino alla destinazione. I Suoi dati prenderebbero giorni a farsi strada in tutto il paese, starnazzare e fischi attraverso modem lungo la strada. Questa dolorosa esperienza ha insegnato loro che la soluzione giusta per funzionare come tanto di calcolo, come si può a livello locale e scrivere a un servizio Web remoto solo quando tutto è più piccolo e finale possibile. I programmatori di oggi possono prendere una punta da queste lezioni sudati del passato conoscendo, come i graybeards programmazione, che le promesse di cloud storage sono pericolosi e devono essere evitati fino all'ultimo millisecondo.

Compilatori hanno bug

Quando le cose vanno in tilt, il problema più spesso di quanto non si trova nel nostro codice. Abbiamo dimenticato di inizializzare qualcosa, o ci siamo dimenticati di controllare un puntatore nullo. Qualunque sia il motivo specifico, ogni programmatore sa, quando il nostro software cade, è il nostro errore stupido - periodo.

Come si è visto, gli errori più folli non sono colpa nostra. A volte la colpa è esattamente sul compilatore o l'interprete. Mentre compilatori e interpreti sono relativamente stabili, non sono perfetti. La stabilità di compilatori e interpreti di oggi è stata duramente guadagnati. Purtroppo, prendendo questa stabilità per scontato è diventata la norma.

POPOLARE SUL JAVAWORLD
Giava
Recensione: Il grande 4 Java IDE rispetto
sul bersaglio
Modelli di stabilità applicate in un'architettura RESTful
Diagramma di flusso Thinkstock
Java ME 8 e l'Internet delle cose
E 'importante ricordare anche loro possono sbagliare e considerare questo quando il debug del codice. Se non conoscete potrebbe essere colpa del compilatore, è possibile trascorrere giorni o settimane tirando fuori i capelli. I vecchi programmatori hanno imparato da tempo che a volte la strada migliore per il debug di un problema comporta il test non è il nostro codice, ma i nostri strumenti. Se si mette la fiducia implicita nel compilatore e non pensate ai calcoli che sta compiendo per rendere il codice, è possibile trascorrere giorni o settimane tirando fuori i capelli in cerca di un bug nel tuo lavoro che non esiste. I giovani ragazzi, ahimè, impareranno questo abbastanza presto.

La velocità conta per gli utenti

Molto tempo fa, ho sentito che IBM ha fatto uno studio su usabilità e ha scoperto che le menti delle persone inizieranno a vagare dopo 100 millisecondi. E 'vero? Ho chiesto a un motore di ricerca, ma Internet appeso e ho dimenticato di riprovare.

Chiunque mai usato vecchie applicazioni green-schermo di IBM collegato a un mainframe IBM sa che IBM costruito le sue macchine, come se questo 100 millisecondi soglia-mente errante era un fatto hard-wired nel nostro cervello. Essi corrosi sulla circuiteria I / O. Quando hanno venduto i mainframe, hanno rilasciato schede tecniche che contano il numero di canali I / O erano in scatola, nello stesso modo i produttori di automobili contano cilindri nei motori. Certo, le macchine si è schiantato, esattamente come quelli moderni, ma quando è andato bene, i dati volarono fuori dei canali direttamente agli utenti.

Ho assistito almeno una whippersnapper programmazione difendere un nuovo progetto AJAX-pesante che è stato impantanato da troppe librerie JavaScript e dati che fluiscono al browser. Non è giusto, spesso ribattono, di confrontare le loro innovazioni slow-as-fanghi con i vecchi terminali schermo verde che hanno sostituito. Il resto della società dovrebbe smettere di lamentarsi. Dopo tutto, abbiamo una grafica migliore e più colori nelle nostre applicazioni. E 'vero - il fresco, CSS-enabled tutto sembra grande, ma gli utenti odiano perché è lento.


Il vero Web non è mai veloce come la rete degli uffici

I siti web moderni possono essere maiali tempo. Spesso può richiedere diversi secondi per i megabyte di librerie JavaScript per arrivare. Poi il browser deve spingere questi megabyte multistrato attraverso un compilatore JIT. Se potessimo aggiungere tutto il tempo del mondo spende ricompilazione jQuery, potrebbe essere migliaia o addirittura milioni di anni.

Questo è un errore facile per i programmatori che sono innamorato di strumenti basati su browser che utilizzano AJAX ovunque. Tutto sembra grande in demo presso l'ufficio. Dopo tutto, il server è in genere sulla scrivania nel cubicolo. A volte il "server" è in esecuzione su localhost. Naturalmente, i file arrivano con lo scatto di un dito e tutto sembra grande, anche quando il capo verifica dal angolo ufficio.

Ma gli utenti su una linea DSL o alla fine di una connessione cellulare instradati attraverso una torre di sovraccarico? Stanno ancora aspettando le librerie per arrivare. Quando non arriva in pochi millisecondi, sono fuori di qualche articolo su TMZ.

Questioni complessità algoritmica

Su un progetto, mi sono imbattuto in problemi con un problema esattamente come Richard in "Silicon Valley" e mi sono girato verso qualcuno all'età bere sotto che sapeva Greasemonkey avanti e indietro. Ha riscritto il nostro codice e mandato indietro. Dopo la lettura attraverso i cambiamenti, mi sono reso conto di aver fatto sembrare più elegante, ma la complessità algoritmica è passato da O (n) a O (n ^ 2) . Fu attaccare dati in un elenco al fine di corrispondere le cose. Sembrava abbastanza, ma sarebbe ottenere molto lento come n ottenuto grandi.

Complessità algoritmo è una cosa che i corsi universitari in informatica fare bene. Ahimè, molti ragazzi delle scuole superiori non hanno scelto questo mentre l'insegnamento si Ruby o CoffeeScript in un week-end. Analisi della complessità può sembrare astruso e teorica, ma può fare una grande differenza come scala progetti. Tutto sembra grande quando n è piccolo. Esattamente come il codice può essere eseguito rapidamente quando c'è abbastanza memoria, algoritmi cattivi possono guardare scattante in fase di test. Ma quando gli utenti moltiplicano, è un incubo aspettare su un algoritmo che prende O (n ^ 2) o, peggio ancora, O (n ^ 3) .


Quando ho chiesto il nostro ragazzo genio se aveva intenzione di trasformare il processo di corrispondenza in un algoritmo quadratico, si grattò la testa. Non era sicuro di cosa stavamo parlando. Dopo aver sostituito la sua lista con una tabella hash, tutto andava bene di nuovo. Probabilmente abbastanza grande per capire ormai.

Le biblioteche possono succhiare

Le persone che scrivono le biblioteche non hanno sempre il vostro interesse a cuore. Stanno cercando di aiutare, ma sono spesso costruendo qualcosa per il mondo, non è il tuo piccolo problema fastidioso. Spesso finiscono per la costruzione di un coltellino svizzero in grado di gestire molte versioni diverse del problema, non qualcosa ottimizzato per il vostro problema. Questa è una buona tecnica e di grande codifica, ma può essere lento.

Se non si sta prestando attenzione, le biblioteche possono trascinare il codice in una palude lento e non sarà nemmeno saperlo. Una volta ho avuto un giovane programmatore deridere il mio codice perché ho scritto 10 righe di scegliere i caratteri di una stringa.

"Posso farlo con una espressione regolare e una riga di codice," si vantava. "Miglioramento Ten-to-one." Egli non ha considerato il modo in cui la sua una riga di codice dovrebbe analizzare e di analisi che espressione regolare ogni volta che è stato chiamato. Ha semplicemente pensato che stava scrivendo una riga di codice e stavo scrivendo 10.

Biblioteche e API possono essere grandi quando viene utilizzato in modo appropriato. Ma se sono utilizzati nei cicli interni, possono avere un effetto devastante sulla velocità e non si sa perché.

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.