Задать вопрос
Semisonic
@Semisonic
Разработчик, выдумщик, неравнодушный человек

Формирование программистского кругозора и мотивации к самостоятельному обучению у начинающих?

Здравствуйте, господа читатели.


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


У моей подруги есть племянница, 15-летняя девятиклассница. Ребёнок сообразительный, могущий быть старательным, но несколько несобранный и недисциплинированный. Полтора года назад увидела написанную мной на коленке для собственного развлечения маленькую приблуду — утилитку для автоматизации прицеливания в одной простой флеш-игрушке — и у неё загорелись глаза, «это круто, хочу тоже так уметь». Начал с ней заниматься, давать ей какие-то азы, как когда-то учили на информатике нас: схематическая архитектура компьютера, системы счисления, базовые синтаксические элементы языков программирования на примере С. Но с таким подходом, когда вместо «делать прикольное и интересное» пришлось на бумажке учиться конвертировать числа из десятичной в двоичную систему, мотивация у ребёнка быстро угасла и занятия пришлось прекратить.

Прошёл год, она пошла в 9-й класс, их начали учить паскалю, полученные годом ранее знания по системам счисления пригодились и добавили воодушевления, и вроде как процесс программирования нравится. Плюс вдохновилась ещё одной поделкой моего исполнения — ботом для накручивания голосов, которого я для какого-то конкурса сделал. Снова обращается ко мне, «не мог бы ты снова позаниматься со мной программированием». Ребёнок стал взрослее, умнее, и главное — на данный момент у него есть желание. На этот раз хочется всё сделать правильно.


А теперь, собственно, к сути вопроса.

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

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

computer-science-major.jpg


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

То есть, хочется дать взгляд не вглубь процесса разработки, а вширь — на всю индустрию программирования в целом — и конечно с хорошими и доступными примерами того, чем каждый сегмент этой индустрии специфичен. Например, для программирования микроконтроллеров — небольшой кусок кода с пояснениями «а вот это специальная команда для конкретно данной железки, делающая то-то и то-то», а для веба — схожий по размеру кусок с пояснениями типа «вот этой функцией мы запрашиваем веб-страницу по такому-то адресу». И с какими-нибудь рабочими примерами — чтобы можно было пощупать, в какого сорта и масштаба вещи превращаются примерно аналогичные по объёму порции кода. Как-то так.


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

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


Спасибо!
  • Вопрос задан
  • 11343 просмотра
Подписаться 39 Оценить 1 комментарий
Ответ пользователя MrMig К ответам на вопрос (11)
MrMig
@MrMig
У меня есть пара саксесс-стори, не смотря на мой возраст :)
Несколько лет назад я занимался написанием ботов и просто утилит в виде юзерскриптов. И разрабатывал скрипт с кучей полезностей для vk.com. На базе этого скрипта получил несколько интересных знакомств и ценный опыт.

Так вот, ближе к делу. Однажды ко мне в личку постучался 19летний парень. Оказалось, что он очень сильно впечатлён самой возможностью «расширять сайты» и добавлять функционал. Он попросил меня рассказать ему, как это делается. У парня было только школьное образование, ни в ВУЗ, ни в ПТУ он не поступил, работы не было (на это были причины личного характера).
Его обучение началось с javascript. Я взял его в «команду» — помогать мне со скриптом. Со своей стороны я объяснял ему основы программирования на конкретных примерах: алгоритмическое мышление, циклы, условия, простые алгоритмы, и т.д.
Самое главное, что все эти понятия были наглядными. Имея в запасе минимальное понятие о API джаваскрипта, не представляя, что такое CSS и HTML, человек, тем не менее, мог видеть результат своих экспериментов, и этот результат приносил какую-то пользу, а не был очередным хеллоу-вордом.

Сейчас товарищ работает javascript-программистом в некой Московской фирме. Помимо джаваскрипта человек интересуется всеми сопутствующими технологиями — серверсайд языки, вёрстка, десктопные приложения, алгоритмы и далее по списку.

Как показывает опыт, основанный на экспериментах на друзьях, следующий паттерн работает для большинства заинтересованных:
  1. Определить, что именно зацепило человека (с какими технологиями его начать знакомить в первую очередь)
  2. Познакомить его с базовыми понятиями (циклы, переменные, условия, составление алгоритмов)
  3. Дать ему в руки инструмент для экспериментов — простой язык, на котором можно писать полезные для самого человека вещи, с незамысловатым API.
  4. Показывать человеку реальный пример кода (исправлять его код) и объяснять досконально ход своих мыслей при разработке или проектировании. При этом, сначала вы будете отвечать на вопросы «как?». Постепенно их нужно полностью сводить к вопросам «почему?». Вопрос «как» человек должен решать сам.
  5. Максимально сократить цикл идея-реализация-результат. Это очень важно! Это топливо для мотивации.
  6. Главный вопрос — какую идею реализовывать. It depends. Лучше всего, чтобы обучаемый сам придумывал, какую проблему он будет решать. Если мотивация не строится на мысли «мне срочно нужны деньги, поэтому я стану программистом» или прочими мыслями о будущем, то написания «шаблонных» программ будет идти в ущерб мотивации.
  7. Как только человек научится ваять код самостоятельно — он начнёт выходить за рамки вашего обучения. Тут важно научить человека получать информацию (да, не все умеют пользоваться гуглом и стэковерфлоу. И про книги не забываем)


  8. Это субъективно, но для меня такой подход работает. Я веб-программист, и «подопытные» тяготеют к этим технологиям.
    Но в целом — никто не любит сухую теорию. Видеть и «щупать» результат — бесценно :)
Ответ написан