- PVSM.RU - https://www.pvsm.ru -

Как изучение Smalltalk может улучшить ваши навыки программиста

Как изучение Smalltalk может улучшить ваши навыки программиста - 1

Smalltalk обычно воспринимается как старый, умирающий язык – антиквариат из ушедшей эпохи. Нет ничего более далёкого от правды.

Smalltalk по-прежнему очень актуален. Это отличный язык для обучения программированию людей, не имеющих технического образования. Это превосходный язык прототипирования для стартапов. Это мощный промышленный язык, используемый как крупными, так и малыми компаниями по всему миру [1]. Есть веские причины рассмотреть использование современного Smalltalk сегодня, поскольку многое было сделано за последнее время, чтобы улучшить его возможности.

Вы не обязаны использовать Smalltalk в промышленном программировании, но попробуйте кое-что написать на нём и прислушайтесь к своим ощущениям. Они должны быть знакомы, потому что реализация объектно-ориентированной парадигмы в Smalltalk настолько великолепна, что повлияла на целое поколение ОО языков, таких как Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6 [2], Erlang, Groovy, Scala, Dart, Swift и многих иных.

Изучая Smalltalk, вы поймете, как все эти полезные функции в современных языках стали реальностью. Изучение Smalltalk может также дать вам преимущество среди ваших коллег, и ещё он может быть отличным инструментом для обучения программированию.

Что нам дал Smalltalk?

Вклад Smalltalk в индустрию программного обеспечения огромен. Просто взгляните на этот список функций и технологий, которые он представил:

  • Smalltalk представил миру виртуальную машину (VM), которая позволяет программному обеспечению быть независимым от платформы. Это та же технология, которую поддерживает Java (JVM) и .NET, а также Android (Dalvik).
  • Smalltalk был пионером JIT компиляции [3] (just-in-time), методики резкого повышения производительности программного обеспечения байт-кодов, такого как Java.
  • В Smalltalk появилась первая современная среда разработки (IDE), которая включала текстовый редактор, браузер системы и классов, инспектор объектов и свойств и отладчик. Это привело к возникновению многих IDE, которые сегодня используют разработчики, такие как Visual Studio, Xcode и IntelliJ IDEA. Лично я считаю, что ни одна из этих IDE не может сравниться со Smalltalk в простоте, элегантности и скорости разработки; оригинал все ещё лучший!
  • С самого начала Smalltalk имел замыкания, представляющие собой функции первого класса, имеющие лексическую область видимости. По сути, замыкание [4] – это функция обратного вызова (callback) которая может видеть нелокальные переменные в том месте, где они были определены. Это может помочь вам написать гораздо более компактный и читаемый код. Замыкания находят своё применение во многих языках, например, в Java, C# и PHP.
  • Smalltalk был первым языком, поддерживающим «живое» программирование и усовершенствованные методы отладки, такие как проверка и изменение кода во время выполнения. Сегодня отладка в реальном времени возможна в C# с помощью Visual Studio функции «Edit and Continue» и Java с использованием HotSwap.
  • Smalltalk представил миру концепцию MVC [5] (Model-View-Controller). MVC – это программный архитектурный шаблон для реализации пользовательских интерфейсов. Он популярен в настольных графических приложениях и веб-приложениях. В наши дни это та самая архитектура, которую в первую очередь изучают веб-разработчики.
  • В значительной степени именно Smalltalk ответственен за разработку на основе тестов [6] (TDD) и экстремальное программирование [7] (XP), которые очень важны в нынешних «гибких» (Agile) практиках.
  • Smalltalk сделал «утиную типизацию» расхожим выражением (ну, если в вашем доме ещё ходит программист). В утиной типизации проверка типов отложена до выполнения программы – когда рефлексия используются для обеспечения правильного поведения. Сегодня мы находим утиную типизацию во многих языках, включая Java, Python, Common Lisp, Go, Groovy, Objective-C и PHP.
  • Smalltalk первым ввёл использование объектных баз данных. Хотя они и не получили широкого распространения, всё же объектные базы данных имеют свои нишевые рынки. Лучшим примером объектной базы данных является GemStone/S [8], который хорошо подходит для масштабируемых, высокопроизводительных, многоуровневых распределённых систем.
  • Smalltalk представил нам первый браузер рефакторинга [9]. Конечно, поддержку рефакторинга можно найти в большинстве современных IDE.
  • Smalltalk сыграл важную роль в разработке графического пользовательского интерфейса (GUI) и пользовательского интерфейса «что видишь, то и получишь» (WYSIWYG).

Но как изучение Smalltalk сделает меня лучшим разработчиком?

Smalltalk имеет целый ряд функций, намного опередивших своё время:

  • Основанное на образе сохранение
  • Объекты: все является объектом, а объекты обмениваются только сообщениями (наиболее «чистая» реализация ООП и одна из самых ранних)
  • «Живое» программирование
  • Расширенные методы отладки, такие как изменение кода на лету
  • Простой, незагромождённый интерфейс IDE
  • Предметно-ориентированные языки [10] (DSL): единственный способ работы Smalltalk, поэтому программистам необходимо сосредоточиться на проблеме [11], используя язык и нотацию, являющуюся естественной для этой проблемы

И есть ещё несколько фич [12], которые делают Smalltalk особенным.

По существу, ключевым преимуществом Smalltalk как продуктивного языка и инструмента обучения является то, что он снимает большую часть, если не весь, когнитивный стресс в промышленных OO языках, таких как Java. Smalltalk не содержит синтаксического мусора или сбивающих с толку функций. Он вежливо уступает вам дорогу, так что вы можете сосредоточить всё своё внимание на проблеме или приложении. Дело не в том, что Java – плохой язык, потому что он более сложный (и имеющий 30-символьные имена классов); я говорю о том, что изучение необремененного лишними функциями OO языка на самом деле может сделать вас лучшим Java-программистом, как только вы поймёте концепции OOП с другой точки зрения.

Устранение когнитивного стресса является целью многих языков – например, Python, Ruby, Elixir, Elm и Go. Даже если вы его не чувствуете, стресс есть. Часто говорят, что программирование в Smalltalk или Python похоже на Дзен; ваше сознание просто течёт легко и непринуждённо вместе с решаемой задачей. Это красота и ценность языковой простоты, и Smalltalk обладает ею в полной мере.

В Smalltalk концепция ООП очищена до базовых понятий классов и методов, метаклассов и рефлексии, и, самое главное, передачи сообщений. Smalltalk, в силу своей объектной чистоты и согласованности, даст вам глубокое понимание объектно-ориентированного программирования и того, как использовать его с максимальной эффективностью.

Простота Smalltalk также делает его идеальным учебным языком для обучения программированию, особенно если у вас нет технической подготовки. Простота языка и инструментов позволяет сосредоточить ваши усилия на изучении методов программирования, а не языковых конструкций и формализма.

«Живой» отладчик значительно сокращает цикл редактирование – тестирование – отладка.

Как работает Smalltalk? Основанный на образе подход к программированию

Главная причина успеха Smalltalk – подход к созданию программного обеспечения, основанный на образе. Образ представляет собой моментальный снимок памяти, который содержит все объекты в вашем запущенном приложении. Он инкапсулирует всё состояние выполнения вашей программы. Образ можно сохранить на диск и позже возобновить точно с того места, где вы остановились!

«Образ Smalltalk» может звучать немного необычно, но на самом деле он очень похож на нечто, широко используемое сегодня в ИТ: системные образы в виртуализации ОС, такие как в VMware и VirtualBox. Не забывайте, что Smalltalk первоначально был автономной операционной системой, созданной в Xerox PARC в 1970-х годах.

Образ Smalltalk похож на DOM (Document Object Model) в веб-приложении. Обратите внимание, что веб-приложение представляет собой по существу операционную систему, изолированную в веб-браузере и лишённую прямого доступа к файловой системе хоста и другим ресурсам. Когда веб-браузер закрывается, состояние динамического веб-сайта может быть сохранено или кэшировано, и в следующий раз, когда браузер возобновит работу, веб-сайт может быть восстановлен в браузере (с некоторыми ограничениями).

Даже электронная таблица очень близка к концепции образа. Она инкапсулирует всю нужную информацию. Она не может получить доступ к системным ресурсам. Её можно сохранить и восстановить. И вы должны знать, что электронные таблицы по-прежнему используются для разработки сложных моделей и приложений с собственным языком.

В общем, концепция образа широко распространена. Это настолько удобный способ разработки программного обеспечения, что версия образа была создана для JavaScript в Lively Kernel [13].

Всё в Smalltalk является объектом

Без исключений: всё есть объект. Нет примитивных типов данных. Нет таких управляющих структур, как выбор и итерация! Всё в Smalltalk делается путём посылки сообщений объектам. Именно это делает Smalltalk настолько простым, элегантным и лёгким в освоении. Именно это делает язык настолько чистым синтаксически.

Например, следующий фрагмент кода расширяет класс Number для поддержки нерекурсивной операции факториала:

Number extend [
  my_factorial [
    (self < 2) ifTrue: [ ^1 ]
               ifFalse: [ |c|
                 c := OrderedCollection new.
                 2 to: self do: [ :i | c add: i ].
                 ^ (c fold: [ :a :b | a * b ] ) ]
]].

7 factorial printNl.
7 my_factorial printNl. “should be the same result as the previous line”

Здесь ifTrue: это ключевое сообщение посылаемое булевому объекту, возвращённому выражением (self < 2). Аргументом для сообщения является блок кода (обозначенный квадратными скобками). На самом деле ifTrue: это первая часть сообщения с двумя аргументами, вторая часть ifFalse :.

Унарное сообщение new отправляется классу OrderedCollection для создания новой коллекции. Сообщение printNl отправляется в результат (являющийся объектом) отправки сообщения my_factorial числу 7. Всё это очень похоже на естественный язык!

Рефлексия в Smalltalk

Рефлексия в Smalltalk особенно ценна как механизм проверки собственной структуры и вычислений во время выполнения. Это очень мощный механизм, позволяющий программам расширять себя новыми классами и методами или задавать вопрос «кто послал это сообщение мне?»

Рефлексия используется для реализации мощного способа обработки ошибок. Когда объект получает сообщение, которое он не реализует, ему посылается сообщение doesNotUnderstand: и код исходного сообщения. Есть много вещей, которые программа может делать с сообщением doesNotUnderstand:, включая расширение своей функциональности!

Концепция образа и рефлексия также позволяют Smalltalk устранить границу между приложением и IDE. Всё, что нужно для разработки, отладки и запуска приложения, находится в образе. Нет необходимости когда-либо покидать среду вашего приложения. Это совершенно целостный подход к разработке программного обеспечения, который делает всё более дзен-подобным и продуктивным.

Возрождение Smalltalk

Последние 15 лет развития в мире Smalltalk сделали язык более привлекательным.

Smalltalk теперь доступен для программирования веб-интерфейсов с использованием Amber Smalltalk [14], который транслируется в JavaScript. Выполнение Amber происходит исключительно в браузере. Одна из удивительных особенностей Amber в том, что при импорте библиотеки JavaScript её объекты можно обрабатывать так же, как объекты Smalltalk.

В 2002 году была выпущена веб-платформа Seaside [15], которая стала самым популярным инструментом для веб-разработки в Smalltalk. Подход, основанный на продолжениях (сontinuation), обеспечил обычный механизм «call / return» для вашего веб-приложения. Это позволило решить проблемы с двойным запросом и кнопкой «Назад». Весьма революционно для своего времени, и до сих пор не реализовано в других веб-фреймворках.

Проект Pharo [16] начался в 2008 году, чтобы сосредоточиться на современных методах разработки программного обеспечения. Он продвинул Smalltalk гораздо дальше, чем предыдущий проект с открытым исходным кодом – Squeak, основанный на диалекте Smalltalk-80. Проект Pharo также начал исследования нового типа IDE под названием Glamorous Toolkit [17]. Он основан на идее, что ваша среда программирования должна быть «пластичной», чтобы соответствовать вашим потребностям.

В прошлом году любимый многими Dolphin Smalltalk стал открытым проектом, предложив ещё один прекрасный вариант для поклонников Smalltalk. Dolphin Smalltalk часто хвалят [18] за то, что он обладает одной из лучших реализаций IDE.

Наследие Smalltalk: программируй с удовольствием

Когда вы используете современные средства разработки программного обеспечения, такие как JVM, Eclipse IDE, замыкания, «живое программирование», MVC, TDD, VMware и даже простое веб-приложение, вспомните об их происхождении в Smalltalk и испытайте уважение к тому, что вы делаете. Будьте признательны ему за языки, которые вы используете, будь то Objective-C, Python, Ruby, Groovy, Scala, Dart или Swift.

Работа с языком, из которого произошли все эти замечательные функции и технологии, предоставляет уникальную возможность значительно улучшить ваши знания, остроту ума и производительность в качестве разработчика программного обеспечения. Слово «удовольствие» не всегда используется в разговорах о программной инженерии, но я думаю, что Smalltalk и его ОО собратья обеспечивают более низкий когнитивный барьер и простоту программирования, которые могут превратить разработку программ в удовольствие.

Об авторе

Ричард Энг [19] – отставной разработчик программного обеспечения из Канады с более чем 30-летним опытом работы в ИТ-индустрии. Он работал в сфере видео графики, баз данных и финансов, программного обеспечения реального времени, мобильных приложений для iOS и Android, а также в веб-разработке. Он писал в основном на C, но также использовал FORTRAN, Tandem TAL, C++, C#, Objective-C, Java, Smalltalk, Python и Go. Сейчас он возглавляет кампанию Smalltalk Renaissance. Большую часть времени Ричард проводит за написанием статей и эссе.

Автор: Ariel VA Feinerman

Источник [20]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/254671

Ссылки в тексте:

[1] используемый как крупными, так и малыми компаниями по всему миру: https://medium.com/smalltalk-talk/who-uses-smalltalk-c6fdaa6319a

[2] Perl 6: http://techbeacon.com/why-perl-6-game-thrones-programming-languages

[3] JIT компиляции: https://en.wikipedia.org/wiki/Just-in-time_compilation

[4] замыкание: https://en.wikipedia.org/wiki/Closure_(computer_programming)

[5] MVC: https://ru.wikipedia.org/wiki/Model-View-Controller

[6] разработку на основе тестов: https://en.wikipedia.org/wiki/Test-driven_development

[7] экстремальное программирование: https://en.wikipedia.org/wiki/Extreme_programming

[8] GemStone/S: https://gemtalksystems.com/products/gs64

[9] первый браузер рефакторинга: http://c2.com/cgi/wiki?RefactoringBrowser

[10] Предметно-ориентированные языки: https://en.wikipedia.org/wiki/Domain-specific_language

[11] сосредоточиться на проблеме: http://techbeacon.com/why-you-need-domain-driven-design

[12] фич: http://stackoverflow.com/questions/1821266/what-is-so-special-about-smalltalk

[13] Lively Kernel: http://www.lively-kernel.org

[14] Amber Smalltalk: http://amber-lang.net

[15] Seaside: http://seaside.st

[16] Pharo: http://pharo.org

[17] Glamorous Toolkit: http://gtoolkit.org

[18] Dolphin Smalltalk часто хвалят: https://medium.com/smalltalk-talk/choosing-smalltalk-on-porpoise-9bccb7cd53f

[19] Ричард Энг: https://www.linkedin.com/in/richard-kenneth-eng-28405698

[20] Источник: https://habrahabr.ru/post/328156/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best