Storie dalla Sala Macchine


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


Non Particolarmente Magnifico

A volte (facciamo sempre va), guardo i metodi di sviluppo software "moderni" e penso... ma che cazzo stanno facendo?

Ok, vediamo di spiegarci. Io sono cresciuto nei "vecchi" tempi, quando tutto quello che avevi era un computer davanti, dei libri o della documentazione sottomano e basta. Se volevi scrivere del codice, facevi scrocchiare le nocchie e cominciavi a digitare. E se ti venivano dei dubbi, dovevi solo acchiappare il librone con i comandi e cominciare a leggere.

"Domandare un'opinione o un suggerimento" in molti casi significava dover andare fisicamente da qualcuno, spesso trasciandosi dietro una paccata di floppy o un paio di scatoloni con l'ultimo printout del codice e "copiaincolla" di codice di esempio significava doverlo ridigitare in toto da una copia cartacea.

Se avevate bisogno di libreria di terze parti, dovevate prima di tutto OTTENERE le fottute librerie, il che molto spesso significava pagare per averle e poi aggiungerle al vostro progetto, ed una gran parte dello "sviluppo" di quel progetto era in fatti la creazione e manutenzione di una collezione di librerie e funzioni di utlita' che erano fatte su misura.

E poi fare copie di backup di tutto ovviamente.

Oggi... Il tipico sviluppatore lavora in genere cercando schifezze su StackOverflow, facendo copiaincolla di spezzoni di codice schifoso che molto spesso non funziona o non fa quello che gli serve, poi cerca ancora, altro copia-incolla, poi scarica una carrettata di immondizia da questo o quel sito (guardare come e' fatto il codice e' al di la' delle sue possibilita', dato che nella maggioranza dei casi non lo capisce ne' gli interessa di capirlo), e continua finche' il codice che ha messo insieme in questo modo sembra quasi che faccia quello che gli interessa. A quel punto dichiara finita la giornata e si trasferisce nel vicino baretto fico per un cappuccino e apparire fico con il macbook.

E poi ci si domanda come mai ci sono cosi' tanti bachi di sicurezza in cose inutili come routers, switches e software che e' usato da un baziliardo di macchine intorno al mondo.

Tanto tempo fa c'erano cose come Test & Debug, che richiedevano lunge e tediose sequenze di operazioni ripetute ogni volta che si voleva essere sicuri (o ragionevolmente certi) che le cose fossero in grado di funzionare. Queste procedure richiedevano prima di tutto il raccattare tutto il codice scritto da tutti gli sviluppatori, se erano piu' di uno ovviamente, quindi compilare il tutto. E di norma non si riusciva manco a finire la prima fase senza che qualche cosa andasse completamente in malora. Percui la prima fase era, capire perche' cazzo questa roba non si compila. Poi si procedeva con l'uso "normale", cioe' vedere se il codice fa quello che dovrebbe fare  poi l'uso "anormale", cioe' simulare quello che un gatto potrebbe fare se lasciato libero di scorrazzare sulla tastiera. Tutto questo per verificare che si fossero corretti i bachi che si volevan corretti e che non se ne fossero aggiunti ulteriori sempre nelle stesse cose. E poi si trattava di cercare di capire esattamente cose si fosse rotto tra la fase 1 e la 2. Tutto questo di solito richiedeva diversi giorni o addirittura delle SETTIMANE.

Oggi... Gli sviluppatori moderno non fanno "debugging" perche' non sanno neanche che cappero significa, e non fanno nemmeno 'testing', per quello hanno delle "procedure automatiche" che non falliscono mai perche' sono progettate per testare solo quello che si aspettano e non quello che non si aspettano ovviamente. Ecco perche' ci ritroviamo con nomi utenti e password hardwired e di default e nessuno controlla mai cosa la gente digita nei campi.

Ho detto che una larga parte dello sviluppo era costituito dalla costruizione e manutenzione di librerie e funzioni di utilita'? Spesso un'intero gruppo di sviluppatori era specificamente impiegato solo per questa attivita'. Ed ogni volta che c'era un aggiornamento di quella roba, tutto doveva essere ricompilato per essere sicuri che continuasse a funzionare. Ricordo che per risolvere un piccolo problema (uno spazio in una stringa), l'intero ufficio spese una settimana per ricompilare e ri-testare tutto, dato che il problema era in una libreria che era usata praticamente dappertutto.

Oggi... La procedura 'normale' e' sempre di scaricare dalla rete l'ultimissimissima versione di qualunque merda si stia usando. Gigabytes di roba per 'hello world'. Ed ovviamente, tutto e' fatto sul sistema di produzione. In questo modo non si puo' mai dire se il sistema di produzione usa la stessa versione di schifezze che tu stai usando sul tuo lapdog demmerda, e quando qualche cosa va' male, lo fa in modo catastrofico.

E dopo queste frizzanti reminescenze, parliamo di NPM.

Lo sapete che roba e' NPM, non mentite. E se veramente, VERAMENTE non lo sapete, siete fortunati. NPM sta per Node Package Manger. Che cappero e' Node? E' un "motore" javascript che e' usato da tutti gli sviluppatori "del giorno" per eseguire il loro codice che, in teoria, dovrebbe essere superefficiente e portatile. Ma non lo e'.

Ora, di solito, un linguaggio di programmazione e' sviluppato in tal modo che le funzioni e librerie di "base" sono.. hemm... alla base del linguaggio. E poi si possono espandere aggiungendo librerie extra. Per qualche strano motivo Javascript, nonostante sia in giro da quasi 30 anni, sembra che sia mancante di parecchie funzioni di base, e queste sono, ovviamente, sviluppate come librerie "esterne". Il che significa in pratica che ogni volta, per ogni progetto, bisogna scaricare dalla rete pezzi di codice che sono usati per migliaia di operazioni di base. Il che significa anche che se qualche cosa "entra" dentro quelle librerie, o "scompare" dalle stesse, sono dolori. E non si puo' prevenire perche' e' implicito nel modo come l'intero sistema e' organizzato.
Non dovrebbe essere una sorpresa quindi scoprire che il sistema che e' usato per gestire e mantenere le librerie usate da Node (i famosi Packages) sia nelle mani di un gruppo ufficiale costituito da note e rispettate universita' ed organizzazioni senza fini di lucro i quali hanno mandato di assicurare che le librerie contengano solo codice verificato ad i massimi standard per garantire la sicurBWAHAHHAHAHAHAAHAHHHAAHHHHHH....

No, scusate, vi sto perculando. No. Purtroppo. No.

Quello che costituisce sostanzialmente l'anima e la vita di un numero astronomico di progetti in tutto il fottuto mondo e' nelle mani di un branco di pagliacci che non hanno nessun sistema di controllo, non forniscono nessuna garanzia e, recentemente, hanno deciso di ottimizzare il loro "business" licenziando una pletora di sviluppatori.

Inoltre, pare che le qualifiche per aggiungere o rimuovere del codice da tutte quelle librerie siano anche piu' basse di quelle richieste per acquistare un'arma negli Stati Uniti (essere in grado di stare eretti e non sbavare troppo). Non e' passato tanto tempo quando una testa di cazzo di sviluppatore decise di rimuovere una paccata di roba dai repositori, provocando una catastrofe a livello mondiale con migliaia di applicazioni che hanno smesso di funzionare perche' non erano in grado di trovare le librerie che avrebbero dovuto usare.

A questo punto, voi potreste aspettarvi che nessuno con un grammo di cervello vorrebbe anche solo toccare con un bastone quella roba. Bene, quindi non conoscete $noifacciamosulserio. Un'altra societa' che cercava disperatamente di essere 'trendy'. Cosi' trendy che potevano solo usare le ultimissime cose.

Percui cominciarono a costruire questa... cosa... usando Node. Ovviamente.

Ed ovviamente applicarono le Magnifiche Eclettiche Regole Di Applicazione (merda), che significa: ogni volta che si fa un rilascio, per prima cosa si zappa via tutto, poi si scaricano tutti gli aggiornamenti di tutte le librerie (diversi gigabytes) e poi si scarica il codice dal repositorio. Poi si riavvia tutto e si prega che non ti scoppi in faccia.

Dopo un numero di "esplosioni", cominciarono ad essere un pelo irritati con questi dannati utenti, sapete, questo tipo di gente che solo perche' vi paga dei soldi buoni per il privilegio di farvi da beta-tester del vostro codice, pensano di poter pretendere cose come... no so.. che il software in effetti funzioni? E faccia quello che vogliono loro? Suvvia...
Ecco percui che domandarono il nostro aiuto per risolvere il problema.

Ok, uso i termini "domandarono" ed "aiuto" in modo molto generico, quello che in effetti successe e' che ci ordinarono perentoriamente senza mezzi termini che o sistemavamo il problema o se ne andavano. Ovviamente noi cominciammo subito a stappare lo spumante, perche' l'unico modo di "sistemare" il problema sarebbe stato quello di buttarli fuori dal sistema e non farceli piu' rientrare. Ed ovviamente il manglement non era molto propenso alla cosa. Loro erano piu' propensi a prendere dei soldi, dato che avevano appena speso un botto di quatrini per comperare tutte queste societa' che adesso portavano i loro clienti piu' scadenti dei quali non sapevamo che farci, dovevano in qualche modo recuperare l'investimento no?
Onde per cui si comincio' a far girare delle idee. Tipo: implementare un qualche tipo di sistema di controllo del codice e convincerli a fare dei TEST prima di zappare via tutto.

Io ci tenni a ricordare a tutti che $noifacciamosulserio usava gia' un sistema di controllo del codice nella forma di Git, e per quanto riguardava il 'testing'... questo era fatto (secondo loro) su ogni singolo fottuto laptop di ogni singolo fottuto sviluppatore, probabilmente con diverse versioni di ogni singola fottuta libreria che questi usavano nel loro sistema. E quindi 1. il fatto che vi sia un sistema di controllo del codice non implica che il codice funzioni, solo che sei in grado di prednere la versione precedente. O Una versione precedente. E 2. che i test automatici testano solo quello che gli programmi di testare, non possono di certo testare per cose inattese, il tipo di cose che i loro clienti per esempio possono fare.

E per ultimo, che zappare via tutto e riscaricare le ultime versioni e' un ottimo modo per avere roba indesiderata dentro al sistema. Al punto che l'intero ambiente dovrebbe essere considerato "non sicuro" per l'uso.

E mentre stavamo discutendo della cosa, arrivo' la novella che uno dei nostri sistemi stava sputando malware ed era coinvolto in un qualche DDOS. E chi pensate che fosse? Yep! Apparentemente l'ultimo giro di "rilasci" aveva scaricato dalla vastita' della rete anche qualche cosa che sarebbe stato meglio non scaricare. E prima che tu possa dire "uops" noi applicammo la Procedura Standard del caso: brucia tutto. Dopo di che, dato che vi era una chiara violazione di sicurezza, si comincio' una completa analisi dell'intera cosa. Analisi per la quale si domando' in sostanza "che cosa cazzo state usando e perche'".

E come potete immaginare, quelli non avevano idea di cosa il 90% del loro codice facesse o perche'.

La loro procedura standard era "questo codice (l'ho scaricato da CodeWarriors) richiede questa libreria di 600Mb, scarichiamola ed importiamola". Lascia perdere che quello che gli serviva era UNA funzione che probabilmente avrebbe potuto esssere realizzata con 20 linee di codice. Chissenefrega? Loro no di sicuro. In ogni caso, dato che la cosa era a quel punto nelle mani del Responsabile di Sicurezza, io trasformai NPM in NMP (Not My Problem). Non ho idea se abbiano mai finito la 'revisione del codice' e con quali risultati.

Davide
12/04/2019 16:11

Precedente Successivo

I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

10 messaggi this document does not accept new posts

Messer Franz

Di Messer Franz postato il 27/05/2019 09:33

Ammetto di aver usato delle volte codice da CodeGURU o StackOverflow (anche se cerco di capire che cacchio sto usando), ma tutto ciò mi fa pensare a quando dovevo lavorare sotto linux, che per fare la cosa X devi avere la libreria y, che è gratis, ma ha bisogno a sua volta della libreria Z, che è gratis, e devi compilarla con il programma W, che è gratis, e quindi potrai fare la cosa X. Poi, in genere dopo 3-4 ore di compilazione, salta fuori che uno qualsiasi degli anelli non è compilabile con il compilatore perchè è fatto per una versione vecchia, ma se usi il compilatore vecchio non vanno le altre parti, e , dato che è gratis e il programmatore non ci campava con il suo codice e quindi si è dovuto cercare un lavoro abbandonando l'idea di essere il nuovo Bill Gates, sono 2 bilioni di secoli che non esce una nuova versione (ammesso che ce ne sia una vecchia ancora in giro su internet). Meravigliosa l’idea del costruire sul lavoro di altri che lo fanno per hobby...

-- Messer Franz

Guido

Di Guido postato il 27/05/2019 12:47

Vedi Davidone,

ho qualche anno meno di te, ma il mio modo di ragionare e' prima capisci cosa vuoi fare (e come lo vuoi fare) e poi eventualmente lo fai. Cosi' se sai il perche' ed il percome puoi anche risolvere eventuali problemi e/o applicare quello che stai facendo a cose che differiscono dall'esempio.

$CAPA tempo fa pretendeva che mettessi le mani su un progetto SOAP, di cui ne so poco o niente e gliel'ho fatto presente, come ho fatto presente che se vuole che ci metta mano deve darmi il tempo di studiare ed imparare. No. Lei pretendeva che fosse fatto per subito, e per capire soap "basta guardare un esempio su internet". Ecco questo e' il modus ragionandi di molti, troppi capi progetto. Ovvio che se uno e' un pisquano appena affacciato al mondo della programmazione ed impara dai suoi superiori...

-- who uses Debian learns Debian but who uses Slackware learns Linux

Anonymous coward

Di Anonymous coward postato il 27/05/2019 13:36

Devo ahimè correggerti, per acquistare un'arma da fuoco in alcuni degli stati uniti basta essere in grado di pagarla, dei tuoi eventuali problemi deambulatori o salivari Non Gliene Importa Una Beneamata Fava. 

-- Anonymous coward

Anonymous coward

Di Anonymous coward postato il 27/05/2019 13:53

Io Stackoverflow goni tanto lo uso... Ma avendo già bene in mente COSA devo realizzare (e tendenzialmente a livello amatoriale), e con un approccio critico al tutto. E' un "ho ben chiaro in mente cosa devo fare, in questo momento mi sfugge la funzione precisa".

-- Anonymous coward

Massimo M.

Di Massimo M. postato il 27/05/2019 22:51

Io sono un po' piu' flessibile riguardo a stackoverflow.

Il mio modo di fare e': guardo le risposte, seleziono quelle scritte da esseri con un QI stimato almeno paragonabile a un fox terrier (vivo), e da li' faccio ulteriori ricerche.

Ovviamente se non comprendo a fondo la sbrodolata, nel mio codice non ci entra.

-- Massimo M.

Lazza

Di Lazza postato il 29/05/2019 17:17

> Oggi... Il tipico sviluppatore lavora in genere cercando schifezze su StackOverflow, facendo copiaincolla di spezzoni di codice schifoso

Scusa, stavolta devo fare quello "simpatico alle feste". :P

Vedo che in molti articoli, ma soprattutto in questo, confondi pesantemente il termine "sviluppatore" col termine "programmatore". Non è del tutto colpa tua, purtroppo in giro si usa molto.

Non so se considerarmi moderno, ma sono uno sviluppatore under 30, per cui NPM e Node li ho usati per alcuni progetti anche con successo. Sono piuttosto critico su NPM per diversi dei motivi che hai già elencato pure tu, ma la descrizione dell'inetto medio che dai non è quella degli sviluppatori, è dei classici self-taught programmers che trovi tanto in giro.

Questi sono quelli che non si sono fatti 5 anni di istituto tecnico e 5 per una magistrale in informatica, ma pensano che adesso basti scrivere "software developer" nella bio di Twitter per essere qualificati. Poi ti danno pure dello "str****" se gli dici che non è così.

Tanto per dire, una delle minime accortezze da usare se si usa NPM è specificare la versione precisa dei pacchetti che si vuole prelevare. Oltre al fatto che scaricarli da zero ogni volta non ha alcun senso.

Qui non ti sei trovato di fronte a degli sviluppatori, ma a quattro programmatori improvvisati e per nulla preparati. :\)

-- Lazza

Klarg

@ Lazza Di Klarg postato il 31/05/2019 15:58

 

Qui non ti sei trovato di fronte a degli sviluppatori, ma a quattro programmatori improvvisati e per nulla preparati. :\)

Secondo me il termine che voleva usare era "sviluppatroti", e il correttore automatico l'ha fregato... :D

 

 

-- Klarg

Anonymous coward

@ Lazza Di Anonymous coward postato il 31/05/2019 17:36

>> Oggi... Il tipico sviluppatore lavora in genere cercando schifezze su StackOverflow, facendo copiaincolla di spezzoni di codice schifoso

> Questi sono quelli che non si sono fatti 5 anni di istituto tecnico e 5 per una magistrale in informatica, ma pensano che adesso basti scrivere "software developer" nella bio di Twitter per essere qualificati. Poi ti danno pure dello "str****" se gli dici che non è così.

Un mio ex-collega di lavoro aveva 5 anni di istituto tecnico (ramo informatico) e stava finendo la triennale di informatica.

L'app per android che stava sviluppando doveva collegarsi ad un server http. Siccome l'app sarebbe stata utilizzata via connessione mobile, spinsi per implementare l'https. Android non permette (o, perlomeno, agevolmente e senza altri problemi) di inserire certification authority "personali" e non si voleva comprare un certificato apposta (LE non era ancora molto conosciuto).

La sua soluzione? Presa direttamente da stackoverflow, diceva con tante circonvoluzioni (controlla questa supercazzola, confronta con antani, setta questa variabile tizio, esegui sbidigula), che se la CA è riconosciuta da Android, va avanti, se non è riconosciuta, vai avanti.

Comunque, secondo me, il problema non era lui. È solo una vittima inconsapevole dell'ambiente, quello informatico, in cui lavoriamo: pieno belle parole e di presunzione.

-- Anonymous coward

emi.ska

Di emi.ska postato il 30/05/2019 09:06

Beh... che dire, anche io uso codice preso da internet ogni tanto, ma almeno lo leggo e se non fa precisamente quello che voglio in caso lo modifico!

Davide, ma quest'anno niente video? Sono morto dal ridere vedendoli...

-- emi.ska

Anonymous coward

Di Anonymous coward postato il 05/08/2019 14:12

"Non e' passato tanto tempo quando una testa di cazzo di sviluppatore decise di rimuovere una paccata di roba dai repositori..."

dissento sul temine "testa di cazzo".

Il codice e' del tipo? SI.

il tipo ha tutto il diritto di togliere il suo codice da qualunque posto esso sia stato posto? SI.

il software e' dato "AS IS" cioe' senza garanzia di funsionamento, manutensione, disponibilita' ecc ecc? SI.

Il tipo ha avvisato? NO. Ma perche' avrebbe dovuto?

E' stato un metodo "improprio"? Forse SI. Ma conosciamo tutti un tipo che non si e' fatto scrupoli ad usare metodi "impropri", tipo che per riuscire a parlare con un CL gli ha bloccato Posta e Telefono, per cui, di cosa stiamo parlando?

Là fuori e' pieno di (stavolta ci vuole veramente) "teste di cazzo" che credono che il software sara' manutenuto, disponibile, funzionante, gratis (nel senso di NON A PAGAMENTO) ecc ecc da qui all'eternità e vi fanno affidamento perchè non hanno capacità/voglia/tempo di scriverselo per conto loro? SI

Le sopracitate T.D.C. sono talmente pigre da non farsi una copia locale per non subire eventuali future indisponibilità di detto codice? SI

 

E allora, CHI E' CAUSA DEL SUO MAL, PIANGA SE STESSO,

"incapacità da parte tua non implica responsabilità da parte mia" (parafrasi di una certa frase ripetuta spesso - e giustamente - su questo sito).

Se domani la mia distro preferita "staccasse la spina" io non mi lamenterei con loro, anzi direi "grazie per gli ultimi X anni passati con voi".

No, perche' si nota un certo andazzo sul "disponibile fino ad ora = io tuo sghiavo negro, io fare tutto ancora gratis in edernidà per te, mio Buana Biango'"

Eh no, non funzona cosi'.

Se la gente non rispetta ci lavora gratis, qualche calcio nelle palle di questo tipo gli darà qualche motivo di riflessione... inutile tra l'altro, perche come dice qualcuno NON. IMPARANO. MAI. UN. CAZZO. e avanti veloci verso il prossimo disastro.

Detto quanto sopra, vado a farmi il mega-backup su disco esterno da nascondere impacchettato contro l'umiidità prima di partire per le vacanze, che non si sa mai.

 

-- Anonymous coward

10 messaggi this document does not accept new posts

Precedente Successivo


Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira