Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)
Kòm yo di, si ou pa wont nan ansyen kòd ou a, Lè sa a, ou pa ap grandi kòm yon pwogramè - e mwen dakò ak opinyon sa a. Mwen te kòmanse pwograme pou plezi plis pase 40 ane de sa, ak pwofesyonèl 30 ane de sa, kidonk mwen gen yon anpil nan erè. anpil. Antanke yon pwofesè syans enfòmatik, mwen anseye elèv mwen yo pou yo aprann nan erè yo—yo, mwen menm ak lòt moun. Mwen panse li lè pou m pale de erè mwen pou m pa pèdi modesti mwen. Mwen espere ke yo pral itil yon moun.

Twazyèm plas - Microsoft C du

Pwofesè lekòl mwen an te kwè ke Romeo ak Jilyèt pa t 'kapab konsidere kòm yon trajedi paske karaktè yo pa te gen okenn koupab trajik - yo tou senpleman konpòte yo estipid, jan adolesan yo ta dwe. Mwen pa t 'dakò avè l' lè sa a, men kounye a mwen wè yon grenn nan rationalité nan opinyon li, espesyalman nan koneksyon ak pwogramasyon.

Lè mwen te fini dezyèm ane mwen nan MIT, mwen te jèn ak san eksperyans, ni nan lavi ak nan pwogramasyon. Nan ete a, mwen te entène nan Microsoft, nan ekip la du C. Okòmansman, mwen te fè bagay woutin tankou sipò profilage, ak Lè sa a, mwen te reskonsab travay sou pati ki pi plezi nan du a (jan mwen te panse) - optimize backend. An patikilye, mwen te oblije amelyore kòd x86 pou deklarasyon branch yo.

Detèmine pou m ekri pi bon kòd machin lan pou chak ka posib, mwen jete tèt mwen nan pisin lan tèt devan. Si dansite distribisyon valè yo te wo, mwen te antre nan yo tab tranzisyon. Si yo te gen yon divizyon komen, mwen te itilize li pou fè tab la pi sere (men sèlman si divizyon an te kapab fè lè l sèvi avèk ti chanjman). Lè tout valè yo te pouvwa de, mwen te fè yon lòt optimize. Si yon seri valè pa satisfè kondisyon mwen yo, mwen divize l an plizyè ka optimize epi mwen itilize kòd ki deja optimize a.

Se te yon kochma. Anpil ane apre yo te di mwen ke pwogramè a ki eritye kòd mwen an te rayi m '.

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)

Leson aprann

Kòm David Patterson ak John Hennessy ekri nan Achitekti òdinatè ak konsepsyon sistèm òdinatè, youn nan prensip prensipal yo nan achitekti ak konsepsyon se jeneralman fè bagay sa yo mache pi vit ke posib.

Akselere ka komen yo pral amelyore pèfòmans pi efikas pase optimize ka ki ra. Iwonilman, ka komen yo souvan pi senp pase sa ki ra. Konsèy lojik sa a sipoze ke ou konnen ki ka konsidere kòm komen - e sa sèlman posib atravè yon pwosesis tès ak mezi atansyon.

Nan defans mwen, mwen te eseye konnen ki sa deklarasyon branch yo te sanble ak nan pratik (tankou konbyen branch te gen ak ki jan konstan yo te distribye), men an 1988 enfòmasyon sa a pa t 'disponib. Sepandan, mwen pa ta dwe ajoute ka espesyal chak fwa du aktyèl la pa t 'kapab jenere kòd optimal pou egzanp atifisyèl mwen te vini ak.

Mwen te bezwen rele yon pwomotè ki gen eksperyans epi, ansanm avè l, reflechi sou sa ki ka komen yo te epi fè fas ak yo espesyalman. Mwen ta ekri mwens kòd, men sa se yon bon bagay. Kòm fondatè Stack Overflow Jeff Atwood te ekri, pi move lènmi yon pwogramè se pwogramè a li menm:

Mwen konnen ou gen pi bon entansyon, menm jan ak nou tout. Nou kreye pwogram ak renmen ekri kòd. Se konsa nou fèt. Nou panse ke nenpòt pwoblèm ka rezoud ak tep, yon beki endijèn ak yon zongle nan kòd. Kòm anpil jan li doulè codeers admèt li, kòd ki pi bon an se kòd ki pa egziste. Chak nouvo liy bezwen debogaj ak sipò, li bezwen konprann. Lè ou ajoute nouvo kòd, ou ta dwe fè sa ak repiyans ak degou paske tout lòt opsyon yo te fin itilize. Anpil pwogramè ekri twòp kòd, fè li lènmi nou.

Si mwen te ekri kòd ki pi senp ki kouvri ka komen, li ta pi fasil pou mete ajou si sa nesesè. Mwen kite dèyè yon dezòd ke pèsonn pa te vle fè fas ak.

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)

Dezyèm plas: piblisite sou rezo sosyal yo

Lè mwen t ap travay nan Google sou medya sosyal piblisite (sonje Myspace?), Mwen te ekri yon bagay tankou sa a nan 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)) {
  }
}

Pwogramè yo ka imedyatman wè erè a: dènye agiman an ta dwe j, pa i. Tès inite w la pa t revele erè a, ni evalyatè mwen an tou. Te lansman an te pote soti, ak yon swa kòd mwen an te ale nan sèvè a ak fè aksidan tout òdinatè yo nan sant done a.

Pa gen anyen mal ki te pase. Pa gen anyen ki te kraze pou pèsonn, paske anvan lansman mondyal la te teste kòd la nan yon sèl sant done. Sòf si enjenyè SRE yo te sispann jwe bilyar pou yon ti tan epi yo te fè yon ti rollback. Nan denmen maten, mwen te resevwa yon imèl ak yon pil fatra aksidan, korije kòd la epi ajoute tès inite ki ta trape erè a. Depi mwen te swiv pwotokòl la - otreman kòd mwen an ta tou senpleman fail kouri - pa te gen okenn lòt pwoblèm.

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)

Leson aprann

Anpil moun sèten ke yon gwo erè konsa pral definitivman koute ranvwaye koupab la, men sa a se pa konsa: premyèman, tout pwogramasyon fè erè, ak dezyèmman, yo raman fè menm erè a de fwa.

An reyalite, mwen gen yon zanmi pwogramè ki te yon enjenyè briyan e yo te revoke pou fè yon sèl erè. Apre sa, li te anboche nan Google (epi byento ankouraje) - li onètman te pale sou erè a li te fè nan yon entèvyou, epi li pa te konsidere kòm fatal.

Se sa di sou Thomas Watson, chèf lejand IBM:

Yo te anonse yon lòd gouvènman an ki vo anviwon yon milyon dola. IBM Corporation - oswa pito, Thomas Watson Sr pèsonèlman - reyèlman te vle jwenn li. Malerezman, reprezantan lavant la pa t kapab fè sa epi IBM te pèdi òf la. Nan demen, anplwaye sa a te antre nan biwo Mesye Watson a epi li te mete yon anvlòp sou biwo li. Mesye Watson pa t menm pran tèt li pou l gade - li t ap tann yon anplwaye e li te konnen se yon lèt demisyon.

Watson te mande sa ki mal.

Reprezantan lavant lan te pale an detay sou pwogrè tender la. Li nonmen erè ki te fè yo ki te kapab evite. Finalman, li te di, “Mesye Watson, mèsi paske w te kite m eksplike. Mwen konnen konbyen nou bezwen lòd sa a. Mwen konnen ki jan li te enpòtan,” epi li te pare pou ale.

Watson te pwoche bò pòt la, li te gade l nan je epi li te retounen anvlòp la ak pawòl sa yo: “Ki jan mwen ka kite ou ale? Mwen jis envesti yon milyon dola nan edikasyon ou.

Mwen gen yon mayo ki di: "Si ou reyèlman aprann nan erè, Lè sa a, mwen deja yon mèt." An reyalite, lè li rive erè, mwen se yon doktè nan syans.

Premye plas: App Inventor API

Erè vrèman terib afekte yon gwo kantite itilizatè yo, vin konesans piblik, pran anpil tan pou korije, epi yo fè pa moun ki pa t 'kapab fè yo. Pi gwo erè mwen an adapte tout kritè sa yo.

Pi mal la pi bon

mwen li redaksyon pa Richard Gabriel sou apwòch sa a nan nineties yo kòm yon elèv gradye, e mwen renmen li tèlman ke mwen mande li bay elèv mwen yo. Si ou pa sonje byen, rafrechi memwa, li piti. Redaksyon sa a fè diferans ant dezi a pou "fè li dwat" ak apwòch "pi mal se pi bon" nan plizyè fason, enkli senplisite.

Ki jan li ta dwe: konsepsyon an ta dwe senp nan aplikasyon ak koòdone. Senplisite nan koòdone a pi enpòtan pase senplisite nan aplikasyon an.

Pi mal la, pi bon an: konsepsyon an ta dwe senp nan aplikasyon ak koòdone. Senplisite nan aplikasyon pi enpòtan pase senplisite nan koòdone la.

Ann bliye sa pou yon minit. Malerezman, mwen bliye li pou anpil ane.

App envanteur

Pandan m t ap travay nan Google, mwen te fè pati ekip la App envanteur, yon anviwònman devlopman sou entènèt trennen-depoze pou aspiran devlopè Android. Se te ane 2009, e nou te prese pou nou lage vèsyon alpha a alè pou nan sezon lete a nou te ka fè kou mèt pou pwofesè ki te kapab itilize anviwònman an lè y ap anseye nan sezon otòn la. Mwen te ofri volontè pou aplike sprites, nostaljik pou jan mwen te konn ekri jwèt sou TI-99/4 la. Pou moun ki pa konnen, yon luten se yon objè grafik ki genyen de dimansyon ki ka deplase epi kominike avèk lòt eleman lojisyèl. Men kèk egzanp sou sprites yo enkli veso espasyèl, astewoyid, mab, ak rakèt.

Nou aplike App Inventor oryante objè nan Java, kidonk gen jis yon pakèt objè ladan l. Depi boul ak luten konpòte yo menm jan an, mwen te kreye yon klas luten abstrè ak pwopriyete (jaden) X, Y, Vitès (vitès) ak Tit (direksyon). Yo te gen menm metòd pou detekte kolizyon, rebondi sou kwen ekran an, elatriye.

Diferans prensipal ki genyen ant yon boul ak yon luten se sa ki egzakteman yo trase - yon sèk plen oswa yon raster. Depi mwen te aplike sprites an premye, li te lojik pou presize kowòdone x ak y nan kwen anwo gòch kote imaj la ye.

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)
Yon fwa sprites yo te travay, mwen te deside ke mwen te kapab aplike objè boul ak anpil kòd. Pwoblèm nan sèlman se ke mwen te pran wout ki pi senp (soti nan pwen de vi nan aplikasyon an), ki endike kowòdone yo x- ak y-nan kwen anwo gòch nan kontou a ankadre boul la.

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)
An reyalite, li te nesesè pou endike kowòdone x ak y nan sant sèk la, jan yo anseye nan nenpòt liv matematik ak nenpòt lòt sous ki mansyone sèk.

Erè ki pi anbarasan nan karyè pwogram mwen an (jiskaprezan)
Kontrèman ak erè sot pase yo, yon sèl sa a afekte pa sèlman kòlèg mwen yo, men tou, dè milyon de itilizatè App Inventor. Anpil nan yo te timoun oswa konplètman nouvo nan pwogramasyon. Yo te oblije fè yon anpil nan etap nesesè lè yo ap travay sou chak aplikasyon kote boul la te prezan. Si mwen sonje lòt erè mwen yo ak ri, Lè sa a, yon sèl sa a fè m 'swe menm jodi a.

Mwen finalman patched pinèz sa a sèlman dènyèman, dis ane pita. "Patched", pa "ranje", paske jan Joshua Bloch di, API yo etènèl. Nou pa kapab fè chanjman ki ta afekte pwogram ki egziste deja yo, nou te ajoute pwopriyete OriginAtCenter ak valè fo nan ansyen pwogram yo ak vre nan tout pwochen pwogram yo. Itilizatè yo ka mande yon kesyon ki lojik: ki moun ki menm te panse a mete pwen an kòmanse yon lòt kote pase sant la. Pou kiyès? Pou yon pwogramè ki te twò parese pou kreye yon API nòmal dizan de sa.

Leson Aprann

Lè w ap travay sou APIs (ki prèske chak pwogramè dwe fè pafwa), ou ta dwe swiv pi bon konsèy ki endike nan videyo Joshua Bloch la ".Ki jan yo kreye yon bon API ak poukisa li tèlman enpòtan"oswa nan lis kout sa a:

  • Yon API ka pote ou tou de gwo benefis ak gwo mal.. Yon bon API kreye kliyan repete. Move a vin kochma etènèl ou.
  • API piblik, tankou Diamonds, dire pou tout tan. Bay li tout ou: p'ap janm gen yon lòt chans pou fè tout bagay byen.
  • Plan API yo ta dwe kout — yon paj ak siyati klas ak metòd ak deskripsyon, pa pran plis pase yon liy. Sa a pral pèmèt ou fasilman restriktire API a si li pa vire pafè premye fwa a.
  • Dekri ka itilize yoanvan aplike API a oswa menm travay sou spesifikasyon li yo. Nan fason sa a ou pral evite aplike ak espesifye yon API konplètman ki pa fonksyonèl.

Si mwen te ekri menm yon rezime kout ak yon script atifisyèl, gen plis chans mwen ta idantifye erè a epi korije li. Si ou pa, Lè sa a, youn nan kòlèg mwen ta definitivman fè li. Nenpòt desizyon ki gen konsekans byen lwen bezwen reflechi sou pou omwen yon jou (sa a aplike pa sèlman nan pwogramasyon).

Tit redaksyon Richard Gabriel la, "Worrse Is Better," refere a avantaj ki genyen pou yo vin premye nan mache—menm ak yon pwodwi enpafè—tandan yon lòt moun pase yon letènite ap kouri dèyè pwodwi ki pafè a. Lè m reflechi sou kòd sprite a, mwen reyalize ke mwen pa t 'menm bezwen ekri plis kòd pou jwenn li dwat. Kèlkeswa sa yon moun ka di, mwen te gwo erè.

Konklizyon

Pwogramè yo fè erè chak jou, kit se ekri kòd buggy oswa pa vle eseye yon bagay ki pral amelyore konpetans yo ak pwodiktivite. Natirèlman, ou ka yon pwogramè san yo pa fè erè grav tankou mwen te fè. Men, li enposib vin yon pwogramè bon san yo pa rekonèt erè ou yo ak aprann nan men yo.

Mwen toujou ap rankontre elèv ki santi yo fè twòp erè e se poutèt sa yo pa koupe pou pwogramasyon. Mwen konnen ki jan sendwòm enpostè komen se nan IT. Mwen espere ou pral aprann leson mwen te site yo - men sonje youn nan prensipal la: chak nan nou fè erè - anbarasan, komik, terib. Mwen pral sezi ak fache si nan lavni mwen pa gen ase materyèl yo kontinye atik la.

Sous: www.habr.com

Add nouvo kòmantè