L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)
Kif jgħidu, jekk m'intix mistħija bil-kodiċi l-antik tiegħek, allura m'intix qed tikber bħala programmatur - u naqbel ma 'din l-opinjoni. Bdejt nipprogramma għall-gost aktar minn 40 sena ilu, u professjonalment 30 sena ilu, għalhekk għandi ħafna żbalji. ħafna. Bħala professur tax-xjenza tal-kompjuter, ngħallem lill-istudenti tiegħi jitgħallmu mill-iżbalji—tagħhom, tiegħi, u ta’ oħrajn. Naħseb li wasal iż-żmien li nitkellem dwar l-iżbalji tiegħi biex ma nitlifx il-pudur. Nispera li jkunu utli għal xi ħadd.

It-tielet post - kompilatur Microsoft C

L-għalliem tal-iskola tiegħi kien jemmen li Romeo u Juliet ma setgħux jitqiesu bħala traġedja għax il-karattri ma kellhom l-ebda ħtija traġika – huma sempliċement ġabu ruħhom b’mod stupidu, kif għandhom l-adoloxxenti. Ma kontx naqbel miegħu dakinhar, imma issa nara qamħ ta 'razzjonalità fl-opinjoni tiegħu, speċjalment b'rabta mal-ipprogrammar.

Sakemm spiċċajt it-tieni sena tiegħi fl-MIT, kont żgħir u bla esperjenza, kemm fil-ħajja kif ukoll fl-ipprogrammar. Fis-sajf, internajt f'Microsoft, fit-tim tal-kompilatur C. Għall-ewwel għamilt affarijiet ta 'rutina bħall-appoġġ tal-profiling, u mbagħad ġejt fdat bil-ħidma fuq l-aktar parti divertenti tal-kompilatur (kif kont ħsibt) - ottimizzazzjoni backend. B'mod partikolari, kelli ntejjeb il-kodiċi x86 għad-dikjarazzjonijiet tal-fergħat.

Determinat li nikteb l-aħjar kodiċi tal-magna għal kull każ possibbli, threw myself fil-pool headlong. Jekk id-densità tad-distribuzzjoni tal-valuri kienet għolja, dħalthom fihom tabella ta' transizzjoni. Kieku kellhom diviżur komuni, użajtu biex inagħmel it-tabella aktar stretta (iżda biss jekk id-diviżjoni setgħet issir bl-użu bidla bit). Meta l-valuri kollha kienu poteri ta 'tnejn, għamilt ottimizzazzjoni oħra. Jekk sett ta 'valuri ma ssodisfax il-kundizzjonijiet tiegħi, qassejtha f'diversi każijiet ottimizzati u użajt il-kodiċi diġà ottimizzat.

Kien ħmar il-lejl. Ħafna snin wara qaluli li l-programmatur li wiret il-kodiċi tiegħi kien jobgħodni.

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)

Lezzjoni mitgħallma

Kif jiktbu David Patterson u John Hennessy f'Arkitettura tal-Kompjuter u Disinn tas-Sistemi tal-Kompjuter, wieħed mill-prinċipji ewlenin tal-arkitettura u d-disinn huwa li ġeneralment l-affarijiet jaħdmu malajr kemm jista 'jkun.

It-tħaffif tal-każijiet komuni se jtejjeb il-prestazzjoni b'mod aktar effettiv milli l-ottimizzazzjoni tal-każijiet rari. Ironikament, każijiet komuni ħafna drabi huma aktar sempliċi minn dawk rari. Dan il-parir loġiku jassumi li taf liema każ huwa meqjus komuni - u dan huwa possibbli biss permezz ta 'proċess ta' ttestjar u kejl bir-reqqa.

Fid-difiża tiegħi, ippruvajt nifhem kif id-dikjarazzjonijiet tal-fergħat kienu jidhru fil-prattika (bħal kemm kien hemm fergħat u kif tqassmu l-kostanti), iżda fl-1988 din l-informazzjoni ma kinitx disponibbli. Madankollu, ma kellix żidt każijiet speċjali kull meta l-kompilatur attwali ma setax jiġġenera l-aħjar kodiċi għall-eżempju artifiċjali li ħriġt bih.

Kelli bżonn insejjaħ żviluppatur b'esperjenza u, flimkien miegħu, naħseb dwar x'kienu l-każijiet komuni u nittrattahom speċifikament. Nixtieq nikteb inqas kodiċi, iżda dik hija ħaġa tajba. Kif kiteb il-fundatur ta’ Stack Overflow Jeff Atwood, l-agħar għadu ta’ programmatur huwa l-programmatur innifsu:

Naf li għandek l-aħjar intenzjonijiet, kif għandna lkoll. Aħna noħolqu programmi u nħobbu niktbu kodiċi. Hekk aħna magħmula. Aħna naħsbu li kwalunkwe problema tista 'tiġi solvuta b'duct tape, crutch homemade u niskata kodiċi. Kemm iweġġa lill-kodifikaturi li jammettu, l-aħjar kodiċi huwa l-kodiċi li ma jeżistix. Kull linja ġdida teħtieġ debugging u appoġġ, jeħtieġ li tinftiehem. Meta żżid kodiċi ġdid, għandek tagħmel dan b'riluttanza u stmerrija minħabba li l-għażliet l-oħra kollha ġew eżawriti. Ħafna programmaturi jiktbu wisq kodiċi, li jagħmilha l-għadu tagħna.

Kieku ktibt kodiċi aktar sempliċi li kopra każijiet komuni, kien ikun ħafna aktar faċli li taġġorna jekk meħtieġ. Ħalliejt warajh taħwid li ħadd ma ried jittratta magħha.

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)

It-tieni post: reklamar fuq netwerks soċjali

Meta kont qed naħdem fil-Google fuq ir-reklamar tal-midja soċjali (tiftakar Myspace?), ktibt xi ħaġa bħal din f'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)) {
  }
}

Il-programmaturi jistgħu immedjatament jaraw l-iżball: l-aħħar argument għandu jkun j, mhux i. L-ittestjar tal-unità ma żvelax l-iżball, u lanqas ir-reviżur tiegħi. It-tnedija twettqet, u lejl wieħed il-kodiċi tiegħi mar fuq is-server u ġġarraf il-kompjuters kollha fiċ-ċentru tad-dejta.

Ma ġara xejn ħażin. Xejn ma kisser għal ħadd, għax qabel it-tnedija globali l-kodiċi ġie ttestjat f'ċentru tad-dejta wieħed. Sakemm l-inġiniera tal-SRE ma baqgħux jilagħbu l-biljard għal xi żmien u għamlu ftit rollback. L-għada filgħodu rċevejt email bi crash dump, ikkoreġejt il-kodiċi u żidt testijiet tal-unità li jaqbdu l-iżball. Peress li segwejt il-protokoll - inkella l-kodiċi tiegħi sempliċement jonqos milli jaħdem - ma kien hemm l-ebda problemi oħra.

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)

Lezzjoni mitgħallma

Ħafna huma ċerti li żball kbir bħal dan żgur se jiswa t-tkeċċija ħati, iżda dan mhux hekk: l-ewwelnett, il-programmaturi kollha jagħmlu żbalji, u t-tieni, rari jagħmlu l-istess żball darbtejn.

Fil-fatt, għandi ħabib programmatur li kien inġinier brillanti u tkeċċa talli għamel żball wieħed. Wara dan, ġie mikrija fil-Google (u dalwaqt promoss) - tkellem onestament dwar l-iżball li għamel f'intervista, u ma kienx ikkunsidrat fatali.

Dak hu għid dwar Thomas Watson, il-kap leġġendarju tal-IBM:

Tħabbret ordni tal-gvern li tiswa madwar miljun dollaru. IBM Corporation - jew aħjar, Thomas Watson Sr. personalment - verament riedet tiksbu. Sfortunatament, ir-rappreżentant tal-bejgħ ma setax jagħmel dan u IBM tilfet l-offerta. L-għada, dan l-impjegat daħal fl-uffiċċju tas-Sur Watson u poġġa envelop fuq l-iskrivanija tiegħu. Is-Sur Watson lanqas biss iddejjaq iħares lejha – kien qed jistenna impjegat u kien jaf li kienet ittra ta’ riżenja.

Watson staqsa x'mar ħażin.

Ir-rappreżentant tal-bejgħ tkellem fid-dettall dwar il-progress tat-tender. Semma żbalji li saru li setgħu ġew evitati. Fl-aħħarnett, qal, “Sur Watson, grazzi talli ħallitni nispjega. Naf kemm kellna bżonn din l-ordni. Naf kemm kien importanti,” u lest biex jitlaq.

Watson resaq lejh mal-bieb, ħares f’għajnejh u rritorna l-envelop bil-kliem: “Kif nista’ nħallik? Għadni kif investejt miljun dollaru fl-edukazzjoni tiegħek.

Għandi T-shirt li tgħid: "Jekk verament titgħallem mill-iżbalji, allura jien diġà kaptan." Fil-fatt, fejn jidħlu żbalji, jien tabib fix-xjenza.

L-ewwel post: App Inventor API

Żbalji tassew terribbli jaffettwaw numru kbir ta 'utenti, isiru għarfien pubbliku, jieħdu żmien twil biex jikkoreġu, u jsiru minn dawk li ma setgħux għamluhom. L-akbar żball tiegħi jaqbel ma' dawn il-kriterji kollha.

L-agħar l-aħjar

jiena naqra esej minn Richard Gabriel dwar dan l-approċċ fis-snin disgħin bħala student gradwat, u tant jogħġobni li nistaqsih lill-istudenti tiegħi. Jekk ma tiftakarx sew, aġġorna l-memorja tiegħek, huwa żgħir. Dan l-essay jikkuntrasta x-xewqa li "jagħmel tajjeb" u l-approċċ "agħar huwa aħjar" f'ħafna modi, inkluż is-sempliċità.

Kif għandu jkun: id-disinn għandu jkun sempliċi fl-implimentazzjoni u l-interface. Is-sempliċità tal-interface hija aktar importanti mis-sempliċità tal-implimentazzjoni.

L-agħar, l-aħjar: id-disinn għandu jkun sempliċi fl-implimentazzjoni u l-interface. Is-sempliċità tal-implimentazzjoni hija aktar importanti mis-sempliċità tal-interface.

Ejja ninsew dwar dan għal minuta. Sfortunatament, insejt dwarha għal ħafna snin.

Inventur tal-App

Waqt li kont naħdem fil-Google, kont parti mit-tim Inventur tal-App, ambjent ta' żvilupp online drag-and-drop għall-iżviluppaturi tal-Android aspiranti. Kien l-2009, u konna għaġġla biex noħorġu l-verżjoni alpha fil-ħin biex fis-sajf inkunu nistgħu norganizzaw master classes għall-għalliema li jistgħu jużaw l-ambjent meta jgħallmu fil-ħarifa. I volontarjat biex jimplimenta sprites, nostalgic għal kif kont nikteb logħob fuq it-TI-99/4. Għal dawk li ma jafux, sprite huwa oġġett grafiku bidimensjonali li jista 'jiċċaqlaq u jinteraġixxi ma' elementi oħra tas-softwer. Eżempji ta’ sprites jinkludu vapuri spazjali, asteroids, marbles, u rackets.

Implimentajna App Inventor orjentat lejn l-oġġetti f'Java, għalhekk hemm biss mazz ta 'oġġetti hemmhekk. Peress li l-blalen u l-ispriti jaġixxu b'mod simili ħafna, ħloqt klassi sprite astratta bi proprjetajiet (oqsma) X, Y, Veloċità (veloċità) u Intestatura (direzzjoni). Huma kellhom l-istess metodi biex jiskopru l-ħabtiet, jirbbu minn fuq it-tarf tal-iskrin, eċċ.

Id-differenza ewlenija bejn ballun u sprite hija x'inhu eżattament imfassal - ċirku mimli jew raster. Peress li l-ewwel implimentajt sprites, kien loġiku li tispeċifika l-koordinati x u y tar-rokna tax-xellug ta 'fuq ta' fejn kienet tinsab l-immaġni.

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)
Ladarba l-sprites kienu qed jaħdmu, iddeċidejt li stajt nimplimenta oġġetti tal-ballun bi ftit kodiċi. L-unika problema kienet li ħadt l-aktar rotta sempliċi (mill-perspettiva ta 'l-implimentatur), li indika l-koordinati x u y tar-rokna tax-xellug ta' fuq tal-kontorn li jfassal il-ballun.

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)
Fil-fatt, kien meħtieġ li jiġu indikati l-koordinati x u y taċ-ċentru taċ-ċirku, kif mgħallma fi kwalunkwe ktieb tal-matematika u kwalunkwe sors ieħor li jsemmi ċ-ċrieki.

L-iżbalji l-aktar imbarazzanti fil-karriera tiegħi fl-ipprogrammar (s'issa)
B'differenza mill-iżbalji tal-passat tiegħi, dan affettwa mhux biss lill-kollegi tiegħi, iżda wkoll miljuni ta 'utenti tal-App Inventor. Ħafna minnhom kienu tfal jew kompletament ġodda għall-ipprogrammar. Huma kellhom iwettqu ħafna passi bla bżonn meta jaħdmu fuq kull applikazzjoni li fiha l-ballun kien preżenti. Jekk niftakar l-iżbalji l-oħra tiegħi bid-daħk, allura dan iġibni għaraq anke llum.

Fl-aħħar irranġajt dan il-bug reċentement biss, għaxar snin wara. "Patched", mhux "fissat", għax kif jgħid Joshua Bloch, l-APIs huma eterni. Ma nistgħux nagħmlu bidliet li jaffettwaw programmi eżistenti, żidna l-proprjetà OriginAtCenter bil-valur falz fi programmi qodma u veru f'dawk futuri kollha. L-utenti jistgħu jistaqsu mistoqsija loġika: min saħansitra ħaseb li jpoġġi l-punt tat-tluq x'imkien ieħor għajr iċ-ċentru. Ghal min? Lil programmatur wieħed li kien għażżien wisq biex joħloq API normali għaxar snin ilu.

Lezzjonijiet Mgħallma

Meta taħdem fuq APIs (li kważi kull programmatur ikollu jagħmel xi kultant), għandek issegwi l-aħjar pariri deskritti fil-video ta' Joshua Bloch "Kif toħloq API tajba u għaliex hija daqshekk importanti"Or f'din il-lista qasira:

  • API jista' jġiblek kemm benefiċċju kbir kif ukoll ħsara kbira.. API tajba toħloq klijenti ripetuti. Il-ħażin isir il-ħmar il-lejl etern tiegħek.
  • L-APIs pubbliċi, bħad-djamanti, idumu għal dejjem. Agħti kollox: qatt mhu se jkun hemm ċans ieħor li tagħmel kollox sew.
  • Il-profili tal-API għandhom ikunu qosra — paġna waħda b'firem u deskrizzjonijiet tal-klassi u tal-metodi, li ma tieħux aktar minn linja. Dan jippermettilek tirristruttura faċilment l-API jekk ma tirriżultax perfetta l-ewwel darba.
  • Iddeskrivi każijiet ta' użuqabel ma timplimenta l-API jew saħansitra taħdem fuq l-ispeċifikazzjoni tagħha. Dan il-mod tevita li timplimenta u tispeċifika API kompletament mhux funzjonali.

Kieku ktibt anke sinopsi qasira b’kitba artifiċjali, x’aktarx kont nidentifika l-iżball u kkoreġih. Jekk le, allura wieħed mill-kollegi tiegħi żgur li jagħmel dan. Kwalunkwe deċiżjoni li għandha konsegwenzi estensivi trid tiġi kkunsidrata għal mill-inqas ġurnata (dan japplika mhux biss għall-ipprogrammar).

It-titlu tal-essay ta’ Richard Gabriel, “Worse Is Better”, jirreferi għall-vantaġġ li jġib li tkun l-ewwel fis-suq—anke bi prodott imperfett—filwaqt li xi ħadd ieħor iqatta’ eternità jiġru wara dak perfett. Meta nirrifletti fuq il-kodiċi sprite, nirrealizza li lanqas kelli nikteb aktar kodiċi biex nikseb it-tajjeb. Tkun xi ngħidu, jien żbaljt ħafna.

Konklużjoni

Il-programmaturi jiżbaljaw kuljum, kemm jekk jiktbu kodiċi buggy jew ma jridux jippruvaw xi ħaġa li ttejjeb il-ħila u l-produttività tagħhom. Naturalment, tista' tkun programmatur mingħajr ma tagħmel żbalji serji bħalma għamilt jien. Iżda huwa impossibbli li ssir programmatur tajjeb mingħajr ma tagħraf l-iżbalji tiegħek u titgħallem minnhom.

Kontinwament niltaqa' ma' studenti li jħossu li jagħmlu wisq żbalji u għalhekk mhumiex maqtugħin għall-ipprogrammar. Naf kemm is-sindromu tal-impostur huwa komuni fl-IT. Nittama li titgħallem il-lezzjonijiet li elenkajt - imma ftakar dik prinċipali: kull wieħed minna jagħmel żbalji - imbarazzanti, umoristiċi, terribbli. Inkun sorpriż u mqalleb jekk fil-futur ma jkollix biżżejjed materjal biex inkompli l-artiklu.

Sors: www.habr.com

Żid kumment