Переход от статического языка к динамическому

В Интернете и по SO ведется много дискуссий, то есть здесь и здесь о статических и динамических языках.

Я не собираюсь снова спрашивать об одном против другого. Вместо этого мой вопрос к тем, кто перешел (или, по крайней мере, пытался перейти) со статического типизированного языка на динамический.

Я не говорю об умеренном использовании JS на вашей веб-странице или другом языке сценариев, встроенном в статически типизированное программное обеспечение или небольшие личные сценарии. Я имею в виду переход на динамический язык в качестве основного языка общего назначения для совместной разработки программного обеспечения производственного качества.

Это было просто? В чем было самое большое преимущество и самая большая проблема? Это было весело? :)

UPD: Вы нашли поддержку IDE достаточно хорошей? Вы обнаружили, что вам нужно меньше поддержки IDE?


person Pavel Feldman    schedule 24.02.2009    source источник
comment
С какого языка вы переезжаете? Хорошо спроектированный или ... что-то, что заставляет вас снова и снова писать свои типы повсюду?   -  person MichaelGG    schedule 24.02.2009
comment
В настоящее время я использую Java и подумываю о переходе на Groovy. У меня есть некоторые опасения по поводу его использования в команде, но это, наверное, другой вопрос.   -  person Pavel Feldman    schedule 24.02.2009
comment
@MichaelGG, что ты имеешь в виду? Когда вы повторяете типы? Даже в PHP у вас есть классы.   -  person Dan Rosenstark    schedule 25.02.2009
comment
@Pavel, ты не рассматривал Scala?   -  person MichaelGG    schedule 25.02.2009
comment
@Daniel, я имею в виду, что вы должны явно вводить каждую переменную везде. Даже когда это совершенно очевидно и избыточно. Улучшенный дизайн позволяет по большей части определять типы, что значительно упрощает статическую типизацию.   -  person MichaelGG    schedule 25.02.2009
comment
Я еще не пробовал Scala, но собираюсь, спасибо.   -  person Pavel Feldman    schedule 26.02.2009
comment
@MichaelGG, например, на каких языках это делается? Вы имеете в виду раздражающее повторение этого в PHP или себя в Ruby? Или что-то другое.   -  person Dan Rosenstark    schedule 28.02.2009
comment
Я думаю, он имеет в виду ArrayList arr = new ArrayList (); а компилятор прекрасно может получить всю необходимую информацию из var arr = new ArrayList ();   -  person Pavel Feldman    schedule 28.02.2009
comment
@ Даниэль, да, как говорит Павел. Java, C # и т. Д. Ужасно многословны, потому что не делают выводов. Поскольку он сказал, что он исходит из статически проверенного языка, я предположил, что это не Ruby :).   -  person MichaelGG    schedule 01.03.2009


Ответы (5)


Это было просто?

Умеренно. От некоторых Java-измов трудно избавиться. Первые шесть месяцев я писал Python с помощью; s. Ики. Однако, как только я закончил с этим, я не оглядывался назад.

В чем было самое большое преимущество?

Переход от цикла «запись -> компиляция -> сборка -> запуск -> прерывание -> отладка -> запись» к циклу «запись -> выполнение -> прерывание -> запись». Требуется время, чтобы привыкнуть к немедленному удовлетворению запросов интерпретатора командной строки Python. Я был оооочень привык к бесконечному дизайну и планированию, прежде чем пытаться писать (а тем более компилировать) какой-либо код.

Сначала я считал командную строку python своего рода интерфейсом «только для обучения». Затем, читая строки документации, тесты и руководства пользователя, в которых приложение набирается по приглашению >>>, я начал понимать, что по-настоящему отличное программное обеспечение Python сводит сложность и нюансы к тому, что вы можете вводить в интерактивном режиме.

хотел бы создать вещи, которые работали бы так чисто.]

Что было самым большим вызовом?

Множественное наследование. Использую очень редко.

Было весело?

Уже.

К тому же это потрясающе продуктивно. Больше времени на требования пользователей и реальные данные. Меньше времени на планирование иерархии наследования с соответствующими интерфейсами для улавливания смысла и компилируются правильно, и достаточно расширяемы, чтобы хватило как минимум до следующей ревизии.

person S.Lott    schedule 24.02.2009
comment
Как тебе удалось избавиться от необходимости печатать все подряд? Я стараюсь баловаться Python каждые 6 месяцев или около того и думаю, как это элегантно! но потом, когда я переключаюсь обратно, меня утешает (относительная) безопасность типов C. - person Andrew Keeton; 25.02.2009
comment
Python очень строго типизирован. Очень. Нет никакой загадки или путаницы в том, какой тип и где используется. Официальное объявление переменной на самом деле не так уж и полезно. - person S.Lott; 25.02.2009

На вашем месте я бы попробовал Scala !!!.

В Scala есть несколько действительно интересных аспектов, которые позволяют вам чувствовать, что вы делаете динамические, но статические.

  • Scala - это статически типизированный язык с запахом динамической типизации, потому что компилятор позволяет избежать повторения ваших назначений.

  • Скомпилированный язык с приятным и приятным оттенком сценария. Вы можете использовать консоль scala или даже писать сценарии, такие как ruby ​​или python. Таким образом, вы можете выбирать между «записать -> скомпилировать -> построить -> запустить -> прервать -> отладить -> написать» или «записать -> запустить -> прервать -> записать», как сказал С.Лотт.

  • Scala - это полноценный функциональный язык с полной поддержкой объектно-ориентированного программирования. Таким образом, вы не потеряете многие важные объектно-ориентированные аспекты, такие как наследование, инкапсуляция, полиморфизм и т. Д.

Зачем отвечать на ваши вопросы, предлагая Scala? Потому что я раньше пробовал языки сценариев, и главным был Ruby. И это было именно так, как сказал С.Лотт. Но не все так просто для меня и моей команды. В большинстве случаев статика безопасна, меньше подвержена ошибкам и даже быстрее, если у вас правильный язык.

Отвечая на три вопроса, помещающих Scala внутрь, мы имеем:

Это было просто?

да. Иногда вам нужно сосредоточиться, чтобы оставить старые концепции в стороне и углубиться.

В чем было самое большое преимущество?

Вы чувствуете себя как дома, потому что вам не нужно менять среду или переписывать существующие приложения для перехода на Scala (говоря о Java). Если вы пришли с Java, вы можете начать играть со Scala после прочтения некоторых статей. Не особо много усилий. Еще одно важное преимущество - это использование функционального языка со встроенными возможностями.

Было весело?

Конечно! Передумать, изменить способ решения проблем в лучшую сторону - это, конечно, смешно.

Это мое видение. Вам совсем не обязательно отказываться от статики, чтобы воспользоваться преимуществами динамики.

person paulosuzart    schedule 24.02.2009
comment
Спасибо, интересный момент. Я все равно собирался на scala глянуть :), теперь поскорее сделаю - person Pavel Feldman; 25.02.2009

Хороший вопрос.

Сейчас я работаю на Ruby, PHP и ActionScript (наименее динамичных из трех) вместо языков, которые я предпочел бы, таких как Java и C #. Но нищим, я имею в виду, работникам в этой экономике, не может быть выбора. Вернее, вам нужно выбрать битвы и своего хозяина.

Трудно сравнивать Ruby и Java, потому что у них более одного различия, и вы спрашивали только о динамическом / статическом (и даже не о сильной и слабой типизации!). Но в этом плане меня больше всего волнует всегда IDE. Я всегда ужасался, когда другие программисты на Java использовали Блокнот или Текстовую панель для написания кода, а в настоящее время у хорошей IDE слишком много преимуществ для этого безумия. Это не так с Ruby! Я использую Netbeans, и он отлично справляется, но одно из основных отличий заключается в том, что мне нужно набирать код. Автозаполнение для меня было / - это образ жизни (я пишу SMS-сообщения на полностью английском / испанском языках, например, с помощью интеллектуального словаря, и никогда не использую аббревиатуры), а написание кода Ruby требует дополнительной работы.

Так что сначала это было болезненно, и я постоянно смотрел, например, на имена функций классов, которые я написал (или которые являются частью Ruby), просто чтобы уточнить орфографию! Так что это отстой, подумал я и продолжал думать, пока ...

На днях я вернулся к ActionScript, и чтобы получить автозаполнение IDE (FlashDevelop или FlexBuilder), я объявляю все переменные с типами (строго типизированными по выбору, если хотите) ... и внезапно я подумал что за чертовщина хлопот!

А сегодня мне пришлось добавить несколько функций в проект Ruby, и это показалось мне свободным и крутым. Код чистый, и зачем мне сообщать IDE о том, что я все равно пытаюсь написать? ?

Итак, я бы сказал, что 1) самые большие проблемы - это изучение языка и структуры, в которой вы работаете, как всегда, 2) это было потрясающе весело и открывало глаза. Новые языки всегда несут с собой что-то новое, но динамические языки просто ощущаются по-другому. И это именно то, что заставляет вас просыпаться в 7 утра и писать код в воскресенье утром, прежде чем снова заснуть.

Мне нравится программировать, и, как и большинство из вас, я провел некоторое время с хранимыми процедурами, XSL, статическими, динамическими и т. В конце концов, я думаю, структура, в которой вы работаете, убедит вас, что вы тоже останетесь или нет (если у вас есть выбор), но языки нужно изучать, изучать и испытывать, а не сравнивать. < / сильный>

person Dan Rosenstark    schedule 24.02.2009
comment
›Я всегда ужасался, когда другие программисты на Java использовали Блокнот или текстовую панель для написания кода. Ооочень верно для меня. Следует добавить это к вопросу. - person Pavel Feldman; 25.02.2009

Я не могу полностью квалифицировать себя под этим дескриптором, но я потратил некоторое время на написание интересной мини-игры на Python после многих лет написания Java. Итак, я мог бы немного смешать переход от скомпилированного к интерпретируемому вместе с этим.

Я обнаружил, что использую нотацию для имитации статической типизации. :)

Тем не менее, я обнаружил, что набираю код в несколько лучшем виде. Интерпретатор - это находка для изучения нового языка / написания нового кода. Чем короче время между завершением строки кода и проверкой ее работы, тем быстрее вы сможете писать, и я думаю, что это, вероятно, лучшее, что есть в самых динамичных и интерпретируемых языках.

Учитывая все обстоятельства, мой код выглядел не слишком иначе. Хотя в Python есть много интересных структур данных. :)

person Drew    schedule 24.02.2009

Меня тоже интересует эта тема. Некоторое время назад пытался погрузиться в Ruby и Rails, и это действительно помогло мне понять материал ASP.Net MVC, который, как мне кажется, поначалу слишком сложен для среднего разработчика .NET.

Если вам интересно двигаться в этом направлении или вам интересно, как некоторые разработчики перешли со статических языков на динамические в качестве своих постоянных рабочих мест, я настоятельно рекомендую этот подкаст Alt.Net.

person ljubomir    schedule 24.02.2009