На SO я натолкнулся на вопрос о том, какую платформу, Java или Python лучше всего разрабатывать в Google AppEngine. Многие люди хвастались возросшей производительностью, достигнутой благодаря использованию Python поверх Java. Одна вещь, которую я хотел бы сказать о аргументе производительности Python против Java, - это то, что у Java есть отличные IDE для ускорения разработки, поскольку Python действительно не хватает в этой области из-за его динамической природы.
Поэтому, хотя я предпочитаю использовать Python в качестве языка, я не верю, что он дает прирост производительности по сравнению с Java, особенно при использовании нового фреймворка. Очевидно, что если бы это была Java против Python, и единственным редактором, который вы могли бы использовать, был VIM, то Python обеспечил бы вам огромный прирост производительности, но когда IDE были введены в уравнение, это не так ясно.
Я думаю, что достоинства Java часто оцениваются исключительно на уровне языка и часто на устаревших предположениях, но у Java есть много преимуществ, внешних по отношению к самому языку, например, JVM (часто критикуемая, но обладающая огромным потенциалом), отличные IDE и инструменты, огромное количество третьих партийные библиотеки, платформы и т. д.
Вопрос, действительно ли Python / родственные динамические языки дают огромное повышение производительности, о котором часто говорят? (с учетом использования новых фреймворков и работы со средними и большими приложениями).
Ответы:
Одним из главных преимуществ Python является его философия «батареи включены»: обширная и простая в использовании стандартная библиотека. В Java простое чтение текстового файла требует нескольких строк кода, вложенных читателей и тому подобного. В Python это так
f.read()
. Это, безусловно, значительно повысит производительность, особенно в области быстрого прототипирования. Язык Python также, как правило, менее многословен, что неплохо (хотя я думаю, что важность многословия и краткости часто переоценивается).Однако, если вы уже работаете над какой-то платформой, такой как GAE, то я ожидаю, что различия будут намного меньше, и, в основном, вплоть до личного владения языком. Вы будете в основном просто соединять фреймворк с выбранным синтаксисом, и там отличная стандартная библиотека Python мало поможет.
источник
List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));
. Не так уж плохо! (Это Java 7, который не был выпущен еще 11 марта).Вот мои 2 цента. По моему опыту, Python хорош для небольших и средних проектов, тогда как для более крупных проектов я более продуктивен с Java.
В общем, я могу использовать динамически типизированный язык, такой как Python (или PHP), для небольших проектов: он не слишком сложен, вы хотите сделать это быстро, и не так уж много может пойти не так. В этом случае я считаю, что Python может быть более практичным в использовании.
Однако, когда мне нужно разработать более крупную часть программного обеспечения, я предпочитаю статически типизированный язык, такой как Java, потому что я предпочитаю, чтобы компилятор выполнял для меня как можно больше проверок. Мой опыт показывает, что в более крупных проектах мне приходится тратить больше времени на исправление ошибок с Python, чем с Java, поэтому я не беспокоюсь, если для написания кода на Java потребуется немного больше, потому что это сэкономит время позже.
источник
Я гораздо более продуктивен в более мощных языках, таких как Python или Ruby. Неважно, может ли часть кода Java быть сгенерирована IDE. Существует больше кода для чтения и поддержки. Требуется больше времени, чтобы пройтись по повторяющемуся коду и найти важные части, и больше времени, чтобы изменить его. Хорошо, что Eclipse может конвертировать
чтобы:
но каждый раз, когда я открываю класс, я вижу этот мусор и должен пройти мимо него, чтобы найти интересные части. Также, во время обслуживания, ошибки могут быть внесены в сгенерированный код.
Я бы предпочел увидеть:
Для меня потребность в IDE для эффективной работы с Java - хороший повод выбрать другой язык.
Возможно, более убедительно, сравните этот код Ruby:
против аналогичного кода Java:
Код Ruby - это прямой перевод спецификации: средний вес людей выше 200 (см). Комментарий был бы совершенно излишним.
Код Java требует значительной работы как для записи, так и для чтения.
В этом эссе Пол Грэм приводит убедительный аргумент в пользу краткости языков программирования . После некоторой математики на уровне выпускника я нахожу его аргумент убедительным, а аргументы против краткости - слабыми. Конечно, единственную строку в языке высокого уровня понять сложнее, чем одну строку в языке низкого уровня, так же как уравнение в частных производных сложнее понять, чем простое сложение. Но одну строку в мощном языке легче понять, чем пять или десять строк, которые он заменяет. Представьте себе чтение математического текста, который был написан с использованием слов вместо символов.
источник
dateOfBirth
обнародуйте. Если к нему необходимо добавить логику позже при получении или установке, добавьте a_dateOfBirth
для хранения данных, а затем создайтеproperty
именованныйdateOfBirth
метод get и set. Код вызова вообще не нужно менять в Python. Java использует только методы доступа, потому что не имеет понятия «свойства».people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
Я перешел с Java на Python несколько лет назад и лично чувствую, что я более продуктивен. Как отмечает @Joonas, большая часть производительности достигается за счет упакованной библиотеки. Но отчасти это из самого языка. Я не могу представить, чтобы не было словарей, списков, функций более высокого порядка и оболочки.
Имейте в виду, что если вы уже знаете Java, потребуется некоторое время, чтобы свободно владеть Python.
источник
Это старый вопрос, но я хотел бы добавить свои $ .03. Я думаю, что это сильно зависит от того, как ты думаешь. Я, например, действительно терпеть не могу динамические, интерпретированные языки. С другой стороны, я большой поклонник статически типизированных языков. Конечно, использование Java может быть более многословным, но я считаю, что его легче читать и поддерживать, как только все будет сказано и сделано. Я считаю Python, Ruby и Perl чрезвычайно трудными для чтения (для меня). Я просто не могу обернуть голову, хотя я пытался. Тем не менее, я могу написать код на Scala просто отлично, и это не имеет большого значения. Я думаю, это зависит от того, что вам удобно. В конце дня Java станет намного мощнее; больше, чем Ruby, Python или Perl. JVM является неотъемлемой частью технологии, и обучение ее использованию может оказаться очень полезным для вас.
источник
Я считаю, что Python, Ruby, Javascript и SQL намного более продуктивны, чем скомпилированные языки, такие как Java, потому что эти языки имеют очень быстрый цикл обратной связи. Вы можете запустить несколько строк кода в командной строке и сразу узнать, верен ли этот код или нет. Если это бросает исключения, вы знаете, немедленно. С помощью Java вы должны компилировать, упаковывать и развертывать, что может часто занимать минуты для больших систем, что приводит к очень медленному циклу обратной связи.
Быстрый цикл обратной связи позволяет быстро перейти к хорошему решению, и это делает динамические языки более производительными.
источник
feedback loop
В последнее время я занимался гораздо большим количеством Python и долгое время был программистом на Java, и для совершенно новой разработки, я думаю, я немного более продуктивен в Python. многие довольно простые вещи в java могут быть немного утомительными, такие как обработка файлов / потоков, чтение материала с URL, сериализация XML и т. д. с помощью «утомительного», я имею в виду то, что вам нужно 5 строк кода в java, часто кажется возьмите только один в питоне. однако использование правильных инструментов, таких как guava или API других коллекций, действительно может помочь в этом.
Я предполагаю, что говорю о том, что одним из преимуществ python является то, что он поставляется с множеством функций, которые вам необходимы для использования сторонней библиотеки в java.
Несмотря на все сказанное, в некоторых случаях я буду гораздо продуктивнее в Java, чем в Python, особенно когда речь идет о рефакторинге и работе с большими кодами и т. д.
источник