Сказ о Python или почему его лучше не выбирать новичкам

Всем привет, я Full-stack программист с опытом командной разработки около полугода, а также опытом в создании небольших и средних проектов в районе 3-х лет. Тут я хочу внести ясность для новичков в IT, которые мечутся из стороны в сторону, пытаясь и язык повостребованнее найти, и чтобы попроще учиться, ну и на галеру протиснуться.

Простота обманчива

Можно подумать, что Python очень простой язык, скорость написания кода х5, он вроде как нужен, вот, смотри, какие-то графики, я прав, а вот ты ошибаешься и бла-бла-бла, но эта простота и «скорость написания кода» обманчива. Пока что вы, вероятно, не понимаете о чем я, но пока статья будет продолжаться все должно быть понятнее, что я тут наговорил.
Сравним, для начала идентичный код на C#, Python и C++:
Python:

Сравним, для начала, идентичный код на C#, Python и Golang

Стандартный C#

namespace HelloWorld; // Распологаем неймспейс, тоесть, говорим исполнителю о том, какой файл "где находится" в иерархии

class Program // Создаем класс, так как без него приложение нельзя запустить*
{
    static void Main(string[] args) // Создаем программу, которая будет  выполняться исполниетелем, без нее тоже нельзя!"
    {
        Console.WriteLine("Hello, World!"); // Выводим в консоль Hello, World и кайфуем от жизни
    }
}

Как мы видим в коде выше, очень много «расплывчатости», но в больших проектах именно благодаря такой иерархии, или как это называют в IT-кругах ООПшного стиля программисту легче расположить иерархию классов и методов. Например, мы можем разместить все файлы в одной папке, но доступ получать к ним по-разному. Пример:

Иерархия:

folder1:
- Program.cs
- Utilities.cs
- Types.cs

Но мы можем указать в namespace вместо банального %NAME%.Utilities удобные %NAME%.Utilities.Web, где внутри этого namespace мы можем визуально продемонстрировать, что внутри будет часть именно с web-разработкой. В одном файле можно держать несколько namespace, но не рекомендуется этого делать!

C# с высокоуровневым методом написания

Console.WriteLine("Hello, World!"); // Просто выводим Hello, World!

Тут же для программиста открывается только такой кусок кода. Вся ненужная мишура, как сверху пропала. Компилятор ее добавит автоматически, да, это не совсем удобно, но все же юзабельно. Для новичка — самое то!

Python

print("Hello, World!") 
# Здесь как и в C# с высокоуровневым методом просто одна строка с функцией вывода. 
# Ничего нового...

Тут простое и банальное print, вы все знаете что это такое, наверняка.

Golang

А вот и не очень популярный, но достаточно легкий и быстрый, даже для корпоративной разработки. Пример вывода:

package main // Показываем компилятору что это за пакет, как namespace в c#
import "fmt"; // Импортируем пакет для удобного вывода в консоль

func main() { // Функция, тоже как в C#
	fmt.Println("Hello, World!"); // Собственно, вывод в консоль
}

Взгляните на код, написанный на языке Golang от Google, это среднее, между Python, C++ и C#, нет такой мысли? А ведь он по быстродействию как C++, а по скорости разработки примерно на уровне с python, несмотря на то, что имеет СТАТИЧЕСКУЮ типизацию и ООПшный стиль. Это мы рассмотрим в ближайшем будущем, а пока подведем итоги сравнения.

Сравнение

C#

Python

Go

Много слов, но удобно расписывать иерархию

Пару слов, какая банальность…

Слов средне, но можно относительно удобно расписывать иерархию

Вы, вероятно, спросите: Что-то пока что ничего не понятно, в Python используется меньше слов для создания базового проекта с выводом текста в консоль, что тебе не нравится, yawaflua?
А я отвечу: Смотрите за руками!

Сравнение языков в удобстве написания кода!

Здесь мы будем делать относительно базовую программу, которая перебирает все числа от 99 до 999, т.е. трехзначные, а потом проверяет, делятся ли они без остатка на 12 и 11. Программа на Golang выдала 1 МИЛЛИСЕКУНДУ, что равняется 1\1000 секунде, пока python

Программа на Golang

Программа на Golang

та же программа на Python

та же программа на Python

Как мы видим из сравнения, Golang очень схож по написанию программы. Он не требует ставить точку с запятой, имеет статическую типизацию с облегченной версией создания переменной через :=, где тип выставляется автоматически. Также Golang обогнал Python 3.12 на 1 миллисекунду. Вы скажете: Ну и что, 1 миллисекунда это мало, мы моргаем дольше, но это легкий пример, где числа просто умножаются и сравниваются. Если же мы берем более нагруженные примеры или более старые версии Python, то мы получаем большие проблемы с оптимизацией кода. А отсутствие статической типизации делает ваш код кашей. Например, вы хотите назначить переменной a число 7. В golang вы напишите так:
a := 7 // > 7
В Python вы очевиднее всего напишете так:
a = 7 # > 7

Да, это правильно, но теперь вы ошибились в коде и почему-то в переменную, а передаете не число (изначальное), а строку:

Go:

a = "Hello, World" // Error: TypeError, нельзя в переменную числа назначать строку

Python:

a = "Hello, World" // > Hello, World, ему все равно на такие манипуляции
Это может очень сильно затруднить разработку и отладку кода!

Подведение итогов

Я уже написал на довольно много информации, поэтому давайте подведем итоги:

  • Python несмотря на условную скорость написания кода не настолько удобен и быстр, как, например, Golang

  • Python довольно медленный язык (даже новые версии). Тут я об этом мало времени уделил, но Python в продакшене слишком много использует ресурсов, по сравнению с C#/Go/C++ и остальными, нормальными, языками программирования.

  • Если выбирать между Python и Go как первым языком для начинающего программиста, то я очевидно предпочту посоветовать Golang!

Если хотите, могу больше затронуть вес и скорость проектов в продакшене, пишите комментарии, оценивайте, буду стараться ответить и поправить свои ошибки. Всем спасибо за прочтение данной статьи.

Habrahabr.ru прочитано 4629 раз