Подтвердить что ты не робот

Должен ли я изучать Scala?

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

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

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

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

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

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

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

Наконец, что вы думаете, что некоторые из недостатков Scala?

4b9b3361

Ответ 1

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

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

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

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

Кроме того, вы можете смешивать С++ с 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, и что там a Scala Power Pack на IDEA, который поддерживает, среди прочего, перевод кода Java в код Scala.

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

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

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

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

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

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

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

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

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

Ответ 2

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

Относительно ваших вопросов:

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 7

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

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

Ответ 8

Вот анекдотические данные об обучаемости Scala.

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

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

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