KÄ saka, ja tev nav kauna par savu veco kodu, tad tu neaug par programmÄtÄju - un es piekrÄ«tu Å”im viedoklim. Es sÄku programmÄt prieka pÄc vairÄk nekÄ pirms 40 gadiem un profesionÄli pirms 30 gadiem, tÄpÄc man ir daudz kļūdu. ļoti daudz. KÄ datorzinÄtÅu profesors es mÄcu saviem studentiem mÄcÄ«ties no savÄm, manÄm un citu kļūdÄm. Es domÄju, ka ir pienÄcis laiks runÄt par savÄm kļūdÄm, lai nezaudÄtu savu pieticÄ«bu. Ceru, ka kÄdam tie noderÄs.
TreÅ”Ä vieta - Microsoft C kompilators
Mana skolas skolotÄja uzskatÄ«ja, ka Romeo un Džuljetu nevar uzskatÄ«t par traÄ£Ädiju, jo varoÅiem nebija traÄ£iskas vainas ā viÅi vienkÄrÅ”i uzvedÄs stulbi, kÄ jau pusaudžiem pienÄkas. Toreiz es viÅam nepiekritu, bet tagad viÅa uzskatos saskatu racionalitÄtes graudu, Ä«paÅ”i saistÄ«bÄ ar programmÄÅ”anu.
Kad es pabeidzu savu otro kursu MIT, es biju jauns un nepieredzÄjis gan dzÄ«vÄ, gan programmÄÅ”anas jomÄ. VasarÄ stažÄjos Microsoft kompilatoru komandÄ C. SÄkumÄ veicu tÄdas ikdieniŔķas lietas kÄ profilÄÅ”anas atbalsts, bet pÄc tam man uzticÄja strÄdÄt pie kompilatora jautrÄkÄs daļas (kÄ es domÄju) - aizmugursistÄmas optimizÄcijas. Jo Ä«paÅ”i man bija jÄuzlabo x86 kods filiÄles paziÅojumiem.
ApÅÄmies uzrakstÄ«t optimÄlo maŔīnas kodu katram iespÄjamajam gadÄ«jumam, es metos baseinÄ ar galvu. Ja vÄrtÄ«bu sadalÄ«juma blÄ«vums bija augsts, es tÄs ievadÄ«ju
Tas bija murgs. PÄc daudziem gadiem man teica, ka programmÄtÄjs, kurÅ” mantoja manu kodu, mani ienÄ«st.
GÅ«ta mÄcÄ«ba
KÄ raksta Deivids Patersons un Džons Hennessijs grÄmatÄ Computer Architecture and Computer Systems Design, viens no galvenajiem arhitektÅ«ras un dizaina principiem ir panÄkt, lai lietas darbotos pÄc iespÄjas ÄtrÄk.
PaÄtrinot parastos gadÄ«jumus, veiktspÄja uzlabosies daudz efektÄ«vÄk nekÄ optimizÄjot retos gadÄ«jumos. Ironiski, ka bieži sastopamie gadÄ«jumi bieži ir vienkÄrÅ”Äki nekÄ reti. Å is loÄ£iskais padoms paredz, ka jÅ«s zinÄt, kurÅ” gadÄ«jums tiek uzskatÄ«ts par izplatÄ«tu, un tas ir iespÄjams, tikai rÅ«pÄ«gi pÄrbaudot un veicot mÄrÄ«jumus.
SavÄ aizstÄvÄ«bÄ es mÄÄ£inÄju noskaidrot, kÄ praksÄ izskatÄs zaru paziÅojumi (piemÄram, cik zaru ir un kÄ konstantes tika sadalÄ«tas), taÄu 1988. gadÄ Å”Ä« informÄcija nebija pieejama. TomÄr man nevajadzÄja pievienot Ä«paÅ”us gadÄ«jumus, kad paÅ”reizÄjais kompilators nevarÄja Ä£enerÄt optimÄlu kodu mÄkslÄ«gajam piemÄram, ko es izdomÄju.
VajadzÄja piezvanÄ«t pieredzÄjuÅ”am izstrÄdÄtÄjam un kopÄ ar viÅu padomÄt, kÄdi ir izplatÄ«tÄkie gadÄ«jumi, un risinÄt tos konkrÄti. Es rakstÄ«tu mazÄk kodu, bet tas ir labi. KÄ rakstÄ«ja Stack Overflow dibinÄtÄjs Džefs Atvuds, programmÄtÄja ļaunÄkais ienaidnieks ir pats programmÄtÄjs:
Es zinu, ka jums, tÄpat kÄ mums visiem, ir vislabÄkie nodomi. MÄs veidojam programmas un mums patÄ«k rakstÄ«t kodu. TÄ mÄs esam radÄ«ti. MÄs domÄjam, ka jebkuru problÄmu var atrisinÄt ar lÄ«mlenti, paÅ”taisÄ«tu kruÄ·i un ŔķipsniÅu koda. Lai arÄ« cik sÄpÄ«gi kodÄtÄjiem to atzÄ«t, labÄkais kods ir kods, kas neeksistÄ. Katrai jaunai rindai ir nepiecieÅ”ama atkļūdoÅ”ana un atbalsts, tas ir jÄsaprot. Pievienojot jaunu kodu, tas jÄdara ar nelabprÄtÄ«bu un riebumu, jo visas pÄrÄjÄs iespÄjas ir izsmeltas. Daudzi programmÄtÄji raksta pÄrÄk daudz koda, padarot to par mÅ«su ienaidnieku.
Ja es bÅ«tu uzrakstÄ«jis vienkÄrÅ”Äku kodu, kas aptvertu izplatÄ«tus gadÄ«jumus, vajadzÄ«bas gadÄ«jumÄ to bÅ«tu bijis daudz vieglÄk atjauninÄt. Es atstÄju aiz sevis nekÄrtÄ«bu, ar kuru neviens negribÄja tikt galÄ.
OtrÄ vieta: reklÄma sociÄlajos tÄ«klos
Kad strÄdÄju Google ar sociÄlo mediju reklÄmu (atceraties Myspace?), es C++ ierakstÄ«ju kaut ko lÄ«dzÄ«gu:
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)) {
}
}
ProgrammÄtÄji var uzreiz redzÄt kļūdu: pÄdÄjam argumentam jÄbÅ«t j, nevis i. VienÄ«bas pÄrbaude neatklÄja kļūdu, un to neatklÄja arÄ« mans recenzents. PalaiÅ”ana tika veikta, un kÄdu nakti mans kods nonÄca serverÄ« un avarÄja visi datu centra datori.
Nekas slikts nenotika. Nevienam nekas nesaplÄ«sa, jo pirms globÄlÄs palaiÅ”anas kods tika testÄts viena datu centra ietvaros. Ja vien SRE inženieri kÄdu laiku nepÄrtrauks spÄlÄt biljardu un nedaudz atkÄpÄs. NÄkamajÄ rÄ«tÄ es saÅÄmu e-pastu ar avÄrijas izgÄztuvi, izlaboju kodu un pievienoju vienÄ«bas testus, kas atklÄs kļūdu. TÄ kÄ es ievÄroju protokolu - pretÄjÄ gadÄ«jumÄ mans kods vienkÄrÅ”i nedarbosies, citu problÄmu nebija.
GÅ«ta mÄcÄ«ba
Daudzi ir pÄrliecinÄti, ka Å”Äda liela kļūda noteikti maksÄs vainÄ«go atlaiÅ”anu, taÄu tas tÄ nav: pirmkÄrt, visi programmÄtÄji pieļauj kļūdas, un, otrkÄrt, viÅi reti pieļauj vienu un to paÅ”u kļūdu divas reizes.
PatiesÄ«bÄ man ir draugs programmÄtÄjs, kurÅ” bija izcils inženieris un tika atlaists par vienu kļūdu. PÄc tam viÅÅ” tika pieÅemts darbÄ Google (un drÄ«z tika paaugstinÄts) - viÅÅ” godÄ«gi runÄja par kļūdu, ko viÅÅ” pieļÄva intervijÄ, un tÄ netika uzskatÄ«ta par liktenÄ«gu.
Tas ir kas
Tika paziÅots par valdÄ«bas pasÅ«tÄ«jumu aptuveni miljona dolÄru vÄrtÄ«bÄ. IBM korporÄcija ā pareizÄk sakot, Tomass Vatsons vecÄkais personÄ«gi ā ļoti vÄlÄjÄs to iegÅ«t. DiemžÄl tirdzniecÄ«bas pÄrstÄvis to nevarÄja izdarÄ«t, un IBM zaudÄja piedÄvÄjumu. NÄkamajÄ dienÄ Å”is darbinieks ienÄca Vatsona kunga kabinetÄ un nolika uz viÅa galda aploksni. Vatsona kungs pat nepÅ«lÄjÄs uz to paskatÄ«ties ā viÅÅ” gaidÄ«ja darbinieku un zinÄja, ka tÄ ir atlÅ«guma vÄstule.
Vatsons jautÄja, kas nogÄja greizi.
TirdzniecÄ«bas pÄrstÄvis detalizÄti stÄstÄ«ja par konkursa norisi. ViÅÅ” nosauca pieļautÄs kļūdas, no kurÄm varÄja izvairÄ«ties. Visbeidzot viÅÅ” teica: "Votsona kungs, paldies, ka ļÄvÄt man paskaidrot. Es zinu, cik ļoti mums bija vajadzÄ«gs Å”is pasÅ«tÄ«jums. Es zinu, cik viÅÅ” bija svarÄ«gs,ā un gatavojÄs doties prom.
Vatsons piegÄja viÅam pie durvÄ«m, paskatÄ«jÄs viÅam acÄ«s un atdeva aploksni ar vÄrdiem: āKÄ es varu tevi palaist? Es tikko ieguldÄ«ju miljonu dolÄru jÅ«su izglÄ«tÄ«bÄ.
Man ir T-krekls, uz kura ir rakstÄ«ts: "Ja tu tieÅ”Äm mÄcies no kļūdÄm, tad es jau esmu meistars." PatiesÄ«bÄ, runÄjot par kļūdÄm, es esmu zinÄtÅu doktors.
PirmÄ vieta: App Inventor API
PatieÅ”Äm briesmÄ«gas kļūdas ietekmÄ milzÄ«gu skaitu lietotÄju, kļūst publiski zinÄmas, to laboÅ”ana prasa ilgu laiku, un tÄs pieļauj tie, kuri nav varÄjuÅ”i tÄs pieļaut. Mana lielÄkÄ kļūda atbilst visiem Å”iem kritÄrijiem.
Jo sliktÄk, jo labÄk
ES lasu
KÄ tam vajadzÄtu bÅ«t: dizainam jÄbÅ«t vienkÄrÅ”am ievieÅ”anai un saskarnei. Interfeisa vienkÄrŔība ir svarÄ«gÄka par ievieÅ”anas vienkÄrŔību.
Jo sliktÄk, jo labÄk: dizainam jÄbÅ«t vienkÄrÅ”am gan ievieÅ”anai, gan saskarnei. IevieÅ”anas vienkÄrŔība ir svarÄ«gÄka par saskarnes vienkÄrŔību.
AizmirsÄ«sim par to uz minÅ«ti. DiemžÄl es par to aizmirsu daudzus gadus.
LietotÅu izgudrotÄjs
StrÄdÄjot Google, es biju daļa no komandas
MÄs Java ieviesÄm objektu orientÄtu App Inventor, tÄpÄc tajÄ ir tikai virkne objektu. TÄ kÄ bumbiÅas un spraiti uzvedas ļoti lÄ«dzÄ«gi, es izveidoju abstraktu spraitu klasi ar Ä«paŔībÄm (laukiem) X, Y, Ätrums (Ätrums) un Virziens (virziens). ViÅiem bija tÄdas paÅ”as metodes sadursmju noteikÅ”anai, atlÄcieniem no ekrÄna malas utt.
GalvenÄ atŔķirÄ«ba starp bumbu un spraitu ir tieÅ”i tajÄ, kas ir uzzÄ«mÄts ā aizpildÄ«ts aplis vai rastrs. TÄ kÄ es vispirms ieviesu spraitus, bija loÄ£iski norÄdÄ«t attÄla atraÅ”anÄs vietas augÅ”ÄjÄ kreisÄ stÅ«ra x un y koordinÄtas.
Kad spraiti darbojÄs, es nolÄmu, ka varu ieviest lodÄ«Å”u objektus ar ļoti mazu kodu. VienÄ«gÄ problÄma bija tÄ, ka izvÄlÄjos vienkÄrÅ”Äko marÅ”rutu (no realizÄtÄja viedokļa), norÄdot bumbu ierÄmÄjoÅ”Äs kontÅ«ras augÅ”ÄjÄ kreisÄ stÅ«ra x un y koordinÄtas.
Faktiski bija jÄnorÄda apļa centra x un y koordinÄtas, kÄ to mÄca jebkurÄ matemÄtikas mÄcÄ«bu grÄmatÄ un jebkurÄ citÄ avotÄ, kurÄ minÄti apļi.
AtŔķirÄ«bÄ no manÄm pagÄtnes kļūdÄm, Ŕī skÄra ne tikai manus kolÄÄ£us, bet arÄ« miljoniem App Inventor lietotÄju. Daudzi no viÅiem bija bÄrni vai pilnÄ«gi jauni programmÄÅ”ana. ViÅiem bija jÄveic daudz nevajadzÄ«gu darbÄ«bu, strÄdÄjot pie katras programmas, kurÄ bija bumba. Ja ar smiekliem atceros citas savas kļūdas, tad Ŕī man liek pasvÄ«st arÄ« Å”odien.
Es beidzot izlaboju Å”o kļūdu tikai nesen, desmit gadus vÄlÄk. āLabotsā, nevis āizlabotsā, jo, kÄ saka DžoÅ”ua Blohs, API ir mūžīgas. Nevarot veikt izmaiÅas, kas ietekmÄtu esoÅ”Äs programmas, mÄs pievienojÄm OriginAtCenter rekvizÄ«tu ar vÄrtÄ«bu false vecajÄs programmÄs un true visÄs turpmÄkajÄs programmÄs. LietotÄji var uzdot loÄ£isku jautÄjumu: kurÅ” vispÄr domÄja novietot sÄkumpunktu kaut kur citur, nevis centrÄ. Kam? Vienam programmÄtÄjam, kurÅ” pirms desmit gadiem bija par slinku, lai izveidotu normÄlu API.
GÅ«tÄs mÄcÄ«bas
StrÄdÄjot ar API (kas dažreiz ir jÄdara gandrÄ«z katram programmÄtÄjam), jums jÄievÄro vislabÄkie padomi, kas izklÄstÄ«ti DžoÅ”ua Bloha videoklipÄ.
- API var sniegt jums gan lielu labumu, gan lielu kaitÄjumu.. Laba API rada atkÄrtotus klientus. Sliktais kļūst par tavu mūžīgo murgu.
- PubliskÄs API, tÄpat kÄ dimanti, kalpo mūžīgi. Atdodiet visu: nekad vairs nebÅ«s iespÄjas izdarÄ«t visu pareizi.
- API kontÅ«rÄm jÄbÅ«t Ä«sÄm ā viena lapa ar klaÅ”u un metožu parakstiem un aprakstiem, kas aizÅem ne vairÄk kÄ vienu rindiÅu. Tas ļaus jums viegli pÄrstrukturÄt API, ja tas pirmajÄ reizÄ neizrÄdÄ«sies ideÄls.
- Aprakstiet lietoÅ”anas gadÄ«jumuspirms API ievieÅ”anas vai pat darba pie tÄs specifikÄcijas. TÄdÄ veidÄ jÅ«s izvairÄ«sieties no pilnÄ«bÄ nefunkcionÄjoÅ”a API ievieÅ”anas un norÄdÄ«Å”anas.
Ja es bÅ«tu uzrakstÄ«jis kaut Ä«su konspektu ar mÄkslÄ«gu skriptu, visticamÄk, es bÅ«tu identificÄjis kļūdu un to izlabojis. Ja nÄ, tad kÄds no maniem kolÄÄ£iem noteikti to darÄ«tu. Par jebkuru lÄmumu, kam ir tÄlejoÅ”as sekas, ir jÄdomÄ vismaz dienu (tas attiecas ne tikai uz programmÄÅ”anu).
RiÄarda Gabriela esejas nosaukums āSliktÄks ir labÄksā norÄda uz priekÅ”rocÄ«bu, kas rodas pirmajam tirgÅ« ā pat ar nepilnÄ«gu produktu ā, kamÄr kÄds cits pavada mūžību, dzenoties pÄc perfektÄ. PÄrdomÄjot sprite kodu, es saprotu, ka man pat nebija jÄraksta vairÄk koda, lai tas bÅ«tu pareizi. Lai ko arÄ« teiktu, es rupji kļūdÄ«jos.
SecinÄjums
ProgrammÄtÄji katru dienu pieļauj kļūdas neatkarÄ«gi no tÄ, vai tas raksta kļūdainu kodu vai nevÄlas izmÄÄ£inÄt kaut ko, kas uzlabos viÅu prasmes un produktivitÄti. Protams, jÅ«s varat bÅ«t programmÄtÄjs, nepieļaujot tik nopietnas kļūdas kÄ es. Bet nav iespÄjams kļūt par labu programmÄtÄju, neatzÄ«stot savas kļūdas un nemÄcoties no tÄm.
Es pastÄvÄ«gi sastopos ar studentiem, kuriem Ŕķiet, ka viÅi pieļauj pÄrÄk daudz kļūdu un tÄpÄc nav gatavi programmÄÅ”anai. Es zinu, cik izplatÄ«ts krÄpnieku sindroms ir IT jomÄ. Es ceru, ka jÅ«s iemÄcÄ«sities manis uzskaitÄ«tÄs mÄcÄ«bas, taÄu atcerieties galveno: katrs no mums pieļauj kļūdas - apkaunojoÅ”as, smieklÄ«gas, briesmÄ«gas. BÅ«Å”u pÄrsteigts un sarÅ«gtinÄts, ja turpmÄk man nepietiks materiÄla raksta turpinÄÅ”anai.
Avots: www.habr.com