Fimm spurningar um hönnun forritunarmáls

Fimm spurningar um hönnun forritunarmáls

Leiðbeinandi heimspeki

1. Forritunarmál fyrir fólk

Forritunarmál eru hvernig fólk talar við tölvur. Tölvan mun með ánægju tala hvaða tungumál sem er sem er ekki tvíræð. Ástæðan fyrir því að við erum með tungumál á háu stigi er sú að fólk ræður ekki við vélamál. Tilgangurinn með forritunarmálum er að koma í veg fyrir að fátækur, viðkvæmur mannlegur heili okkar verði gagntekinn af of mörgum smáatriðum.

Arkitektar vita að sum hönnunarvandamál eru hversdagslegri en önnur. Sum skýrustu og óhlutbundnustu hönnunarvandamálin eru hönnun brúa. Í þessu tilviki er starf þitt að ná nauðsynlegri fjarlægð með eins litlu efni og mögulegt er. Á hinum enda litrófsins er stólahönnun. Stólahönnuðir ættu að eyða tíma sínum í að hugsa um rassinn á fólki.

Hugbúnaðarþróun hefur svipaðan mun. Að hanna reiknirit til að beina gögnum í gegnum net er gott, óhlutbundið vandamál, eins og að hanna brýr. Þó að hanna forritunarmál er eins og að hanna stóla: þú verður að takast á við mannlega veikleika.

Þetta er erfitt fyrir flest okkar að átta sig á. Að hanna glæsileg stærðfræðileg kerfi hljómar miklu meira aðlaðandi fyrir flest okkar en að bregðast við mannlegum veikleikum. Hlutverk stærðfræðilegrar glæsileika er að einhver glæsileiki gerir forrit auðveldara að skilja. En þetta snýst ekki allt um glæsileika.

Og þegar ég segi að tungumál ættu að vera hönnuð til að mæta mannlegum veikleikum, þá meina ég ekki að tungumál ættu að vera hönnuð fyrir slæma forritara. Í raun og veru ættir þú að hanna hugbúnað fyrir bestu forritarana, en jafnvel bestu forritararnir hafa sín takmörk. Ég held að enginn myndi njóta þess að forrita á tungumáli þar sem allar breytur voru táknaðar með bókstafnum "x" með heiltöluáskrift.

2. Hannaðu fyrir þig og vini þína

Ef þú skoðar sögu forritunarmála, þá voru flest bestu tungumálin hönnuð til að nota af eigin höfundum og flest þau verstu voru hönnuð fyrir annað fólk til að nota.

Þegar tungumál eru hönnuð fyrir annað fólk er það alltaf ákveðinn hópur fólks: fólk er ekki eins klárt og höfundar tungumálsins. Svona færðu tungu sem talar niður til þín. Cobol er mest áberandi dæmið, en flest tungumál eru gegnsýrð af þessum anda.

Það hefur ekkert með það að gera hversu hátt tungumálið er. C er frekar lágt, en það var búið til til að nota af höfundum þess, þess vegna elska tölvuþrjótar það.

Rökin fyrir því að hanna tungumál fyrir slæma forritara eru þau að það eru fleiri slæmir forritarar en góðir. Kannski er þetta svo. En þessi fái fjöldi góðra forritara skrifar óhóflega meiri hugbúnað.

Spurning mín er, hvernig býrðu til tungumál sem höfðar til bestu tölvuþrjóta? Mér sýnist þessi spurning vera samhljóða spurningunni um hvernig eigi að búa til gott forritunarmál?, en þó svo sé ekki þá er það að minnsta kosti áhugaverð spurning.

3. Gefðu forritaranum eins mikla stjórn og mögulegt er

Mörg tungumál (sérstaklega þau sem eru hönnuð fyrir annað fólk) virka eins og fóstrur: þau reyna að vara þig við hlutum sem þau halda að muni ekki nýtast þér. Ég lít á hið gagnstæða: gefðu forritaranum eins mikla stjórn og þú getur.

Þegar ég lærði Lisp fyrst var það sem mér líkaði mest við að við töluðum saman sem jafningjar. Á hinum tungumálunum sem ég hafði lært á þeim tímapunkti var tungumál og það var forritið mitt á því tungumáli og þau voru til alveg aðskilin. En í Lisp voru föllin og makróin sem ég skrifaði þau sömu og tungumálið sjálft var skrifað á. Ég gæti endurskrifað tungumálið sjálft ef ég vildi. Það hafði sömu aðdráttarafl og opinn hugbúnaður.

4. Brevity er systir hæfileika

Nákvæmni er vanmetin og jafnvel fyrirlitin. En ef þú lítur inn í hjörtu tölvuþrjóta, muntu sjá að þeim líkar mjög stutt. Hversu oft hefur þú heyrt tölvusnápur tala kærlega um hvernig, til dæmis, APL, þeir geta gert ótrúlega hluti með aðeins nokkrum línum af kóða? Ég býst við að mjög klárt fólk hafi í rauninni gaman af því að gefa þessu gaum.

Ég tel að nánast allt sem gerir forrit styttri sé af hinu góða. Það ætti að vera mikið af bókasafnsaðgerðum, allt sem getur verið óbeint ætti að vera það; setningafræði ætti að vera hnitmiðaðri; jafnvel nöfn eininga ættu að vera stutt.

Og ekki aðeins forrit ættu að vera stutt. Handbækur ættu líka að vera stuttar. Góður hluti handbókanna er fullur af útskýringum, fyrirvörum, viðvörunum og sérstökum tilfellum. Ef þú þarft að stytta handbókina er besti kosturinn að leiðrétta tungumálið sem krefst svo mikillar útskýringar.

5. Viðurkenna hvað reiðhestur er

Margir vilja að reiðhestur sé stærðfræði, eða að minnsta kosti eitthvað í ætt við vísindi. Ég held að hakk sé meira eins og arkitektúr. Arkitektúr snýst um eðlisfræði að því leyti að arkitekt þarf að hanna byggingu sem mun ekki falla, en raunverulegt markmið arkitekts er að búa til frábæra byggingu, ekki að gera uppgötvanir á sviði truflana.

Það sem tölvuþrjótar elska er að búa til frábær forrit. Og ég held að, að minnsta kosti í okkar eigin hugsunum, ættum við að muna að það er dásamlegt að skrifa frábær forrit, jafnvel þegar sú vinna skilar sér ekki auðveldlega í venjulega vitsmunalega gjaldmiðil vísindarita. Frá vitsmunalegu sjónarhorni er það jafn mikilvægt að hanna tungumál sem forritarar munu elska eins og það er að hanna hræðilegt tungumál sem felur í sér hugmynd sem þú getur gefið út blað um.

Opin mál

1. Hvernig á að skipuleggja stór bókasöfn?

Bókasöfn eru að verða mikilvægur hluti af forritunarmálum. Þeir verða svo stórir að það getur verið hættulegt. Ef það tekur lengri tíma að finna aðgerð á bókasafni sem gerir það sem þú þarft en að skrifa aðgerðina sjálfur, þá gerir allur kóðinn ekkert annað en að gera handbókina þína þykkari. (Táknbókarhandbækurnar voru dæmi um þetta.) Þannig að við verðum að leysa skipulagsvanda bókasafnsins. Helst skaltu hanna þau þannig að forritarinn geti giskað á hvaða bókasafnsaðgerð hentar.

2. Er fólk virkilega hrætt við forskeyti setningafræði?

Þetta er opið vandamál í þeim skilningi að ég hef verið að hugsa um það í nokkur ár og veit ekki svarið enn. Forskeyti setningafræði finnst mér algjörlega eðlileg, nema kannski fyrir notkun þess í stærðfræði. En það getur verið að mikið af óvinsældum Lisp sé einfaldlega vegna hinnar ókunnu setningafræði... Hvort við ættum að gera eitthvað í því, ef satt er, er svo annað mál.

3. Hvað þarftu fyrir netþjónahugbúnað?

Ég held að flest forrit sem verða skrifuð á næstu tuttugu árum verði vefforrit, í þeim skilningi að forrit munu búa á netþjóni og eiga samskipti við þig í gegnum vafra. Og til að skrifa slíkar umsóknir þurfum við nýja hluti.

Eitt af því er stuðningur við nýja leið til að gefa út netþjónaforrit. Í stað einnar eða tveggja stórra útgáfur á ári, eins og skjáborðshugbúnaðar, verður netþjónahugbúnaður gefinn út í röð lítilla breytinga. Þú gætir verið með fimm eða tíu útgáfur á dag. Og allir munu alltaf hafa nýjustu útgáfuna.

Veistu hvernig á að hanna forrit til að viðhalda þeim? Miðlarahugbúnaður verður að vera hannaður til að vera breytilegur. Þú ættir að geta breytt því auðveldlega, eða að minnsta kosti vitað hvað minniháttar breyting þýðir og hvað er mikilvægt.

Annað sem getur verið gagnlegt í hugbúnaði netþjóna er skyndilega samfelld afhendingu. Í vefforriti geturðu notað eitthvað eins og CPStil að fá áhrif venja í ríkisfangslausum heimi veflota. Það getur verið þess virði að hafa samfellda framboð ef aðgerðin er ekki of dýr.

4. Hvaða nýja abstrakt er eftir að uppgötva?

Ég er ekki viss um hversu sanngjörn sú von er, en persónulega myndi ég vilja uppgötva nýja abstrakt - eitthvað sem gæti verið jafn þýðingarmikið og fyrsta flokks aðgerðir eða endurvik eða að minnsta kosti sjálfgefnar breytur. Kannski er þetta ómögulegur draumur. Svona hlutir uppgötvast oft ekki. En ég missi ekki vonina.

Lítið þekkt leyndarmál

1. Þú getur notað hvaða tungumál sem þú vilt

Áður þýddi stofnun forrita sköpun skjáborðshugbúnaðar. Og í skjáborðshugbúnaði er mikil hlutdrægni gagnvart því að skrifa forrit á sama tungumáli og stýrikerfið. Svo fyrir tíu árum síðan þýddi það að skrifa hugbúnað almennt að skrifa hugbúnað í C. Að lokum þróaðist hefðin: forrit ættu ekki að vera skrifuð á óvenjulegum tungumálum. Og þessi hefð hefur þróast svo lengi að ótæknilegt fólk eins og stjórnendur og áhættufjárfestar hafa lært hana líka.

Miðlarahugbúnaður eyðileggur þetta líkan algjörlega. Með netþjónahugbúnaði geturðu notað hvaða tungumál sem þú vilt. Nánast enginn skilur þetta ennþá (sérstaklega stjórnendur og áhættufjárfestar). En sumir tölvuþrjótar skilja þetta, þess vegna heyrum við um indy tungumál eins og Perl og Python. Við heyrum ekki um Perl og Python vegna þess að fólk notar þau til að skrifa Windows forrit.

Hvað þýðir þetta fyrir okkur, áhugafólk um hönnun forritunarmáls, að það sé möguleiki á áhorfendum fyrir verk okkar.

2. Hraði kemur frá prófílurum

Tungumálahönnuðir, eða að minnsta kosti tungumálaframleiðendur, vilja skrifa þýðendur sem búa til hraðvirkan kóða. En ég held að það sé ekki það sem gerir tungumál hratt fyrir notendur. Knuth benti á fyrir löngu að hraðinn veltur á örfáum flöskuhálsum. Og allir sem hafa reynt að flýta fyrir forriti vita að þú getur ekki giskað á hvar flöskuhálsinn er. Profiler er svarið.

Tungumálaframleiðendur eru að leysa rangt vandamál. Notendur þurfa ekki viðmið til að keyra hratt. Þeir þurfa tungumál sem getur sýnt hvaða hluta forritsins þeirra þarf að endurskrifa. Á þessum tímapunkti þarf hraða í reynd. Svo kannski væri betra ef tungumálaútfærslumenn eyddu helmingi þess tíma sem þeir eyða í að fínstilla þýðandann og eyða honum í að skrifa góðan prófíler.

3. Þú þarft app sem lætur tungumálið þitt þróast

Þetta er kannski ekki fullkominn sannleikur, en svo virðist sem bestu tungumálin hafi þróast ásamt forritunum sem þau voru notuð í. C var skrifað af fólki sem þurfti kerfisforritun. Lisp var hannað að hluta til fyrir táknræna aðgreiningu og McCarthy var svo áhugasamur um að byrja að hann byrjaði meira að segja að skrifa aðgreiningarforrit í fyrsta Lisp blaðinu árið 1960.

Þetta er sérstaklega gott ef forritið þitt leysir ný vandamál. Þetta ýtir undir tungumálið þitt til að hafa nýja eiginleika sem forritarar vilja. Sjálfur hef ég áhuga á að skrifa tungumál sem hentar vel fyrir netþjónaforrit.

[Í umræðunni benti Guy Steele einnig á þessu og bætti við að forritið ætti ekki að felast í því að skrifa þýðanda fyrir tungumálið þitt, nema tungumálið þitt sé hannað til að skrifa þýðendur.]

4. Tungumálið þarf að henta til að skrifa einskiptisþætti.

Þú veist hvað eitt-skot forrit þýðir: það er þegar þú þarft að fljótt leysa takmörkuð vandamál. Ég trúi því að ef þú lítur í kringum þig muntu finna mörg alvarleg forrit sem byrjuðu sem einskipti. Það kæmi mér ekki á óvart ef flest forrit byrjuðu sem einskipti. Þannig að ef þú vilt búa til tungumál sem hentar almennt til að skrifa hugbúnað, þá ætti það líka að henta til að skrifa einstök forrit, því þetta er upphafsstig margra forrita.

5. Setningafræði tengist merkingarfræði

Hefð er fyrir því að setningafræði og merkingarfræði séu mjög ólíkir hlutir. Þetta kann að hljóma átakanlegt, en svo er ekki. Ég held að það sem þú vilt ná í forritinu þínu hafi að gera með hvernig þú tjáir það.

Ég talaði nýlega við Robert Morris og hann benti á að ofhleðsla símafyrirtækis væri stór plús fyrir sigur tungumála með setningafræði setningafræði. Á tungumálum með forskeyti setningafræði, hvaða aðgerð sem þú skilgreinir er í raun rekstraraðili. Ef þú vilt bæta við nýrri tegund af númeri sem þú bjóst til geturðu einfaldlega skilgreint nýja aðgerð til að bæta því við. Ef þú gerir þetta á tungumáli með infix setningafræði muntu sjá að það er mikill munur á því að nota ofhlaðinn símafyrirtæki og að hringja í fall.

Hugmyndir sem koma aftur með tímanum

1. Ný forritunarmál

Þegar litið er aftur til áttunda áratugarins var það í tísku að þróa ný forritunarmál. Þetta er ekki raunin núna. En ég trúi því að netþjónahugbúnaður muni aftur færa tískuna til að búa til ný tungumál aftur. Með netþjónahugbúnaði geturðu notað hvaða tungumál sem þú vilt, þannig að ef einhver býr til tungumál sem virðist betra en restin, þá verður fólk sem ákveður að nota það.

2. Tímaskipti

Richard Kelsey kom með þessa hugmynd en tíminn er kominn aftur og ég styð hana fullkomlega. Mín ágiskun (og Microsoft líka) er að mikið af tölvumálum muni flytjast frá skjáborðinu yfir á ytri netþjóna. Með öðrum orðum, tímaskipti eru komin aftur. Ég held að þetta þurfi stuðning á tungumálastigi. Til dæmis hafa Richard og Jonathan Reeves lagt mikla vinnu í að innleiða ferlaáætlun í Scheme 48.

3. Skilvirkni

Nýlega virtist sem tölvur væru nú þegar nógu hraðar. Við erum að heyra meira og meira um bækikóða, sem að minnsta kosti fyrir mér þýðir að við höfum afl í varasjóði. En ég held að með netþjónahugbúnaði höfum við hann ekki. Einhver mun þurfa að borga fyrir netþjóna sem keyra hugbúnaðinn og fjöldi notenda sem þjónninn getur stutt á hverja vél mun deila fjármagnskostnaði þeirra.

Ég held að skilvirkni muni skipta máli, að minnsta kosti í tölvuflöskuhálsum. Þetta mun vera sérstaklega mikilvægt fyrir I/O aðgerðir, vegna þess að netþjónaforrit framkvæma mikið af slíkum aðgerðum.

Á endanum gæti komið í ljós að bækikóði er ekki svarið. Sun og Microsoft virðast vera að fara á hausinn í bækakóðareitnum um þessar mundir. En þeir gera þetta vegna þess að bækikóði er hentugur staður til að fella sig inn í ferli, ekki vegna þess að bækikóði sjálfur er góð hugmynd. Það kann að koma í ljós að allur þessi bardagi mun fara óséður. Það væri fyndið.

Snýr og snörur

1. Viðskiptavinir

Þetta er bara ágiskun, en það er að einu forritin sem munu gagnast eru þau sem eru algjörlega miðlarahlið. Að hanna hugbúnað sem gengur út frá því að allir muni eiga viðskiptavin er eins og að hanna samfélag sem byggir á þeirri forsendu að allir séu heiðarlegir. Það væri örugglega þægilegt, en þú verður að gera ráð fyrir að það muni aldrei gerast.

Ég held að það verði hröð aukning á veftækjum og við getum gert ráð fyrir að þau styðji grunn html og form. Ertu með vafra í símanum þínum? Verður PalmPilot með síma? Verður brómberið þitt með stærri skjá? Munt þú geta fengið aðgang að internetinu frá gameboy þínum? Af úrinu þínu? Ég veit ekki. Og ég þarf ekki að komast að því hvort ég veðja á að allt verði á servernum. Það er bara miklu áreiðanlegra að hafa alla heila á þjóninum. .

2. Hlutbundin forritun

Ég geri mér grein fyrir að þetta er umdeild fullyrðing, en ég held að OOP sé ekki svo mikilvægt. Ég held að þetta sé hentug hugmyndafræði fyrir tiltekin forrit sem þurfa sérstaka gagnauppbyggingu, eins og gluggakerfi, uppgerð, CAD kerfi. En ég skil ekki af hverju það ætti að henta öllum forritum.

Ég held að fólk í stórum fyrirtækjum elski OOP, að hluta til vegna þess að það gerir margt sem lítur út eins og vinnu. Það sem náttúrulega gæti verið táknað sem, segjum, heiltöluskrá, er nú hægt að tákna sem kennslustofu með alls kyns vinnupalla, ys og þys.

Annar aðlaðandi eiginleiki OOP er að aðferðir gefa þér eitthvað af áhrifum fyrsta flokks aðgerða. En þetta eru ekki fréttir fyrir Lisp forritara. Þegar þú ert með sannar fyrsta flokks aðgerðir geturðu einfaldlega notað þær á þann hátt sem hentar verkefninu sem fyrir hendi er, í stað þess að troða öllu inn í ketill af flokkum og aðferðum.

Ég held að það sem þetta þýðir fyrir tungumálahönnun er að þú ættir ekki að fella OOP of djúpt inn í það. Kannski er svarið að bjóða upp á almennari, undirstöðuatriði, og láta fólk hanna hvaða hlutakerfi sem er sem bókasöfn.

3. Hönnun eftir nefnd

Ef tungumálið þitt er hannað af nefnd, þá ertu fastur, og ekki bara af ástæðum sem allir vita. Allir vita að nefndir hafa tilhneigingu til að búa til klumpótta, ósamræmda málhönnun. En ég held að stóra hættan sé sú að þeir taki ekki áhættu. Þegar einn er í forsvari tekur hann áhættu sem nefndin myndi aldrei fallast á að taka á sig.

Þarftu að taka áhættu til að búa til gott tungumál? Marga gæti grunað að tungumálahönnun sé þar sem þú verður að vera nokkuð nálægt hefðbundinni visku. Ég veðja að svo er ekki. Í öllu öðru sem fólk gerir eru verðlaunin í réttu hlutfalli við áhættuna. Svo hvers vegna ætti tungumálahönnun að vera öðruvísi?

Heimild: www.habr.com

Bæta við athugasemd