Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)
Fel y dywedant, os nad oes gennych gywilydd o'ch hen god, yna nid ydych chi'n tyfu fel rhaglennydd - ac rwy'n cytuno â'r farn hon. Dechreuais raglennu am hwyl dros 40 mlynedd yn ôl, ac yn broffesiynol 30 mlynedd yn ôl, felly mae gen i lawer o gamgymeriadau. llawer o. Fel athro cyfrifiadureg, rwy'n dysgu fy myfyrwyr i ddysgu o gamgymeriadau - eu rhai nhw, fy un i, ac eraill'. Rwy'n meddwl ei bod hi'n bryd siarad am fy nghamgymeriadau er mwyn peidio â cholli fy gwyleidd-dra. Rwy'n gobeithio y byddant yn ddefnyddiol i rywun.

Trydydd lle - casglwr Microsoft C

Roedd fy athrawes ysgol yn credu na ellid ystyried Romeo a Juliet yn drasiedi oherwydd nad oedd gan y cymeriadau unrhyw euogrwydd trasig - yn syml, roeddent yn ymddwyn yn dwp, fel y dylai pobl ifanc yn eu harddegau. Doeddwn i ddim yn cytuno ag ef bryd hynny, ond nawr rwy’n gweld gronyn o resymoldeb yn ei farn ef, yn enwedig mewn cysylltiad â rhaglennu.

Erbyn i mi orffen fy mlwyddyn sophomore yn MIT, roeddwn yn ifanc ac yn ddibrofiad, mewn bywyd ac mewn rhaglennu. Yn yr haf, fe wnes i internio yn Microsoft, ar dîm casglwr C. Ar y dechrau, fe wnes i bethau arferol fel cefnogaeth proffilio, ac yna fe'm ymddiriedwyd i weithio ar y rhan fwyaf hwyliog o'r casglwr (fel yr oeddwn yn meddwl) - optimeiddio backend. Yn benodol, bu'n rhaid i mi wella'r cod x86 ar gyfer datganiadau cangen.

Yn benderfynol o ysgrifennu'r cod peiriant gorau posibl ar gyfer pob achos posibl, fe wnes i daflu fy hun i mewn i'r pwll headlong. Pe bai dwysedd dosbarthu gwerthoedd yn uchel, rhoddais i mewn iddynt tabl pontio. Pe bai rhannydd cyffredin ganddynt, defnyddiais ef i wneud y bwrdd yn dynnach (ond dim ond os oedd modd gwneud y rhaniad gan ddefnyddio shifft did). Pan oedd yr holl werthoedd yn bwerau o ddau, fe wnes i optimeiddio arall. Pe na bai set o werthoedd yn bodloni fy amodau, fe wnes i ei rannu'n sawl achos y gellir ei optimeiddio a defnyddio'r cod sydd eisoes wedi'i optimeiddio.

Roedd yn hunllef. Flynyddoedd lawer yn ddiweddarach dywedwyd wrthyf fod y rhaglennydd a etifeddodd fy nghod yn fy nghasáu.

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)

Gwers a ddysgwyd

Wrth i David Patterson a John Hennessy ysgrifennu mewn Pensaernïaeth Gyfrifiadurol a Dylunio Systemau Cyfrifiadurol, un o brif egwyddorion pensaernïaeth a dylunio yn gyffredinol yw gwneud i bethau weithio cyn gynted â phosibl.

Bydd cyflymu achosion cyffredin yn gwella perfformiad yn fwy effeithiol nag optimeiddio achosion prin. Yn eironig, mae achosion cyffredin yn aml yn symlach na rhai prin. Mae'r cyngor rhesymegol hwn yn cymryd yn ganiataol eich bod yn gwybod pa achos sy'n cael ei ystyried yn gyffredin - a dim ond trwy broses o brofi a mesur gofalus y mae hyn yn bosibl.

Yn fy amddiffyniad, ceisiais ddarganfod sut olwg oedd ar ddatganiadau cangen yn ymarferol (fel faint o ganghennau oedd a sut roedd cysonion yn cael eu dosbarthu), ond ym 1988 nid oedd y wybodaeth hon ar gael. Fodd bynnag, ni ddylwn i fod wedi ychwanegu achosion arbennig pryd bynnag na allai'r casglwr presennol gynhyrchu'r cod gorau posibl ar gyfer yr enghraifft artiffisial y deuthum ati.

Roedd angen i mi alw datblygwr profiadol ac, ynghyd ag ef, meddwl beth oedd yr achosion cyffredin a delio â nhw yn benodol. Byddwn yn ysgrifennu llai o god, ond mae hynny'n beth da. Fel yr ysgrifennodd sylfaenydd Stack Overflow, Jeff Atwood, gelyn gwaethaf rhaglennydd yw'r rhaglennydd ei hun:

Rwy'n gwybod bod gennych chi'r bwriadau gorau, fel sydd gennym ni i gyd. Rydyn ni'n creu rhaglenni ac wrth ein bodd yn ysgrifennu cod. Dyna sut rydyn ni'n cael ein gwneud. Credwn y gellir datrys unrhyw broblem gyda thâp dwythell, bag bag cartref a phinsiad o god. Yn gymaint ag y mae'n boen i godwyr ei gyfaddef, y cod gorau yw'r cod nad yw'n bodoli. Mae angen dadfygio a chefnogaeth ar bob llinell newydd, mae angen ei deall. Pan fyddwch chi'n ychwanegu cod newydd, dylech chi wneud hynny gydag amharodrwydd a ffieidd-dod oherwydd bod pob opsiwn arall wedi'i ddihysbyddu. Mae llawer o raglenwyr yn ysgrifennu gormod o god, gan ei wneud yn elyn i ni.

Pe bawn wedi ysgrifennu cod symlach a oedd yn cwmpasu achosion cyffredin, byddai wedi bod yn llawer haws ei ddiweddaru pe bai angen. Gadewais lanast ar ôl nad oedd neb eisiau delio ag ef.

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)

Ail le: hysbysebu ar rwydweithiau cymdeithasol

Pan oeddwn yn gweithio yn Google ar hysbysebu cyfryngau cymdeithasol (cofiwch Myspace?), ysgrifennais rywbeth fel hyn yn 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)) {
  }
}

Gall rhaglenwyr weld y gwall ar unwaith: j dylai'r ddadl olaf fod, nid i. Ni ddatgelodd profion uned y gwall, ac ni wnaeth fy adolygydd ychwaith. Cynhaliwyd y lansiad, ac un noson aeth fy nghod i'r gweinydd a chwalu'r holl gyfrifiaduron yn y ganolfan ddata.

Ni ddigwyddodd dim drwg. Ni thorrodd unrhyw beth i unrhyw un, oherwydd cyn y lansiad byd-eang cafodd y cod ei brofi o fewn un ganolfan ddata. Oni bai bod peirianwyr ARhPh yn rhoi'r gorau i chwarae biliards am gyfnod ac yn dychwelyd ychydig. Y bore wedyn derbyniais e-bost gyda dympio damwain, cywiro'r cod ac ychwanegu profion uned a fyddai'n dal y gwall. Ers i mi ddilyn y protocol - fel arall byddai fy nghod yn methu â rhedeg - nid oedd unrhyw broblemau eraill.

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)

Gwers a ddysgwyd

Mae llawer yn siŵr y bydd camgymeriad mor fawr yn bendant yn costio diswyddo'r tramgwyddwr, ond nid yw hyn felly: yn gyntaf, mae pob rhaglennydd yn gwneud camgymeriadau, ac yn ail, anaml y byddant yn gwneud yr un camgymeriad ddwywaith.

Yn wir, mae gen i ffrind rhaglennydd a oedd yn beiriannydd gwych ac a gafodd ei danio am wneud un camgymeriad. Ar ôl hynny, cafodd ei gyflogi yn Google (a chafodd ei hyrwyddo'n fuan) - siaradodd yn onest am y camgymeriad a wnaeth mewn cyfweliad, ac ni chafodd ei ystyried yn angheuol.

Dyma beth dweud am Thomas Watson, pennaeth chwedlonol IBM:

Cyhoeddwyd gorchymyn gan y llywodraeth gwerth tua miliwn o ddoleri. Roedd IBM Corporation - neu yn hytrach, Thomas Watson Sr yn bersonol - wir eisiau ei gael. Yn anffodus, nid oedd y cynrychiolydd gwerthu yn gallu gwneud hyn a chollodd IBM y bid. Y diwrnod wedyn, daeth y gweithiwr hwn i mewn i swyddfa Mr Watson a gosod amlen ar ei ddesg. Nid oedd Mr. Watson hyd yn oed yn trafferthu edrych arno - roedd yn aros am weithiwr ac yn gwybod mai llythyr o ymddiswyddiad ydoedd.

Gofynnodd Watson beth aeth o'i le.

Siaradodd y cynrychiolydd gwerthu yn fanwl am gynnydd y tendr. Enwodd gamgymeriadau a wnaed y gellid bod wedi eu hosgoi. Yn olaf, dywedodd, “Mr. Watson, diolch i chi am adael i mi egluro. Rwy'n gwybod cymaint yr oedd angen y gorchymyn hwn arnom. Dwi’n gwybod pa mor bwysig oedd e,” a pharatoais i adael.

Aeth Watson ato wrth y drws, edrych arno yn y llygaid a dychwelyd yr amlen gyda'r geiriau: “Sut alla i adael i chi fynd? Rwyf newydd fuddsoddi miliwn o ddoleri yn eich addysg.

Mae gen i grys-T sy'n dweud: “Os ydych chi wir yn dysgu o gamgymeriadau, yna rydw i eisoes yn feistr.” Yn wir, pan ddaw i wallau, yr wyf yn feddyg gwyddoniaeth.

Lle cyntaf: App Inventor API

Mae gwallau gwirioneddol ofnadwy yn effeithio ar nifer enfawr o ddefnyddwyr, yn dod yn wybodaeth gyhoeddus, yn cymryd amser hir i'w cywiro, ac yn cael eu gwneud gan y rhai na allent fod wedi eu gwneud. Mae fy nghamgymeriad mwyaf yn cyd-fynd â'r holl feini prawf hyn.

Y gwaethaf y gorau

darllenais traethawd gan Richard Gabriel am y dull hwn yn y nawdegau fel myfyriwr graddedig, ac rwy'n ei hoffi gymaint fel fy mod yn ei ofyn i'm myfyrwyr. Os nad ydych chi'n ei gofio'n dda, adnewyddwch eich cof, mae'n fach. Mae’r traethawd hwn yn cyferbynnu’r awydd i “wneud pethau’n iawn” a’r dull “gwaeth yw gwell” mewn sawl ffordd, gan gynnwys symlrwydd.

Sut y dylai fod: dylai'r dyluniad fod yn syml o ran gweithredu a rhyngwyneb. Mae symlrwydd y rhyngwyneb yn bwysicach na symlrwydd gweithredu.

Y gwaethaf, y gorau: dylai'r dyluniad fod yn syml o ran gweithredu a rhyngwyneb. Mae symlrwydd gweithredu yn bwysicach na symlrwydd y rhyngwyneb.

Gadewch i ni anghofio am hynny am funud. Yn anffodus, anghofiais amdano ers blynyddoedd lawer.

Dyfeisiwr Apiau

Tra'n gweithio yn Google, roeddwn i'n rhan o'r tîm Dyfeisiwr Apiau, amgylchedd datblygu ar-lein llusgo a gollwng ar gyfer darpar ddatblygwyr Android. Roedd hi’n 2009, ac roedden ni ar frys i ryddhau’r fersiwn alffa mewn pryd er mwyn i ni allu cynnal dosbarthiadau meistr yn yr haf ar gyfer athrawon a allai ddefnyddio’r amgylchedd wrth addysgu yn yr hydref. Gwirfoddolais i weithredu sprites, hiraethus am sut roeddwn i'n arfer ysgrifennu gemau ar y TI-99/4. I'r rhai nad ydynt yn gwybod, mae corlun yn wrthrych graffigol dau-ddimensiwn sy'n gallu symud a rhyngweithio ag elfennau meddalwedd eraill. Mae enghreifftiau o sprites yn cynnwys llongau gofod, asteroidau, marblis, a racedi.

Fe wnaethom weithredu App Inventor sy'n canolbwyntio ar wrthrych yn Java, felly dim ond criw o wrthrychau sydd yno. Gan fod peli a sprites yn ymddwyn yn debyg iawn, creais ddosbarth corlun haniaethol gydag eiddo (caeau) X, Y, Cyflymder (cyflymder) a Phennawd (cyfeiriad). Roedd ganddynt yr un dulliau ar gyfer canfod gwrthdrawiadau, bownsio oddi ar ymyl y sgrin, ac ati.

Y prif wahaniaeth rhwng pêl a chorlun yw beth yn union sy'n cael ei dynnu - cylch llenwi neu raster. Ers i mi roi sprites ar waith yn gyntaf, roedd yn rhesymegol nodi cyfesurynnau x ac y yng nghornel chwith uchaf lle'r oedd y ddelwedd wedi'i lleoli.

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)
Unwaith yr oedd y sprites yn gweithio, penderfynais y gallwn weithredu gwrthrychau pêl gydag ychydig iawn o god. Yr unig broblem oedd fy mod wedi cymryd y llwybr symlaf (o safbwynt y gweithredwr), gan nodi cyfesurynnau x- ac y yng nghornel chwith uchaf y gyfuchlin yn fframio'r bêl.

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)
Mewn gwirionedd, roedd angen nodi cyfesurynnau x- ac y-canol y cylch, fel y'u dysgir mewn unrhyw werslyfr mathemateg ac unrhyw ffynhonnell arall sy'n sôn am gylchoedd.

Y camgymeriadau mwyaf embaras yn fy ngyrfa raglennu (hyd yn hyn)
Yn wahanol i fy nghamgymeriadau yn y gorffennol, effeithiodd yr un hwn nid yn unig ar fy nghydweithwyr, ond hefyd ar filiynau o ddefnyddwyr App Inventor. Roedd llawer ohonynt yn blant neu'n gwbl newydd i raglennu. Roedd yn rhaid iddynt berfformio llawer o gamau diangen wrth weithio ar bob cais yr oedd y bêl yn bresennol ynddo. Os cofiaf fy nghamgymeriadau eraill gyda chwerthin, yna mae'r un hwn yn gwneud i mi chwysu hyd yn oed heddiw.

Dim ond yn ddiweddar y gwnes i glytio'r byg hwn o'r diwedd, ddeng mlynedd yn ddiweddarach. “Clytiog”, nid “sefydlog”, oherwydd fel y dywed Joshua Bloch, mae APIs yn dragwyddol. Methu gwneud newidiadau a fyddai'n effeithio ar raglenni presennol, fe wnaethom ychwanegu'r eiddo OriginAtCenter gyda'r gwerth ffug mewn hen raglenni ac yn wir ym mhob un yn y dyfodol. Gall defnyddwyr ofyn cwestiwn rhesymegol: pwy oedd hyd yn oed yn meddwl gosod y man cychwyn yn rhywle heblaw'r canol. I pwy? I un rhaglennydd oedd yn rhy ddiog i greu API arferol ddeng mlynedd yn ôl.

Gwersi a Ddysgwyd

Wrth weithio ar APIs (y mae bron pob rhaglennydd yn gorfod ei wneud weithiau), dylech ddilyn y cyngor gorau a amlinellir yn fideo Joshua Bloch "Sut i greu API da a pham ei fod mor bwysig"Neu yn y rhestr fer hon:

  • Gall API ddod â budd mawr a niwed mawr i chi.. Mae API da yn creu cwsmeriaid sy'n dychwelyd. Daw'r un drwg yn hunllef dragwyddol i chi.
  • Mae APIs cyhoeddus, fel diemwntau, yn para am byth. Rhowch y cyfan i chi: ni fydd byth gyfle arall i wneud popeth yn iawn.
  • Dylai amlinelliadau API fod yn gryno — un dudalen gyda llofnodion a disgrifiadau dosbarth a dull, heb fod yn fwy na llinell. Bydd hyn yn caniatáu ichi ailstrwythuro'r API yn hawdd os na fydd yn berffaith y tro cyntaf.
  • Disgrifiwch achosion defnyddcyn gweithredu'r API neu hyd yn oed weithio ar ei fanyleb. Fel hyn byddwch yn osgoi gweithredu a nodi API cwbl anweithredol.

Pe bawn i wedi ysgrifennu hyd yn oed grynodeb byr gyda sgript artiffisial, yn fwyaf tebygol byddwn wedi nodi'r gwall a'i gywiro. Os na, yna byddai un o fy nghydweithwyr yn bendant yn ei wneud. Mae angen meddwl am unrhyw benderfyniad sydd â chanlyniadau pellgyrhaeddol am ddiwrnod o leiaf (mae hyn yn berthnasol nid yn unig i raglennu).

Mae teitl traethawd Richard Gabriel, "Worse Is Better," yn cyfeirio at y fantais sy'n mynd i fod yn gyntaf i'r farchnad - hyd yn oed gyda chynnyrch amherffaith - tra bod rhywun arall yn treulio tragwyddoldeb yn mynd ar drywydd yr un perffaith. Gan adlewyrchu ar y cod sprite, sylweddolais nad oedd yn rhaid i mi hyd yn oed ysgrifennu mwy o god i'w gael yn iawn. Beth bynnag a ddywed rhywun, roeddwn yn camgymryd yn arw.

Casgliad

Mae rhaglenwyr yn gwneud camgymeriadau bob dydd, boed yn ysgrifennu cod bygi neu ddim eisiau rhoi cynnig ar rywbeth a fydd yn gwella eu sgil a'u cynhyrchiant. Wrth gwrs, gallwch chi fod yn rhaglennydd heb wneud camgymeriadau mor ddifrifol ag y gwnes i. Ond mae'n amhosibl dod yn rhaglennydd da heb gydnabod eich camgymeriadau a dysgu oddi wrthynt.

Rwy'n dod ar draws myfyrwyr yn gyson sy'n teimlo eu bod yn gwneud gormod o gamgymeriadau ac felly nad ydynt yn cael eu torri allan ar gyfer rhaglennu. Rwy'n gwybod pa mor gyffredin yw syndrom impostor mewn TG. Gobeithio y byddwch chi'n dysgu'r gwersi rydw i wedi'u rhestru - ond cofiwch y prif un: mae pob un ohonom yn gwneud camgymeriadau - embaras, doniol, ofnadwy. Byddaf yn synnu ac yn gofidio os nad oes gennyf ddigon o ddeunydd yn y dyfodol i barhau â'r erthygl.

Ffynhonnell: hab.com

Ychwanegu sylw