Итак, вы планируете начать программирование и разрываетесь между выбором 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. Если вы зарегистрируетесь по моей ссылке, я получу небольшую комиссию.

Вот ссылка для чтения неограниченного доступа к Medium