Комментарии 42
например, функция чтения из файла на Java – 10 строк, на Python – 2
А где тут 10 строк?
String fileContent = java.nio.file.Files.readString(java.nio.file.Path.of("some/path/to.file"));
P.S.
Да будет +2 строк на импорты и, по хорошему, нужна обработка ошибок.
Но всё это не учитывалось и в "2 строках на Python".
Статья настолько сомнительная, что я был уверен, что в конце будет ссылка на телеграм, а ее нет... Странно.
Но судя по другим статьям, вы занимаетесь обучением подростков программированию или чем-то подобным. Если бы статья была написана для людей "не в теме", скажем, с названием "Python или Java: что выбрать родителю для школьника?", то она вызывала бы меньше смущения. А так - почти к каждому утверждению будут серьёзные вопросы что от разработчиков на Java, что на Python.
Смешались в кучу кони, люди - вот например
программа-интерпретатор (Global Interpreter Lock)
Предлагаю пытливому читателю самостоятельно сравнить определения этих двух терминов:
И так от начала и до конца. Чувство такое, как будто зашёл в пятёрочку, а тебе говорят - вам пакет большой или маленький?
Накину ещё
... Информация разбита по годам, а года хранятся строкой (string). Вам нужно отсеять все ранее 2019 года. С Python вы можете сделает это, указав, что вам нужно year > 2019. По наличию оператора «>» Python «», что интерпретировать на этот раз year нужно как число.
Это не так. Никогда не получится сравнить строку "2019" и число 2020. Путаете с JavaSript.
Возможно автор путает тёплое с мягким. Динамическая-статическая типизация. Строгая-нестрогая...
Я вообще не понял смысл этого фрагмента:
Информация разбита по годам, а года хранятся строкой (string). Вам нужно отсеять все ранее 2019 года. С Python вы можете сделает это, указав, что вам нужно year > 2019. По наличию оператора «>» Python «», что интерпретировать на этот раз year нужно как число.
Какой-то малоосмылсенный набор слов, некоторые из которых очевидно пропущены.
Предполагаю, что автор имел ввиду такую, действительно валидную конструкцию в Python
'2020' > '2019' # True
'2019' > '2020' # False
Но ведь это просто сравнение строк, а автор говорит о том что "Python будет интерпретировать на этот раз year как число".
Да, в данном случае результат одинаковый (сравнения строк и сравнения чисел, хранимых в строках), но смысл того как этот результат получается совершенно разный.
В Python
можно вычислить
'asdf' > 'zxcv' # False
но не смотря на "наличие оператора >
" ни о какой "интепретации строк как чисел" речь не идёт.
Да и конструкция сама по себе валидна не только для Python
, а, например, и в Kotlin
, который работает в JVM
и она реализуется как синтаксический сахар вокруг интерфейса Comparable
.
В него все же были введены ... потоки ... однако это работало хуже, чем в других
языках
Потоки появились вместе с джавой в 1996 году. Они работали хуже, чем в каких именно языках?
не поддерживает множественное наследование
И спокойно живет с этим уже почти 30 лет. Что как бы говорит о "ценности" этой фичи.
Вообще забавно. Видно, что не Чятик писал. Но местами лучше бы уж Чятик. Учить подростков - дело благое. Но ученикам нисколько не лучше от того, что ради упрощения материала вы, мягко говоря, очень вольно обращаетесь с некоторыми фактами и концепциями.
а в Java для разделения блоков кода применяют надоевшие круглые скобки
Да ладно?
Универсальность (код при переносе одинаково срабатывает на Windows, Linux, MacOS, Android и для этого ничего не надо, кроме установленного интерпретатора языка);
Правильно ли я понял, что Джаву лишили кроссплатформенности в обзоре? По мне очень смело!
я думаю новичку лучше выбрать C#
Преимущества Python для начинающего:
3. Универсальность (код при переносе одинаково срабатывает на Windows, Linux, MacOS, Android и для этого ничего не надо, кроме установленного интерпретатора языка)
Так это для Java
более корректно, чем для Python
так как у неё тоже достаточно установленной JRE
/JDK
правильной версии (помним про различия между 2 и 3 версиями Python
) только не нужно возиться с изоляцией зависимостей между проектами.
Я не уверен, но мне помнится что при установке некоторых зависимостей для Python
происходит ещё и их компиляция, а этот шаг уже сильно зависит от выбранной ОС.
Преимущества Python для начинающего:
4. Динамическая типизация (программа выполнится, несмотря на не очень хороший код);
Или упадёт при выполнении, тогда как в Java
компилятор заранее скажет где проблема.
Java является строго типизированным языком, поэтому в переменной вы можете складывать только данные того типа, который был заявлен при создании. Это имеет целый ряд последствий.
Это не так.
... нельзя написать класс «Автомобиль» (проект автомобиля) и реализовать его так просто много раз в виде экземпляров класса (желтый автомобиль, ....
И это не так.
import static java.lang.System.out;
public class WhatElse {
static abstract class Car {
private String color = "undefined";
Car(String color){
this.color = color;
}
public String color(){return new String(color);};
abstract public String name();
public String toString(){
return color + " : " + name();
}
}
static class YellowToyota extends Car {
YellowToyota(){
super("yellow");
}
@Override
public String name() {
return "Vitz";
}
}
public static void main(String[] args) {
Car car = new YellowToyota();
var varray = new Object[]{ "Really?", 42L, 1e-3f, car };
for( var o : varray )
out.println( o );
}
}
______________________________
Really?
42
0.001
yellow : Vitz
Java является строго типизированным языком, поэтому в переменной вы можете складывать только данные того типа, который был заявлен при создании. Это имеет целый ряд последствий.
Например, в массиве у вас должна быть однотипная информация. Это не слишком удобно.
Это-то как раз и удобно - всегда знать что именно у нас лежит в массиве.
Но если очень хочется то можно сделать так:
Object[] array = {"Я Java, отношусь к компилируемому типу языков", "Я Java, я гораздо лучше Пайтон", 43};
Ну и
for (String i : array) {
System.out.println(i);
}
превращается в
Stream.of(array).forEach(System.out::println);
что даже короче варианта на Python
и в целом пример на Java
содержит не чистый код, а ещё и обвязку из-за чего и выглядит длинее.
Интерпретация означает, что программа выполнится до момента, когда возникнет ошибка.
Это упрощает «дебаг», то есть поиск ошибок и помогает тестировать получившееся приложение.
Это как раз усложняет дебаг, так как ошибки возникающие при ошибке интерпретации ловятся компилятором до того как дело дошло до выполнения кода.
Вам нужно отсеять все ранее 2019 года.
СPython
вы можете сделает это, указав, что вам нужноyear > 2019
.
Во-первых, "отсеять" можно понять двояко:
как "убрать всё ранее 2019 года": то есть нам нужно оставить 2019 и позднее
как "оставить всё ранее 2019 года": то есть нам нужно убрать 2019 и позднее
Во-вторых, фильтрация по year > 2019
уберёт из выборки данные за 2019
год, а это не соответствует ни одной из интерпретаций вашей задачи.
В-третьих, на Java
это реализуется не сложнее:
var years = List.of("2018", "2019", "2020");
var filtered = years.stream().filter(year -> year.compareTo("2019") >= 0).toList();
filtered.forEach(System.out::println);//"2019", "2020"
А на Kotlin
ещё и выглядит ровно также:
val years = listOf("2018", "2019", "2020")
val filtered = years.filter { year -> year >= "2019" }
filtered.forEach(::println)//"2019", "2020"
Вроде как по делу, но тогда откуда у меня столь огромный внутренний протест? Уж не методология ли... Да, кстати, кто есть Новичок?
Если тот, кто стремится к трудоустройству - всё не так, языки сравнивать тупо вредно, нужно изучать рынок труда, состояние и тенденции. Потом проверять - можно ли подготовиться на желаемое место за доступное время, начиная с лучшего места. Какой при этом проявится язык - так тому и быть, не стремящемуся к ошейнику раба выбирать его фасон.
Если тот, у кого есть идея и желание её реализовать, то смотрим какой язык именно для этого подходит лучше. Это уже сравнение языков, но совсем не такое, как в статье, не между собой по куче параметров. И опять - как получится так и будет, дарёному коню в зубы не.
Если тот, у кого огромная куча идей, a.k.a. желание объять необъятное, или тот, кто просто смотрит на свой комп и чувствует что его возможности используются далеко не полностью и все приложения какие-то не такие, то тут и начинается сравнение языков. Но не по всем возможным критериям, а всего по одному - что можно сделать. И приводит это всего к двум основным вопросам - какие платформы и сколько библиотек.
И тут выясняется, что писать на Python можно подо всё, а на Java под iPad не выходит. Finita la commedia, Deal breaker, Hasta la vista, Sic transit gloria mundi. Конкурентом Python может быть Kotlin, если верить что он вскоре multiplatform, но по библиотекам, пожалуй, не тянет. Мог бы быть JavaScript, но он не самодостаточен - HTML, CSSб Node... Мог бы быть C#, кабы MAUI вышел в срок и не был привязан к VS, так что увы.
Осталось уточнить как продать Python. Я только начал на него смотреть, но уже вижу
faq.pdf - интересые стороны есть, явных проблем - нет
using.pdf - нет проблем, никаких JDK, JRE, кучи компиляторов как в С++
howto-curses.pdf - только на этом уже можно сделать практически всё
anvil.works - бесплатно, просто, везде и изумительно иллюстрирует силу языка
kivy.org - и это бесплатно, просто и везде
mpmath - за 10 минут посчитать π до 200 знаков не разбираясь в языке, норм
Krita и Blender, с натяжкой Godot, скриптуются Python
И последнее - дальше куда? Java выглядит тупиком, Python же по любому придётся ускорять, что ведёт к С++ или Rust, а они к Unreal Engine и далее везде...
Динамическая типизация (программа выполнится, несмотря на не очень хороший код);
Я бы записал это в минус, и ответ кроется в скобках.
Ох уж намучался я с этой динамической типизацией, когда фактически не знаешь что находится в переменной и как это будет реагировать с чем то другим.
А еще "особенное" форматирование кода в питоне делает свое дело. После него код на C#/Java выглядит просто прекрасно и легко читаемо.
Про типизацию много копий сломанно. Если немного приложить усилий (аннотации типов, мапинг объектов) то в Питоне становится намного комфортнее.
Джава обычно также отформатированна отступами, плюс дополнительные скобки. Я на обоих пишу и разницы в чтении особо не вижу, так что это скорее дело привычки.
Статья о двух языках от того кто не знает ни первый ни второй ни о программировании в целом на уровне определений.
Выбирать следует не язык, а направление. Если для некоторой ниши есть несколько языков, то лучший способ показать разницу между ними - указать различия между типичными наборами задач, для решения которых они используются. А так статья получилась сумбурной и, мягко говоря, спорной.
Статья ни о чем, да еще и на сомнительных аргументах. Все проще: каждому интсрументу свое применение, Java - писать программы, Python - поиграться или заниматься околопрограммистскими движухами (прототипирование, рисеч, мониторинг и т.п.)
Будем создавать массив и выводить в консоль разработчика его содержимое.
Java - Нужно быть объективным.
var anyPhrase = List.of("String", 42);
anyPhrase.forEach(System.out::println);
После сиподобных языков на синтаксис Питона смотреть невозможно. Это правило работает и в другую сторону.
Java: избавляется от множественного наследования и добавляет интерфейсы для того чтобы избавить разработчиков от проблемы множественного наследования (не знаю где как, а в плюсах эта проблема актуальна)
Инфоцыгане 2023: Множественное наследование топ. Интерфейсы фу.
Конечно, с учётом того, какие теги стоят, можно простить некоторые огрехи, но обижать сильные фичи, по типу интерфейсов которые дают отличные возможности по созданию красивых абстракций и избавляют сообщество от неимоверно неприятных структур наследования, явно не стоит.
Не хочу обижать автора, но большинство критики в комментах оправдано, и вам бы стоило подредактировать статью чтобы не вводить в заблуждение. Возможно и оценки статьи поднимутся.
В сравнении с Java, Python имеет более простой, краткий синтаксис (например, функция чтения из файла на Java – 10 строк, на Python – 2);
Востребованность (на май 2023 по индексу TIOBE язык на первом месте по популярности у разработчиков);
Универсальность (код при переносе одинаково срабатывает на Windows, Linux, MacOS, Android и для этого ничего не надо, кроме установленного интерпретатора языка);
Динамическая типизация (программа выполнится, несмотря на не очень хороший код);
Наличие лучших библиотек для machine learning, анализа данных, нейросетей (Python почти монополист, на нем написаны ChatGPT, а И. Кузьмин, сотрудник Intel, недавно заявил, что его компания использует Python в программировании беспилотных автомобилей, так как он лучше подходит для прототипирования). В этих сферах сравнение Java и Python в пользу последнего;
Больше подходит новичку, если он просто интересуется программированием и хочет узнать больше, но еще не решил стать инженером и профессиональным программистом.
Аргументов питона я не вижу.
1. Не учитывается специфика языка, его стандартная библиотека
2. Востребованность где?
3. А джава нет?
4. `Не очень хороший код` это хорошо?
5. Здесь по факту, но область не особо широкая
6. Питон выставляется как `песочница`, а не нормальный язык
Есть впечатление впечатление что автор попросил ChatGPT написать статью, и не проверил вообще ни одного факта из неё. Просто как есть опубликовал..
Выбрать велосипед уже советовали?
Если школьник заинтересуется программированием он выберет ЯП сам. Из под палки это работать не будет.
Python или Java: что выбрать родителю для школьника?