Автор оригинала: John Selawsky.
Идея иметь Python в качестве первого языка программирования имеет рациональную основу. Во-первых, синтаксис Python короткий и понятный, а базовая модель работы объектов и переменных идеально согласована. Это означает, что вы можете писать “настоящие” и довольно мощные приложения без больших усилий. Так что нет ничего странного в том, что многие школы обучают студентов программированию на Python.
Однако знание двух языков всегда лучше, чем одного. Если вы думаете об изучении второго языка после Python, Java может быть действительно хорошим выбором. В этой статье мы обсудим переход с Python на Java в случае начинающего разработчика программного обеспечения.
Почему именно Java?
Существует множество различных популярных языков, таких как C++, C#, JavaScript… и есть плюсы и минусы в изучении любого из них. Так почему же Java? Вот некоторые мысли.
- Java является одним из самых популярных языков в соответствии с большинством рейтингов. Следовательно, найти хорошую работу несложно.
- Ява обладает промышленной мощью. Он используется для больших систем большими группами людей. Крупным компаниям нужно много младших разработчиков программного обеспечения. Так что это удобно для начинающих.
- Java-это язык общего назначения, вы можете использовать его для разработки практически любых типов программ. В нем есть библиотеки почти для всего. Корпоративные, Мобильные, Большие данные, Облачные сервисы, Программно-определяемые сети (SDN) и многое другое.
- Если вы знаете Java, изучение более сложных языков, таких как C++, намного проще, чем просто после Python.
- Java-это родной язык для Android, а Android-самая популярная мобильная платформа. Таким образом, знание Java-это самый простой способ разработки мобильного программного обеспечения.
- Семейство языков JVM (Java Virtual Machine) очень велико и разнообразно. Это не только Java, но и современные Groovy, Closure и Kotlin. А также специальные версии Ruby и Python — JRuby и Jython. Если вы знаете, как работать с JVM с его родным языком Java, то вам легче работать с другими. Существует некоторая вероятность того, что Groovy или Kotlin могут стать следующей большой программной вещью (но не скоро).
Переход на Java… Что же делать?
1. Изучите основы Java (Java Core)
Вы можете использовать один из курсов Java для начинающих (это будет быстро и легко для вас) или Java для разработчиков программного обеспечения Python. Например:
- Практико — ориентированный курс для изучения Java – CodeGym . Изучать Java на CodeGym-значит решать огромное количество задач кодирования с быстрой автоматической проверкой, советами, справкой и так далее. Конечно, лекции тоже доступны, это полный курс.
- Javarevisited — это огромный сайт с хорошими статьями, курсами и интересными задачами для решения.
Или в другом месте вы можете найти эти темы:
- Прежде всего немного почитайте об этом страшном синтаксисе Java
- Идите и попробуйте написать простые задачи кодирования просто чтобы привыкнуть к своей новой жизни
- Все в Java является объектом, поэтому изучайте ООП
- Изучайте коллекции Java, они действительно удобны
- А также жесткая, но полезная многопоточность Java
2. “Переводите” свои собственные проекты с Python на Java.
Это были бы простые задачи кодирования, которые вы выполняли во время учебы или ваших любимых проектов, если бы вы их выполняли. Просто перепишите его на Java. Это очень полезно.
3. Узнайте больше о JVM (для более продвинутых программистов)
Во-первых, вы можете прочитать некоторые статьи о JVM, управлении памятью, сборке мусора в Java:
- Как работает JVM — Архитектура JVM?
- Понимание внутренних компонентов JVM Есть несколько интересных курсов по этой теме. Такие как:
- Понимание виртуальной машины Java: Управление памятью
- Понимание виртуальной машины Java: Загрузка и отражение классов
- Понимание виртуальной машины Java: Безопасность
- Не забудьте подписаться на Java StackOverflow и некоторые сообщества Reddit, например, learn java . Используйте их!
Прежде чем вы начнете. “Прогрессивный” Python против “устаревшего” Java?
Я очень часто сталкивался с мнением, что Java-это пережиток прошлого, а Python-современный и прогрессивный. Это забавно, особенно если учесть, что Python немного старше Java. Конечно, Питон опередил свое время. Можно сказать, Java “выстрелила” сразу, быстро стала популярной, в то время как Python делал это очень постепенно и только сейчас начал догонять Java по распространенности. Они оба с годами претерпели серьезные изменения, став лучше для современного программирования и сохранив свои преимущества. Я хочу сказать, что у них есть как сильные, так и слабые стороны, и дело не в прогрессивности. Здесь я собираюсь описать реальные и наиболее важные различия между языками.
Основное отличие: динамически типизированный Python против статически типизированного Java
Java-это статически типизированный язык, в то время как Python-динамически типизированный. В этом и заключается основное различие между языками темы. Технически это означает, что в Python вы создаете свои переменные и не определяете их тип. Типы определяются только во время выполнения, и единственным условием отсутствия ошибки во время выполнения является поддержка операций, которые вы использовали с переменными. Итак, если у нас есть два объекта, такие как Птица и Собака, и дать им команду двигаться быстро, прежде чем мы запустим программу, они оба одинаковы. Однако если мы все сделали правильно во время выполнения, то первый полетит, а второй побежит. В Java Собака “знает”, что она собака до выполнения, потому что она была определена программистом. Вы пишете больше на Java, в то время как ваш компьютер имеет меньше работы.
Лаконичный синтаксис Python против многословного синтаксиса Java
Python был создан с учетом короткого синтаксиса и удобочитаемости. Java-это скорее строгая структура и отсутствие случайных ошибок. Классический пример: Java
public class HelloWord { public static void main (String[] args) { System.out.println("Hello, world!"); } }
Питон
print "Hello, world!"
Интерпретируемый Python и несколько скомпилированный Java
Java-это компилируемый язык, а Python интерпретируется. Это упрощение, чтобы сказать так, однако это близко к истине.
Во всяком случае, во время выполнения код Python интерпретируется во время выполнения. Java-код компилируется в байт-код JVM во время компиляции, и JVM запускает его.
Кросс-Платформенный
Java Virtual Machine (JVM)-это мощный инструмент для создания переносимых кросс-платформенных приложений. Эти приложения могут работать на любом устройстве с установленной JVM. Компилятор Python преобразует код в определенный машинный код, который зависит от операционной системы.
Многопоточность в Java и Python
Многопоточность в Java реализована гораздо лучше, чем в Python (здесь речь идет о стандартном CPython). Управление памятью в Python не является потокобезопасным, поэтому реализация языка предотвращает многопоточное выполнение байт-кода Python.
В Python существует глобальная блокировка интерпретатора или GIL, и этот мьютекс предотвращает выполнение нескольких потоков в Python. Таким образом, единственный многопоточный вариант Python-это доступ к ресурсам ввода-вывода. Таким образом, Python позволяет байт-кодировать выполнение второго потока, в то время как первый должен ждать данных из сети или файловой системы.
Процесс Java успешно использует несколько ядер и гиперпоточность. Гарантии потокобезопасности скрываются не внутри языка, а во многих потокобезопасных инструментах, чтобы сделать его легким процессом.
Обратная совместимость
Обычно эволюция языка программирования предполагает обратную совместимость. Однако это не относится полностью к Python. Python2 появился в 2000 году, а Python 3 появился на сцене в 2008 году. Они более или менее совместимы, но имеют достаточно различий в функциональности и синтаксисе, так что в принципе их можно рассматривать как разные языки. Вместо изменения новых тенденций и идей в Python 2, Python 3 был задуман как новый язык, который в некоторой степени использовал опыт Python 2. Разработка Python 2 продолжалась отдельно, а его окончательная реализация (версия 2.7) будет поддерживаться только до 2020 года.
Java была создана с учетом обратной совместимости. Это хорошо или плохо? Такой подход привел к созданию огромной устаревшей кодовой базы. С другой стороны, этот древний код можно постепенно обновлять, и риски того, что “ветеран” не запустится в современной среде в случае с Java, сводятся к минимуму.
Ну и что?
Я описал некоторые из основных различий, но почти не упомянул, к чему они приводят. На данный момент я обещаю исправить это и поговорить о том, на что влияют эти различия, с точки зрения разработчика программного обеспечения.
Скорость кодирования или Эффективность программатора
Чем короче синтаксис, тем быстрее разработчик может его написать. В Python вы не должны писать все эти скобки, классы и даже типы переменных, так что… да, программисты Python работают быстрее, чем разработчики Java, особенно в небольших командах с короткими программами и скриптами. Java многословна, но очень хорошо структурирована. Следовательно…
Поддержка кода и эффективность анализа
…поэтому анализ и поддержка Java-кода намного проще, чем Python, особенно в случае огромных проектов. В Python отсутствие информации о типе превращает такой анализ в сложную проблему. Кроме того, Java обеспечивает безопасность типов и улавливает все потенциальные ошибки во время компиляции, а не во время выполнения, как Python. Таким образом, вероятность ошибок имеет тенденцию к снижению. Это серьезно упрощает управление большими приложениями. Ошибки во время выполнения труднее выявить и исправить, чем ошибки во время компиляции.
Скорость выполнения программы
В случае Python вы делаете меньше, но компьютер делает больше. В Java все перевернуто с ног на голову по сравнению с Python. Таким образом, из-за всей этой статики и компиляции вместо динамической типизации и интерпретации Java работает намного быстрее. Это означает, что ваша Java-программа будет выполняться за более короткий промежуток времени, а операции будут работать быстрее. Это не всегда заметная разница для пользователя. Однако иногда это может быть критично.
Выводы
Профессиональные разработчики программного обеспечения не всегда могут выбирать, какие инструменты использовать. Времена меняют предпочтения работодателей, которые могут меняться вместе с ними. Хорошая новость заключается в том, что инструменты гораздо более похожи, чем может показаться. А Java-хороший и мощный инструмент, даже если после Python он кажется слишком многословным.