2009-07-10 2 views
32

Я опытный программист на С ++ со средними навыками Питона. Причины я изучал Python в первую очередь были:Должен ли я изучать Скала?

  • получить иной взгляд на программирование (статические против динамической, истолковано против скомпилирован и т.д.)
  • увеличить широту проектов, которые я могу работать на (Python позволяет мне создавать веб-разработки, разрабатывать для телефонов Symbian или быстро запускать сценарии системного администрирования)
  • в дополнение к моим навыкам C++.

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

Сомневаюсь, что я могу использовать его для средних и крупных проектов. Хотя динамическая типизация удобна, она позволяет определенному классу ошибок, которые я нахожу тревожными. Модульное тестирование и листинг могут облегчить эту проблему, но статическая типизация полностью исключает ее.

После изучения некоторых языков программирования, я думаю, что Scala выглядит хорошим кандидатом: Мне нравится вывод типа и он запускается на JVM, поэтому он должен быть доступен везде, где доступна JVM. Я также могу узнать больше о функциональном программировании при его использовании.

Но ... У меня есть некоторые сомнения, и это, где я надеюсь, что сообщество Stack Overflow может помочь:

  • Переносимость: Linux и Windows, по крайней мере, я надеюсь. Как насчет мобильных телефонов, можно ли запустить его?
  • Совместимость на C++: можно ли смешивать код C++ с Scala? (JNI?)
  • Парадигма программирования: я не чувствую себя комфортно с переключением на функциональное программирование (FP) в это время. Можно ли сначала использовать объектно-ориентированный и процедурный с некоторыми FP, а затем изменить пропорции по мере того, как я узнаю?
  • Срок службы цепочки инструментов: какой у вас опыт работы с IDE и отладчиками? Я использую Eclipse прямо сейчас, и кажется, что все в порядке.
  • Скорость обучения: учитывая мой опыт, как быстро вы думаете, что я могу достичь уровня работоспособности с помощью Scala?
  • Развертывание: как именно вы развертываете программу Scala? Это банка, это исполняемый файл?

И, наконец, что вы думаете о некоторых недостатках Скала?

+2

Книга:. Программирование в Scala, Одерски и др Artima, 2007 – akarnokd

+0

Спасибо всем за ваши ответы и рекомендации. Я решил поближе познакомиться с Скалой. – rpg

+0

Лучшей книгой для меня была «Скала для нетерпения» Кей Хёрстманна. Первые 9 глав свободно доступны. – Jabba

ответ

28
  • Переносимость: Linux и Windows по крайней мере я надеюсь. Как насчет мобильных телефонов, кто-нибудь преуспел в том, чтобы заставить его работать там?

Да. Scala на Android. Что касается J2ME, я видел что-то в этом отношении, но не так много. Существует некоторый код, относящийся к J2ME в репозитории исходного кода. Я не уверен, насколько это жизнеспособно, но мне кажется, что на это не так много спроса.

Я также упомянул, что есть/был пул на Скала-Ланге о желаемых целевых платформах, а J2ME был одним из них, очень низким на полюсе тотема.

  • Совместимость на C++: можно ли смешивать код C++ с Scala? (JNI?)

Как и вы можете смешивать C++ с Java, что бы это ни стоило.Если у вас нет опыта с этим, вы можете просто прочитать ресурсы Java, поскольку что-нибудь в них будет применимо к Scala без изменений (кроме синтаксиса Scala).

  • Парадигма программирования: Я не чувствую себя комфортно с переключением на FP в это время. Могу ли я использовать OO и процедурный с некоторыми FP вначале, а затем изменить пропорции по мере того, как я узнаю?

Определенно, да. Scala выходит из своего способа убедиться, что вам не нужно программировать в функциональном стиле. Это основная критика Scala от функциональных людей, по сути: некоторые не считают функциональность языка, если только это не заставляет программиста писать в функциональном стиле.

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

Возможно, вы можете посмотреть серию Matrices в своем собственном блоге о написании класса Matrix. Несмотря на то, что он выглядит как стандартный OO-код, он, по сути, очень функциональный.

  • Срок службы цепочки инструментов: как вы общаетесь с IDE и отладчиками? Я использую Eclipse прямо сейчас, и все выглядит нормально.

IDEA (IntelliJ), NetBeans и Eclipse имеют хорошую поддержку для Scala. Кажется, что IDEA является лучшим, а NetBeans/Eclipse поддерживают лягушку, прыгая друг с другом, хотя NetBeans, безусловно, был более стабильным, чем Eclipse в последнее время. С другой стороны, поддержка Eclipse использует очень перспективный маршрут, который должен давать результаты в течение следующих 6 месяцев или около того - это просто трассировочный маршрут. :-)

Некоторые интересные признаки инструментария Scala для этих сред являются тем фактом, что плагин Eclipse в разработке использует AOP для более плавной интеграции со всей средой IDE, что плагин NetBeans полностью переписан в Scala и что есть Scala Power Pack на IDEA, который поддерживает, среди прочего, перевод Java-кода в код Scala.

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

Существует также хорошая поддержка Maven - на самом деле, стандартный способ установки Lift - установить maven, а затем построить архетип Лифт. Это приведет к соответствующей версии Scala. Есть цель scala:cc, которая также будет запускать перекомпиляцию.

Говоря о перекомпиляции, ни Maven, ни, в частности, Ant не делают хорошую работу по определению того, что нужно перекомпилировать. Из этой проблемы возникла ошибка SBT (Simple Build Tool), написанная на Scala, которая решает эту проблему с помощью плагинов-компиляторов Scala. SBT использует тот же макет проекта, что и Maven, а также репозитории Maven/Ivy, но конфигурации проектов выполняются в коде Scala вместо XML - с поддержкой файлов конфигурации Maven/Ivy.

  • Скорость обучения: учитывая мой опыт, насколько быстро, как вы думаете, насколько я могу достичь уровня работоспособности с помощью Scala?

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

  • Развертывание: как именно вы развертываете программу Scala? Это банка, это исполняемый файл?

То же самое, что и Java. Вы можете развернуть JAR, WARs или любые другие цели Java, потому что компилятор scala генерирует файлы классов. Фактически, вы используете jar Java для генерации файла JAR Scala из файлов классов, а Maven для поддержки Lift поддерживает создание WAR-файлов.

Существует альтернатива для файлов сценариев. Вы можете вызвать «scala», чтобы запустить исходный код Scala напрямую, подобно сценарию Perl of Shell. Это также можно сделать в Windows. Однако даже с использованием демона компиляции для ускорения выполнения время запуска достаточно медленное, чтобы эффективное использование Scala в среде с тяжелыми сценариями нуждалось в чем-то вроде Nailgun.

Что касается недостатков Scala, взгляните на мой ответ (и другие) в this Вопрос переполнения стека.

16

Scala - это развивающийся язык, который стоит инвестировать, особенно если вы исходите из мира Java. Scala широко освещается в Artima. См. Это article от Билла Веннерса, а также прочитайте о Twitter and Scal a.

Что касается ваших вопросов:

  • Java может работать везде, где есть JVM. Впрочем, с мобильными телефонами не повезло. Вам нужна полная JRE, а не подмножество, доступное там.
  • Это возможно с JNI. Если что-то возможно с Java, то это возможно с помощью Scala. Scala может вызывать классы Java.
  • Функциональное программирование является сильной стороной Scala - вам нужно изучить его. Однако вы также можете начать использовать его, не используя в полной мере его и не работая с ним.
  • Существует плагин Eclipse. Это не лучше, но он выполнит эту работу. Подробнее here.
  • Если у вас есть опыт, я бы сказал очень быстро. Я рекомендую вам найти книгу для начала.
  • См. Эту запись faq для развертывания.
+5

Одно дополнение: возможно, можно запустить Scala на Android: http://www.scala-lang.org/node/160 –

3

Фактически - если бы я был вами, я бы изучал парадигмы программирования вместо языков. Конечно, вам нужно изучить примерный язык для изучения парадигмы. Знание недостатков & Преимущества различных парадигм позволяют просматривать ваши проблемы с другой стороны и сделать вас лучшим программистом (даже на языках, которые вы уже знаете).

Подбор языка уже известной известной парадигмы - это относительно простая задача, если это необходимо. Поскольку Scala - это FP (по крайней мере, вы упомянули об этом), а C++/Python - это ООП, это хороший язык для вас, я бы сказал.

6

Парадигма программирования: Мне не комфортно переключаться на FP в это время. Могу ли я использовать OO и процедурный с некоторыми FP вначале, а затем изменить пропорции по мере того, как я узнаю?

Scala имеет полную поддержку для императивного программирования, написания программ без элементов FP в нем - легкий ветерок (однако FP полезен и стоит изучать в любом случае).

Скорость обучения: учитывая мой опыт, как быстро вы думаете, что я могу достичь уровня работоспособности с помощью Scala?

Быстро. В Scala есть ряд интересных функций, которые могут быть не знакомы людям, выходящим из среды C++, Java, например, некоторые из особенностей системы ввода. Некоторые утверждают, что тот факт, что в Scala есть чему поучиться, прежде чем вы знаете все это, проблема с языком; Я не согласен. Присутствие этих функций - - преимущество. Чем больше функций, тем веселее. В конце концов, вам не обязательно использовать их все сразу, так же, как вам не нужно покупать все, что продается в магазине.

5

Скорость обучения: учитывая мой опыт, как быстро вы думаете, что я могу достичь уровня работоспособности с помощью Scala?

я родом из C++ фона, одна вещь, которую я заметил, что, так как вы будете писать намного меньше кода по сравнению с C++ для сравнимого задачи, ваше обучение будет ускорен, как вы будете делать больше в такой же период времени. Это был тот же самый феномен, с которым я столкнулся с Ruby.

2

Джеймс Страчан (производительный разработчик с открытым исходным кодом Java для тех, кто не находится в цикле) имеет интересное обсуждение Scala here и почему он считает, что это прогрессия с Java (langauge, а не платформа).

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

0

Вот анекдотические свидетельства в отношении узнаваемости Scala.

В нашей компании у нас есть несколько стажеров из U.Waterloo. Им сказали писать в Скала; никогда не видел его раньше.

Они очень быстро подняли Scala и Lift; теперь они производят код Scala; это может быть не идеально, но никто не идеален.

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