hur lärande Smalltalk kan göra dig till en bättre utvecklare

Smalltalk uppfattas allmänt som ett gammalt, döende språk—en antik från en svunnen tid. Ingenting kunde vara längre från sanningen.

Smalltalk är fortfarande mycket relevant. Det är ett utmärkt instruktionsspråk för att undervisa programmering till personer som inte har någon teknisk bakgrund. Det är ett superlativt prototypspråk för startups. Det är ett industriellt styrka företagsspråk som används av företag både stora och små över hela världen. Det finns goda skäl att överväga att använda moderna småprata idag, eftersom mycket har förändrats de senaste åren för att förbättra sina utsikter.

du behöver inte använda Smalltalk i produktionen idag, men försök att koda något i Smalltalk och se hur det känns. Det borde kännas bekant, eftersom Smalltalks implementering av det objektorienterade (OO) paradigmet är så utmärkt att det har påverkat en hel generation OO-språk, som Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift och så vidare.

genom att lära Smalltalk, kommer du att förstå hur alla dessa användbara funktioner i dagens OO språk kom att bli. Att lära sig Smalltalk kan också ge dig en stor fördel i programmeringsförmåga bland dina kamrater, och det kan vara ett bra verktyg för att undervisa programmering till nybörjare.

vad gav Smalltalk oss?

Smalltalk har ett rikt arv av bidrag till mjukvaruindustrin. Titta bara på den här listan över funktioner och tekniker som den introducerade:

  • Smalltalk introducerade världen till den virtuella språkmaskinen (eller VM), vilket gör att programvaran kan vara plattformsoberoende. Detta är samma teknik som ligger till grund för Java (JVM) och.Net, liksom Android (Dalvik).
  • Smalltalk var också banbrytande för JIT (just-in-time) – kompilering, en teknik för att dramatiskt förbättra prestanda för bytecode-programvara som Java.
  • från Smalltalk kom den första moderna IDE (integrated development environment), som inkluderade en textredigerare, ett system eller klass webbläsare, ett objekt eller egendom inspektör, och en debugger. Detta ledde till de många ide som utvecklare föredrar idag, som Visual Studio, Xcode och IntelliJ IDEA. Personligen tror jag att ingen av dessa ide kan jämföra med Smalltalks IDE i enkelhet, elegans och utvecklingshastighet; originalet är fortfarande det bästa!
  • från början hade Smalltalk stängningar, som är lexiskt scoped förstklassiga funktioner. I huvudsak är en stängning En återuppringningsfunktion som kan se icke-lokala variabler på den plats där de definierades. Detta kan hjälpa dig att skriva mycket mer kompakt och läsbar kod. Nedläggningar är att hitta sin väg till många stora språk, såsom Java, C# och PHP.
  • Smalltalk var det första språkverktyget för att stödja ”live” programmering och avancerade felsökningstekniker som on-the-fly inspektion och kodändringar under körning. Idag är live-felsökning möjlig i C # med Visual Studios” Redigera och fortsätt ” och i Java med HotSwap.
  • Smalltalk introducerade MVC (Model-View-Controller) till världen. MVC är en programvara arkitektoniskt mönster för att genomföra användargränssnitt. Det är populärt med skrivbords GUI-applikationer och webbapplikationer. Dessa dagar är det arkitekturen som de flesta webbutvecklare lär sig först.
  • i stor utsträckning är Smalltalk ansvarig för att ge oss testdriven utveckling (eller TDD) och extrem programmering (eller XP), som båda är mycket inflytelserika i dagens standard agila metoder.
  • Smalltalk gjorde ”duck typing” ett hushållsord (Ja, om ditt hus har en programmerare i det). Duck typing är där ”typkontroll” skjuts upp till körning—när reflektionsfunktioner används för att säkerställa korrekt beteende. Vi hittar duck typing på många språk idag, inklusive Java, Python, Common Lisp, Go, Groovy, Objective-C och PHP.
  • Smalltalk banade väg för utvecklingen av objektdatabaser. Medan de inte gjorde det till mainstream, har objektdatabaser sina nischmarknader. Det bästa exemplet på en objektdatabasprodukt är GemStone / S, som är väl lämpad för skalbara, högpresterande, multitier distribuerade system.
  • Smalltalk gav oss den första refactoring-webbläsaren. Naturligtvis kan refactoring support hittas i de flesta IDE idag.
  • Smalltalk var avgörande för att utveckla det grafiska användargränssnittet (eller GUI) och användargränssnittet ”vad du ser är vad du får” (WYSIWYG).

men hur kan lärande Smalltalk göra mig till en bättre utvecklare?

Smalltalk har flera mördare funktioner som var långt före sin tid:

  • bildbaserad uthållighet
  • objekt: allt är ett objekt, och objekt kommunicerar bara genom meddelanden (den ”renaste” OO och en av de tidigaste)
  • ”Live” programmering
  • avancerade felsökningstekniker som on-the-fly-kodändringar
  • ett enkelt, snyggt IDE-gränssnitt
  • domänspecifika språk (DSL): Det enda sättet Smalltalk fungerar, så programmerare måste fokusera på problemdomänen med ett språk och notation som är naturligt för den domänen

och det finns några andra funktioner som gör Smalltalk speciellt också.

i huvudsak är Smalltalks viktigaste fördel som ett produktivt språk-och inlärningsverktyg att det tar bort de flesta, om inte alla, av kognitiv stress i vanliga OO-språk som Java. Smalltalk presenterar inga syntaktiska röran eller störande funktioner. Det går helt enkelt ur vägen så att du kan fokusera all din uppmärksamhet på problemet eller applikationen till hands. Det är inte så att Java är ett dåligt språk för att vara mer komplext (och ha klassnamn på 30 tecken); vad jag säger är att lära sig ett obehindrat OO-språk faktiskt kan göra dig till en bättre Java-programmerare när du förstår dess oo-koncept från ett annat perspektiv.

att eliminera kognitiv stress är ett grundläggande mål för många språk—till exempel Python, Ruby, Elixir, Elm och Go. Även om du inte känner det, är stressen där. Det sägs ofta att programmering i Smalltalk eller Python är ganska som Zen; ditt sinne flyter bara enkelt med uppgiften. Detta är skönheten och värdet av språk enkelhet, och Smalltalk har detta i spader.

i Smalltalk destilleras OO till sina mest grundläggande begrepp av klasser och metoder, metaclasses och reflektion, och viktigast av allt budskap passerar. Smalltalk, på grund av dess objektrenhet och konsistens, ger dig en djupt bättre förståelse för objektorienterad programmering och hur man använder den till sin bästa effekt.

Smalltalks enkelhet gör det också till ett idealiskt instruktionsspråk för att lära sig programmering, speciellt om du inte har en teknisk bakgrund. Enkelheten i språket och verktygen gör att du kan fokusera dina energier på att lära dig programmeringstekniker, inte på språkformaliteter.

hur fungerar Smalltalk? Den bildbaserade metoden för programmering

Smalltalks främsta anspråk på berömmelse är dess bildbaserade tillvägagångssätt för att skapa programvara. En bild är en ögonblicksbild av minnet som innehåller alla objekt i ditt program eller system som körs. Det inkapslar hela exekveringstillståndet för ditt program. En bild kan sparas på disken, och utförandet kan senare återupptas exakt där du slutade!

Smalltalks bild kan låta lite whacky, men i själva verket har den en stark likhet med något som ofta används i det idag: systembilder i OS-virtualisering som vi hittar i VMware och VirtualBox. Du måste komma ihåg att Smalltalk ursprungligen var ett fristående operativsystem när det skapades på Xerox PARC på 1970-talet.

Smalltalks bild har också en stark likhet med en webbsidas DOM (Document Object Model). Observera att en webbapplikation i huvudsak är ett system för sig själv, sekvestrerat i webbläsaren och nekat direkt åtkomst till värdens filsystem och andra resurser. När en webbläsare stängs kan tillståndet för den dynamiska webbplatsen sparas eller cachas, och nästa gång webbläsaren återupptas kan Webbplatsen återställas i webbläsaren (med vissa begränsningar).

även det låga kalkylbladet hänger nära bildkonceptet. Det inkapslar hela exekveringstillståndet. Det kan inte komma åt värdens systemresurser. Det kan sparas och återställas. Och du borde veta att kalkylblad fortfarande används för att utveckla sofistikerade modeller och applikationer med sitt eget språk.

så bildkonceptet är ganska utbrett. Det är ett så trevligt sätt att utveckla programvara att en version av bildkonceptet har skapats för JavaScript i den livliga kärnan.

allt i Smalltalk är ett objekt

inga undantag: allt är ett objekt. Det finns inga primitiva datatyper. Det finns inga kontrollstrukturer som urval och iteration! Allt i Smalltalk görs genom att skicka meddelanden till objekt. Det här gör Smalltalk så enkelt, elegant och lätt att lära sig. Det är detta som gör språket så fullständigt rent syntaktiskt.

till exempel utökar följande kodavsnitt Talklassen för att stödja en icke-rekursiv faktoroperation:

Number extend
ifFalse: .
^ (c fold: ) ]]].

7 factorial printNl.

7 my_factorial printNl. "should be the same result as the previous line"

här, ifTrue: är ett nyckelordsmeddelande som skickas till det booleska objektet som resulterar från att utvärdera uttrycket (själv < 2). Argumentet till nyckelordet meddelandet är ett kodblock (avgränsas av hakparenteser). Faktiskt, ifTrue: är den första delen av ett tvådelat nyckelordsmeddelande, den andra delen är ifFalse:.

unary-meddelandet nytt skickas till klassen OrderedCollection för att skapa en ny samling. PrintNl-meddelandet skickas till resultatet (vilket är ett objekt) för att skicka my_factorial-meddelandet till nummer 7. Det hela läser nästan som naturligt språk!

Beräkningsreflektion i Smalltalk

reflektion i Smalltalk är särskilt värdefullt som ett medel för ett program att inspektera sin egen struktur och beräkning vid körning. Detta ger enorm kraft, så att program kan utöka sig med nya klasser och metoder eller fråga ”vem skickade detta meddelande till mig?”

Beräkningsreflektion används för att implementera ett kraftfullt sätt att hantera fel. När ett objekt skickas ett meddelande som det inte implementerar får det ett doesNotUnderstand: – meddelande, tillsammans med en reification av det ursprungliga meddelandet. Det finns många saker som programmet kan göra med doesnotförstå: meddelande, inklusive att utvidga sig med ny funktionalitet!

bildkonceptet och reflektionen tillåter också Smalltalk att eliminera applikations – / IDE-gränsen. Allt du behöver för att utveckla, felsöka och köra din applikation finns i bilden. Det finns ingen anledning att någonsin lämna din applikationsmiljö. Det är en helt helhetssyn på mjukvaruutveckling som gör allt mer Zen-liknande och produktivt.

Smalltalks renässans

de senaste 15 åren av utveckling i Smalltalks värld har gjort språket mycket mer tilltalande.

Smalltalk är nu tillgänglig för front – end webbprogrammering med Amber Smalltalk, som transpilerar till JavaScript. Amber utveckling sker helt i webbläsaren. En av de fantastiska sakerna med Amber är att när du importerar ett JavaScript-bibliotek kan dess objekt behandlas precis som Smalltalk-objekt.

under 2002 släpptes Seaside web framework och blev det mest populära verktyget för webbutveckling i Smalltalk. Dess fortsättningsbaserade tillvägagångssätt gav en konventionell” call/return ” – mekanism för din webbapplikation. Det kan hjälpa till att lösa problem som dubbelbegäran och bakåtknappsproblem. Ganska revolutionerande för sin tid, och fortfarande inte allmänt antagen i andra webbramar.

Pharo-projektet inleddes 2008 för att fokusera på modern programvaruteknik och utvecklingsteknik. Det har fört Smalltalk mycket längre än det tidigare open source-projektet Squeak, som baserades på den ärevördiga Smalltalk-80-dialekten. Pharo-projektet har också skapat forskning om en ny typ av IDE som kallas Glamorous Toolkit. Det bygger på tanken att din programmeringsmiljö ska vara ”formbar” för att passa dina behov.

förra året blev den högt ansedda Dolphin Smalltalk öppen källkod och erbjuder ett annat underbart alternativ för fans av Smalltalk. Dolphin Smalltalk har ofta berömts för att ha en av de finaste implementeringarna av Smalltalk IDE.

Smalltalk legacy: Gör programmering kul

när du använder de många faciliteterna för modern mjukvaruutveckling som JVM, Eclipse IDE, stängningar, ”live coding”, MVC, TDD, VMware och till och med den vanliga gamla webbappen, tänk tillbaka på deras ursprung i Smalltalk och håll en större respekt för vad du gör. Ha en större uppskattning för de språk du använder, oavsett om de är Objective-C, Python, Ruby, Groovy, Scala, Dart eller Swift.

att arbeta med språket som har sitt ursprung i alla dessa fantastiska funktioner och tekniker ger en unik möjlighet att förbättra din kunskap, din mentala skärpa och din produktivitet som mjukvaruutvecklare. Ordet ” kul ” går inte alltid in i diskussioner om programvaruteknik, men jag tror att Smalltalk—och dess oo—bröder-ger den låga kognitiva barriären och enkel programmering som kan göra programvaruteknik kul.



+