Country not specified
Unknown website Share

Apps4all

Страна: -
Город: -
Был онлайн: -
О себе:
 
08-07-2016, 10:49
Apps4all

Каким должен быть правильный курс по программированию

​Илья Лебедев, старший преподаватель курсов ​Learn​.Python написал для Apps4All материал. Публикуем в оригинале.

Я уверен, что учить – это круто. Поэтому я преподавал со второго курса: помогал школьникам с математикой и английским, а студентам – с математическим анализом и основами программирования. Учил даже пару взрослых – владельцев сайтов, которым надоело платить подрядчикам за всякие мелочи.

Потом делал пару мини-лекций на работе: рассказывал коллегам, например, о моей страсти к онлайн-образованию. А в прошлом году попробовал составить курс подготовки маленьких веб-разработчиков и прочитать его в Бауманке. Понравилось, теперь хочу ещё.

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

Необязательным

В ВУЗе я учился по специальности прикладной математики: нас учили моделировать полёты ракет и предсказывать свойства новых, ещё не созданных материалов. Создание алгоритмов решения сложных систем дифференциальных уравнений, написание и оптимизация программ, которые работают сутками – вот это всё.

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

Проблема была в том, что многие студенты не хотели этим заниматься: сложно, долго и не интересно. Ну правда, мало кто готов потратить человеко-месяц на моделирование композиционного материала, армированного по хитрой схеме. Поэтому преподаватели задавались вопросом: как заинтересовать народ задачами? Сделать так, чтобы у студенты вставали в очередь на получение внеочередной проблемы? Чтобы они сидели если не ночами, то хотя бы вечерами над решением задач?

Тогда я не знал ответа. Сейчас знаю: никак.

Если ученику неинтересен предмет, он не освоит его как надо. Он запомнит самый минимум или обманет систему –выучит ответы на билеты, попросит знакомого написать за него практическую работу, выпросит тройку на последней пересдаче.

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

Я считаю прагматичным другое решение: не заставлять студентов проходить курс. Тогда те, кому неинтересно, быстро перестанут мозолить глаза – тогда можно сосредоточиться на тех, кого "прёт".

Из этого следует вывод: правильный курс необязательный курс. Его не нужно сдавать всем студентам. За него не ставят зачёт. Не ругают за пропуски.

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

Практическим

Теория – это вроде инструкции к конструктору, но чтобы собрать звезду смерти из Лего придётся сцеплять детали друг с другом. Если собирать не по инструкции, Звезды смерти не получится. Получится другая штука – вероятно, прикольная.

С программированием та же история: на первом месте практика. Пока пишешь код – возникают вопросы, на них должна отвечать теория. Искать ответы до появления вопросов неправильно.

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

Давать задания, для которых нужны знания, о которых ничего не сказано на лекции, боязно, но правильно. Студенты взрослые и сознательные, помните? Они сами разберутся – пусть даже написав вопрос лектору.

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

Подталкивающим

Ещё одна студенческая история:

Я проходил продвинутый курс по разработке на C++. Там рассказывали о STL, паттернах проектирования, сложных алгоритмических структурах данных. Тема была от меня далека: я тогда писал несложные программы для курсовых и применять эти знания на практике было негде.

Но лекции воздействовали на меня волшебно: хотелось применить все эти новые крутые штуки. Вот очень сильно хотелось.

Если после лекции появляется такое вот хотение – лекция удалась. После неё ученики засядут за работу и эксперименты. Будут спрашивать и отвечать в чате. Делиться идеями. Соревноваться. Помогать друг другу. Жизнь закипит, в общем.

Так и должно быть в крутом курсе. Это сложно: об этом приходится помнить, формируя лекции, а рецептов нигде нет. Понятно, что на каждой лекции найдётся равнодушный слушатель, которого не получится зажечь. Но стремиться к такому надо.

На правильном курсе ученики сами объединяются в группы и фигачат ночами. Потому что их прёт.

Корректирующим

Ну ладно, объединились и фигачат. Прёт. Нафигачили, сдали. Дальше очень важный этап – фидбек. Стоит облажаться – и польза курса резко падает вниз.

Оценки не годятся: не говорят, что не так и демотивируют. Получается "блин, у меня тройка, я лох", а не "ну ща, пара фиксов – и всё будет круто". Оценки молчат и осуждающе смотрят. Ужасный вариант.

Автотесты куда лучше: по их результатам хотя бы понятно, правильно ли работает программа, а если не правильно – они указывают на баг. Идея радикально отличается от оценок: не "садись, четыре", а "вот тут вот поправь, ок?". Хороший вариант.

Кодревью – самый лучший вариант. Особенно правильное, подробное ревью. С описанием ошибок, ссылками на статьи и документацию, объяснением подводных камней и указаниями на правильные решения. Комментарии привязаны к комитам или напрямую к коду – получается наглядно и понятно. Недоработки налицо – можно составить список и зачёркивать в нём пункты по мере исправления.

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

На правильном курсе ученики получают подробный фидбек: в формате результатов грамотных автотестов и подробного кодревью.

Интересным

Собралась детальная картина: правильные ученики учатся на курсе с правильным соотношением теории и практики, хорошей атмосферой и корректным фидбеком. Победа, вроде бы.

Но нет, радоваться рано: через пару недель на курсе останется немного меньше слушателей, чем вначале. Потом – ещё чуть меньше. До конца дойдут далеко не все, а это беда: чем меньше выпускников – тем меньше КПД у курса.

Поэтому надо, чтобы студенты не бросали курс. Можно напоминать им о потраченных деньгах, времени или усилиям, но это не сработает. Студент не бросит курс, если курс ему интересен.

Курс не должен быть нагруженным или сложным. Он должен быть интересным – тогда пользы больше.

Подойдёт всё, что может сработать: шуточки во время лекций, геймификация, соревнования, истории из жизни - что угодно, лишь бы было интересно. Стоит об этом забыть, и лекции превратятся в монотонный бубнёж, а домашняя работа – в механические, скучные задачи.

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

Правильный курс интересен и студентам, и преподавателям.

Прозрачным

Остался последний штрих – рассказать о курсе студентам. Что, как и с какой целью. Зачем делать эти тесты? Зачем мне знания с этой лекции? Почему ДЗ такое?

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

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

 
программирование
разработка
обучение
0 0 0

Чтобы оставлять комментарии вам необходимо зарегистрироваться