Выбор языка: Python, JavaScript или Go
Почему этих трёх языков три, в чём каждый из них действительно силён, и честный факт: первый язык значит куда меньше, чем принято думать.
Python, JavaScript и Go умеют складывать два числа, обходить список и описывать функцию. Так почему этих языков три, и почему работающие программисты спорят о них? Потому что язык — это не только способ записывать инструкции. Это ещё и сообщество, набор библиотек и набор приоритетов о том, что должно быть простым, а что сложным.
Python — язык данных и сценариев. Файлы, таблицы, статистика, машинное обучение, маленькие инструменты, склеивающие другие программы. Его синтаксис не мешает, поэтому на экране читается форма самой задачи. Расплата — скорость: Python обычно работает медленнее двух других, и для сценария, который запускается раз в ночь, это никого не волнует.
import csv
with open("sales.csv") as f:
total = sum(float(row["price"]) for row in csv.DictReader(f))
print(total)Python: прочитать таблицу, сложить столбец, напечатать ответ. Девять строк.JavaScript — язык браузера, и это не пристрастие, а факт об окружающем мире: это единственный язык, который выполняет любой браузер. Если программа должна отреагировать на клик и изменить то, что видит человек, JavaScript уже там, на каждом устройстве, и ставить ничего не нужно. Он работает и на серверах, поэтому один язык может покрыть оба конца сайта.
document.querySelector("#total").textContent = "42"
button.addEventListener("click", () => {
count = count + 1;
});JavaScript: изменить то, что на странице, а потом отреагировать на нажатие кнопки.Go — язык сервисов, которым нужно быть быстрыми и простыми. Его создали люди, уставшие от больших, медленных и запутанных серверных программ. Он собирается в один файл, который можно скопировать на машину и запустить, стартует за миллисекунды, а проверка типов ловит целые классы ошибок ещё до запуска программы. Расплата — многословность: одному и тому же смыслу приходится писать больше слов.
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok"))
})
http.ListenAndServe(":8080", nil)Go: ответить на проверку здоровья и начать обслуживать порт. Две инструкции и работающий сервис.А вот честная часть. Понятия, с которыми ты встретился в трёх прошлых уроках, не принадлежат ни одному языку. Значения и типы, условия, циклы, функции, область видимости: всё это есть в любом языке, который ты когда-нибудь встретишь, и работает одинаково. Меняется только запись.
same ideas, three spellings
value + type name = "Ada" const name = "Ada" var name string
condition if age >= 18: if (age >= 18) { if age >= 18 {
loop over list for s in scores: for (const s of ...) for _, s := range ...
function def f(a, b): function f(a, b) { func f(a, b) float64
map {"soup": 2.50} { soup: 2.50 } map[string]float64{...}Одна строка на понятие. Четыре столбца записи, один столбец смысла.Первый настоящий фактор выбора — читаемость, и означает она вполне конкретное: как быстро человек, который этот код не писал, поймёт, что тот делает? Код читают гораздо чаще, чем пишут, и читают его усталые и спешащие люди. Язык, который делает обычный случай коротким и очевидным, заслуживает своё место. Это и есть честная причина, по которой Python популярен в обучении и в работе с данными, и по которой Go не позволяет записать одно и то же шестью разными способами.
И вот вывод, прямо и без обиняков. Первый язык, который ты учишь, значит куда меньше, чем тебе говорят. По-настоящему ты сейчас учишь форму идей: что тип — это множество, что условие — это булево значение, что цикл — это стоимость, что функция — это коробка с одним выходом. Они переносятся полностью и навсегда. Синтаксис ты забудешь и выучишь заново за выходные, не раз, и так всю оставшуюся работу. Выбери любой из трёх, доведи с ним до конца небольшой настоящий проект, и ты сможешь читать два других.
Практика
Ты делаешь страницу, где нажатие кнопки меняет число на экране, и она должна работать на телефоне, где ничего не установлено. Какой язык выбирает эта ситуация за тебя?
Подсказки
- Спроси, где код должен выполняться, а не какой язык красивее выглядит в уроке.
- В браузере уже есть ровно один из этих трёх, и это не тот, который ты устанавливаешь.
Сопоставь каждую ситуацию с языком, который подходит ей лучше всего, и с честной причиной.
Подсказки
- Сопоставляй форму задачи с формой инструмента: файлы и числа, страница или сервис под нагрузкой.
- Ни одно из этих преимуществ не абсолютно. Язык силён в чём-то потому, что вокруг него сильны библиотеки.
Ты попадаешь в маленькую команду, которой нужно выпустить работающий продукт за два месяца. Расставь соображения в том порядке, в каком хороший инженер действительно их взвешивает.
- 1Проверить, что нужные задаче библиотеки существуют для языка, который мы можем взять
- 2Возвращаться к выбору только если в рабочей среде упрётся в настоящий предел
- 3Предпочесть язык, который команда уже умеет читать и поддерживать
- 4Спросить, что программа должна делать и где ей нужно выполняться
- 5Написать это, сохранив код читаемым для следующего человека
Подсказки
- Когда проект разрастается, первым ломается редко синтаксис.
- Пользователь никогда не видит твой язык. Пользователь видит, открывается ли страница и работает ли кнопка.