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

Быть компетентным программистом scala требует, чтобы вы были компетентным Java-программистом?

Я большой поклонник Scala эстетически и много концептуальной работы, вложенной в такие вещи, как его система ввода и библиотеки.

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

Это представляет мне несколько проблем:

  • Никогда не будучи программистом на Java, я не знаком или не привык к стандартной библиотеке Java или дополнительным популярным библиотекам (например, Apache Commons).
  • Мой google-fu в Java-сфере слаб. Трудно знать, что искать - проблема, усугубленная тяжело большим количеством нерелевантных или рудиментарных учебных пособий по java для программирования новичков.

На данный момент я не уверен, что я должен укусить пулю и попытаться найти самый быстрый и всеобъемлющий тур по Java, чтобы поймать себя на 20-летних разработках Java или же разумно продолжать пытаться постепенно меняйте свои знания, когда я блуждаю по scala.

Любая мудрость, которую могут предложить Scala среди нас, была бы очень благодарна.

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

4b9b3361

Ответ 1

Вы должны использовать подход lazy для изучения Java. Изучите его, когда вам это нужно.

По моему мнению, большая часть старых знаний Java устарела, большая часть новых учебных пособий является излишней. Например, вы, конечно, не хотите беспокоиться о Java-устаревшем Collections. Многие фреймворки на основе Java можно смело игнорировать. И тяжелый JavaEE-стек можно безопасно обойти, пока вы не будете вынуждены использовать его часть.

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

В отношении выбора и использования библиотек Java мои личные рекомендации:

  • Если Spring может это сделать, используйте Spring
  • Если Spring слишком тяжелый, используйте то, что использует Spring.
  • Если Spring не может этого сделать, проверьте проекты github
  • Если ничего нет в github, проверьте проекты Apache
  • Если ничего нет от Apache, проверьте sourceforge (t).
  • Наконец, Google случайно или просто создаст его самостоятельно.

Это немного ошеломляет, но создается впечатление, что я получаю зрелость и стабильность сторонних библиотек после выполнения Java в течение последних 12 лет.

Ответ 2

Если вы хотите выучить испанский язык, начните изучать испанский, а не латынь. То же самое для языков программирования. Есть две вещи из Java, которые хорошо знать:

Во-первых, это API. Но вам нужен только общий обзор того, что существует. Даже давно программисты Java не знают всех деталей. И найти правильный API или lib для проблемы обычно легко, так как Java настолько распространен, и даже при слабом Google Fu у вас не должно быть никаких проблем.

Вторая вещь, которую вам нужно знать, - это некоторые основные принципы и ограничения Java и JVM (в том числе, как создавать и запускать), которые помогут вам понять некоторые проблемы и решения в области w60. Одним типичным примером может быть "стирание типа": если вы не понимаете этого ограничения для генериков Java, у вас возникнут проблемы при использовании дженериков в Scala.

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

Ответ 3

Это полностью зависит от вашего определения "Competent Java Programmer".

Хорошее понимание модели памяти Java и стратегий сбора мусора поможет. Как будет работать с широким спектром библиотек 3-й части.

С другой стороны... если вы глубоко проиндексированы в инъекцию зависимости getter/setter, используемую библиотеками вроде Spring, тогда вам придется отучить много вредных привычек, прежде чем вы сможете правильно справиться с неизменностью - В этом случае предварительная экспозиция Java, вероятно, будет мешать вам изучать Scala.

Ответ 4

Есть много людей, приезжающих в scala и clojure из ruby ​​/python, lisp/schem, С#, которым нужно забрать:

примитивы, autoboxing

Параметры запуска JVM, как работает точка доступа, 32 против 64 бит, используйте openJDK?

тесты, профилирование, как читать стек стеков;

zillions тестовых библиотек для каждой мыслимой потребности.

java.util.concurrent

Свинг API-вызовов; Classpath; Maven, ant; Хадсон, интерфейсы

пространства имен/пакеты/макет каталога и все другие автоматизированные с помощью:

intelliJ, netBean или eclipse


http://news.ycombinator.com/item?id=1508609

http://www.mired.org/home/mwm/papers/simple-clojure.html

+ UseConcMarkSweepGC -XX: + CMSIncrementalMode -XX:, EscapeAnalysis и т.д. http://groups.google.com/group/clojure/browse_frm/thread/c8f69037b26e2856#

сжатые oops, http://blog.juma.me.uk/2009/10/26/new-jvm-options-and-scala-iteration-performance/

http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

http://groups.google.com/group/jvm-languages/topics

Java для пользователей clojure

Обучение clojure - Что мне знать о Java и многом другом

http://copperthoughts.com/p/clojurists-guide-to-java/