Переход от статического языка к динамическому - PullRequest
6 голосов
/ 24 февраля 2009

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

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

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

Это было легко? Что было самым большим преимуществом и самой большой проблемой? Это было весело? :)

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

Ответы [ 5 ]

10 голосов
/ 24 февраля 2009

Это было легко?

Умеренно. Некоторые Java-измы трудно сломать. Первые шесть месяцев я писал на Python с ;'s. Icky. Но когда я закончил, я не оглядывался назад.

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

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

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

желаю Я мог бы спроектировать вещи, которые работали бы так чисто.]

Что было самым большим испытанием?

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

Было ли это весело?

Пока.

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

5 голосов
/ 25 февраля 2009

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

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

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

  • Скомпилированный язык с теплым и замечательный вкус сценария. Потому что вы можете использовать консоль Scala или даже писать сценарии, как ruby ​​или python. Таким образом, вы можете выбрать между «write -> compile -> build -> run -> break -> debug -> write» или «write -> run -> break -> write», как сказал S.Lott.

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

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

Отвечая на три вопроса о том, как поместить Scala, мы имеем:

Это было легко?

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

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

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

Это было весело?

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

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

2 голосов
/ 25 февраля 2009

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

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

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

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

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

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

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

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

1 голос
/ 25 февраля 2009

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

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

1 голос
/ 24 февраля 2009

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

Я использовал нотацию для имитации статической типизации. :)

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

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

...