Smalltalk jest powszechnie postrzegany jako stary, umierający język-antyk z minionej epoki. Nic bardziej mylnego.
Smalltalk jest nadal bardzo istotny. Jest to doskonały język instruktażowy do nauczania programowania dla osób, które nie mają zaplecza technicznego. To świetny język prototypowania dla startupów. Jest to język dla przedsiębiorstw o silnej pozycji w przemyśle, używany przez duże i małe firmy na całym świecie. Istnieją dobre powody, aby rozważyć użycie nowoczesnego Smalltalk dzisiaj, ponieważ wiele się zmieniło w ostatnich latach, aby poprawić jego perspektywy.
nie musisz dzisiaj używać Smalltalk w produkcji, ale spróbuj coś kodować w Smalltalk i zobacz, jak to jest. Powinno to być znajome, ponieważ implementacja paradygmatu obiektowego (oo) Smalltalk jest tak doskonała, że wpłynęła na całą generację języków OO, takich jak Objective-C, Python, Ruby, Clos, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift i tak dalej.
ucząc się Smalltalk, zrozumiesz, jak powstały wszystkie te przydatne funkcje w dzisiejszych językach OO. Nauka Smalltalk może również dać Ci dużą przewagę w umiejętnościach programowania wśród rówieśników i może być doskonałym narzędziem do nauczania programowania dla początkujących.
co nam dał Smalltalk?
Smalltalk ma bogate dziedzictwo wkładu w przemysł oprogramowania. Wystarczy spojrzeć na tę listę funkcji i technologii, które wprowadził:
- Smalltalk wprowadził świat na język virtual machine (lub VM), który pozwala oprogramowaniu być niezależnym od platformy. Jest to ta sama technologia, która stanowi podstawę Javy (JVM) i.NET, a także Androida (Dalvik).
- Smalltalk był również pionierem kompilacji JIT (just-in-time), techniki radykalnej poprawy wydajności oprogramowania bajtowego, takiego jak Java.
- z Smalltalk powstało pierwsze nowoczesne IDE (integrated development environment), które zawierało edytor tekstu, przeglądarkę systemową lub klasową, Inspektora obiektów lub właściwości oraz debugger. Doprowadziło to do wielu idee, że deweloperzy faworyzują dzisiaj, takich jak Visual Studio, Xcode, i IntelliJ IDEA. Osobiście uważam, że żaden z tych IDE nie może się równać z IDE Smalltalk w prostocie, elegancji i szybkości rozwoju; oryginał jest nadal najlepszy!
- od samego początku Smalltalk miał zamknięcia, które są leksykalnie skalowalnymi funkcjami pierwszej klasy. W istocie, zamknięcie jest funkcją zwrotną, która widzi zmienne nielokalne w miejscu, w którym zostały zdefiniowane. Może to pomóc w napisaniu znacznie bardziej zwartego i czytelnego kodu. Zamknięcia znajdują swoją drogę do wielu głównych języków, takich jak Java, C# i PHP.
- Smalltalk był pierwszym narzędziem do obsługi programowania na żywo i zaawansowanych technik debugowania, takich jak inspekcja w locie i zmiany kodu podczas wykonywania. Obecnie debugowanie na żywo jest możliwe w C# za pomocą programu Visual Studio „Edytuj i kontynuuj” oraz w Javie za pomocą HotSwap.
- Smalltalk wprowadził na świat MVC (Model-View-Controller). MVC jest architekturą oprogramowania do implementacji interfejsów użytkownika. Jest popularny w aplikacjach desktopowych GUI i aplikacjach internetowych. Obecnie jest to architektura, której większość programistów internetowych uczy się najpierw.
- w dużej mierze Smalltalk jest odpowiedzialny za dostarczanie nam programowania opartego na testach (lub TDD) i programowania ekstremalnego (lub XP), które są bardzo wpływowe w dzisiejszych standardowych praktykach agile.
- Smalltalk zrobił „pisanie kaczki” słowem domowym (cóż, jeśli w domu jest programista). Pisanie kaczek jest tam, gdzie” sprawdzanie typu ” jest odroczone do czasu wykonania—kiedy używane są możliwości odbicia, aby zapewnić prawidłowe zachowanie. Duck pisze w wielu językach, w tym Java, Python, Common Lisp, go, Groovy, Objective-C i PHP.
- Smalltalk był pionierem rozwoju obiektowych baz danych. Chociaż nie dostali się do głównego nurtu, obiektowe bazy danych mają swoje niszowe rynki. Najlepszym przykładem produktu object database jest GemStone / s, który dobrze nadaje się do skalowalnych, wysokowydajnych, wielowarstwowych systemów rozproszonych.
- Smalltalk dał nam pierwszą przeglądarkę refaktoryzacyjną. Oczywiście wsparcie refaktoryzacji można znaleźć obecnie w większości IDE.
- Smalltalk odegrał kluczową rolę w tworzeniu graficznego interfejsu użytkownika (lub GUI) i interfejsu użytkownika „what you see is what you get” (WYSIWYG).
ale jak nauka Smalltalk może uczynić mnie lepszym programistą?
Smalltalk ma kilka zabójczych funkcji, które wyprzedziły ich czas:
- trwałość obrazu
- Obiekty: wszystko jest obiektem, a obiekty komunikują się tylko za pomocą wiadomości („najczystszy” OO i jeden z najwcześniejszych)
- programowanie”na żywo”
- zaawansowane techniki debugowania, takie jak zmiany kodu w locie
- prosty, czytelny interfejs IDE
- języki specyficzne dla domeny (DSLs): Jedynym sposobem Smalltalk działa, więc programiści muszą skupić się na domenie problemu przy użyciu języka i notacji, która jest naturalna dla tej domeny
i jest kilka innych funkcji, które sprawiają, że Smalltalk jest również wyjątkowy.
w istocie główną zaletą Smalltalk jako produktywnego narzędzia językowego i edukacyjnego jest to, że usuwa większość, jeśli nie wszystkie, stresu poznawczego w głównych językach OO, takich jak Java. Smalltalk nie prezentuje bałaganu składniowego ani rozpraszających funkcji. Po prostu zejdzie Ci z drogi, abyś mógł skupić całą swoją uwagę na problemie lub aplikacji pod ręką. Nie chodzi o to, że Java jest złym językiem, ponieważ jest bardziej skomplikowany (i ma 30-znakowe nazwy klas); mówię tylko, że uczenie się nieobciążonego języka OO może rzeczywiście uczynić cię lepszym programistą Javy, gdy zrozumiesz jego pojęcia OO z innej perspektywy.
eliminacja stresu poznawczego jest podstawowym celem wielu języków—na przykład Python, Ruby, Elixir, Elm i Go. Nawet jeśli tego nie czujesz, stres jest tam. Często mówi się, że programowanie w Smalltalk lub Pythonie jest raczej jak Zen; twój umysł po prostu płynie bez wysiłku z zadaniem. To jest piękno i wartość prostoty języka, a Smalltalk ma to w sobie.
w Smalltalk, OO jest destylowany do jego najbardziej podstawowych pojęć klas i metod, metaklasy i refleksji, a co najważniejsze przekazywanie wiadomości. Smalltalk, ze względu na swoją czystość obiektową i spójność, da ci dogłębnie lepsze zrozumienie programowania obiektowego i jak z niego korzystać w najlepszy sposób.
prostota Smalltalk sprawia, że jest to również idealny język instruktażowy do nauki programowania, zwłaszcza jeśli nie masz zaplecza technicznego. Prostota języka i narzędzi pozwala skupić się na nauce technik programowania, a nie na formalnościach językowych.
jak działa Smalltalk? Podejście oparte na obrazie do programowania
głównym roszczeniem Smalltalk do sławy jest oparte na obrazie podejście do tworzenia oprogramowania. Obraz to migawka pamięci, która zawiera wszystkie obiekty w uruchomionej aplikacji lub systemie. Zawiera cały stan wykonania Twojego programu. Obraz może być zapisany na dysku, a wykonanie może być później wznowione dokładnie od miejsca, w którym zostało przerwane!
obraz Smalltalk może wydawać się nieco zwariowany, ale w rzeczywistości jest bardzo podobny do czegoś, co jest w nim powszechnie używane dzisiaj: obrazów systemowych w wirtualizacji systemu operacyjnego, takich jak w VMware i VirtualBox. Trzeba pamiętać, że Smalltalk był pierwotnie samodzielnym systemem operacyjnym, gdy został stworzony w Xerox PARC w latach 70.
obraz Smalltalk jest również bardzo podobny do DOM strony internetowej (Document Object Model). Zauważ, że aplikacja internetowa jest zasadniczo systemem samym w sobie, umieszczonym w przeglądarce internetowej i pozbawionym bezpośredniego dostępu do systemu plików hosta i innych zasobów. Po zamknięciu przeglądarki internetowej stan dynamicznej witryny internetowej może zostać zapisany lub buforowany, a przy następnym wznowieniu przeglądarki witryna może zostać przywrócona w przeglądarce (z pewnymi ograniczeniami).
nawet skromny arkusz kalkulacyjny jest ściśle związany z koncepcją obrazu. Zawiera cały stan wykonania. Nie może uzyskać dostępu do zasobów systemowych hosta. Można go zapisać i przywrócić. I powinieneś wiedzieć, że arkusze kalkulacyjne są nadal używane do tworzenia zaawansowanych modeli i aplikacji z własnym językiem.
więc koncepcja obrazu jest dość powszechna. Jest to tak miły sposób na rozwój oprogramowania, że stworzono wersję koncepcji obrazu dla JavaScript w żywym jądrze.
wszystko w Smalltalk jest obiektem
bez wyjątków: wszystko jest obiektem. Nie ma prymitywnych typów danych. Nie ma struktur kontrolnych, takich jak selekcja i iteracja! Wszystko w Smalltalk odbywa się poprzez wysyłanie wiadomości do obiektów. To właśnie sprawia, że Smalltalk jest tak prosty, elegancki i łatwy do nauczenia. To właśnie sprawia, że język jest tak całkowicie czysty składniowo.
na przykład, poniższy fragment kodu rozszerza klasę Number, aby wspierać nie-rekurencyjną operację silni:
Number extend
ifFalse: .
^ (c fold: ) ]]].
7 factorial printNl.
7 my_factorial printNl. "should be the same result as the previous line"
ifTrue: jest tutaj wiadomością ze słowem kluczowym wysłaną do obiektu logicznego, która wynika z obliczenia wyrażenia (self < 2). Argumentem wiadomości słowa kluczowego jest blok kodu (oznaczony nawiasami kwadratowymi). Właściwie, ifTrue: jest pierwszą częścią dwuczęściowej wiadomości ze słowem kluczowym, a drugą częścią jest ifalse:.
jednoznakowa wiadomość new jest wysyłana do klasy OrderedCollection, aby utworzyć nową kolekcję. Wiadomość printNl jest wysyłana do wyniku (który jest obiektem) wysłania wiadomości my_factorial na numer 7. Całość brzmi prawie jak naturalny język!
odbicie obliczeniowe w Smalltalk
odbicie w Smalltalk jest szczególnie cenne jako środek do sprawdzania własnej struktury i obliczeń w czasie wykonywania. Daje to ogromną moc, pozwalając programom rozszerzać się o nowe klasy i metody lub pytać ” kto wysłał tę wiadomość do mnie?”
refleksja obliczeniowa służy do implementacji potężnego sposobu radzenia sobie z błędami. Gdy obiekt jest wysyłany z wiadomością, której nie implementuje, otrzymuje wiadomość doesNotUnderstand: wraz z reifikacją oryginalnej wiadomości. Jest wiele rzeczy, które program może zrobić z wiadomością doesNotUnderstand:, w tym rozszerzenie się o nową funkcjonalność!
koncepcja obrazu i odbicie pozwalają również Smalltalk wyeliminować granicę aplikacji/IDE. Wszystko, czego potrzebujesz do opracowania, debugowania i uruchamiania aplikacji, znajduje się na obrazku. Nie ma potrzeby opuszczania środowiska aplikacji. Jest to całkowicie holistyczne podejście do tworzenia oprogramowania, które sprawia, że wszystko jest bardziej zen-like i produktywne.
renesans Smalltalk
ostatnie 15 lat rozwoju w świecie Smalltalk sprawiło, że język stał się o wiele bardziej atrakcyjny.
Smalltalk jest teraz dostępny do programowania front-endowego przy użyciu Amber Smalltalk, który przenosi się do JavaScript. Rozwój Amber odbywa się w całości w przeglądarce. Jedną z niesamowitych rzeczy w Amber jest to, że podczas importowania biblioteki JavaScript, jej obiekty mogą być traktowane jak obiekty Smalltalk.
w 2002 roku został wydany Seaside web framework, stając się najpopularniejszym narzędziem do tworzenia stron internetowych w Smalltalk. Jego podejście oparte na kontynuacji zapewniało konwencjonalny mechanizm „call / return” dla Twojej aplikacji internetowej. Może pomóc w rozwiązaniu problemów, takich jak podwójne żądanie i problemy z przyciskiem wstecz. Dość rewolucyjny jak na swoje czasy i nadal nie jest powszechnie stosowany w innych frameworkach internetowych.
projekt Pharo rozpoczął się w 2008 roku, aby skupić się na nowoczesnej inżynierii oprogramowania i technikach rozwoju. Wniósł Smalltalk o wiele dalej niż poprzedni projekt open-source o nazwie Squeak, który był oparty na czcigodnym dialekcie Smalltalk-80. Projekt Pharo zapoczątkował również badania nad nowym rodzajem IDE o nazwie Glamorous Toolkit. Opiera się na założeniu, że Twoje środowisko programistyczne powinno być „formowalne” do Twoich potrzeb.
w zeszłym roku wysoko ceniony Dolphin Smalltalk stał się open source, oferując kolejną wspaniałą opcję dla fanów Smalltalk. Dolphin Smalltalk jest często chwalony za jedną z najlepszych implementacji Smalltalk IDE.
the Smalltalk legacy: Uczynienie programowania zabawnym
kiedy korzystasz z wielu udogodnień nowoczesnego oprogramowania, takich jak JVM, Eclipse IDE, closures, „live coding”, MVC, TDD, VMware, a nawet zwykłej starej aplikacji internetowej, pomyśl o ich początkach w Smalltalk i miej większy szacunek dla tego, co robisz. Miej większe uznanie dla języków, których używasz, niezależnie od tego, czy są to Objective-C, Python, Ruby, Groovy, Scala, Dart, czy Swift.
praca z językiem, który stworzył wszystkie te wspaniałe funkcje i technologie, zapewnia wyjątkową okazję do znacznego zwiększenia wiedzy, sprawności umysłowej i produktywności jako programista. Słowo „zabawa” nie zawsze wchodzi w dyskusje na temat inżynierii oprogramowania, ale myślę, że Smalltalk—i jego bracia OO—zapewniają niską barierę poznawczą i łatwość programowania, które mogą sprawić, że inżynieria oprogramowania będzie zabawna.