Рубрики
Обучение

О подходах к обучению в программировании и не только

В Дискорде сегодня зашел разговор на тему обучения программированию. Обсуждали всё: от классики типа SICP до современных «разъясняющих» туториалов. В процессе родилось несколько мыслей о том, как на самом деле устроено вхождение в профессию и почему советы опытных разработчиков иногда могут быть вредны для новичков.

Ловушка «легких» книг

Иногда можно услышать, что условную книгу по алгоритмам можно «проглотить за вечер». Как человек, который пробовал их читать (и далеко не с нуля), скажу прямо, нифига они легко не читаются.

Возьмем те же «Грокаем алгоритмы» или «Теоретический минимум по Computer Science». Да, они легче академического Кнута, к которому без мощной математической базы вообще лучше не подходить. Но алгоритмы — тема не теоретическая. Это не художественный роман, который можно прочитать за 5 часов. Без вдумчивого погружения и практики чтение учебной литературы бесполезно — знания испарятся к следующему вечеру.

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

Программирование как единоборства

В обучении есть два принципиально разных подхода, и я часто сравниваю их с боевыми искусствами:

  • путь бокса. Раз-два, и ты уже на ринге. Полгода тренировок — и ты готов к соревнованиям или реальной драке. Это эффективно здесь и сейчас. Ты учишь конкретный инструмент (язык, фреймворк) и сразу идешь кодить;
  • путь традиционных школ (например, ушу). Ты можешь пять лет просто «стоять в столбе», вырабатывая усилия, нарабатывая базу и культуру движения. Это долго, это нудно, и на первом этапе боксер тебя, скорее всего, без проблем вынесет. Но в долгосрочной перспективе у «традиционщика» глубина понимания и потенциал развития намного выше. Эффективность пока оставим за рамками.

Нужен ли фундамент?

Среди некоторых преподавателей бытует мнение, что нужно знать устройство ПК, ОС и сетей еще до того, как выбрал первый язык. С одной стороны, я согласен. Зная основы (как адресуется память, как работают указатели, как устроены сети и ОС), изучать программирование будет проще. Может быть дольше, но понимание и глубина будут выше (и глубже?).

Мой личный опыт подтверждает это. Когда-то я начинал с низкоуровневых курсов на Си и ассемблере. Это дало понимание «основы основ», которое потом не раз выручало в высокоуровневых языках.

Однако всё зависит от цели:

  • если задача — научиться кодить как «обезьянка» (выполнять типовые задачи по шаблону), то фундаментом вполне можно пренебречь. Правда есть вероятность, таких специалистов скоро начнет активно вытеснять ИИ. Хотя подмастерья и ремесленники все равно в каком-то количестве будут нужны;
  • если хочешь стать мастером, без базы не обойтись. Фундамент позволяет не ходить по кругу, постоянно отвлекаясь на доучивание основ в процессе подготовки и работы.

Что в итоге?

Идеального подхода нет. Кто-то хочет быть ремесленником, кто-то подмастерьем, а кто-то замахивается на мастерство. Ваша цель должна определять путь. Не нужно затрачивать чрезмерные усилия на то, что лично вам не нужно, как и не стоит упускать глубину, если есть желание добиться настоящих вершин в изучаемой сфере. А тем кто дает советы и учит нужно стараться адекватно оценивать цену своего опыта и не вводить в заблуждение тех, кто только начинает.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *