Как организовать online-обучение программированию?
Доброго времени,
в двух словах предыстория вопроса следующая. Работаю ведущим .net разработчиком (опыт 8 лет, из них примерно 6 - на С++), и примерно столько же преподаю ООП в ВУЗе (как хобби). В силу ряда обстоятельств хочу продолжить обучение в режиме online. С индивидуальным репетиторством вопросов нет, а вот как организовать группу - тут я пока в поиске оптимальной схемы.
Например, набрать группу человека 4, все подключаются через TeamViewer (что дает всем возможность писать код, по очереди). Понятно, что все должны быть примерно одного уровня - но все-таки будут различия, в итоге если одному что-то непонятно, другие будут ждать пока я объясню. А самое главное, что здесь нужно придумать какой-то иной формат занятия, не классические лекции и лабы. Минимум теории (ее можно почитать в книге перед занятием), берем задачу, и пишем код - но как это построить, когда студентов более чем один?
UPDATE
Здесь на основе комментариев я попытаюсь сформировать принципы online-обучения программированию.
1. Минимизировать теорию: ПЕРЕД занятием каждый читает ее сам (можно просто давать ссылки на страницы книг).
2. Если у кого-то "просядает" некоторая тема, давать ему на дом дополнительные задания по ней.
3. По крайней мере часть курса можно построить как командную работу над проектом (репозиторий, тикеты и пр.).
4. Нужно ли во время занятия давать студентам писать код? С учетом того, что это не быстро, что их несколько, и заревьюить код у каждого тоже не быстро - скорее нет, чем да, но вопрос открыт. Может быть как-то разбивать их на пары...
Я смотрел некоторые вебинары, там код ученики не писали. Обычно те кто попадали на данный вебинар имел знания и многое из показанного учителем было им понятно. Давалось домашнее задание, учитывая эту всё равно вебинар длился очень долго более часа (тут надо учитывать располагают ли данным временем ученики). Новое, он мог посмотреть и потом при получении исходников, просто разобрать досконально сам и проработать в домашнем задании. Но если Вы продумали чтоб код писали сами ученики это будет интересно, но может затянуться :) (вопрос каким временем располагает ученик)
Могу поделиться взглядом с другой стороны баррикад. Я никогда не работал программистом (если не считать html и примитивный css), но несколько месяцев назад загорелся научиться и стал самостоятельно изучать Python. И честно говоря, "классическое" обучение меня почти ни как не цепляет (если оно сходно с тем, что было у меня в ВУЗе с научным уклоном - психология, но не "болтательная", а как естественная наука, с кучей стат методов и т.п.).
Как я вижу, за исключением ряда ньюансов - эффективнее учиться самостоятельно, если есть мотивация и тебе это нужно для себя.
В чем мне бы помог учитель по программированию?
1) В систематизации подхода и задании направления. Для меня некоторые базовые вещи рискуют остаться в тени, а это плохо. Гуглу проще и очевиднее "задавать вопросы, в которых половина ответа" на конкретные темы и сложнее (а многие просто не догадываются/по-началу тупо не нужно) на более фундаментальные вопросы. Учитель может сбалансировать развитие.
2) Доступность и глубина взаимодействия с учителем. Самый важный момент, хотя это скорее к "репетиторству". Возможность лично обратиться с вопросом и получить оперативный развернутый ответ - серьезно ускоряет обучение и уменьшает фрустрацию.
Против Tostera, Stackowerflow, оперативность и применимость ответа выше. Т.е. понятно, если упереться рогом, то всегда найдешь объяснение, или человека который альтруистично им поделится или дойдешь сам.
Но часто эти способы дорого стоят, и обратиться к учителю было бы рациональнее (тупо дешевле чем бесплатные ответы).
3) Корректировка стиля написания кода, улучшение алгоритмов разработки программы и т.п. Те советы, которые препод даст, смотря на то, как ты работаешь.
Например, то как работая в IDE можно экономить время. Или как правильнее написать алгоритм программы (правильнее с т.з. ресурсов компа, или моего времени, или читаемости кода и т.п.)
На мой взгляд это те пункты, где бы преподаватель пригодился. А остальное - читать книги, непосредственно писать код, ставить себе цели/воплощать идеи - для этого, если есть мотивация, препод не нужен.
Это если мы не берем вариант "нужно получить свидетельство о полученном образовании" - в этом случае мотивация студентов и функции учителя - совсем иные.
для "просядания" тем использовать "тэгирование из pdf-документа в SQL", скачивания без pdf-принтеров всех полученных страниц из Интернета, использовать "генератор тэгового облака". Сможете что-то сделать - поделитесь со мной. Написано должно быть на C# для многопоточности приложения. Мне бы ещё выделить часть оперативной памяти (не RAM-диск) для моментального поиска из базы данных. Для таких вещей не нужен noSQL. Эта "ситуация дойдешь сам без учителя". Вебинары меньше информативны по сравнению с блогами.
Это называется развитие навыков самостоятельного обучения в прикладеной магистратуре. Никаких вебинаров не нужно. Бывают и учителя, которые ничему не учат.
Мы делаем платформу для практических уроков по программированию. Идея как у Codecademy, но вместо симулятора или песочницы мы предоставляем реальное боевое окружение, а ученик работает с ним в браузере (IDE + терминал).
Автор задает окружение и мощность, необходимые для этого урока, потом устанавливает задачу и пишет тесты для проверки потенциального решения. В итоге можно создавать задания ~любой сложности, от "hello world" на питоне, до настройки и запуска веб-приложений на кластерах с несколькими базами данных, репликациями и кучей файлов.
Сейчас приглашаем авторов. Как с вами можно связаться?
Или напишите мне, пожалуйста – rakhim@hexlet.io
Прикладывать файлы с исходниками. Записывать урок и снабжать этой записью каждого ученика. Чтоб он потом мог посмотреть и понять если что-то не успел освоить на занятиях. Думаю так бы было оптимально.
Только орентированная больше на практическую часть. Это здорово! Вы правильно сказали что теорию каждый может посмотреть сам, а вот как она применяется на конкретном примере тут же будет интересно узнать. Вы опишите требования к ученикам в самом начале, чтобы избежать дисбаланса знаний.
Andrey_Openchenko: это было бы неправильно сразу с нескольких сторон) Я ценю свое свободное от работы время (которого мало), свой опыт, и с другой стороны, люди часто не ценят знания, получаемые бесплатно. Но я не собираюсь наглеть) Посмотрел в инете, что расценки репетиторства по программированию (через skype) порядка 700-1000 в час, и в 90% случаев эти люди - теоретики, которые никогда не занимались разработкой реальных enterprise-проектов. Да, тут надо сделать скидку на то, что небольшая группа - это меньше внимания, чем один человек, но с другой стороны и занятия строятся как работа в команде, что близко к реальности. В общем, думаю что стоимость будет где-то в обозначенном диапазоне.
Это классный вариант, но вопрос "функции учителя онлайн" - оставляет за скобками. В идеале - codeacAdemy - почти полная автоматизация, сделал курс, выловил баги и твое участи уже лишнее.
Mist8: так это вообще вечный холивар, нужен ли в программировании учитель.. Зайдите на любой форум, на вопрос "где меня научат программировать" как правило дружный хор ответов в одном ключе, нередко (как это принято в IT, про это даже была статья на хабре) с некоторой высокомерностью: мол, если ты сам не можешь по книгам и ресурсам инета обучиться, значит это не твое.
Я тоже долго так думал, поскольку сам прошел достаточно типичный путь программиста: компьютер в детстве (486 DX2), Бэйсик, Паскаль, Delphi, С/С++, .net, сидение по ночам за кодом, свои маленькие проекты и пр. Уже спустя годы преподавания я увидел, что есть и другие пути. Например, один мой студент имел образование психолога, ну вот так сложилось (может родители повлияли, может еще что), а хочет в IT. И уже не школьник, семья и пр., чтобы по ночам сидеть с горящими глазами - и что? Прошел обучение (естественно, много занимался и после занятий), поработал Junior'ом в одной компании, в другой, набрался опыта - и все хорошо. Были и другие случаи, кто-то пошел в IT после обучения не сразу в разработку, а в developer-in-test, например (для начала). И таких примеров очень много, когда у человека не хватает времени/мотивации/сил/усидчивости чтобы "я все сам", а каждый час занятия - это эквивалент суток чтения книг и ковырения кода. Экономическую сторону вопроса я не буду расписывать, и так понятно, что стоимость курсов окупается с первой же зарплаты разработчика (если до этого он работал в менее оплачиваемой сфере).
встречи google+
реальные проекты
общие задания, пусть работают командой, выступать в роли ПМа, выявлять слабые и сильные стороны студентов и направлять так чтобы они подтягивали друг друга.
если кто-то в чем то слаб то ему эти задачи пусть и перепадают, погружением так сказать исследует.
Про команду я тоже много раз думал, сделать проект на GitHub, каждый пилит свою часть. Мне кажется только этим не обойтись, в обучении (особенно с нуля) есть много моментов, которые так не охватить, на них нужны простенькие фрагменты кода, пояснения и пр.
Кстати, а почему google+ ? Просто я им особо никогда не пользовался, в чем его преимущества?
Нет возможности организовать практику, чтобы не я набирал код, а студенты (если только расшаривать экран по-очереди, но это затратное переключение контекста). Но это открытый вопрос: нужно ли на занятии "передавать клавиатуру" студентам. Практика, безусловно, улучшает процесс обучения, но отнимает много времени.
Да нет, зачем так усложнять жизнь и себе и ученикам? Запишите свой онлайн-курс и выложите его на какой-нибудь из платформ, например на stepic.org. Вместо теории - ссылки на ресурсы с полезной информацией, а студенты пишут код не ровно во время урока, а до дедлайна.
Командную работу построить чуть сложнее, но общий репозитарий, тикеты и т.д - это хорошо, а обсуждать можно в комментариях к уроках