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

«Почему ваша учебная программа по бэкенду требует от меня изучения более одного языка программирования?»

Кажется, что большое количество студентов присоединяются к платформе с мнением, что вместо этого они полностью освоят один язык, а не разделят свои усилия. Хотя я планирую объяснить это лучше в самом приложении в будущем, я хотел написать этот пост в блоге, чтобы предоставить подробное объяснение того, почему мы заставляем вас изучать несколько языков в ходе нашей бэкэнд-программы.

Во-первых, немного предыстории Boot.dev

Чтобы вы могли понять, откуда я взялся, позвольте мне объяснить, что такое Boot.dev и каковы его цели как образовательной платформы.

Boot.dev — это встроенная в браузер учебная программа для бэкенда. У нас есть некоторые твердые мнения о том, как лучше всего научиться программировать. Например:

  • Сначала мы обучаем бэкенд-разработке и концепциям CS. Конкретные технологии — это всего лишь механизм, с помощью которого мы обучаем понятиям.
  • Мы полностью практичны
  • У нас есть управляемые курсы и неуправляемые проекты
  • Обучаем современным технологиям и языкам
  • У нас линейная учебная программа, поэтому учащимся не нужно беспокоиться о том, что им следует изучать дальше.
  • Мы максимально геймифицируем опыт, чтобы мотивировать студентов

Так почему же всю учебную программу нельзя преподавать на одном языке?

Если вы посмотрите на полную учебную программу по серверной части, которую мы запланировали в нашей общедоступной дорожной карте на Github, вы увидите, что это практически невозможно. Есть определенные концепции, которые настолько тесно связаны с конкретными технологиями, что нет смысла пытаться преподавать их всем одинаково. Рассмотрим несколько тривиальных примеров.

  • Трудно действительно обучать базам данных без SQL
  • Трудно преподавать функциональное программирование без чисто функционального языка
  • Сложно преподавать ООП без объектно-ориентированного языка
  • Трудно обучать аппаратным интерфейсам без ассемблера
  • Трудно научить печатать без строго типизированного языка
  • Трудно преподавать веб без JavaScript
  • Трудно преподавать ML без Python

Короче говоря, у нас есть 2 конкурирующие цели:

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

Так сколько языков ты собираешься учить меня?

В течение моей традиционной степени CS в университете я использовал более 12 языков программирования. Я думаю, что это слишком много. Я не хочу учить языки ради того, чтобы учить их. Это действительно проблема оптимизации, когда мы хотим ввести как можно меньше языков, эффективно обучая каждой концепции, которую мы хотим преподавать. Я уверен, что полная учебная программа для Boot.dev потребует использования всего около 6 языков, и что большая часть программы может использовать только JavaScript, Python и Go.

Изучение нескольких языков избавит вас от туннельного зрения

Есть дополнительное преимущество в изучении нескольких разных языков программирования, о которых мы еще не говорили. Познакомив вас с разными языками, вы начнете видеть некоторые преимущества, недостатки, сходства и различия между различными подходами к программированию.

Если вы когда-либо писали только на одном языке программирования, легко предположить, что определенный способ ведения дел является «лучшим способом», «правильным способом» или, может быть, даже «единственным способом».

Например, в JavaScript и Go совершенно разные подходы к потоку ошибок:

// JavaScript
try {
  doSomethingDangerous()
} catch (err){
  console.log(err)
}
// Go
err := doSomethingDangerous()
if err != nil {
  fmt.Println(err)
}

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

Буду ли я мастером на все руки, не мастером ни в чем?

Лично я так не думаю. Я действительно думаю, что если бы вы сосредоточились только на одном языке программирования с самого начала вашего обучения и до вашей первой работы по кодированию, вы бы на самом деле были в худшей форме, чем если бы вы потратили некоторое время на расширение своего кругозора.

Некоторые люди предполагают, что «обучение программированию» — это «изучение языка программирования». Они думают, что если вы изучите Python, а затем захотите изучить JavaScript, вы начнете с нуля. Это неправда.

Изучение вашего второго языка программирования займет 1/5 времени, которое потребовалось для изучения вашего первого, потому что ~ 80% изученных вами концепций будут применимы к обоим языкам. После того, как вы использовали 3 или 4 разных языка кодирования, вы можете посмотреть код практически на любом языке и понять, что он говорит. Иногда вам может понадобиться просматривать синтаксис, но все равно это делают.

Ну не могли бы вы хотя бы уменьшить количество языков общего назначения?

Если вы просматривали учебную программу, вы, возможно, заметили, что мы остановились на 3 языках для преподавания большей части контента:

  • JavaScript
  • питон
  • Go

Мы постараемся использовать эти 3 языка насколько это возможно, смешивая другие технологии только в зависимости от предмета обсуждения. Например, использование SQL, когда мы говорим о реляционных базах данных.

Позвольте мне объяснить, почему мы выбрали именно эти три.

Почему JavaScript?

В наши дни вы не можете уйти от JavaScript. Трудно изучать бэкэнд-программирование (им интересуется большинство наших студентов), не поняв сначала, почему существует бэкэнд. Бэкенд существует только для поддержки внешнего интерфейса, поэтому имеет смысл сначала научить вас нескольким основам внешнего интерфейса. Если вы собираетесь создать веб-интерфейс, он почти наверняка будет использовать JavaScript, так что нам придется прибегнуть к этому.

Почему питон?

Синтаксически говоря, Python убирается с вашего пути. Алгоритмы и структуры данных — это концепции, которые учащимся часто труднее освоить, поэтому для нас имело смысл выбрать язык, который позволил бы нашим учащимся максимально сосредоточиться на логике. Python также во многих отношениях читается как английский язык, что опять-таки позволяет с первого взгляда увидеть, что делает алгоритм в Python. Кроме того, к концу учебной программы у нас есть материалы по искусственному интеллекту и машинному обучению, так что это ситуация с двумя зайцами на камне, когда мы можем вернуться к Python на этом этапе, и нашим ученикам не нужно изучать дополнительный язык.

Зачем идти?

В нашей серверной программе особое внимание уделяется программированию серверной части, и я лично добился огромного успеха с Go в качестве языка серверной части. Go упростит обучение таким вещам, как параллелизм, компиляторы и распределенные системы, чем некоторые другие варианты, о которых я думал. Я действительно думаю, что в конечном итоге у нас может быть курс по Rust, который перейдет на еще более низкий уровень с точки зрения ручного управления памятью, но я еще не решил на этот счет.

Вопросы? Комментарии? Обеспокоенность?

Лучший способ связаться со мной напрямую — присоединиться к Boot.dev Discord server. Вы также можете @ меня в Твиттере. Дайте мне знать, что вы думаете о нашем подходе!