
Итак, вы планируете начать программирование и разрываетесь между выбором Python или Java. Как человек, который начал с Python, но работал с обоими языками (Java для работы и Python для личных проектов), вот некоторые различия между ними, а также некоторые плюсы и минусы:
Почему выбирают Python
1) Код на Python проще в написании, чем на Java.
Вот как мы печатаем hello world в python (имя файла: hello.py):
print("hello world")
и вот как мы запускаем Python (это происходит в терминале или в командной строке)
python hello.py
И наоборот, вот как мы печатаем hello world в Java (имя файла: Hello.java)
public class Hello {
public static void main(String[] args) {
System.out.println("hello world");
}
}
В отличие от Python, нам нужно сначала скомпилировать код Java, прежде чем мы сможем его запустить:
javac Hello.java
Это создаст файл Hello.class, и мы сможем запустить нашу программу только после компиляции.
java Hello
Обратите внимание, что это напечатает тот же код, что и в приведенном выше примере Python! Также обратите внимание, что имя файла должно совпадать с именем класса, иначе Java не позволит вам его запустить.
2) Python лучше подходит для науки о данных и машинного обучения.
Если вы хотите изучать программирование с конечной целью стать специалистом по данным, инженером по машинному обучению и т. д., просто знайте, что вы в 100 раз чаще будете делать свои вещи с Python, а не с Java. В основном из-за того, что вам может понадобиться написать в 10 раз больше кода Java, чтобы сделать то же самое на Python! Вот некоторые примеры:
Допустим, мы хотим создать словарь (некую структуру данных ключ-значение, которую вы со временем изучите) на Python, содержащую некоторые фрукты и их цены — так мы бы сделали это в Python.
fruits = {"apple":4, "orange":5, "pear":6}
print(fruits)
И вот как мы могли бы сделать это в java:
import java.util.HashMap;
public class Fruits {
public static void main(String[] args) {
HashMap<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 4);
fruits.put("orange", 5);
fruits.put("pear", 6);
System.out.println(fruits);
}
}
Представьте, если бы мы занимались какой-то сложной наукой о данных с помощью Java — вероятно, это не то, чем я хотел бы заниматься!
3) Python — язык с динамической типизацией.
Python — это язык с динамической типизацией, а Java — язык со статической типизацией. Проще говоря, динамически типизированный означает, что нам не нужно указывать тип переменной, а статически типизированный означает, что мы должны указать тип переменной.
Вот как мы объявляем целое число (целое число) в Python.
x = 5
Вот как мы объявляем целое число в Java
int x = 5;
Обратите внимание, что в целочисленном объявлении java мы должны указать тип переменной как int, но в Python это не требуется. Проще говоря, языки с динамической типизацией, такие как Python, требуют, чтобы вы вводили меньше кода и делали его более кратким. С другой стороны, языки со статической типизацией требуют, чтобы мы явно указывали тип каждой отдельной переменной, которую мы объявляем, и поэтому нам нужно написать значительно больше кода, чтобы выполнить ту же задачу, что и в Python.
Почему выбирают Java
1) Java — это язык со статической типизацией.
В Java нам нужно объявить тип каждой отдельной переменной, которую мы объявляем. Вот как мы можем объявить следующие переменные в Python:
a = 5
b = 3.14
c = "apple"
d = []
e = {}
И вот как мы объявляем эквивалент в Java:
import java.util.ArrayList; import java.util.HashMap; // your class declaration code int a = 5; double b = 3.14; String c = "apple"; ArrayList<Integer> d = new ArrayList<>(); HashMap<String, Integer> e = new HashMap<>();
В Java нам действительно нужно набирать немного больше кода из-за его статической типизации, но это также имеет свои преимущества. По сути, поскольку мы строго обязаны объявлять тип каждой переменной, мы, следовательно, можем лучше отлаживать наш код и писать более безопасный код.
2) Относительная простота совместной работы
Поскольку Python динамически типизирован, тип каждой отдельной переменной может быть неоднозначным на первый взгляд — это может привести к трудностям в понимании того, что именно делает функция, особенно если кодовая база большая и запутанная. Лично меня попросили помочь знакомому отладить какой-то плохо написанный код на Python — и это было совсем не весело. Сначала я понятия не имел, на что должен ссылаться тип данных каждой переменной, и попытка понять это через море дрянного кода заняла у меня гораздо больше времени, чем мне хотелось бы. Это не было бы такой большой проблемой, если бы качество кода было приличным, но, к сожалению, мы сталкиваемся с паршивым кодом гораздо чаще, чем хотелось бы.
И наоборот, поскольку Java имеет статическую типизацию, тип каждой отдельной переменной, а также возвращаемый тип каждой функции строго объявлены без исключения. Таким образом, мы, вероятно, лучше сможем читать и отлаживать код друг друга, зная, что определенная переменная определенно будет определенного типа и что определенная функция определенно вернет определенный тип. Лично я предпочитаю писать код на Python, но когда дело доходит до отладки и совместной работы над достаточно большой кодовой базой, Java может оказаться моим предпочтительным выбором!
Вывод
Надеюсь, это было полезно! Надеюсь, это было понятно и полезно! Если это принесло вам пользу и вы хотите поддержать меня как писателя, подумайте о том, чтобы подписаться на членство в Medium! Это 5 долларов в месяц, и вы получаете неограниченный доступ к историям на Medium. Если вы зарегистрируетесь по моей ссылке, я получу небольшую комиссию.