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

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

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


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


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

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


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

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

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

computer-science-major.jpg


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

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


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

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


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

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

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

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


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

Вся эта теоретическая хрень не нужна на данном этапе. Нужно учить на простых практических примерах. Например мы хотим сделать упрощенную версию арканойда. Для начала упростимм ее до такой степени что шарик летает по экрану и отталкивается от стенок. Садимся пишем. Здесь не нужны ни системы счисления ни архитектура компьютера. Здесь нужны лишь понятия переменных, циклов и какое-то API для отрисовки простой фигуры. Нужно подбирать пример который будет интересен ученику, это может быть что-то другое.
Ответ написан
@Huey
Вот этот русский сайт там как раз для школьников. Что могу сказать о создании концепции для дальнейшего саморазвития. Один мой прeпод начинал свой курс с зарплат на hh. Другой говорил что консольные приложения это круто. Я могу сказать что если вы хотите мотивированного подхода в 15 лет то девочке явно нужны вокруг люди с такими же интересами. На курсы отправить и не факт что они дадут результат, потом еще раз отправить и лучше бы там были ее сверстники. Еще очень важным моментом является укоренение в сознании того факт что это реально нужно что это " Круто и Прикольно". Пусть посмотрит социальную сеть, послушает речь Джобса и да пришлите ей инвайт на хабр может будет тратить 30 мин на нем вместо одного вк. Обязательно надо читать для всех кто только начинает я могу посоветовать серию Head First люди ходя бы не засыпают во время чтения. А то что вы хотите показать ей весь мир программирования это похвально, но пусть просто сачала поймет самые простые концепции. Переменные, циклы, массивы, функции, ООП. Идеалом многие считают js для меня это был python, потом js. Я сейчас скажу чисто свое имхо потому что я могу сильно ошибаться. Сначала пусть научиться размечать страницу (html может уже умеет она у вас продвинутая) для мотивации можно сказать что ты сидишь не знаешь как это работает. А поскольку это просто то нучиться она быстро и это ее замотивирует на дальнейшее обучение. Потом стили(css) ну тут тоже не очень сложно и можно разбирать множество красивых примеров. Потом уже можно попробовать дать js с основными концепциями. После этого надо объяснить концепцию реляционных бд и рассказать о ну не знаю php, python, ruby on rails? Вообщем показать концепцию серверного програмирования. После этого можно попробывать какой нибудь python + pyqt + sqllite на десктоп. Вы еще хотели что типа микроконтроллеров. Вам подойдет например интегрированная среда программирования ICS08GPZ лабы у нас по ней были. Оф сайт где скачать найдете если надо будет. Самое главное не пытаться все давать сразу. Объяснить всю концепцию которую надо будет пройти и потом медленно но верно проходить каждый этап.
Ответ написан
Комментировать
@LuciferOverLondon
Я по опыту самообучения вывел для себя лично одно правило, которым, как мне кажется, пренебрегают и в школе, и в вузах, и в самостоятельных попытках освоения чего угодно.
Нужна обратная связь. Надо понимать, к чему можно прийти в результате, и где находишься сейчас. Желательно ещё до первой написанной строчки и первой прочитанной книги. А в процессе проверяем, продвинулись ли вперед и что умеем теперь. Причем это не в дневнике и не голове преподавателя, а в своей. Иначе нет понимания происходящего и нет мотивации.

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

Ну а дальше — по веб-программингу, например, я поглощал всю литературу, пока не начал чувствовать, дает мне очередная книга что-нибудь новое или нет. И практика, да.

В любом случае, человек не станет хорошо и с интересом программировать оттого, что перечитал весь хедхантер и монстер.ком, помедитировал на цифры и на требования к джава-программерам и выучил Кнута. Если вдруг его зацепит фрути лупс, в котором он на второй день разберется, какие ручки для чего крутить у осцилляторов, значит, это музыкант, а уже потом кто угодно ещё.
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Попробуйте пройтись по этому списку Вот ссылка на несколько решений www.zdnet.com/blog/btl/programming-resources-for-kids-101/65932
Может ещё в ответах на этот вопрос на что-то интересное наткнётесь habrahabr.ru/qa/29023/

Просто я в свое время начинал с бейсика, паскаль в колледже и С прошел мимо меня, к программированию как занятию для души после 16 лет администрирования винды и 7 лет линуксов вернулся только в начале прошлого года — C# — WPF, WinForms, последний месяц активно учу asp.net mvc4 на примере сайта домашней бухгалтерии.

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

У знакомой из Черновцов дочка активно пишет сайты.
Ответ написан
Ivnika
@Ivnika
Посмотрите вот эту книгу O'Reilly — Стиллмен Э., Грин Дж. — Изучаем C#. Включая C# .NET 4.0 и Visual Studio 2010 (найти можно например здесь: rutracker.org/forum/viewtopic.php?t=4167432)
Мне очень понравился подход в книге, вместо традиционного «выводим в поток привет мир» там все гораздо понятнее и интереснее. Т.е. Читатель сразу включается в интересную работу дающую видимый полезный результат. Плюс оформление и подача материала понравилась.
Ответ написан
@Webfave
Преподаю в школе информатику для 8, 9, 10 классов. Конечно есть разница в обучении школьников и студентов. Но для меня она не большая. Суть в том, что можно всем давать один и тот же материал, только школьникам в простой форме с простыми примерами, а студентам можно давать более сложные формы и со сложными примерами.

Самый выигрышный вариант, это:
Узнать то, что интересно обучаемым и разбирать эти примеры на практике. И чтобы было больше практике, в ходе которой вы дополняете теорию. Тогда теория лучше воспринимается и усваивается.

Эффект "wow". Вы что-то сделали и сразу видите результат.

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

Например, изучение слепого метода печати на клавиатуре. Вроде простая, но при этом нудная вещь. Как можно тут зародить интерес? Легко!
1. Ученикам приводится реальные примеры из жизни. Например, вы используете соц сети? Общаетесь с друзьями? (Задаются вопросы, чтобы выяснить интересы и чтобы на все вопросы ученик отвечал положительно). И в ответ приводятся примеры того, на что повлияет, если ученик научиться слепому методу печати.
2. Использовать игровой процесс. Игра и конкуренция. есть сайт клавогонки.ру, показывается как пример. Что там можно играть, можно покупать машинки и развиваться. Как покупать? Очень просто, чем лучше печатаете, тем больше денег.
Итог, с первого занятия, у учеников загораются глаза, азарт, они начинают соревноваться. На второй урок прибегают, чтобы сообщить у кого какая машины и какие результаты. И конечно же, сам результат - с не слепого метода 50 зн/мин, они через неделю уже печатают слепым методом 120-160 зн минуту.

Самое удивительное, ведь я сам в процессе игры с учениками, с моих 200 зн/мин ускорился до 470 зн/мин (слепой метод печати) за месяц (по 5-10 минут в день).
Когда меня учили на первом курсу слепому методу печати, первые 1-2 недели, были тихий ужас. Сидеть в Ворде набирать текст. Скукотища была та еще. Единственное, что подогревало интерес, это соревнование между одногруппниками и преподавателем. Все.

В общем, обучайте в процессе игры. :)

А то, что сейчас есть в программе школьной по информатике, это тихий ужас. Например, создать сайт с помощь Ворда... Или, сначала изучается, что такое БД, потом Паскаль, потом, что такое WWW.
Ответ написан
Комментировать
@hryx
Для мотивации к развитию программистского взгляда и самостоятельного дальнейшего развития подростков я недавно открыл целый сайт, этому посвященный labyrinth.3dn.ru. Он еще очень молодой, появился на свет месяц назад. Я хочу попытаться завлечь всех в программирование простой мотивацией - игрой! Психологи говорят, что игра -это лучшая мотивация. Но игра не простая, а виртуальный конструктор, где любой желающий может создать свою игру-лабиринт и играть в неё сам или с друзьями. Подробнее, кому интересно почитайте на сайте...
Лично я был мотивирован в детстве программированием очень просто, тоже игрой.
Когда-то в журналах "Техника молодежи" 80-х годов печатали в каждом выпуске различные программы-игры для программируемых микрокалькуляторов типа МК-51, БЗ-34 и т.п. Как назло, у моего отца был программируемый калькулятор, но БЗ-21, для которого, по закону подлости, в журналах не было ни строчки кода... А детям хочется чего? Правильно - играть! Вот и я не был исключением. Я тоже хотел, но не мог - не подходили программы. Близко локоть, да не укусишь. Есть программа, есть калькулятор, а играть нельзя! Вот она - мотивация! Это подвигло меня начать попытки разобраться в коде, чтобы его переделать для моей модели калькулятора - так я познал принципы алгоритмов! Потом изучив инструкцию БЗ-21 я понял, что мне уже не интересны игры, которые в журнале, потому, что я знаю как создать свою! И процесс пошел - я начал придумывать и писать игры для БЗ-21. Всего написал пару десятков и пришло время в школе изучать основы Бейсика... И что Вы думаете? Оказалось для меня элементарным. Уже тогда синтаксис языка для меня был не принципиален, потому что я понимал как создавать алгоритм. В итоге уже к концу школы я освоил Бейсик и Паскаль. С++ я уже с легкостью освоил в университете, где уже на первом курсе написал первую свою игру шашки под DOS... Вот такая история моей мотивации... Дальше уже был OpenGL под VisuaL c++... Уже тогда я понял (когда попробовал), что создавать игру интереснее чем в неё играть!
Поэтому я приглашаю Всех, кому небезразлично развитие современной молодежи принять участие в бесплатном проекте "Творец лабиринтов". На сайте есть форум, на котором можно делиться опытом и своими идеями, касаемо программирования, 3d моделирования и графики.
Давайте вместе оторвем молодежь от тупения в соцсетях и мотивируем к занятиям, куда более полезным!
labyrinth.3dn.ru
Ответ написан
Комментировать
ixSci
@ixSci
Мне кажется Вам стоит учить её C#+WPF(XAML). При минимальном количестве кода создаются вполне симпатичные вещи. Если ей понравится, то в глубину она сама полезете и разберется, если нет — значит не её.
Ответ написан
Комментировать
HEm
@HEm
Ну вот вы привели два примера, где знание программирования помогло вам в реальной жизни (пусть даже это флеш-шутер ;) ). Находите возможности облегчить жизнь программингом, сначала вместе, потом пусть сама. Покажите, как иногда это внезапно приводит к разработке продукта, который еще и за деньги продавать можно.
Ответ написан
Комментировать
@Pon4ik_v_pudre
Эх не было у меня такого учителя=( Папа не разрешил пойти учиться на программиста, так вот теперь честно оттрубив 6 лет вечерки на экономиста, хочу вернуться к мечте о программирование=) Ребята!А может кому нужен подмастерье? Может кто готов делиться своими знаниями (рассматриваю и не бесплатный вариант), а то и не знаю куда податься, в универ? курсы? частные занятия? а на работу круглого нуля не возьмут т.к. и 20т.р. деньги. Не знаю с чего начать, но буду рада любой информации, я из Москвы, поэтому личное общение приветствуется, но не обязательно!)
e-mail: nadegdazaborskaya@gmail.com
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы