В каждой технической публикации и на этом сайте люди всегда сравнивают языки OO с Smalltalk. Мой опыт в Java: Smalltalk настолько важен, что я должен его изучать?
Что такого особенного в Smalltalk?
Ответ 1
Smalltalk был одним из самых ранних объектно-ориентированных (OO) языков (с другими, такими как Simula и Eiffel) и можно сказать, что он чрезвычайно "чист" в смысле OO:
- Все объекты и объекты передаются только с помощью отправки сообщений.
- Нет примитивов (нет
int
s,boolean
и т.д.) - Нет структур управления (нет
for
,while
,if
и т.д.). Звучит невозможно, но это правда! - Нет статики
Он также выступил с некоторыми другими, теперь обычными вещами:
- виртуальная машина (и компиляция JIT)
- Отладка при проверке
- "Горячий" запуск кода
- современная IDE
- Затворы
- Утка набрав
- Архитектура Model-View Controller (MVC) для пользовательских интерфейсов
- Тестируемая разработка (TDD) и гибкая методология
И есть еще некоторые вещи, связанные с Smalltalk, которые на самом деле не попали в мейнстрим:
- Система, основанная на "Image", а не на основе файлов.
- Объектно-ориентированные базы данных
И справедливо сказать, что API коллекций Java и API коллекций apache-commons сильно зависят от Smalltalk.
Я бы не сказал, что вы должны изучать Smalltalk как таковой, но знакомство с основами этих функций (теперь представленное на многих других языках), безусловно, выгодно для вас.
Обратите внимание, что в настоящее время всего 123 вопроса здесь о языке, который изначально был предназначен для образовательного языка (т.е. предназначен для детей) его создателем, Аланом Кей. Это не особенно сильно используется. Это не значит, что оно не используется. JPMorgan, например, имеет в себе большую систему управления рисками экзотических производных.
Ответ 2
Smalltalk имеет множество блестящих нововведений - все, что мы сегодня принимаем как должное, в том числе:
- является первым IDE
- обеспечение программной поддержки GUI с помощью мыши Если вы изучаете программирование на Smalltalk GUI, вы действительно правильно поняли MVC.
- создается из небольшого количества мощных идей, которые работают вместе очень хорошо.
- Способ Smalltalk не должен вылетать при неожиданном поведении - он адаптируется. Если вы отправляете сообщение объекту, который его не понимает, отладчик появляется и предлагает вам написать этот метод... поэтому он обеспечивает отличную поддержку для постепенного развития.
- IDE, приложение, которое вы пишете, и ваши данные, являются частью одной и той же системы, поэтому вы можете гораздо проще писать свои инструменты и отлаживать инструменты.
- Инструмент TDD в Smalltalk по-прежнему лучше, чем любой другой язык (см. ниже).
- Squeak Smalltalk имеет довольно много передовых дизайнерских исследований:
- морфический UI - вы можете ознакомиться с концепцией "живой"
- Приморский веб-фреймворк - узнать, что сервер продолжения и как он радикально отличается
- Squeak имеет сильную связь с программным обеспечением OLPC (один ноутбук на одного ребенка) и может еще иметь большое влияние на мир.
- Узнайте, что такое "черта" ...
- Играйте с радикальной 3D-иммерсивной средой, называемой Open Croquet.
- Поскольку Smalltalk - это меньший, более простой и согласованный язык, с его собственной встроенной средой это гораздо менее запутанное место для начала обучения ООП. Люди, которые идут по этому маршруту, становятся лучшими программистами на Java, Ruby и С#, потому что они могут изучать базовый ООП без всех беспорядочных несоответствий основных языков.
- В некоторых коммерческих Smalltalks есть удивительные, мульти-node распределенные среды OO. Я думаю о Gemstone.
- Хотите узнать разницу между Model-View-Controller и Model-View-Presenter - посмотрите на Dolphin Smalltalk...
Единственной самой важной причиной для изучения Smalltalk сегодня является то, что экстремальное программирование и схватка были изобретены в сообществе Smalltalk... и очень интерактивный стиль программирования, который вы испытываете в Smalltalk, проще, более мощным и прямым, чем все, что вы можете делать с Java или С# или Ruby... и , вы не можете понять, насколько эффективны гибкие методы, пока вы не попытаетесь сделать экстремальное программирование в Smalltalk. Немногие другие языки (в любом случае, ни один из мейнстримов) не имеют сопоставимого набора функций.
... чтобы понять, что TDD может быть вам нужно использовать SUnit. JUnit просто показывает вам, где ваши тесты не удались. SUnit фактически позволяет вам щелкнуть в отладчике в тот момент, когда тест не удался, и увидеть фактические объекты и как они подключены, чтобы вы могли видеть, жить в отладчике, как не удалось выполнить код и исправить его прямо там.
Ответ 3
Да, Smalltalk настолько важен, что вы должны изучить его. Зачем? Вы можете понять объектно-ориентированное программирование в чистой, простой форме. То, что люди забывают, состоит в том, что Smalltalk-80 "Blue Book" имеет всего около 90 страниц, посвященных языку и язык, это просто так. Другие 300 страниц рассказывают о предопределенной иерархии классов, которая является шедевром дизайна для объектно-ориентированного языка на основе классов, который использует одно наследование. Вы получите гораздо более глубокое понимание объектов (например, классы являются объектами, и у них есть метаклассы и т.д. До бесконечности... кроме того, что узел тщательно связан, чтобы система оставалась конечной), чем вы могли бы получить от изучения гибридный язык, такой как Java или С++. Smalltalk имеет значение не только из-за его истории, но и из-за ее простоты:
-
Достаточно просто, чтобы вы могли понять весь язык и библиотеки
-
Показывает одну идею (объекты все, что вам нужно), доведенные до ее логической крайности
У кого-то есть чему поучиться у Smalltalk!
Ответ 4
Smalltalk - один из первых двух оригинальных языков ООП, другой - Simula-67. Следовательно, существуют два больших семейства: статически типизированная модель, сосредоточенная вокруг вызова метода, впервые применяемого Simula (С++, Java, С#), и динамически типизированная модель, сосредоточенная вокруг передачи сообщений, впервые созданная Smalltalk (Python, Ruby)).
Сегодня Smalltalk не особенно важен сам по себе - некоторые люди все еще используют его для написания материала, но он определенно не является основным. Изучение этого даст вам некоторое представление о том, как и почему ООП развивается, однако.
Ответ 5
Я провел около 5 минут в презентации на конференции в прошлом месяце по истории и влиянию Smalltalk. См. Разработка на основе изображений с помощью Smalltalk. Одной из самых зарубежных концепций для сегодняшних программистов является "основанная на образовании" разработка. Есть несколько хороших аналогов, в том числе СУБД и электронная таблица.
Ответ 6
Да. Загрузите изображение с одним кликом на побережье, начните использовать его с помощью учебника James Фостер, и вы узнаете, по крайней мере:
- как веб-приложения должны быть построены.
- как работает отладка
Ответ 7
Не только это было одним из первых, Smalltalk по-прежнему остается образцом дизайна языка OO. Более популярные языки, которые появились позже - С++, Java, даже Objective-C - все имеют более примитивную объектно-ориентированную ориентацию и более ограничительны, чем старый старый Smalltalk. У Smalltalk были распространенные первоклассные объекты, отличная поддержка интроспекции времени исполнения, очень естественное использование утиных печатей и закрытий, которые работали лучше, чем я видел на любом нефункциональном языке. Я имею в виду, что мы говорим о языке, который не имел встроенных структур управления (если, хотя и т.д.), Но смог создать их из своей объектной системы таким образом, чтобы он работал без проблем. Насколько это круто?
Я бы не рекомендовал Smalltalk для какой-либо интенсивной разработки настольных приложений в наши дни (там просто нет жизнеспособной реализации IMO), но если вы хотите увидеть, как OO должно было быть, и, возможно, забрать некоторые идеи, которые вы можете использовать в ваших приложениях Smalltalk - отличное место для просмотра.
Ответ 8
Я согласен с другими. Я не уверен, насколько он важен сам по себе, но это COOL (imho).
Мне нравится, что на языке нет циклов или условностей. If-then-else - это сообщение, отправленное логическому объекту. Объекты типа True делают одно, объекты типа False делают другое. (Да, True и False являются подтипами Boolean, с одним значением each, true и false соответственно).
Это начинает быть контр-интуитивным, но это дает вам очень интересный и глубокий взгляд на то, как OO-программирование должно работать...
Ответ 9
Если вы знаете только один объектно-ориентированный язык, вам следует изучить второе, третье и четвертое, чтобы получить более широкую перспективу в программировании с объектами. Изучение Smalltalk расширит ваш мозг, потому что многие знакомые понятия, к которым мы привыкли в других языках (например, if-then-else, for (;;), while() и т.д.), Отсутствуют в Smalltalk. Очевидно, есть эквиваленты, но Smalltalk делает все по-другому, и изучение разных способов делать вещи всегда является хорошей идеей.
Удачи.
Ответ 10
Я только начал возрождать свой интерес к Smalltalk, и, на мой взгляд, в Smalltalk есть несколько интересных вещей:
- Высокопроизводительное развитие окружающая среда
- Встроенная поддержка Agile/Extreme методологий программирования
- "Чистая" модель объекта
- Простая в использовании графическая инфраструктура
Ни одно из них не особенно полезно для людей, которые не занимаются разработкой программного обеспечения. Мое первое знакомство с этим было, когда я увидел пользовательский интерфейс для встроенного устройства, прототипированного на ПК с помощью Smalltalk. Это позволило очень быстро модифицировать и протестировать пользовательский интерфейс, и при его завершении предоставил встроенным разработчикам "исполняемую спецификацию", которая была гораздо точнее, чем любой документ. Я удивлен, что не видел, чтобы эта техника использовалась гораздо чаще, чем я наблюдал в своих путешествиях за последние 20 лет.
Использование Smalltalk в качестве инструмента для прототипирования - вот мой интерес: я считаю, что с учетом новой проблемы различные подходы к его решению можно очень быстро и легко проверить и проверить в среде Smalltalk, и как только искомое решение будет найдено, должен быть относительно механическим, чтобы преобразовать его в Java/С++/С# и т.д. На самом деле для повторяющихся видов вещей вполне возможно использовать Smalltalk для генерации кода для частей решения на каком-то другом целевом языке.
Ответ 11
Другое дело о SmallTalk заключается в том, что его выпускники включают Кента Бек и Уорда Каннингема. Их работа с SmallTalk породила автоматическое тестирование xUnit, шаблоны проектирования программного обеспечения, CRC-карты и другие методы, описанные в XP/Agile и т.д. Поэтому можно утверждать, что SmallTalk был основным вкладчиком в современный ландшафт программирования.
Ответ 12
Всего два комментария:
-
Smalltalk не является объектом "ориентированным", это реальные объекты, только объекты и сообщения в среде.
-
Smalltalk не является языком, это среда, в которой есть язык (с тем же именем), но большая часть "магии" здесь обеспечивается благодаря среде (изображению).