Я с детства люблю не только программировать, но и делиться своими навыками, знаниями, рассказывать про свои программки, объяснять, как они работают, как их создавать.
В этом я нашёл своё призвание — мотивировать к изучению программирования.
Я не ставлю своей целью «научить писать программы», потому что этому нельзя научить, этому можно только научиться самостоятельно. Моя цель — сделать этот процесс максимально интересным, увлекательным, захватывающим, организовать «тусовку», сообщество, в котором можно и хочется решать задачи, развивать свои навыки программирования. Общество, в котором можно видеть успехи коллег, чтобы было к чему стремиться, кого обгонять.
Пишу программы с детства
В далёком 1992 году, будучи восьмиклассником, я каждый день после уроков ходил в кабинет информатики, где сидел до закрытия на практических занятиях у старшеклассников. Они изучали Бейсик на БК-0010. У меня уже были некоторые навыки написания программ, незаметно для учителя я помогал старшеклассникам решать их задачи. Мне это было в радость, им на оценку.
В десятом классе я поступил в заочную школу начинающих программистов. Мне по почте (бумажной!) присылали задачи, я писал тексты программ на листах А4 и отправлял на проверку. Изучение языка Pascal проходило в условиях отсутствия компилятора, только по книжкам и по листингам.
Летом в этой школе был организован лагерь, в котором мы полторы недели без перерыва писали программы (уже за компьютером). Каждый день, утром, днём и вечером, то по одному, то в команде, то по парам решали самые разные задачи. Там не было теоретических изысканий, были практические задачи. Много задач и программ. Неделя той школы дала мне очень многое. Именно там я понял, чему я хочу посвятить свою жизнь.
Жажда преподавания
После школы, после университета, где я только не преподавал язык программирования Pascal… В родной школе на факультативах, в частной компьютерной школе, давал частные уроки студентам и школьникам, работал в доме детского творчества и в гимназии. В университете вёл практику, вёл занятия информатики в городской физико-технической школе (без компьютеров, что интересно), даже свой собственный кружок «Формула программиста» организовал у себя дома. Параллельно с основной работой умудрился устроиться в ПТУ, где четыре года проработал учителем информатики.
Интерактивная система проверки задач
Я очень много общался со школьниками, уже знал, чем их можно увлечь, а что им по барабану. Да, никто не хочет читать теорию. Но все хотят действовать.
Работая в ПТУ я начал создание «робота» — системы дистанционного обучения программированию. Это список задач, которые можно решать только последовательно. Правильность написанных программ проверяется по заранее заготовленным тестам.
После отправки программы на проверку «робот» действует по алгоритму:
1. Компилирует программу.
2. Если вышла ошибка — возвращает сообщение компилятора.
3. Запускает программу с примером из условия.
4. Если ответ не совпадает — возвращает ответ программы для анализа.
5. Запускает программу ещё несколько раз со всеми остальными тестами, которые ученик не знает.
6. Ставит оценку программе: количество правильных тестов / общее количество тестов * 100%.
7. Если набрано более 50% — даёт допуск к следующему уроку.
Что нравится школьникам
Школьникам нравилось, что их программы проверяет не учитель, а «робот». Это более объективно, к тому же «не надо ждать, не надо звать», а можно сколько хочешь раз отправлять на проверку и получать результат. Замечено, что большинство учеников не довольствуются «полурешениями», я постоянно наблюдаю многократные отправки решений, пока не будет набрано чистых 100%. Доходило до того, что мои ученики решали задачи на моём сайте на чужих уроках, из-за чего на меня жаловались другие учителя. Думаю, это успех! :)
Кстати, эта система крайне облегчала мне процесс выставления оценок ученикам. Я просто задавал на дом, скажем, все задачи из раздела «Циклы», их там штук 10. На следующем уроке ставил оценки согласно набранным баллам. В первый раз это был столбец в журнале из 12 единиц и пары двоек-троек. Причём, не было никаких психологических драм, которые обычно сопровождаются при выставлении колов. Есть решения? Нет. Вот оценка. Всё. Одного раза было достаточно. По некоторым сведениям, ученики ПТУ делали домашнюю работу только к моим урокам… Да, классное было время. Хотелось бы его вернуть, но уже на новом уровне.
Ещё один важный момент методики — последовательный допуск к задачам. Это позволяет сконцентрироваться на конкретной задаче и не распыляться. Я пробовал открывать доступ сразу ко всем задачам — эффективность снижалась на порядок — ученики не знают, за что взяться, и в результате вообще ничего не решают.
Новый взгляд на старый проект
После работы в ПТУ прошло много лет, моя система покрылась толстым слоем пыли. Из года в год я всё грезил о том дне, когда я наконец-таки продолжу этот проект. И вот, это день настал. Я записался на тренинг по инфобизнесу, получил хорошего пенделя и начал действовать.
Вопрос выбора ниши для меня не стоял, потому что я могу, хочу, и буду действовать только в той области, без которой я жить не могу. Да, она достаточно узкая, программисты народ замкнутый, много сложностей при работе в этой нише, но этот выбор я сделал ещё в 12 лет, когда я каждый день просиживал в салонах компьютерных игр и в кабинете информатики, куда ходил, как на работу.
Единственное, что я мог выбирать — это язык программирования. Нужно выбрать такой язык, который я сам хорошо знаю, имею опыт работы с ним. Больше всего программ я написал на языках: Pascal, Delphi, C#, Java, PHP. Языки Pascal и Delphi уже не выдерживают критики, так как теряют популярность. С Java мне не очень везло, мне он кажется тяжёлым для этой цели. PHP мне не нравится тем, что там нет строгой структуры, нет ясных способов создания интерфейса пользователя, не нравится, что каждый раз страница загружается с нуля, хочется, чтобы было приложение, которое живёт не пару секунд, а чтобы было полноценное приложение для рабочего стола. Все эти рассуждения об языках программирования сугубо субъективны, основаны исключительно на моих чувствах и не подлежат обсуждению :).
Больше всего мне полюбился язык C# от микро-гиганта. К тому времени я закрыл несколько десятков самых разных проектов на этом языке, в том числе один очень крупный миллионный проект по созданию программы учёта графиков работы, рабочего времени, заработной платы (правда, миллионы достались не мне, у меня была только зарплата).
Итак, язык выбран. Как теперь мне его преподавать другим через интернет, чтобы ещё и заработать на этом, в перспективе?
Нужна изюминка
Я прекрасно понимал, что в интернете пруд-пруди всяких видео-уроков по изучению языка C#. Есть очень много хороших продуктов, есть возможность бесплатно найти профессиональные курсы. Что же я могу предложить, за что могу иметь смелость попросить денег?
Вебинары! Не мёртвые видео-уроки, не сухие книжки, а живое участие! Бесплатные, практические вебинары. Чистая практика, рабочие примеры, создание готовой программы с нуля, в режиме он-лайн. Ещё лучше — игровую программу. Школьникам и студентам нравится создавать собственные игровые программы.
Расчёт был следующим. Кто угодно, просто выполняя за мной, может с нуля создать готовую игрушку. Это круто, этим можно похвастаться, это супер, это завлекает, это мотивирует. Созданные мною игрушки базовые, без очков, без статистики, без особой графики, без наворотов. Только логика игры. Каждому захочется что-то добавить, изменить, усложнить. И тут ученик сталкивается с проблемой отсутствия теоретических знаний. И он уже сам, по собственной инициативе, начинает изучать теорию, буквально вгрызаясь в гранит науки, потому как мотивирован изнутри.
Ребята, это работает. Мой расчёт оказался верным.
Конечно, нашлось немало критиков моей методики. Профи-программисты говорят, что я ращу быдлокодеров. Я с этим не согласен. Я просто разбил песочницу и пригласил всех строить песочные замки. Кто захочет строить настоящие дома — пойдёт учиться дальше. И теория программирования не будет для него какой-то абстракцией, а будет укладываться в светлой головушке на конкретные практические воспоминания.
Моя цель — не научить, а увлечь, показать, как это классно, дать возможность попрактиковаться, организовать тусовку начинающих программистов. А учиться и накапливать навыки каждый может только сам.
Итак, способ выбран. Я буду проводить вебинары по созданию программ на C#.
Как провести вебинар?
Для проведения вебинаров я долго подыскивал площадку. Для моих целей нужно следующее:
1. Шаринг всего экрана без искажений;
2. Трансляция звука без задержки, синхронно с экраном;
3. Адекватная цена.
Я здесь не буду перечислять все площадки, которые перепробовал, сразу скажу, что после утомительных поисков мой выбор пал на join.me. Она удовлетворяет всем этим требованиям. Единственная особенность — все новички сталкиваются с проблемой настройки звука, для этого нужно «звонить» и скачивать программу для соединения. Во всём остальном – простая, быстрая и удобная площадка. Цена – 200 долларов за год. Буду признателен, кто порекомендует альтернативную вебинарную площадку, подходящую к указанным требованиям.
Первый вебинар я провёл 25 декабря 2013 года на тему «Создание программы для SMS рассылки». На него пригласил всех своих друзей. Получилось всё на «Ура!».
Для записи экрана и голоса я использую бесплатную программу oCam, она очень удобная, компактная и быстрая. Записанные видеоуроки я загружаю на YouTube.
Рабочий стол во время вебинара: Visual Stuido, Join.Me, oCam.
Я придумал для себя такую схему:
1. Выбираю игру для создания, сам пишу её.
2. Провожу вебинар по её созданию.
3. Записи вебинара сохраняю, чтобы создать свой видеокурс.
4. Повторить.
По началу вебинары получались скомканные, много технических сложностей возникало, на вебинары приходило всего несколько человек. Выкладывать такие записи было просто стыдно, поэтому поначалу видеоуроки я записывал отдельно от вебинара. Это было дольше по времени, но качество значительно выше.
Итак, процесс создания видеоуроков был уже налажен и с недельным циклом успешно работал:
Вебинар => Видеоурок => Вебинар => Видеоурок.
Что делать дальше?
Создать простенький сайт
Надо было, наверное, создавать сайт. И там выкладывать записи этих вебинаров. И туда приглашать народ.
Я долго выбирал звучное название, в конце концов остановился на videosharp.info. Буква «це» / «си» внутрь этого слова никак ни хотела становиться, поэтому я решил обойтись без неё.
Нашёл бесплатный шаблон, на коленке сделал сайт на зелёном фоне, сам нарисовал обложку, обыграв ассоциации названия языка с нотой «До-диез».
На сайте было два раздела: «Вебинары» и «Видеоуроки». Но как сделать, чтобы видео-уроки «работали»? Ответ у меня уже был готов. Во-первых, в одно время должен быть доступен только один урок. Во-вторых, за выполнение каждого урока нужно отчитываться.
За несколько дней на РНР и MySQL я набросал алгоритм последовательного доступа к видео-урокам с формой отправки архива созданной программы. И сделал интерфейс для проверки домашних заданий.
Кто будет проверять работы
По началу это было интересно — я смотрел все домашние работы, отвечал на вопросы, с нетерпением ждал новых программ. Однако количество работ расло и это занятие стало занимать много времени. Вызвался мне помочь один студент из самых активных слушателей. Занимался он этим делом очень ответственно, с комментариями, ответами на вопросы, разбором кода. Потом у него начался диплом и я опять остался один на один с горой работ.
Что делать? Пока решения не было, я поставил автодоступ к следующему уроку. Всё же лучше, чем ничего. Однако это противоречит принципу моей методики: последовательный доступ к урокам! Ведь можно отправить что угодно, получить новый урок. Снова отправить пустышку и опять идти дальше. Не обучение, а пустое развлечение.
Что же делать? Дать проверять другим ученикам? Во-первых, мало кому интересно смотреть чужие программы (я пробовал), во-вторых, не исключён вариант отправки вируса в архиве.
Так что же делать? Несколько недель это вопрос не давал мне покоя. Что же делать? Наконец-таки меня осенило: отчёты за задачи нужно делать скриншотами и ответами на простые вопросы, типа «сколько времени потребовалось», «что было самое сложное», «как оцениваешь урок». Перейти к следующему заданию можно только тогда, когда будет набрано, скажем, десять положительных отзывов. Сделать, чтобы работы проверять могли все желающие, а не только участники проекта.
Этот подход полностью оправдал себя, сделав из «минусов» — «плюсы»:
1. Для перехода к следующему уроку нужно отчитаться за предыдущий.
2. Ученики могут рассылать ссылку на свои отчёты своим друзьям, чтобы а) похвастаться, б) получить десять «хороших» оценок.
Теперь я уже могу констатировать: это работает. Процесс проверки очень простой: просмотреть картинки, прочитать отзывы, нажать кнопку «Хорошо» или «Плохо».
Проект успешно работал!
Робот Шарп
Настало время набрать в лёгкие побольше воздуха и сдуть огромный слой пыли с моей супер-пупер интерактивной системы проверки задач, чтобы внедрить её в мой проект. Этот раздел получил название «Консоль», потому что в нём пишутся консольные задачи.
Это оказалось не так просто, уж слишком много принципиальных различий у языков Pascal и C#, поэтому каждую задачу нужно было адаптировать. Ещё проблемы были с вводом данных. На языке Pascal для считывания двух чисел, введённых на одной строке через пробел, достаточно написать:
readln (a, b);
На языке C# так просто сделать нельзя. Пришлось создавать отдельную тему с задачками только на считывание чисел в самых разных формах. Аналог паскалевской строчки на языке си шарп у меня выглядит так:
string [] line = Console.ReadLine().Split();
int a = int.Parse (line [0]);
int b = int.Parse (line [1]);
Стоит ли говорить, что все алгоритмы для компиляции и тестирования программ пришлось создавать заново. Впрочем, это не заняло много времени, так как я чётко представлял, что хочу получить. Так появился «Робот Шарп» — программа проверки решений учеников.
Более подробно процесс работы робота Шарпа – как он компилирует и проверяет задачи – можно посмотреть на этом видео, которое я записал специально для этой статьи.
Для обеспечения работы раздела «Консоль» задействован VPS сервер с Windows XP, на котором установлен компилятор Visual Studio C# 2008. Робот Шарп представляет из себя программу, написанную на том же C#, которая подключается к базе данных MySQL где ожидает появления новых решений на проверку.
Когда появляется новая программа, робот Шарп сохраняет её в папку пользователя, компилирует, прогоняет по тестам и записывает назад в базу данных результат проверки с текстовым сообщением. Это может быть сообщение компилятора об ошибке, неверный результат работы программы при прохождении нулевого теста, список тестов с результатами тестирования. Если задача набирает больше 50% очков – она засчитывается и ученик может переходить к следующей задаче.
Видео-решения задач
Когда я создавал эту систему раньше, я грезил идеей размещения теоретического материала в начале урока. Несколько таких текстовых уроков я в самом деле составил. Но… Их никто не читал. Зато у всех всегда была куча вопросов: «Как решить эту задачу? Почему у меня программа не запускается?».
Поэтому я решил дать ученикам то, что они хотят — решения задач. Но не просто текст готовой программы, а видео-решение, в котором я подробно и наглядно объясняю, как решается эта задача, какие есть варианты и пишу код самой программы. То есть код ученик должен ручками набрать самостоятельно, в голове хоть что-то, да останется, а количество рано или поздно перейдёт в качество. Должен добавить, что видео-решениями пользуются достаточно редко, и это приятно. Многие хотят «добить» задачу самостоятельно.
Новый дизайн
Через полгода жизни моего проекта уже стало более 1024 учеников. Появилось уже 32 видеоурока по созданию самых разных игровых и прикладных программ. На вебинары приходило уже не менее 16 человек.
Бесплатный шаблон сайта, который был взят за основу, уже совсем не годился. Я занялся редизайном проекта. Схему своего сайта я перерисовал от руки не менее десяти раз.
Фрилансер создал мне на Bootstrap шаблон для моего сайта. Красивый, простой, удобный дизайн, два уровня меню, хлебные крошки, кнопки входа/выхода. Всё было красиво, но мёртво. Перенести весь проект с одного дизайна на другой — это как переехать в другой город. Фактически, я переписывал всё заново. И очень рад этому, код получился лучше, качественнее.
При создании сайта использовались следующие технологии: HTML, CSS, JavaScript, jQuery, Bootstrap, а также PHP, Smarty и MySQL.
Раньше тексты всех видеоуроки хранились у меня прямо в РНР файлах, теперь я перенёс их в базу данных. Мало того, я сделал небольшую собственную CMS, дабы облегчить себе процесс добавления публикаций на сайте, их редактирования, сортировки и перемещения. Системка, конечно, получилась примитивной, и в этом вся её прелесть — ничего лишнего, только то, что мне в самом деле нужно.
Продвижение проекта
В день на сайте регистрируется около десяти новых участников. Я завёл рекламные компании на Яндексе и на Google, откуда приходит 2-3 человека в день. Больше никакого продвижения у проекта нет, в этой сфере у меня опыта мало, желания этим заниматься ещё меньше. Проект развивается сам по себе, иной раз я даже удивляюсь, откуда приходят люди.
Статистика
Под конец немного статистики по проекту,
Данные приведены на 9 октября 2014 года.
Зарегистрировано участников: 1861
Подписчиков в рассылке: 840
Проведено вебинаров: 42
ВИДЕОКУРСЫ
Всего участников: 305
Создано видеоуроков: 44
Просмотрено уроков: 1351
Выполнено уроков: 325
Поставлено оценок «Хорошо»: 3384
Поставлено оценок «Плохо»: 74
КОНСОЛЬ
Всего участников: 402
Создано задач: 140
Общее количество тестов: 615
Решённых задач: 3769
Решённых на 100% задач: 3642
Отправлено программ: 10651
Написано строк кода: 56069
Заключение
В этом проекте для меня самое главное не цель, а сам процесс. Мне нравится вести вебинары, записывать уроки, готовить письма для рассылки, наблюдать за развитием проекта. Это именно то, о чём я мечтал в детстве. Надеюсь, что в скором будущем это станет моим основным занятием.