I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)
Comu dicenu, s'ellu ùn site micca vergogna di u vostru vechju codice, allora ùn site micca crescente cum'è programatore - è sò d'accordu cù questa opinione. Aghju cuminciatu à prugrammazione per divertimentu più di 40 anni fà, è prufessiunale 30 anni fà, cusì aghju assai sbagli. una mansa di. Cum'è prufessore di l'informatica, insegnu à i mo studienti à amparà da i sbagli - i so, i mei è l'altri. Pensu chì hè ora di parlà di i mo sbaglii per ùn perde a mo pudore. Spergu chì saranu utili à qualchissia.

Terzu postu - Microsoft C compilatore

U mo maestru di a scola hà cridutu chì Romeo è Giulietta ùn puderanu micca esse cunsideratu una tragedia perchè i caratteri ùn anu micca culpabilità tragica - si cumportavanu solu stupidu, cum'è l'adulescenti. Ùn aghju micca d'accordu cun ellu allora, ma avà vecu un granu di raziunale in u so parè, in particulare in cunnessione cù a prugrammazione.

Quandu aghju finitu u mo sophomore in MIT, era ghjovanu è senza sperienza, in a vita è in a prugrammazione. In l'estiu, aghju internatu in Microsoft, nantu à a squadra di compilatore C. In prima aghju fattu cose di rutina cum'è u supportu di prufilu, è dopu m'hè affidatu à travaglià in a parte più divertente di u compilatore (cum'è aghju pensatu) - ottimisazione backend. In particulare, aghju avutu à migliurà u codice x86 per e dichjarazioni di ramu.

Determinatu à scrive u codice di macchina ottimali per ogni casu pussibule, mi aghju lanciatu in a piscina in capu. Se a densità di distribuzione di i valori era alta, aghju intrutu in elli tavola di transizione. S'elli avianu un divisore cumuni, l'aghju utilizatu per fà a tavula più stretta (ma solu se a divisione puderia esse fatta cù bit shift). Quandu tutti i valori eranu putenzi di dui, aghju fattu un'altra ottimisazione. Se un inseme di valori ùn hà micca suddisfà e mo cundizioni, l'aghju divisu in parechji casi ottimisati è utilizatu u codice digià ottimizatu.

Era un incubo. Parechji anni dopu m'hà dettu chì u programatore chì hà ereditatu u mo codice m'odiava.

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)

Lezzione amparata

Cum'è David Patterson è John Hennessy scrivenu in Computer Architecture and Computer Systems Design, unu di i principii principali di l'architettura è u disignu hè di fà in generale chì e cose funzionanu u più prestu pussibule.

Accelerazione di i casi cumuni migliurà a prestazione in modu più efficace ch'è l'ottimisazione di casi rari. Irnicamenti, i casi cumuni sò spessu più simplici chè i rari. Stu cunsigliu lògicu assume chì sapete quale casu hè cunsideratu cumune - è questu hè pussibule solu per un prucessu di prova è misurazione attenti.

In a mo difesa, aghju pruvatu à capisce ciò chì i rami di ramu parevanu in a pratica (cum'è quanti rami ci eranu è cumu custanti sò stati distribuiti), ma in 1988 sta informazione ùn era micca dispunibule. In ogni casu, ùn aghju micca aghjustatu casi speciali ogni volta chì u compilatore attuale ùn puderia micca generà codice ottimale per l'esempiu artificiale chì aghju avutu.

Aviu bisognu di chjamà un sviluppatore espertu è, cun ellu, pensate à ciò chì eranu i casi cumuni è trattà cun elli specificamente. Scriveraghju menu codice, ma hè una bona cosa. Cum'è u fundatore di Stack Overflow Jeff Atwood hà scrittu, u peghju nemicu di un programatore hè u prugrammatore stessu:

Sò chì avete e migliori intenzioni, cum'è noi tutti. Creemu prugrammi è piace à scrive codice. Hè cusì chì simu fatti. Pensemu chì ogni prublema pò esse risolta cù a cinta adhesiva, una crutch casera è un pizzicu di codice. Quantu si dulore i codificatori per ammette, u megliu codice hè u codice chì ùn esiste micca. Ogni nova linea hà bisognu di debugging è supportu, deve esse capitu. Quandu aghjunghje un novu codice, duvete fà cusì cun riluttanza è disgustu perchè tutte l'altre opzioni sò state esaurite. Parechji programatori scrivenu troppu codice, facendu u nostru nemicu.

Se aghju scrittu un codice più simplice chì copre i casi cumuni, saria statu assai più faciule d'aghjurnà se ne necessariu. Aghju lasciatu daretu à un mess chì nimu vulia trattà.

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)

Secondu postu : publicità nantu à e rete suciale

Quandu aghju travagliatu in Google nantu à a publicità di e social media (ricurdate Myspace?), aghju scrittu qualcosa cusì in C++:

for (int i = 0; i < user->interests->length(); i++) {
  for (int j = 0; j < user->interests(i)->keywords.length(); j++) {
      keywords->add(user->interests(i)->keywords(i)) {
  }
}

I programatori ponu vede immediatamente l'errore: l'ultimu argumentu deve esse j, micca i. A prova di unità ùn hà micca revelatu l'errore, è nè u mo criticu. U lanciamentu hè statu realizatu, è una notte u mo codice si n'andò à u servitore è chjappà tutti l'urdinatori in u centru di dati.

Ùn hè accadutu nunda di male. Nunda rumpia per nimu, perchè prima di u lanciu glubale, u codice hè statu pruvatu in un centru di dati. A menu chì l'ingegneri di SRE anu cessatu di ghjucà à u biliardo per un tempu è anu fattu un pocu rollback. A matina dopu, aghju ricevutu un email cù un crash dump, currettu u codice è aghjunghjite teste di unità chì catturà l'errore. Siccomu aghju seguitu u protokollu - altrimenti u mo còdice ùn si facia micca esse ghjustu - ùn ci era micca altri prublemi.

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)

Lezzione amparata

Parechje sò sicuri chì un tali sbagliu maiò certamenti custarà u licenziamentu culprit, ma questu hè micca cusì: prima, tutti i programatori sbaglianu, è in segundu, raramente facenu u stessu sbagliu duie volte.

In fatti, aghju un amicu programatore chì era un ingegnere brillanti è hè statu licenziatu per fà un solu sbagliu. Dopu questu, hè statu ingaghjatu in Google (è prestu prumuvutu) - hà parlatu onestamente di l'errore chì hà fattu in una entrevista, è ùn era micca cunsideratu fatale.

Hè ciò chì circa Thomas Watson, u legendariu capu di IBM:

Un ordine di u guvernu vale circa un milione di dollari hè statu annunziatu. IBM Corporation - o megliu, Thomas Watson Sr. personalmente - vulia veramente ottene. Sfortunatamente, u rappresentante di vendita ùn hà micca pussutu fà questu è IBM hà persu l'offerta. U ghjornu dopu, stu impiigatu hè ghjuntu in l'uffiziu di u Signore Watson è hà postu un envelope nantu à a so scrivania. U sgiò Watson ùn s'hè mancu à fighjà - aspittava un impiigatu è sapia chì era una lettera di dimissioni.

Watson hà dumandatu ciò chì hè andatu male.

U rappresentante di vendita hà parlatu in dettu nantu à u prugressu di l'offerta. Il a nommé les erreurs faites qui auraient pu être évitées. Infine, disse: "Sgiò Watson, grazie per avè permessu di spiegà. Sò quantu avemu bisognu di questu ordine. Sò quant'ellu era impurtante ", è si prontu à lascià.

Watson s'avvicinò à a porta, u guardò in l'ochji è rinviò u bustu cù e parolle: "Cumu possu lascià andà? Aghju investitu solu un milione di dollari in a vostra educazione.

Aghju una T-shirt chì dice: "Se veramente imparate da i sbagli, allora sò digià un maestru". In fatti, quandu si tratta di errori, sò un duttore di scienza.

Primu postu: App Inventor API

L'errori veramente terribili affettanu un gran numaru d'utilizatori, diventanu cunniscenze publica, piglianu assai tempu per correggerà, è sò fatti da quelli chì ùn anu pussutu fà. U mo più grande sbagliu si adatta à tutti questi criteri.

U peghju u megliu

Aghju lettu essai di Richard Gabriel circa stu approcciu in l'anni novanta cum'è un studiente graduate, è mi piace tantu chì l'aghju dumandatu à i mo studienti. S'ellu ùn vi ricurdate micca bè, rinfriscà a vostra memoria, hè chjuca. Stu essai cuntrasta u desideriu di "avè bè" è l'approcciu "peghju hè megliu" in parechje manere, cumpresa a simplicità.

Cumu deve esse: u disignu deve esse simplice in implementazione è interfaccia. A simplicità di l'interfaccia hè più impurtante chè a simplicità di implementazione.

U peghju, u megliu: u disignu deve esse simplice in implementazione è interfaccia. A simplicità di implementazione hè più impurtante chè a simplicità di l'interfaccia.

Ci scurdemu di quessa per un minutu. Sfurtunatamente, l'aghju scurdatu per parechji anni.

App Inventore

Mentre travagliava in Google, era parte di a squadra App Inventore, un ambiente di sviluppu in linea drag-and-drop per aspiranti sviluppatori Android. Era 2009, è eramu in furia di liberà a versione alfa in u tempu per chì in l'estiu pudemu fà classi maestri per i prufessori chì puderanu aduprà l'ambienti in l'insignamentu in u vaghjimu. Mi sò vuluntariu per implementà sprites, nostalgicu per cumu scriveva ghjochi nantu à a TI-99/4. Per quelli chì ùn sanu micca, un sprite hè un oggettu gràficu bidimensionale chì pò spustà è interagisce cù altri elementi di software. Esempii di sprites include navi spaziali, asteroidi, marmi è rackets.

Avemu implementatu App Inventor orientatu à l'ughjettu in Java, cusì ci hè solu una mansa di oggetti in quì. Siccomu i boli è i sprites si comportanu assai simili, aghju creatu una classa di sprite astratta cù proprietà (campi) X, Y, Speed ​​​​(velocità) è Heading (direzzione). Anu avutu i stessi metudi per a deteczione di scontri, rimbalzendu u bordu di u screnu, etc.

A principal diferenza trà una bola è un sprite hè esattamente ciò chì hè disegnatu - un cercolu pienu o un raster. Siccomu aghju implementatu sprites prima, era logicu di specificà e coordenate x è y di u cantonu superiore manca di induve si trovava l'imaghjini.

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)
Una volta chì i sprites anu travagliatu, aghju decisu chì puderia implementà l'uggetti di bola cù pocu codice. L'unicu prublema era chì aghju pigliatu a strada più simplice (da u puntu di vista di l'implementatore), indicà e coordenate x è y di l'angulu superiore manca di u contornu framing u ballu.

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)
In fatti, era necessariu indicà e coordenate x è y di u centru di u circhiu, cum'è insignatu in ogni libru di matematica è qualsiasi altra fonte chì menziona i circles.

I sbagli più imbarazzanti in a mo carriera di prugrammazione (finu à avà)
A cuntrariu di i mo sbaglii passati, questu ùn hà micca affettatu solu i mo culleghi, ma ancu milioni di utilizatori App Inventor. Parechji di elli eranu zitelli o completamente novi à a prugrammazione. Anu avutu a realizazione di assai passi innecessarii quandu u travagliu nantu à ogni applicazione in quale u ballò era presente. Se mi ricordu di i mo altri sbagli cù a risa, allora questu mi fa sudare ancu oghje.

Finalmente aghju patched stu bug solu pocu tempu, deci anni dopu. "Patched", micca "fixed", perchè cum'è Joshua Bloch dice, l'API sò eterni. Incapace di fà cambiamenti chì affettanu i prugrammi esistenti, aghjunghjemu a pruprietà OriginAtCenter cù u valore falsu in i prugrammi antichi è veru in tutti i futuri. L'utilizatori ponu dumandà una quistione logica: quale hà ancu pensatu di mette u puntu di partenza in un locu altru ch'è u centru. À quale ? À un programatore chì era troppu pigro per creà una API normale dece anni fà.

Lezioni amparate

Quandu travagliate nantu à l'API (chì quasi tutti i programatori anu da fà qualchì volta), duvete seguità i migliori cunsiglii descritti in u video di Joshua Bloch "Cumu creà una bona API è perchè hè cusì impurtante"o in questa lista corta:

  • Una API pò purtà à voi un grande beneficiu è un grande dannu.. Una bona API crea clienti ripetuti. U cattivu diventa u vostru eternu incubo.
  • L'API publichi, cum'è i diamanti, duranu per sempre. Dà tuttu: ùn ci sarà mai una altra chance di fà tuttu bè.
  • L'API deve esse brevi - una pagina cù signature di classi è di metudu è descrizzioni, chì ùn occupanu micca più di una linea. Questu vi permetterà di ristrutturare facilmente l'API s'ellu ùn hè micca perfettu a prima volta.
  • Descrive i casi d'usuprima di implementà l'API o ancu di travaglià nantu à a so specificazione. In questu modu, eviterete implementà è specificà una API cumplettamente non funzionale.

S'e aghju scrittu ancu una breve sinopsi cù un script artificiale, assai prubabilmente averia identificatu l'errore è currettu. Se no, allora unu di i mo culleghi certamenti faria. Qualchese decisione chì hà cunsequenze largamente deve esse pensata per almenu un ghjornu (questu ùn hè micca solu per a prugrammazione).

U tìtulu di l'assaig di Richard Gabriel, "Worse Is Better", si riferisce à u vantaghju chì và à esse u primu à u mercatu, ancu cù un pruduttu imperfettu, mentre chì qualchissia altru passa una eternità perseguitendu u perfettu. Riflettendu nantu à u codice sprite, aghju capitu chì ùn aghju mancu bisognu di scrive più codice per esse ghjustu. Qualunque cosa si pò dì, mi sò sbagliatu grossamente.

cunchiusioni

I programatori facenu sbagli ogni ghjornu, sia scrive codice buggy o ùn volenu pruvà qualcosa chì migliurà a so cumpetenza è a produtividade. Di sicuru, pudete esse un programatore senza fà sbaglii cusì gravi cum'è aghju fattu. Ma hè impussibile di diventà un bon programatore senza ricunnosce i vostri sbagli è amparà da elli.

Incontru constantemente studienti chì sentu cum'è fà troppu sbagliati è dunque ùn sò micca tagliati per a prugrammazione. So quantu hè u sindromu di l'impostore cumuni in IT. Spergu chì amparate e lezioni ch'e aghju listatu - ma ricordate u principale: ognunu di noi face sbagli - imbarazzanti, divertenti, terribili. Seraghju sorpresu è arrabbiatu se in u futuru ùn aghju micca abbastanza materiale per cuntinuà l'articulu.

Source: www.habr.com

Add a comment