Изучая Java, я могу получить clojure

У меня есть история ненависти к Java, которая использовала ее довольно регулярно в конце 90-х годов в эпоху "медленных шаров". Таким образом, я так и не научился этому. Насколько я понимаю, Java на самом деле довольно хороший язык для использования в эти дни. Я думал о погружении в него из-за Jython и Clojure. То есть, я хотел бы запрограммировать на Java и использовать встроенный Jython или Clojure, где это необходимо. Но, честно говоря, я, вероятно, просто буду программировать в Jython/jRuby и вызывать Clojure оттуда.

Это подводит меня к моему вопросу. Я знаю, что оба эти языка можно вызывать из Java, но разве это хорошая практика? Должен ли я даже изучать Java, если я просто хочу использовать Jython в качестве основного языка? Увидев, как эта значительная часть моих мотивов здесь, я хотел бы знать, что я не ужасно ошибаюсь, прежде чем прыгать. Я знаю, что существует очень высокий риск того, что проекты станут kludge, если они сделаны на нескольких языках как это.

Я все еще узнаю о JVM и т.п., поэтому я прошу прощения, если этот вопрос болезненно очевиден.

Ответ 1

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

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

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

Что касается периода "медленных, как шары" 90-х, то когда я изучал Java. Лично я считаю, что лучше описать это как "медленное, как шары, если вы сделали невероятно глупые вещи с помощью Java". Теперь я думаю, что люди создали достаточный набор навыков, чтобы избежать перевода C непосредственно на Java. Тем не менее, я иногда сталкиваюсь с линейным методом 2000+, поэтому, возможно, я немного радуюсь в своей проекции. Весь JVM выложен таким образом, что хороший объектно-ориентированный код работает быстрее, и если вы постоянно пытаетесь перейти к "другим" объектам для всех данных, которые вам нужны локально, вы просто ставите трэш JVM.

Независимо от мнений, JVM теперь является горячим элементом Java. В течение более десяти лет поддержка "другого языка" поддерживалась одним или другим способом; однако волнение вокруг доменных языков, похоже, вызвало интерес к технологиям компиляции и JVM. Другие языки выигрывают от JVM, являющегося легкой мишенью для достижения встроенной кросс-платформенной поддержки, отличной производительности, огромной доступности библиотек и, как правило, хорошей документации. Изучение Java и JVM поможет вам с большим количеством поддерживаемых языков поддерживаемых JVM, поскольку многие из них не заполняют библиотечное пространство в пользу для подключения к чистой библиотеке Java.

Ответ 2

Я бы сказал, что стоит знать Java, даже если вы планируете использовать только другие языки JVM. Я использую JRuby и Scala, и играл с Clojure. Если вы строите вещи для работы на JVM, знание Java немного напоминает знание C, когда вы работаете изначально - вам не нужно знать C, но если вы это сделаете, вы можете записать биты, которые нуждаются в скорости на C, и обернуть их в библиотеке Ruby или Python или еще что-то.

Стоит знать основные принципы работы Java в таких вещах, как интерфейсы и аннотации, и как работает путь к классам, потому что в противном случае вы работаете с в основном пропущенной абстракцией. Что происходит, когда ваш разговор не очень хорош? Это особенно верно, если вы планируете делать Clojure и Jython!

Другая причина знать Java - это просто потому, что если вы используете код в экосистеме Java, вы должны иметь возможность читать и писать Java. Вам нужно написать библиотеку? Да, вы, вероятно, можете записать его в Clojure, но если вы хотите, чтобы другие пользователи JVM-языка могли его использовать, вероятно, вы должны написать его в хорошей, идиоматической Java. Scala достаточно близок к Java для этой цели; Clojure или Ruby или Python, не так много. Просто быть способным читать и понимать программы на Java очень важно тоже.

Другим большим преимуществом является то, что вы получаете больше библиотек, и они лучше тестируются. Вам нужна двойная очередь? Проверьте структуру коллекций Java. Хорошее генерирование случайных чисел? java.security.SecureRandom. UIs? Ну, Swing, AWT и SWT... хорошо, плохой пример. Знание преимуществ и недостатков из них происходит только от выполнения некоторых программ Java и изучения различных способов не сосать на Java.

Ответ 3

С пару лет опыт использования Clojure (плюс еще много лет Java...) вот моя перспектива:

  • Вам не нужен какой-либо опыт Java для написания кода Clojure - Clojure - это полноценный язык в своем собственном праве, и вы можете писать отлично умеющие программы без использования каких-либо Java.

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

  • Есть некоторые связанные с Java понятия, которые полезны для понимания - например, Clojure использует функции обработки исключений Java с помощью (try ... (catch ...)) и т.д., поэтому полезно быть знакомым с подходом Java к обработке исключений.

  • В конечном итоге вы, вероятно, захотите использовать API-интерфейсы Java. Поскольку огромная ценность использования JVM в первую очередь заключается в доступе к огромному разнообразию библиотек и инструменты, доступные в экосистеме Java. Вам не нужно писать Java-код для использования Java-API из Clojure, но вам нужно знать достаточно Java (подписи методов, типы данных и т.д.), Чтобы иметь возможность читать документацию API-интерфейсов JavaDoc и преобразовывать этот в соответствующий вызов функции Clojure. Часто это так же просто, как (.someJavaMethod someJavaObject param1 param2), но иногда оно может быть более сложным (например, когда вам нужно создать экземпляр подкласса некоторого Java-класса для передачи в качестве параметра)

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

Я верю, что большинство из приведенных выше вопросов применимо и к Jython.

Ответ 4

Я не могу говорить для Jython, но если вы действительно хотите справиться с clojure, вы хотите понять его компромиссы по сравнению с Java, особенно wrt memory/gc и основы Clojure/Java interop. Вам также нужно, по крайней мере, абстрактное понимание того, как реализуются коллекции clojure, если вы действительно не заботитесь о производительности, - чтобы не сказать, что clojure особенно неэффективен, но скорее наоборот: реализация его неизменяемых коллекций достаточно уникальна и ориентирована на позицию clojure настойчивость и производительность, а также помогает понять основные сведения, когда вы пытаетесь улучшить проблемы с производительностью.

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

Я думаю, что если вы хотите создать гибридный проект Clojure/Jython, наиболее важными могут быть детали interoperation. Вероятно, это означает, что вам нужно подробно узнать, как классы, интерфейсы, часть стандартной библиотеки и (с минимальной разницей) дженериков работают на Java и как справляться со всеми из выбранных вами языков, поскольку взаимодействие неизбежно сводится к более простые Java-конструкции. Некоторые из них сложны и могут сбивать с толку, и в случае clojure, по крайней мере, документация часто ссылается на концепции и документацию Java по очевидным причинам, поэтому вам нужно убедиться, что вы внимательно прочитали их.

Ответ 5

Я бы определенно научился java и хорошо учился, не только потому, что Clojure построен поверх JVM, но и для того, чтобы что-то сделать, вы будете постоянно называть библиотеки Java, и вам даже может понадобиться окунуться в Java иногда.

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

Ответ 6

Прежде всего, изучите библиотеки Java. Часть радости от использования JVM имеет доступ к библиотекам "это уже сделано", а также к частям основного языка, которые выполняют определенные задачи с оптимальной производительностью на JVM. Кроме того, некоторые языки (например, Clojure) целенаправленно погружаются непосредственно в Java и не полностью обескураживают его в вашем собственном коде, поэтому, если вы хотите читать код других, то основы Java должны быть обязательными.

Что касается остальной части "обучения Java" (шаблоны проектирования, concurrency на Java и т.д.), я бы не тратил впустую ваше время, если/до тех пор, пока не потребуются определенные требования к проектам.

Ответ 7

Если вы хотите узнать Clojure, то Clojurecademy будет хорошим началом. Это платформа, которую я создал для новичков.