Вопрос

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

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

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

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

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

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

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

Наконец, в чем, по вашему мнению, заключаются некоторые недостатки Scalas?

Это было полезно?

Решение

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

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

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

  • Совместимость с C++:могу ли я смешать код C ++ с Scala?(ДЖНИ?)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Вы должны зарегистрироваться на этот курс у самого Создателя Scala.

https://www.coursera.org/course/progfun

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

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

Вот неофициальное свидетельство относительно обучаемости Scala.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top