Fem spÞrsmÄl om design av programmeringssprÄk

Fem spÞrsmÄl om design av programmeringssprÄk

Ledelsesfilosofi

1. Programmeringssprog for mennesker

Programmeringssprog er den mĂ„de, hvorpĂ„ mennesker taler med computere. Computeren vil med glĂŠde tale pĂ„ ethvert sprog, der ikke er tvetydigt. Årsagen til, at vi har hĂžj-niveau sprog, er, at mennesker ikke kan klare maskinsprog. Essensen af programmeringssprog er at forhindre vores skrĂžbelige menneskelige hjerner i at blive overbelastet med en masse detalje.

Arkitekter ved, at nogle designproblemer er mere jordnÊre end andre. Nogle af de mest klare og abstrakte designproblemer er design af broer. I dette tilfÊlde er dit job at overskride den krÊvede afstand med sÄ lidt materiale som muligt. I den anden ende af spektret er design af stole. Stolendesignere skal bruge deres tid pÄ at tÊnke pÄ menneskelige bagdele.

Softwareudvikling har en lignende forskel. At designe algoritmer til at rute data gennem et netvÊrk er et godt, abstrakt problem, ligesom design af broer. Mens design af programmeringssprog minder om design af stole: det handler om at hÄndtere menneskelige svagheder.

For de fleste af os er det svÊrt at indse. At designe elegante matematiske systemer lyder meget mere tiltalende for de fleste af os end at imÞdekomme menneskelige svagheder. Den rolle, matematisk elegance spiller, er, at en vis grad af elegance gÞr programmer mere forstÄelige. Men elegance er ikke det eneste.

Og nÄr jeg siger, at sprog skal designes med menneskelige svagheder in mente, mener jeg ikke, at sprog skal designes til dÄrlige programmÞrer. Faktisk skal du designe software til de bedste programmÞrer, men selv de bedste programmÞrer har deres grÊnser. Jeg mener ikke, at nogen ville finde det behageligt at programmere i et sprog, hvor alle variabler blev angivet med bogstavet "x" med heltalsindeks.

2. Design til dig selv og dine venner

NÄr du ser pÄ historien til programmeringssprÄk, ble de fleste av de beste sprÄkene designet for Ä bli brukt av sine egne skapere, mens de fleste av de dÄrligste ble designet for andre mennesker.

NÄr sprÄk designes for andre mennesker, er det alltid en spesifikk gruppe mennesker: folk er ikke sÄ smarte som skaperne av sprÄket. SÄ du ender opp med et sprÄk som snakker til deg nedlatende. Cobol er det mest fremtredende eksempelet, men de fleste sprÄk er gjennomsyret av denne Änden.

Dette har ingenting Ä gjÞre med hvor hÞynivÄtt sprÄket er. C er ganske lavnivÄtt, men det ble laget for Ä bli brukt av dets skapere, derfor elsker hackere det.

Argumentet for Ä designe sprÄk for dÄrlige programmerere er at det er flere dÄrlige programmerere enn gode. Kanskje det er sant. Men dette lille antallet gode programmerere skriver uforholdsmessig mer programvare.

Jeg er interessert i spÞrsmÄlet om hvordan man skaper et sprÄk som appellerer til de beste hackerne? Jeg fÞler at dette spÞrsmÄlet er identisk med spÞrsmÄlet om hvordan man lager et godt programmeringssprÄk?, men selv om det ikke er slik, er det i det minste et interessant spÞrsmÄl.

3. Gi programmereren sÄ mye kontroll som mulig

Mange sprÄk (spesielt de som er laget for andre mennesker) oppfÞrer seg som barnevakter: de prÞver Ä advare deg mot ting de mener ikke vil vÊre nyttige for deg. Jeg er uenig: gi programmereren sÄ mye kontroll som mulig.

Da jeg fÞrst studerte Lisp, likte jeg mest at vi snakket som likeverdige. I andre sprÄk jeg hadde lÊrt pÄ det tidspunktet, var det et sprÄk, og det var programmet mitt skrevet i det sprÄket, og de eksisterte ganske separat. Men i Lisp var funksjonene og makroene jeg skrev de samme som de som var skrevet av selve sprÄket. Jeg kunne omprogrammere sprÄket selv om jeg Þnsket det. Det hadde den samme tiltrekkingskraften som programvare med Äpen kildekode.

4. Korthet er talentets sĂžster

Kortehet er undervurdert og til og med foraktet. Men hvis du ser inn i hjertene til hackere, vil du se at de elsker korthet. Hvor mange ganger har du hÞrt hackere snakke kjÊrlighetsfullt om hvor de kan gjÞre fantastiske ting med bare et par linjer kode i APL? Jeg tror de virkelig smarte folkene liker Ä fokusere pÄ dette.

Jeg mener at nesten alt som lar programmer bli kortere er bra. Det mÄ finnes mange biblioteksfunksjoner, alt som kan vÊre implisitt bÞr vÊre det; syntaksen bÞr vÊre mer kortfattet; til og med navnene pÄ entiteter bÞr vÊre korte.

Og ikke bare programmer bÞr vÊre korte. Manualer bÞr ogsÄ vÊre korte. En stor del av manualene er fylt med forklaringer, forbehold, advarsler og spesielle tilfeller. Hvis du mÄ forkorte en manual, er den beste mÄten Ä korrigere sprÄket som krever sÄ mye forklaring.

5. Erkjenn hva hacking er

Mange mennesker Þnsker at hacking skulle vÊre matematikk, eller i det minste noe som ligner pÄ naturvitenskapene. Jeg tror hacking ligner mer pÄ arkitektur. Arkitektur har en tilknytning til fysikk, i den forstand at arkitekten mÄdesigne en bygning som ikke faller, men den virkelige mÄlet for arkitekten er Ä skape en stor bygning, ikke Ä gjÞre oppdagelser innen statikk.

Det hackere elsker er Ä lage store programmer. Og jeg tror, i det minste i vÄre egne tanker, at vi mÄ huske at det Ä skrive fantastisk programvare er fantastisk, selv nÄr dette arbeidet vanskelig kan oversettes til vanlig intellektuell valuta av vitenskapelige arbeider. Intellektuelt sett er det like viktig Ä utvikle et sprÄk som programmerere vil elske, som det er Ä lage noe forferdelig, som ideen som du kan publisere en artikkel om.

Åpne problemer

1. Hvordan organisere store biblioteker?

Bibliotekene blir en viktig del av programmeringssprÄk. De blir sÄ store at det kan bli farlig. Hvis det tar mer tid Ä finne en funksjon i biblioteket som gjÞr det du trenger, enn Ä skrive den funksjonen selv, sÄ gjÞr ikke koden annet enn Ä tykne manualen din. (Symbolics-hÄndbÞkene var et eksempel pÄ dette.) SÄ vi mÄ finne en lÞsning for organisering av biblioteker. Ideelt sett bÞr de designes slik at programmereren kan gjette hvilken funksjon i biblioteket som passer.

2. Er folk virkelig redde for prefikssyntaks?

Dette er et Äpent problem i den forstand at jeg har tenkt pÄ det i flere Är og fortsatt ikke vet svaret. Prefikssyntaks virker helt naturlig for meg, kanskje bortsett fra bruken av den i matematikk. Men det kan vÊre slik at mye av upopulariteten til Lisp'er skyldes den uvante syntaksen... Er det verdt Ä gjÞre noe med dette, hvis det er tilfelle, er et annet spÞrsmÄl.

3. Hva trenger du for serverprogramvare?

Jeg tror at de fleste applikasjonene som vil bli skrevet de neste tyve Ärene, vil vÊre nettapplikasjoner, i den forstand at programmene vil ligge pÄ en server og kommunisere med deg gjennom nettleseren. Og for Ä skrive slike applikasjoner trenger vi nye verktÞy.

En slik ting er stÞtte for en ny mÄte Ä slippe serverapplikasjoner pÄ. I stedet for ett eller to store utgivelser i Äret, slik som desktopprogramvare, vil serverprogramvare bli utgitt i serien av smÄ endringer. Du kan ha fem eller ti utgivelser per dag. Og alle vil alltid ha den nyeste versjonen.

Vet du hvordan man designer programmer slik at de er vedlikeholdbare? Serverprogramvare mÄ designes for Ä vÊre endringsdyktig. Du mÄ kunne endre den enkelt, eller i det minste vite hva et lite endring betyr og hva som er viktig.

En annen ting som kan vÊre nyttig i serverprogramvaren, er, overraskende nok, kontinuerlighet i leveransen. I en webapplikasjon kan du bruke noe som CPS, for Ä oppnÄ effekten av delprogrammer i en stateless verden av webÞkter. Kontinuerlighet i leveransen kan vÊre verdt det, hvis denne muligheten ikke er for kostbar.

4. Hvilke nye abstraksjoner gjenstÄr Ä oppdage?

Eg er ikkje sikker pĂ„ korfor det er sĂ„ fornuftig Ă„ ha slike hĂ„p, men sjĂžlv har eg eit sterkt Ăžnske om Ă„ opne ei ny abstraksjon — noko som kunne ha like mykje Ă„ seie som fĂžrsteklasses funksjonar eller rekursjon, eller iallfall standardparameter. Kanskje det er ein utopisk draum. Slike ting kjem sjeldan fram. Men eg gir ikkje opp hĂ„pet.

Lite kjente hemmeligheiter

1. Du kan bruke kva som helst sprÄk du Þnskjer

Tidlegare betydde det Ä lage applikasjonar Ä lage programvare for skrivebordet. Og i skrivebordsprogramvare var det ein stor tendens til Ä skrive applikasjonar pÄ same sprÄk som operativsystemet. SÄ for ti Är sidan betydde det Ä skrive programvare generelt Ä skrive programvare i C. Tradisjonen utvikla seg til slutt: applikasjonar treng ikkje Ä vere skrivne i uvanlege sprÄk. Og denne tradisjonen har utvikla seg sÄ lenge at ikkje-tekniske folk, som leiarar og venturekapitalistar, ogsÄ har lÊrt det.

Serverprogramvare Þydelegg denne modellen fullstendig. Med serverprogramvare kan du bruke kva sprÄk du Þnskjer. Nesten ingen forstÄr dette enno (spesielt leiarar og venturekapitalistar). Men nokre hackarar forstÄr det, og det er derfor vi har hÞyrt om slike indie-sprÄk som Perl og Python. Vi hÞyrer ikkje om Perl og Python, fordi folk bruker dei til Ä skrive applikasjonar for Windows.

Kva betyr dette for oss som er interesserte i Ä designe programmeringssprÄk? Det finst eit potensiell publikum for arbeidet vÄrt.

2. Hastighet kjem frÄ profilerar

SprÄkdevarar eller, iallfall, implementatorane av det, elskar Ä skrive kompilatorar som genererer rask kode. Men eg trur ikkje det er dette som gjer sprÄk raske for brukarane. Knuth pÄpeika for lenge sidan at hastigheten avhenger av berre nokre fÄ flaskehalsar. Og kven som helst som har prÞvd Ä gjere eit program raskare veit at du ikkje kan gjette kva flaskehalsen er. Profilerar er svaret.

SprÄkutviklarane lÞysar ikkje det rette problemet. Brukarane treng ikkje at benkmarkeringane gÄr raskt. Dei treng eit sprÄk som kan vise kva delar av programmet deira som mÄ skrivast om. PÄ det tidspunktet er hastighet praktisk viktig. Kanskje det ville vore betre om implementÞrane av sprÄket brukte halvparten av tida deira pÄ Ä optimalisere kompilatoren og heller brukte den tida til Ä skrive ein god profiler.

3. Du treng ein applikasjon som tvingar sprÄket ditt til Ä utvikle seg

Kanskje dette ikkje er den endelige sannheita, men det verkar som om dei beste sprÄka utvikla seg saman med applikasjonane der dei blei brukte. C blei skriven av folk som trengte systemprogrammering. Lisp blei utvikla delvis for symbolsk diferensiering; McCarthy var sÄ ivrig etter Ä starte at han begynte Ä skrive differensieringsprogrammer allereie i det fÞrste dokumentet om Lisp i 1960.

Dette er spesielt bra om applikasjonen di lÞysar nokre nye problem. Det pressar sprÄket ditt til Ä ha nye funksjonar som programmÞrar treng. Personleg er eg interessert i Ä skrive eit sprÄk som er bra for serverapplikasjonar.

[Under diskusjonen uttrykte Guy Steele ogsÄ denne tanken, og la til at applikasjonen ikkje skal bestÄ av Ä skrive ein kompilator for sprÄket ditt, med mindre sprÄket ditt er meint for Ä skrive kompilatorar.]

4. SprÄket mÄ vere eigna for Ä skrive éngangsprogram.

Du veit kva ein éngangsprogram er: det er nÄr du raskt treng Ä lÞysa eit avgrensa problem. Eg tru det er mange seriÞse program som starta som éngangsprogram. Eg ville ikkje bli overraska over om dei fleste program starta som éngangsprogram. SÄ om du vil lage eit sprÄk som er eigna for Ä skrive program i det heile, sÄ mÄ det ogsÄ vere eigna for Ä skrive éngangsprogram, fordi det er det tidlege stadiet for mange program.

5. Syntaksen er knytt til semantikken

Tradisjonelt er det blitt ansett at syntaks og semantikk er to sterkt forskjellige ting. Dette kan hÞyrest sjokkerande ut, men det er ikkje tilfelle. Eg trur det du vil oppnÄ i programmet ditt, er knytt til korleis du uttrykker det.

Nyleg snakka eg við Robert Morris, og hann merkaði at operator overloading er ein stĂłr fyrimunur Ă­ samband við at vinna yvir mĂĄl við infix syntaks. Í mĂĄl við prefix syntaks er hvĂžr einstakur funktion, tĂș definera, Ă­ veruleikanum ein operator. Um tĂș vilt leggja til nĂœggjan talgildan tĂžlu, sum tĂș hevur funnir uppĂĄ, kanst tĂș einfalt definera eina nĂœggja funktion til at leggja tað saman. Um tĂș ger tað Ă­ eini mĂĄl við infix syntaks, sĂŠr tĂș at millum at brĂșka ein ovarlĂžgd operator og at kalla ein funktion er stĂłrur munur.

Idear, sum koma aftur við tíðum

1. NĂœggj mĂĄl fyri programming

Havandi sĂ­tt Ă­ 1970-unum var tað Ă­ tíðarandanum at menna nĂœggj mĂĄl fyri programming. NĂș er hetta ikki so. Men eg heldur, at server software fer at skapa aftur nĂœggj mĂĄl. Við server software kanst tĂș brĂșka eitthvĂžrt mĂĄl, tĂș ynskir, so um onkur skapar mĂĄl, sum fĂžlist betur enn hini, so verða fĂłlk, sum treysta til at brĂșka tað.

2. Tíðarsplit

Richard Kelsey setti hesa tankan fram, tíð hansara er komin aftur, og eg stuðli henni heilt. MĂ­n antin (og Microsoft eisini) er at nĂłgv Ăștreiðslur flyta seg frĂĄ desktopinum til fjargĂžtt serverar. Í aðra orðum, tíðarsplit er komið aftur. Eg haldi, at tað fer at krevja stuðul ĂĄ mĂĄlnivĂłnum. Til dĂžmis hava Richard og Jonathan Reeves gjĂžrt nĂłgv arbeiði við at innleiða prosess scheduling Ă­ Scheme 48.

3. Effektivitet

Nyleg var tað sum um datahĂĄlvandi maskinir vĂłru nĂłg nĂłgv skjĂłtir. Allar fleiri og fleiri hoyra vit um byte-code, sum Ă­ min elvugĂžtton meint at vit hafa orku Ă­ dĂœrum. Men eg haldi, at við server software, hava vit ikki tað. NĂžkur skulu borga fyri servere, har softwareið arbeiðir, og talið av brĂșkarum, sum servarin kann halda Ă­ miðal fyri hvĂžrja maskinu, munar Ă­ hesum kapitalĂștreiðslum.

Eg heldur, at effektivitet fer at spilla ein stĂłran leik, Ă­ allaru fĂžrda Ă­ Ăștreiðslum. SĂŠrs tĂœdningarmikið fer hetta at verða fyri input-output viðurskifti, tĂ­ at server applikatiĂłnir framleiða nĂłgv av slĂ­kum viðurskifti.

Til slutt kan det vise seg at bytekode ikke er lÞsningen. Sun og Microsoft ser ut til Ä kjempe ansikt til ansikt pÄ bytekodefeltet nÄ. Men de gjÞr dette fordi bytekode er et praktisk sted for Ä bygge seg inn i prosessen, og ikke fordi bytekode i seg selv er en god idé. Det kan hende at hele denne kampen vil gÄ ubemerket hen. Det ville vÊrt morsomt.

Feller og feller

1. Kunder

Dette er bare en antakelse, men det er at bare de programmene som er helt serverbaserte vil vinne. Å designe programvare med antakelsen om at alle vil ha din klient, minner om Ă„ skape et samfunn basert pĂ„ antakelsen om at alle vil vĂŠre ĂŠrlige. Det ville absolutt vĂŠrt praktisk, men du mĂ„ anta at dette aldri vil skje.

Jeg tror vi vil se en rask Þkning av enheter med tilgang til nettet, og det er rimelig Ä anta at de vil stÞtte grunnleggende HTML og skjemaer. Har du en nettleser pÄ telefonen? Vil telefonen vÊre i din PalmPilot? Vil din Blackberry ha en stÞrre skjerm? Vil du kunne gÄ pÄ internett fra din Gameboy? Fra klokken din? Jeg vet ikke. Og jeg trenger ikke Ä finne ut av det hvis jeg satser pÄ at alt vil vÊre pÄ serveren. Det er bare mye mer pÄlitelig Ä ha all intelligens pÄ serveren.

2. ObjektstÄende programmering

Jeg forstÄr at dette er en kontroversiell pÄstand, men jeg mener at OOP ikke er sÄ viktig. Jeg tror det er et passende paradigme for spesifikke applikasjoner som trenger spesifikke datastrukturer, som vindussystemer, simuleringer, CAD-systemer. Men jeg forstÄr ikke hvorfor det burde vÊre passende for alle programmer.

Jeg tror folk i store selskaper liker OOP, delvis fordi det gir mye som ser ut som arbeid. Det som naturlig kan representeres som en liste med heltall, kan nÄ representeres som en klasse med all slags stillaser, med stÞy og mas.

En annen tiltalende egenskap ved OOP er at metodene gir deg en slags effekt av fÞrsteklasses funksjoner. Men dette er ikke noe nytt for programmerere som bruker Lisp. NÄr du har ekte fÞrsteklasses funksjoner, kan du bare bruke dem pÄ hvilken som helst mÄte som passer oppgaven, i stedet for Ä presse alt inn i en mal av klasser og metoder.

Eg trur at dette betyr for sprÄkdesign at ein ikkje bÞr djupt integrere OOP i det. Kanskje svaret ligg i Ä tilby meir generelle, grunnleggjande ting, og la folk designe eigne objektsystem som bibliotek.

3. Designa av eit utvalg

Dersom sprÄket ditt vert designa av eit utval, sÄ er du i ei felle, ikkje berre av dei kjende grunnane. Det er allment kjent at utvalg har ein tendens til Ä skape klumpete, usamanhengande sprÄkdesign. Men eg trur at den stÞrste faren er at dei ikkje tar risiko. NÄr ein person stÄr fremst, tar han risikoene som eit utval aldri vil bli einige om.

MÄ ein ta risiko for Ä lage eit godt sprÄk? Mange kan mistenka at sprÄkdine design er eit omrÄde der ein mÄ halde seg nÊr tradisjonell visdom. Eg kan pÄstÄ at det ikkje er slik. I alt anna folk gjer, er belÞnninga i proporsjon med risikoen. SÄ kvifor skulle det vere annleis i sprÄkdesign?

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster