Почему мы заставляем вас изучать несколько языков программирования

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

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

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

Сначала немного информации о Boot.dev

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

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

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

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

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

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

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

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

Так сколько языков вы собираетесь мне преподавать?

За время обучения в университете по традиционной программе 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
  • Python
  • Go

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

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

Почему JavaScript?

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

Почему Python?

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

Почему именно Go?

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

Вопросы? Комментарии? Беспокойство?

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

Оцените статью
devanswers.ru
Добавить комментарий