
Ledande filosofi
1. ProgrammeringssprÄk för mÀnniskor
ProgrammeringssprÄk Àr sÀttet som mÀnniskor pratar med datorer. Datorer Àr glada över att kommunicera pÄ vilket sprÄk som helst som inte Àr tvetydigt. Anledningen till att vi har hög-nivÄsprÄk Àr att mÀnniskor inte kan hantera maskinsprÄk. Syftet med programmeringssprÄk Àr att förhindra vÄra ömtÄliga mÀnskliga hjörnor frÄn att överbelastas med detaljer.
Arkitekter vet att vissa designproblem Ă€r mer konkreta Ă€n andra. NĂ„gra av de mest uppenbara och abstrakta designproblemen handlar om att designa broar. I det hĂ€r fallet Ă€r ditt jobb att tĂ€cka det nödvĂ€ndiga avstĂ„ndet med sĂ„ lite material som möjligt. I andra Ă€nden av spektrumet â att designa stolar. Stoldesigners mĂ„ste spendera tid pĂ„ att tĂ€nka pĂ„ mĂ€nskliga bakdelar.
Mjukvaruutveckling har en liknande distinktion. Att designa algoritmer för att routa data genom nÀtverket Àr ett bra, abstrakt problem, som att designa broar. Medan design av programmeringssprÄk liknar designen av stolar: du mÄste hantera mÀnskliga svagheter.
För de flesta av oss Àr det svÄrt att inse detta. Att designa eleganta matematiska system lÄter mycket mer tilltalande för de flesta av oss Àn att ge efter för mÀnskliga svagheter. Rollen av matematisk elegans Àr att en viss grad av elegans gör program enklare att förstÄ. Men elegans Àr inte allt.
Och nÀr jag sÀger att sprÄk mÄste designas med mÀnskliga svagheter i Ätanke, menar jag inte att sprÄk ska designas för dÄliga programmerare. Faktiskt bör du designa mjukvara för de bÀsta programmerarna, men Àven de bÀsta programmerarna har sina grÀnser. Jag tror inte att nÄgon skulle tycka om att programmera i ett sprÄk dÀr alla variabler representerades av bokstaven 'x' med heltalsindex.
2. Designa för dig sjÀlv och dina vÀnner
Om du ser pÄ historien om programmeringssprÄk har de flesta av de bÀsta sprÄken designats för att anvÀndas av sina egna skapare, medan de flesta av de sÀmsta har designats för andra mÀnniskor.
NÀr sprÄk designas för andra mÀnniskor sÄ handlar det alltid om en specifik grupp mÀnniskor: mÀnniskor Àr inte lika smarta som skaparna av sprÄket. SÄ du fÄr ett sprÄk som talar till dig nedlÄtande. Cobol Àr det mest framtrÀdande exemplet, men de flesta sprÄk genomsyras av denna anda.
Det har ingenting att göra med hur hög-nivÄ ett sprÄk Àr. C Àr ganska lÄgnivÄ, men det skapades för att anvÀndas av dess skapare, vilket förklarar varför hackare Àlskar det.
Argumentet för att designa sprÄk för dÄliga programmerare Àr att det finns fler dÄliga programmerare Àn bra. Det kanske stÀmmer. Men en liten mÀngd bra programmerare skriver oproportionerligt mycket mer mjukvara.
Jag undrar hur man kan skapa ett sprÄk som tilltalar de bÀsta hackarna? Jag tycker att denna frÄga Àr densamma som frÄgan om hur man skulle kunna skapa ett bra programmeringssprÄk?, men Àven om det inte Àr sÄ, sÄ Àr det Ätminstone en intressant frÄga.
3. Ge programmeraren sÄ mycket kontroll som möjligt
MÄnga sprÄk (sÀrskilt de som skapats för andra mÀnniskor) beter sig som barnvakt: de försöker avrÄda dig frÄn saker som de tycker inte kommer att vara till nytta för dig. Jag har en motsatt Äsikt: ge programmeraren sÄ mycket kontroll som möjligt.
NÀr jag först studerade Lisp gillade jag mest att vi kommunicerade pÄ lika villkor. I andra sprÄk som jag hade studerat vid den tidpunkten fanns det ett sprÄk och min programvara pÄ det sprÄket, och de existerade ganska separat. Men i Lisp var funktionerna och makrona som jag skrev desamma som de som sprÄket sjÀlv var skrivet i. Jag kunde Äterskriva sjÀlva sprÄket om jag sÄ ville. Det hade samma attraktion som mjukvara med öppen kÀllkod.
4. Korthet Àr talangens syster
Korthet Àr undervÀrderad och till och med föraktad. Men om du tittar in i hackerhjÀrtan, kommer du att se att de Àlskar korthet. Hur mÄnga gÄnger har du hört hackare tala med kÀrlek om hur de i APL kan göra fantastiska saker med bara nÄgra rader kod? Jag tror att verkligt kloka mÀnniskor verkligen uppskattar detta.
Jag anser att nÀstan allt som gör program kortare Àr bra. Det bör finnas mÄnga bibliotekfunktioner, allt som kan vara implicerat bör vara det; syntaxen bör vara mer kortfattad; till och med namn pÄ entiteter bör vara korta.
Och inte bara program ska vara korta. Manualer ska ocksÄ vara korta. En stor del av manualerna Àr fyllda med förklaringar, reservationer, varningar och specialfall. Om du behöver förkorta en manual, Àr det bÀsta alternativet att förbÀttra sprÄket som krÀver sÄ mÄnga förklaringar.
5. ErkÀna vad hacking Àr
MÄnga mÀnniskor skulle vilja att hacking var som matematik eller Ätminstone nÄgot liknande naturvetenskaper. Jag tror att hacking mera liknar arkitektur. Arkitektur Àr kopplad till fysik, pÄ sÄ sÀtt att en arkitekt mÄste designa en byggnad som inte faller, men det verkliga mÄlet för en arkitekt Àr att skapa en stor byggnad, inte att göra upptÀckter inom statik.
Vad hackare Àlskar Àr att skapa stora program. Och jag tycker att, Ätminstone i vÄra egna tankar, bör vi komma ihÄg att skriva fantastiska program Àr underbart, Àven nÀr detta arbete inte lÀtt översÀtts till vanlig intellektuell valuta av vetenskapliga publikationer. Ur intellektuell synvinkel Àr det lika viktigt att utveckla ett sprÄk som programmerare kommer att Àlska som att skapa nÄgot hemskt, som fÄngar en idé om vilken du kan publicera en artikel.
Ăppna problem
1. Hur organiserar man stora bibliotek?
Bibliotek blir en viktig del av programmeringssprÄk. De blir sÄ stora att det kan bli farligt. Om det tar lÀngre tid att hitta en funktion i biblioteket som gör det du behöver Àn att skriva funktionen sjÀlv, dÄ gör hela koden inget annat Àn att tjockna din manual. (Symbolics guider var ett exempel pÄ detta.) SÄ vi mÄste lösa problemet med organisationen av bibliotek. Idealiskt skulle vi designa dem sÄ att programmeraren kan gissa vilken bibliotekfunktion som passar.
2. Ăr folk verkligen skrĂ€mda av prefixsyntax?
Det Ă€r ett öppet problem i den meningen att jag har tĂ€nkt pĂ„ det i flera Ă„r och fortfarande inte vet svaret. Prefixsyntax verkar helt naturligt för mig, kanske förutom dess anvĂ€ndning i matematik. Men det kan vara sĂ„ att den stora delen av den dĂ„liga populariteten för Lisp beror pĂ„ den ovanliga syntaxen... Ăr det vĂ€rt att göra nĂ„got Ă„t det, om det Ă€r sant, Ă€r en annan frĂ„ga.
3. Vad behöver du för serverprogramvara?
Jag tror att de flesta applikationer som kommer att skrivas under de nÀrmaste tjugo Ären kommer att vara webbappar, i den meningen att programmen kommer att ligga pÄ en server och kommunicera med dig via en webblÀsare. Och för att skriva sÄdana applikationer behöver vi nya verktyg.
En av dessa saker Àr stödet för ett nytt sÀtt att slÀppa serverapplikationer. IstÀllet för en eller tvÄ stora versioner om Äret, som skrivbordsmjukvara, kommer servermjukvara att slÀppas i en serie smÄ förÀndringar. Du kan ha fem eller tio versioner om dagen. Och alla kommer alltid att ha den senaste versionen.
Vet du hur man designar program sÄ att de Àr underhÄllbara? Serverprogramvara mÄste designas för att vara förÀndringsbenÀgen. Du bör kunna Àndra den lÀtt, eller Ätminstone veta vad som innebÀr en liten Àndring och vad som Àr viktigt.
En annan sak som kan vara anvÀndbar i serverprogramvara Àr, plötsligt, kontinuerlig leverans. I en webbapplikation kan du anvÀnda nÄgot som , för att fÄ effekt av underprogram i en stateless vÀrld av webbsessioner. Det kan vara vÀrt att ha kontinuerlig leverans om denna möjlighet inte blir för kostsam.
4. Vilka nya abstraktioner ÄterstÄr att upptÀcka?
Jag Ă€r inte sĂ€ker pĂ„ hur rimlig en sĂ„dan förhoppning Ă€r, men personligen skulle jag verkligen vilja öppna upp för en ny abstraktion â nĂ„got som skulle kunna ha lika stor betydelse som första klassens funktioner eller rekursion, eller Ă„tminstone standardparametrar. Kanske Ă€r det en ouppnĂ„elig dröm. SĂ„dana saker upptĂ€ckts sĂ€llan. Men jag ger inte upp hoppet.
Lite kÀnda hemligheter
1. Du kan anvÀnda vilket sprÄk du vill
Tidigare innebar skapandet av applikationer att man skapade skrivbordsprogram. Och i skrivbordsprogram finns det en stark betoning pÄ att skriva program pÄ samma sprÄk som operativsystemet. För tio Är sedan betydde skrivande av program generellt att man skrev program i C. Slutligen har traditionen utvecklats: applikationer behöver inte skrivas pÄ ovanliga sprÄk. Och denna tradition har utvecklats sÄ lÀnge att personer utan teknisk bakgrund, som chefer och riskkapitalister, ocksÄ har lÀrt sig detta.
Serverprogramvara krossar helt denna modell. Med serverprogramvara kan du anvÀnda vilket sprÄk du vill. NÀstan ingen förstÄr detta Ànnu (speciellt chefer och riskkapitalister). Men vissa hackare förstÄr det, dÀrför hör vi om sÄdana indy-sprÄk som Perl och Python. Vi hör inte om Perl och Python, eftersom folk anvÀnder dem för att skriva applikationer för Windows.
Vad detta innebÀr för oss, mÀnniskor som Àr intresserade av att designa programmeringssprÄk, Àr att det finns en potentiell publik för vÄrt arbete.
2. Hastighet kommer frÄn profilerare
SprÄkets skapare eller Ätminstone dess implementerare Àlskar att skriva kompilatorer som genererar snabb kod. Men jag tror att det inte Àr det som gör sprÄk snabba för anvÀndare. Knuth pÄpekade för lÀnge sedan att hastighet beror pÄ endast nÄgra fÄ flaskhalsar. Och alla som har försökt att snabba upp ett program vet att man inte kan gissa var flaskhalsen Àr. Profileraren Àr svaret.
SprÄkutvecklarna löser inte rÀtt problem. AnvÀndarna behöver inte att benchmarken ska fungera snabbt. De behöver ett sprÄk som kan visa vilka delar av deras program som behöver skrivas om. I det ögonblicket behövs hastighet i praktiken. SÄ kanske vore det bÀttre om sprÄkets implementatörer spenderade hÀlften av den tid de lÀgger pÄ att optimera kompilatorn och istÀllet investerade den tiden i att skriva en bra profilerare.
3. Du behöver en applikation som fÄr ditt sprÄk att utvecklas
Kanske Àr det inte den slutgiltiga sanningen, men det verkar som att de bÀsta sprÄken har utvecklats tillsammans med de applikationer som anvÀnde dem. C skrevs av mÀnniskor som behövde systemprogrammering. Lisp utvecklades delvis för symbolisk derivering; McCarthy var sÄ ivrig att börja att han började skriva deriveringsprogram redan i det första dokumentet om Lisp 1960.
Detta Àr sÀrskilt bra om din applikation löser nÄgra nya problem. Det pressar ditt sprÄk att ha nya möjligheter som programmerare behöver. Personligen Àr jag intresserad av att skriva ett sprÄk som skulle vara bra för serverapplikationer.
[Under diskussionen uttryckte Guy Steele ocksÄ denna tanke och tillade att applikationen inte bör bestÄ av att skriva en kompilator för ditt sprÄk, sÄvida inte ditt sprÄk Àr avsett för att skriva kompilatorer.]
4. SprÄket bör vara lÀmpligt för att skriva engÄngsprogram.
Du vet vad en engÄngsprogram Àr: det Àr nÀr du snabbt behöver lösa ett begrÀnsat problem. Jag antar att om du ser dig omkring sÄ kommer du att upptÀcka mÄnga seriösa program som började som engÄngsprogram. Jag skulle inte bli förvÄnad om de flesta program började som engÄngsprogram. SÄ om du vill skapa ett sprÄk som Àr lÀmpligt för att skriva mjukvara generellt, bör det ocksÄ vara lÀmpligt för att skriva engÄngsprogram, eftersom det Àr den inledande fasen för mÄnga program.
5. Syntax Àr kopplad till semantik
Traditionellt anses syntax och semantik vara starkt Ätskilda saker. Det kanske lÄter chockerande, men sÄ Àr det inte. Jag tror att det du vill fÄ ut av ditt program Àr kopplat till hur du uttrycker det.
Nyligen pratade jag med Robert Morris, och han pÄpekade att överbelastning av operatörer Àr en stor fördel för sprÄk med infixsyntax. I sprÄk med prefixesyntax Àr varje funktion som du definierar faktiskt en operator. Om du vill lÀgga till en ny typ av tal som du hittat pÄ, kan du enkelt definiera en ny funktion för att lÀgga till den. Om du gör det i ett sprÄk med infixsyntax kommer du se att det finns en stor skillnad mellan att anvÀnda en överbelastad operator och att anropa en funktion.
Idéer som Äterkommer med tiden
1. Nya programmeringssprÄk
Ser man tillbaka pÄ 1970-talet var det trendigt att utveckla nya programmeringssprÄk. Nu Àr det inte sÄ. Men jag tror att serverprogramvara kommer att Äterinföra trenden att skapa nya sprÄk. Med serverprogramvara kan du anvÀnda vilket sprÄk du vill, och om nÄgon skapar ett sprÄk som verkar bÀttre Àn de andra, sÄ kommer det att finnas mÀnniskor som vÄgar anvÀnda det.
2. Tidsdelning
Richard Kelsey presenterade denna idé, vars tid har kommit igen, och jag stöder den helt. Min gissning (och Microsofts ocksÄ) Àr att mÄnga berÀkningar kommer att flyttas frÄn stationÀra datorer till avlÀgsna servrar. Med andra ord har tidsdelningen Ätervunnit sin plats. Jag tror att det kommer att krÀvas stöd för detta pÄ sprÄk nivÄ. Till exempel har Richard och Jonathan Reeve gjort mycket arbete för att införa processplanering i Scheme 48.
3. Effektivitet
Nyligen verkade det som att datorerna redan var tillrÀckligt snabba. Allt mer hör vi talas om bytekod, vilket Ätminstone för mig betyder att vi har kraft i reserv. Men jag tror att med serverprogramvara har vi inte det. NÄgon mÄste betala för servrar, som programvaran körs pÄ, och antalet anvÀndare som servern kan stödja per maskin kommer att vara en del av deras kapitalutgifter.
Jag tror att effektivitet kommer att spela en roll, Ätminstone i berÀkningsflaskhalsar. Detta kommer sÀrskilt att vara viktigt för in- och utmatningsoperationer, eftersom serverapplikationer utför mÄnga sÄdana operationer.
I slutÀndan kan det visa sig att bytekod inte Àr lösningen. Just nu verkar Sun och Microsoft slÄss ansikte mot ansikte pÄ bytekodfÀltet. Men de gör det för att bytekod Àr en bekvÀm plats att integrera sig i processen, inte för att bytekod i sig Àr en bra idé. Det kan hÀnda att hela denna strid passerar obemÀrkt. Det skulle vara roligt.
FĂ€llor och hinder
1. Kunder
Detta Àr bara en hypotetisk idé, men den gÄr ut pÄ att det bara Àr de applikationer som Àr helt serverbaserade som kommer att vinna. Att designa mjukvara med antagandet att alla kommer att ha din klient Àr som att skapa ett samhÀlle baserat pÄ antagandet att alla kommer att vara Àrliga. Det skulle definitivt vara bekvÀmt, men du mÄste erkÀnna att det aldrig kommer att hÀnda.
Jag tror att det kommer att ske en snabb ökning av enheter med webbtillgÄng, och man kan anta att de kommer att stödja grundlÀggande HTML och formulÀr. Har du en webblÀsare pÄ din telefon? Kommer din telefon att finnas i din PalmPilot? Kommer din blackberry att ha en större skÀrm? Kommer du att kunna gÄ online med din gameboy? FrÄn din klocka? Jag vet inte. Och jag behöver inte fÄ reda pÄ det om jag satsar pÄ att allt kommer att vara pÄ servern. Det Àr helt enkelt mycket mer pÄlitligt att ha all intelligens pÄ servern.
2. Objektorienterad programmering
Jag förstÄr att detta Àr ett kontroversiellt uttalande, men jag anser inte att OOP Àr nÄgot viktigt. Jag tycker att det Àr en lÀmplig paradigm för specifika applikationer som behöver specifika datatyper, som fönstersystem, simuleringar, CAD-system. Men jag förstÄr inte varför det skulle vara lÀmpligt för alla program.
Jag tror att mÀnniskor i stora företag gillar OOP delvis för att det ger mycket av vad som ser ut som arbete. Det som naturligtvis kan representeras som, sÀg, en lista över heltal, kan nu representeras som en klass med alla möjliga byggnadsstÀllningar, med brus och stress.
En annan lockande aspekt av OOP Àr att metoder ger dig en slags effekt av förstaklassiga funktioner. Men det Àr ingen nyhet för programmerare i Lisp. NÀr du har verkliga förstaklassiga funktioner kan du enkelt anvÀnda dem pÄ vilket sÀtt som helst som passar uppgiften istÀllet för att trycka allt in i en mall av klasser och metoder.
Jag tror att detta innebÀr för sprÄkdesign att man inte ska integrera OOP för djupt. Kanske Àr svaret att erbjuda mer allmÀnna, grundlÀggande saker och lÄta folk designa vilka objektsystem som helst som bibliotek.
3. Designad av en kommitté
Om ditt sprÄk designas av en kommitté, dÄ Àr du i en fÀlla, och inte bara av de skÀl som Àr allmÀnt kÀnda. Alla vet att kommittéer tenderar att skapa klumpig och inkonsekvent sprÄkdesign. Men jag tror att den största faran Àr att de inte tar nÄgra risker. NÀr en person Àr ledare, tar de risker som en kommitté aldrig skulle vara överens om att ta.
MÄste man ta risker för att skapa ett bra sprÄk? MÄnga mÀnniskor kanske misstÀnker att sprÄkdesign Àr nÄgot dÀr man bör hÄlla sig ganska nÀra traditionell visdom. Jag vÄgar pÄstÄ att det inte Àr sÄ. I allt annat mÀnniskor gör, Àr belöningen proportionell mot risken. SÄ varför skulle det vara annorlunda i sprÄkdesign?
KĂ€lla: habr.com
