🐍 Python: язык, который старается вам не мешать
Главная причина популярности Python особенно хорошо чувствуется в первые часы обучения.
Хотите вывести текст?
print("Hello!")Хотите пройтись по списку?
names=["Max","Anna","Kate"]
for name in names:
print(name)Всё.
Никаких типов переменных, фигурных скобок, точки с запятой и дополнительного ритуала вызова древних богов компиляции.
Именно поэтому Python часто рекомендуют новичкам как первый язык программирования.
На нём довольно быстро можно перейти от:
«Я вообще не понимаю, что такое переменная»
к:
«Смотрите, я написал Telegram-бота».
И это мощнейшее преимущество.
🐹 А что с Go?
Go, или Golang, тоже считается довольно простым языком.
Но его простота немного другая.
package main
import "fmt"
func main(){
names:=[]string{"Max","Anna","Kate"}
for _,name:=range names{
fmt.Println(name)
}
}Не сказать, что перед нами какой-нибудь C++ с шаблонами на четыре экрана.
Но по сравнению с Python уже нужно понимать:
что такое
package;зачем нужен
main;что делает
import;откуда взялось
:=;почему в цикле внезапно появился
_.
Python на старте буквально пытается убрать всё лишнее.
Go говорит: «Будем сразу писать нормально».
И в долгосрочной перспективе такой подход тоже имеет огромные плюсы.
🆚 Go vs Python: что проще изучить новичку?
Если вопрос звучит именно так: «Python или Go — что проще для начинающего?», в большинстве случаев ответ — Python.
Причём разница заметна уже на первых уроках.
В Python можно довольно долго программировать, практически не думая о типах:
age=18
name="Alex"
price=199.99Python сам понимает, что где лежит.
В Go типизация статическая:
var age int=18
var name string="Alex"
var price float64=199.99Хотя писать можно и короче:
age:=18
name:="Alex"
price:=199.99Но компилятор всё равно внимательно следит за типами.
И если попытаться сделать что-нибудь подозрительное, Go быстро скажет: «Нет».
Python иногда скажет это только тогда, когда ваш код уже работает на сервере в пятницу вечером. 😎
⚡ Go действительно быстрее Python?
Да. В большинстве вычислительных сценариев Go значительно быстрее обычного Python.
Причина фундаментальная: Python обычно выполняется через интерпретатор, а Go компилируется в машинный код.
Python
ваш код
↓
Python interpreter
↓
выполнениеGo
ваш код
↓
компилятор
↓
готовая программаВ результате Go обычно:
быстрее выполняет CPU-зависимые операции;
эффективнее использует несколько ядер;
проще масштабируется под большое количество запросов;
потребляет меньше ресурсов;
отлично подходит для постоянно работающих серверных приложений.
Но тут есть важная ловушка.
🤔 Быстрее программа ≠ быстрее разработка
Допустим, вам нужно написать маленький скрипт:
прочитать CSV;
обработать данные;
отправить результат в API;
сохранить JSON.
На Python это вполне может занять несколько десятков строк. А благодаря огромному количеству библиотек часть работы вообще сводится к нескольким вызовам функций.
То есть сам Python работает медленнее. Зато разработчик на Python часто работает быстрее.
Именно поэтому сравнивать языки только по скорости выполнения кода немного странно.
Это как выбирать автомобиль исключительно по максимальной скорости.
Ferrari быстрее фургона. Но попробуйте перевезти на ней холодильник. 📦
🚀 Где Go действительно раскрывается?
Go создавался с большим вниманием к серверной разработке, параллельности и простоте больших систем.
Backend и API
мобильное приложение
↓
API
↓
Go
↓
PostgreSQL / RedisЕсли сервис получает огромное количество запросов, Go становится очень интересным кандидатом.
Микросервисы
Когда приложение превращается из одного сервера в целый набор сервисов:
users-service
payments-service
notifications-service
analytics-service
auth-serviceстановятся важны скорость, память, простой деплой, конкурентность и предсказуемость.
И вот тут Go чувствует себя практически дома.
🧵 Goroutines: суперсила Go
Одна из самых известных фишек Go — goroutines.
go sendEmail()
go updateStats()
go createNotification()Ключевое слово go запускает функции конкурентно.
На практике всё, конечно, чуть сложнее, но сама модель получилась очень удобной.
Поэтому Go любят в системах, которые должны одновременно:
обслуживать тысячи соединений;
обращаться к нескольким сервисам;
обрабатывать очередь задач;
работать с сетью;
выполнять фоновые операции.
Python тоже умеет работать с асинхронностью:
async def load_data():
...await load_data()Но конкурентность исторически является одной из наиболее сильных сторон именно Go.
🤖 А где Python почти безальтернативно удобен?
Скорость Go звучит круто, пока вы не заходите в мир:
машинного обучения;
нейросетей;
Data Science;
анализа данных;
компьютерного зрения;
автоматизации.
Там вокруг Python уже построена огромная экосистема.
import pandas as pd
df=pd.read_csv("users.csv")
print(df.describe())Несколько строк — и вы уже работаете с данными.
А рядом существуют NumPy, Pandas, PyTorch, TensorFlow, Scikit-learn, FastAPI, Django, Flask, OpenCV, Selenium и BeautifulSoup.
Поэтому вопрос «Можно ли заниматься ML на Go?» технически имеет ответ «да».
Но часто правильнее спросить: «Зачем делать себе больно?» 😅
🛠 Python идеален для автоматизации
Есть скучная задача: «Каждый день взять Excel, переименовать 300 файлов, проверить API, отправить сообщение и сохранить отчёт».
Python: «Понял, сейчас сделаем».
import os
for filename in os.listdir("photos"):
print(filename)Дальше подключаем нужные библиотеки — и какой-нибудь двухчасовой ручной процесс превращается в одну команду:
python automate.pyЭто тот случай, когда Python может быть медленнее Go в десять раз, но это вообще никого не волнует.
Потому что скрипт выполняется 0,5 секунды вместо 0,05. Главное — человек перестал делать эту работу руками.
🔥 Backend: Go или Python?
Вот здесь сравнение становится действительно интересным.
На Python есть мощные инструменты: Django, Flask и FastAPI.
from fastapi import FastAPI
app=FastAPI()
@app.get("/hello")
def hello():
return {"message":"Hello!"}Очень просто.
Go обычно требует немного больше кода:
package main
import(
"encoding/json"
"net/http"
)
func hello(w http.ResponseWriter,r *http.Request){
json.NewEncoder(w).Encode(map[string]string{
"message":"Hello!",
})
}
func main(){
http.HandleFunc("/hello",hello)
http.ListenAndServe(":8080",nil)
}Python выигрывает по скорости создания первой версии.
Go начинает выигрывать сильнее, когда появляются:
серьёзные нагрузки;
большое количество одновременно работающих процессов;
требования к памяти;
десятки микросервисов;
сложная инфраструктура.
Поэтому ответ на вопрос «что лучше для backend — Go или Python?» зависит не от моды, а от проекта.
🚨 Обработка ошибок: Python vs Go
Python:
try:
user=get_user()
except Exception as error:
print(error)Go:
user,err:=getUser()
if err!=nil{
return err
}А потом ещё:
data,err:=loadData()
if err!=nil{
return err
}И ещё:
result,err:=processData()
if err!=nil{
return err
}Новичок в Go после сотого if err != nil начинает видеть его во сне.
Но идея Go здесь довольно разумная: ошибки должны быть явной частью программы.
Меньше магии — больше предсказуемости.
📦 Установка и деплой: здесь Go очень приятный
Допустим, вы написали приложение на Go:
go buildПолучаете исполняемый файл и отправляете его на сервер.
./my-serviceГотово.
Для Docker, Kubernetes и микросервисной инфраструктуры это крайне удобно.
💙 Изучать язык нужно кодом, а не просмотром 48 часов курсов
Есть одна универсальная проблема и Python, и Go.
Можно посмотреть «Полный курс Go за 14 часов», потом «Python с нуля до Senior за один вечер», а через неделю открыть редактор и задуматься:
«Так… а как там цикл пишется?» 😐
Программирование запоминается через практику.
В приложении Кодик можно изучать программирование именно таким способом: проходить короткие уроки, сразу писать код, решать упражнения и постепенно собирать знания в реальные навыки.
Так гораздо проще понять разницу между:
for item in items:
...и:
for _,item:=range items{
...
}не просто глазами, а руками.
А ещё у Кодика есть Telegram-сообщество, где выходят полезные материалы, разборы и небольшие посты о программировании. Их удобно читать между занятиями и повторять темы без ощущения, что снова открыл огромный учебник.
Прочитал → написал код → ошибся → исправил → запомнил.
