![]() | ||||
Joel on Software Joel og hugbúnaður
| ||||
|
Aðrar "Joel on Software" greinar á íslensku Aðrar "Joel on Software" greinar á ensku |
Eftir Joel Spolsky Þýtt af Kári Harðarson Próflesið af Villi Helgason 11.11.2002 Það eru ákveðnir galdrar við hönnun internetsins sem þú notar daglega. Þeir eiga sér stað í TCP stakknum sem er einn af hornsteinunum netsins. TCP er aðferð við að senda gögn á skilvirkan hátt. Með þessu á ég við: Ef þú sendir boð um net með TCP munu boðin berast á áfangastað án þess að skaddast eða brenglast. Við notum TCP í flest allt á vefnum, t.d. að ná í vefsíður og senda tölvupóst. Áreiðanleiki TCP er ástæðan fyrir því að allur þessi spennandi tölvupóstur frá glæpalýð í Austur-Afríku berst á leiðarenda eins og nýsleginn túskildingur. En æðislegt. Til samanburðar, þá er til önnur aðferð við að senda gögn sem heitir IP og er óskilvirk. Enginn lofar að gögnin berist og þau gætu skaddast áður en þau berast. Ef þú sendir fullt af boðum með IP þarftu ekki að undrast yfir að aðeins helmingurinn berst alla leið og í annari röð en hann var sendur, og að sumum boðanna hafi verið skipt út fyrir önnur boð, t.d. myndir af gasalega sætum órangútönum eða þá bara helv. drasli sem lítur út eins og efni bréfs frá Taiwan. Hér er galdrahlutinn: TCP hvílir ofaná IP. Með öðrum orðum, TCP er gert að senda gögn á skilvirkan hátt með því að nota óskilvirkar gagnasendingar. Til að útskýra hvers vegna þetta eru galdrar, vil ég að þú íhugir eftirfarand dæmisögu úr daglega lífinu sem er um margt sambærileg þótt hún sé reyndar út í hött. Ímyndaðu þér að við hefðum aðferð við að senda leikara frá Broadway til Hollywood sem gengi út á að troða þeim í bíla og keyra þá þvert yfir Bandaríkin. Sumir bílanna lenda í árekstri og leikara greyin drepast. Stundum verða leikararnir fullir á leiðinni, krúnuraka sig og fá sér tattóveringu á nasirnar, og verða of ljótir til að vinna í Hollywood, og þeir berast ekki í réttri röð til Hollywood af því þeir velja mismunandi leiðir til að komast á áfangastað. Ímyndaðu þér nú nýtt þjónustufyrirtæki sem heitir Hollywood Express. Þar lofa menn að afhenda leikara í Hollywood og ennfremur að þeir a) berist b) í réttri röð og c) í góðu ásigkomulagi. Galdrarnir felast í því að nýja fyrirtækið hefur enga leið til að efna loforðið aðra en að senda leikarana í bílum þvert yfir landið eins og áður. Fyrirtækið athugar hvort hver og einn leikari berist, ef hann gerir það ekki hringir það í aðalstöðvarnar og biður um að tvífari leikarans verði sendur í staðinn. Ef leikararnir berast í vitlausri röð sér fyrirtækið um að raða leikurunum á áfangastað. Ef fljúgandi furðuhlutur á leið inná Svæði 51 brotlendir á hraðbraut í Nevada og gerir hana allsendis ófæra eru allir leikarar á þeirri leið sendir um Arizona og fyrirtækið segir ekki einu sinni kvikmyndaleikstjórunum í Hollywood frá því sem gerðist. Það eina sem þeir sjá eru leikarar sem mæta stopulla en venjulega og þeir frétta ekki einu sinni af brotlendingunnni. Þetta eru galdrarnir við TCP í hnotskurn. Þetta er það sem tölvufræðingar kalla yfirhylming(abstraction): einföldun á einhverju miklu flóknara sem á sér stað bak við tjöldin. Reyndin er sú að megnið af tölvuforritun snýst um að byggja upp lög af yfirhylmingum. Hvað er strengja-library? Það er aðferð við að láta eins og að tölvur geti meðhöndlað textastrengi jafnauðveldlega og tölur. Hvað er skráakerfi? Það er aðferð við að láta eins og að harði diskurinn sé ekki bara bunki af málmplötum sem þeytast í hringi og geta geymt bita á ákveðnum stöðum, heldur skipulagt kerfi af möppum innan í möppum sem innihalda skrár sem innihalda gagnaskrár. Vikjum aftur að TCP. Áðan sagði ég ykkur smá hvíta lygi sem pirrar sum ykkar kannski af því hún er mjög pirrandi. Ég sagði að TCP ábyrgðist að boðin bærust á áfangastað. TCP gerir það reyndar ekki. Ef gælusnákurinn ykkar nagaði sig í gegnum netsnúruna í tölvuna ykkar og IP pakkar geta ekki borist, þá getur TCP ekkert við því gert og boðin hætta að berast. Ef þú móðgar kerfisstjórann og hann refsar þér með því að tengja tölvuna þína við elsta höbbinn í húsinu munu aðeins sumir pakkar berast, TCP er í lagi en netið óþolandi hægvirkt. Þetta er það sem ég kalla leka yfirhylmingu. TCP reynir að yfirhylma óáreiðanleika netsins en stundum lekur netið í gegnum yfirhylminguna og þú byrjar að finna fyrir hlutunum sem yfirhylmingin getur ekki verndað þig fyrir. Þetta er bara eitt dæmi um lögmál sem ég hef kallað Lögmál hinna leku yfirhylminga.
Yfirhylmingar bregðast. Stundum svolítið, stundum mikið. Það er alltaf leki. Hlutir fara úrskeiðis. Þetta gerist útum allt þar sem yfirhylmingar eru í gangi. Hér eru nokkur dæmi.
Ein leiðinleg afleiðing af lögmálinu um lekar yfirhylmingar er að þær einfalda lífið ekki eins mikið og við hefðum viljað. Þegar ég kenni einhverjum C++ þá væri mjög þægilegt ef ég þyrfti ekki að kenna þeim neitt um char* og bendla. Það væri best að kenna bara STL strengi. En einn daginn mun viðkomandi skrifa "foo"+"bar" og undarlegir hlutir byrja að gerast og þá þarf ég hvort sem er að stanza og kenna viðkomandi á char* þrátt fyrir allt. Eða þá, hann reynir að kalla í Windows API rútínu sem skilar OUT LPTSTR týpu og getur ekki skilið hvernig á að nota hana fyrr en hann lærir á char* og bendla og Unicode og whcar_t og TCHAR header skrár, og allt þetta drasl sem lekur upp á yfirborðið. Þegar ég kenni COM forritun, væri þá ekki frábært ef ég gæti bara sýnt þeim hvernig á að nota "Wizards" í Visual Studio og alla fídusana sem búa sjálfkrafa til kóda, en ef eitthvað klikkar í því ferli munu þeir ekki hafa hugmynd um hvað gerðist eða hvernig á að leita að villunni og laga hana. Ég þarf því að kenna þeim allt um IUnknown og CLSIDs og ProgIDS og .. ó pína ! Þegar ég kenni á ASP.NET forritun væri gott ef ég gæti bara sagt að ef þeir tvísmella á hluti og skrifa svo kóda sem keyrir á miðlaranum þegar notandinn smellir á þessa sömu hluti. ASP.NET yfirhylmir einmitt muninn á að meðhöndla músarsmell á hlekk (<a href>... )og músarsmell á takka. Þetta er gert með því að búa til nokkrar línur í JavaScript og tengja með On Click handler við hlekkinn. Yfirhylmingin lekur samt sem áður. Ef notandinn slekkur á JavaScript mun forritið ekki virka og ef forritarinn veit ekki hvað ASP.NET var að gera bak við tjöldin getur hann ekki einu sinni byrjað að leita að villunni. Lögmál hinna leku yfirhylminga þýðir að þegar einhver finnur upp á rosa flottu verkfæri sem býr til kóda sem á að gera forritara svo afkastamikla heyrir maður fók segja: "lærðu að gera þetta í höndunum fyrst, svo getur þú notað verkfærið til að spara tíma". Verkfæri sem búa til kóda eru lek eins og allar aðrar yfirhylmingar og eina leiðin til að bregðast við því er að skilja hvað er á bak við yfirhylminguna. Yfirhylmingarnar spara tíma en hlífa okkur ekki við lærdómnum. Mótsögnin í þessu öllu er, að þótt við fáum betri og betri forritunarverkfæri með betri og betri yfirhylmingum hefur aldrei verið erfiðara að vera góður forritari. Þegar ég vann fyrst hjá Microsoft skrifaði ég strengja-library fyrir Macintosh. Dæmigert verkefni hjá mér þá: Skrifaðu strcat rútínu sem skilar bendli á endann á nýja strengnum. Nokkrar línur í C. Allt sem ég þurfti var K&R C handbókin -- ein þunn bók um C forritunar málið. Til að vinna við forritun á CityDesk í dag, þarf ég að kunna Visual Basic, COM, ATL, C++, InnoSetup, innviði Internet Explorer, Reglubundnar segðir (Regular Expressions), DOM, HTML, CSS, og XML. Þessi verkfæri eru öll á háu plani samanborið við K & R dótið, en ég þarf samt að kunna K & R dótið annars lendi ég í klúðri. Fyrir tíu árum héldum við að nýjar forritunaraðferðir hefðu gert okkur lífið léttara í dag. Reyndar hafa yfirhylmingarnar sem við höfum skapað í gegnum árin leyft okkur að höndla miklu meira flækjustig í forritun sem við þurftum ekki að eiga við og gátum reyndar ekki átt við fyrir tíu til fimmtán árum eins og t.d. GUI forritun og netforritun. Og þrátt fyrir að verkfæri eins og hlutbundin forritun geri okkur kleift að koma miklu í verk á skömmum tíma, þá þurfum við einn daginn að finna hvar yfirhylming lekur og þá tekur það tvær vikur. Og þegar þú ræður mann til að forrita í VisualBasic, þá dugir ekki að ráða VisualBasic forritara því hann á eftir að lenda í klandri í hvert skipti sem VisualBasic yfirhylmingin bregst honum. Lögmál hinna leku yfirhylmingu er dragbítur. Greinin birtist upphaflega á ensku undir heitinu The Law of Leaky Abstractions | |||
![]() Joel Spolsky er stofnandi Fog Creek Software sem er lítið hugbúnaðarfyrirtæki staðsett í New York. Hann útskrifaðist frá Yale háskóla og hefur unnið fyrir sér sem forritari og verkstjóri hjá fyrirtækjunum Microsoft, Viacom og Juno. | ||||
Þessar blaðsíður geyma skoðanir einnar manneskju.
© Öll réttindi á textanum áskilin Joel Spolsky 1999-2005.