Как стать автором
Обновить

Комментарии 36

Занятие 1. Привет, мир!
Что такое WinAPI


Вам не кажется что для детей это перебор? Я про WinAPI. Есть риск сделать сломать им мышление в раз и навсегда.
Зачем детям изучать существующие контролы (Edit, Button, etc)? Вам не кажется, что намного лучше будет донести до них концептуальные вещи, а выбор реализации оставить за ними?

Не так давно проскакивала ссылка
И я абсолютно согласен, что программированию надо начинать учить с этого, а не с кнопочек и полупрозрачности.
Я вообще там ниче не понял, головоломки какие, пазлы…
я преподаю программирование в университете и приходится делать тоже самое — изучать GUI вперед основ. потому что есть такой момент — нужно заинтересовать учеников, иначе они будут просто посещать занятия. заинтересовать инкапсуляцией, полиморфизмом или консольным приложением можно очень не многих. приходится вместе с ними создать пару программок с GUI, они загораются, дальше наталкиваешь их на сложности и начинаешь объяснять с основ.
Согласен, в университете нужен другой подход.
Я не имею в виду ООП, скорее общий подход к программированию: алгоритмика, мат. аппарат, если хотите. Если неподготовленным детям рассказывать про ООП, то это может привести к тому, что будет красивое разбиение по классам и методам, которые будут пустые по функциональной составляющей.
С другой стороны, в университете уже не дети, и они (студенты), согласитесь, должны быть замотивированы самостоятельно. Это не совсем правильно, когда надо «бегать» за студентами. Но это вовсе не означает, что надо забывать про совершенствование навыка подачи материала.

P.S. Когда-то в период расцвета Visual Basic и Delphi я видел индивидов, которые начали освоение «программирования» c GUI. Больно им потом переосмыслять, что во главе угла вовсе не GUI. Не у многих получалось через это пройти, когда тот первоначальный интерес, про который вы говорите, в их глазах таит когда они видят что программирование — это не только пушистый мех GUI…
Должны быть мотивированы, но это не так чаще всего (сами были студентами, помним каково это), кроме того я веду пару прямо перед обедом, ну, какое тут может быть программирование?
Это совсем не правильно уговаривать студентов поучиться, но не хочется впустую «молоть языком» и прыгать у проектора, поэтому пытаешься идти навстречу и искать точки соприкосновения интересов, всё таки хочется быть хорошим преподавателем.
Я сам когда то пережил перелом сознания, поняв, что GUI это дело десятое и готов помочь осознать это студентам, но для этого мне нужно завладеть их вниманием.
Могу показать чему учим мы на первом курсе матмеха УрФУ. Там нет GUI, но полно интересных задач. Пишите в личку, если вдруг интересно.
В WinAPI нас интересует только принцип взаимодействия ОС с программой.
Как это объяснить ребенку? Зовем ребенка к доске. Говорим: возьми маркер, нарисуй окно с заголовком такого-то размера. Нарисуй кнопку, с таким-то размером, и с такой-то надписью. Молодец! Так вот смотри, я делал запрос к тебе: какой объект рисовать, и с какими свойствами, а ты рисовал мне. Так и работает программа с WinAPI: она делает запрос в ОС что рисовать и как это должно выглядеть, а ОС выполняет эти команды.

Насчет графических языков программирования… Я тоже думал, может быть сначала попробовать тот же скретч.
Но рассматривая опыт программирования в робототехнике, где мы начинаем с графических сред, получается что на определенном этапе графическая среда становится тяжелее для восприятия чем текстовая. Во-первых структура понятна, когда блоков ещё мало, когда начинаем писать программы длиннее, то блоки занимают много места, и ориентироваться в программе наоборот становится тяжелее. Текстовая программа более компактная. Во-вторых некоторые вещи в графических средах весьма неудобны, например в том же графическом Robolab было довольно неудобно работать с подпрограммами, в которе нужно передавать параметры. В текстовых языках работа с подпрограммами куда более логична. Или была проблема с логическими выражениями, состоящими из нескольких условий (например программирование движения, которое зависит от показаний нескольких датчиков). В результате всего этого теперь приходится всех кто учился в графическом роболабе переучивать на текстовый RobotC.
Мне почему-то кажется что если мы начнем программировать сейчас в графической среде, то мы так же придем к ситуации что возможности среды исчерпаются и придется переучиваться.

Насчет выбора — дело конечно хорошее. Но факт в том, что концептуальные вещи все-равно надо учить на основе чего-то. Да и прежде чем выбирать на чем реализуем, надо иметь представление из чего выбирать. Дети же такими знаниями не обладают, то есть стоит вопрос на основе чего учить их этим знаниям. Вот мы как раз на основе Edit, Button и т.д. учим. Плюс такого выбора что мы обеспечиваем главную цель: ребенку интересно. Он уже с первых занятий приносит программы, которые что-то делают интересное для него, которые можно показать друзьям, и те скажут: ого, и это ты сам сделал?
То есть как было написано в статье, мне кажется важнее привить интерес к программированию у детей, и вроде те вещи которые мы делаем этот интерес вызывают.
Простите, если немного не в тему. Если позволите немного личной истории.
Когда я учился в школе, было модно вводить такой предмет как «информатика». Директора школ наличием «информатики и экономики» козыряли перед родителями для подчеркивания необходимости передачи ребенка именно им, и обоснования родительских пожертвований на новый компьютерный класс.
Это была первая половина 90х. Тогда программа обучения по «информатике» еще не была утверждена и менялась каждый семестр.
Как сейчас помню, сначала мы изучали бейсик на БК0010, потом МинОбр сказало, что так не надо, давайте-ка рассказывать детям олигофренические истории, которые слабо притянуты к предмету. Потом вроде поставили 486DX (и даже Пентиум-1) и опять всех погрузили в бейсик, затем решили, что это не нужно, а Word, Excel, PowerPoint — наше все. Пока продолжался этот хаос, учитель учила нас (по своей инициативе) «классическим» блок-схемам и алгоритмике.
Пока события развивались таким образом, самым ценным навыком вынесенным оттуда, были как раз те алгоритмические задачи, которые развили нужные способности и привили интерес.
Должное надо отдать тому факту, что тогда компьютер был «в диковинку» и не у каждого он был дома.
Тем не менее, когда я дорос до «нужного уровня» мне порекомендовали пойти в «кружок программирования» (не в школе), где Учитель (дважды доктор и профессор) обучал программированию, основываясь на индивидуальном подходе к ученикам. Причем не столько владению ЯП (Pascal), сколько мышлению для решения различных задач, используя ЯП как инструмент. При обучении использовался проблемный метод. Навык владения которым рос пропорционально количеству выполненных задач. Как сейчас помню, было очень интересно наблюдать за моделью упругого удара у двух шаров (в проекции — окружностей, — упрощенная модель), или же написания процедуры заливки (своей) сначала для выпуклого, а затем произвольного многоугольника.
Не смотря, что в это время уже во всю жила Win9x, ДОСовский pascal был выбран не случайно (ИМХО, Паскаль — академический язык, предназначенный именно для обучения программированию). Разумеется, сейчас паскалевская графика смотрится крайне убого, на современных мониторах с HD разрешением, но возможно, есть какие-то продолжения идеологии, без оверхэда в виде графического интерфейса.
Ещё хочу в качестве примера указать на проект BrickPi — это на базе RaspberryPi(Arduino) сделали мозг/контроллер к периферии Lego.

www.dexterindustries.com/BrickPi/

Сам проект полностью open-hardware.

То есть Лего конструктивом можно управлять через Linux систему (что есть RPi). Они приводят примеры программирования на: C, Python, Scratch.

Так же есть проект sites.tufts.edu/blockytalky/ — который предоставляет аналог Scratch, но на базе веб-решения — Blockly — это визуальное программирование. Но фишка в том, что Blockly — переводит то что визуально «построено» на Python — и уже эту программу посылает на выполнение в RPi микрокомпьютер.

То есть ученик по мере подхода к пределам визуальной среды программирования — может перейти на программирование напрямую на Python. Что делает сам подход более перспективным. Т.к. инфраструктура (робототехническая) может быть оставаться без изменений.
Blockly — хорошая штука, но у меня есть один вопрос: не лучше ли использовать «интернациональный» язык блок-схем для обучения детей основам программирования и составления алгоритмов? Есть же графические языки программирования на основе классических блок-схем. Например, такие. Причем у этой среды есть бесплатная версия.

Это же естественный процесс — сначала изучать базовые основы, а потом использовать эту базу для погружения в более узкую специализацию.
Великолепная идея! Сам давно мечтал заинтересовать и обучить кого-нибудь программированию, да времени пока нет. Была идея ввести кружок в школе с ООП (ибо его стоит в школе и проходить), да «у детей и так бешеная нагрузка».
Из игр банальные: тетрис, змейка, арканоид, сапер, различные карточные.
Или вот, сам в детстве писал: игрок управляет кораблем, за которым охотятся охотники. Вектор скорости охотников всегда направлен на корабль, по модулю их скорости равны (или у корабля чуть больше). Кораблю нужно проходить через ворота, когда проходит — появляются новые, в рандомном месте. Корабль гибнет при встрече с охотником, количество очков считается по количеству ворот.
А можно еще самим детям дать придумать/выбрать игру, заодно научить их понимать, что они могут сделать, а что пока нет.
Спасибо за статью!

Думаю, стандартный вопрос: почему всё-таки выбран паскаль, а не скажем питон? Единственное, что я вижу в паскале это его традиционность в системе российского образования. В остальном и по лёгкости освоения, и по применимости, и по количеству библиотек питон, по моему мнению, на много голов превосходит паскаль. Да, можно сказать что в питоне мало вкуса железа (т.е. не надо заботиться особенно о выделении и освобождении памяти, типизации и прочем), но ведь целью является обучения программированию и освоение практических навыков, а не обучение деталям реализации тех или иных систем.

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

Если всё же хочется GUI, то для питона существуют отличные библиотеки, например, pygame, который и кнопки нарисует и поможет быстро создавать простенькие игрушки (вплоть до трёхмерных, а тут уже и OpenGL с линалом).

Касательно программ которые могут заинтересовать детей могу предложить змейку (для пафоса можно назвать мотоциклы как в Троне), тут и простая программа, и возможность вставить картинки мотоциклов в интерфейс, и мультиплеер через стрелки и WSAD. Может даже кто-то из старшеклассников захочет написать честный мультиплеер по сети.

UPD: В качестве чуть более факультативной темы можно ввести командную разработку, т.е. та же игрушка даётся маленькой группе людей, тут и разделение по модулям, и взаимопомощь с взаимоподтягиванием, а в перспективе и обучением азам DCVS когда возникнет необходимость. Плюс когда ты в команде будет значительно сложнее сачковать
Ну и кстати насчёт змейки, можно ещё добавить даже разработку ИИ разных уровней сложности, т.е. необходимо будет продумывать не только оптимальную стратегию поведения, но и систему поддавания, дабы человеку было интереснее играть. Ну и касательно опять же модульности, можно сделать так, что часть учеников берёт на себя написание игры, а доставшиеся разделяются на команды и пишут ИИ под интерфейс определённый первыми, после чего проводятся соревнования. Тут и заинтересованность, и написание интерфейсов и программ под них, и согласование документации, и командная работа, и драйв соревнования. В общем, простор для деятельности огромный.
GUI не то что бы хочется, это основной элемент который делает для ребёнка программирование интересным.
Если мы начнём обучение с консольных приложений, количество детей в кружке резко сократиться. И основную цель — заинтересовать детей мы не выполним.

Командную строку я показывал, когда вкратце рассказывал про эволюцию ОС. Показывал различные команды. Но как-то детей это не очень впечатляет. Думаю им пока картинки — кнопки интереснее. В планах есть идея попробовать их научить делать небольшие .bat файлы, и запускать их из приложения (как способ попробовать заинтересовать этим направлением).

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

Кроме того командная строка и GUI вещи не взаимоисключающие, в качестве примера можете посмотреть helloworld написанный с помощью pygame'а (в окошечке там не только текст, но и несколько цветных фигурок). В интерактивном режиме можно итеративно видеть как вводимая команда влияет на отображаемое в окне. Думаю, подобный стиль написания быстрее заинтересует детей, чем дельфиподобный подход, ибо к играм он ближе.
По поводу Python, думаю один из лучших языков для начинающих — он очень активно сейчас продвигается на базе микрокомпьютера RaspberryPi, есть бесплатная версия Minecraft игры для RPi, и учитель информатики выпустил книгу с примерами работы с API Minecraft через Python и выложил её в открытом доступе, подробнее можно прочитать здесь:

Learning Python using Codecademy and Raspberry Pi Minecraft: a resource of great note

Вот пример того что можно сделать — классическая игра Змейка в мире Minecraft. Такие уроки информатики думаю будут запоминаться детям :)
Лично мне было интересно программирование, потому что я хотел создавать игры.
Я пробовал приобщить к этому одноклассников, но согласился только мой друг, который дальше 3 кнопок в Game Maker не прошел.
Чуть позже, давая знакомым книги и уроки по С++ с предложением создать игру, кое-как осилили этот язык те, кто по-настоящему хотел это сделать, кто-то бросил после cout << «123»;, кто-то запоролся на указателях.
Я написал это для того, чтобы сказать, что для большинства школьников интереснее играть в ВоВ или танки, чем 2 часа бороться с «а чо у меня SDL не подключается» после 2 месяцев на консоли, и их надо увлекать чем-то большим, чем консольные программы. Например, покажите им редактор Unity или Game Maker
За начинание плюс, статья не очень, уж без обид. Я бы все таки взял C# и студию экспресс. Очень просто на примере WPF показать как будет «красиво», но это сугубо мое мнение. Да и в жизни больше пригодится.
Очень приятно было узнать, что кружок у нас в Екатеринбурге :)

Я тоже замечен в преподавании программирования только на первых курсах университета. Если интересно, я могу показать примеры задач по своему интересных, но не требующих разбирательства с GUI. И способ организации занятий так, чтобы GUI можно было передвинуть на время после основ.
один из примеров которые я хочу попробовать сделать в проектах к концу года — внешнее устройство с взаимодействием через COM-порт. То есть на компьютере мы пишем программу, которая осуществляет взаимодействие с COM-портом, а на Arduino собираем само устройство, которое управляется/обменивается данными с компьютером. Это конечно пока только в планах, и я ещё не знаю как пойдёт — но это из тех вещей к которым хочется стремиться.


Вот в этом проекте мы готовы вам полностью помочь :)
Так как у нас в планах так же создать такой набор для начальных/средних/старших классов (и с развитием для студентов). При этом полностью открытый проект.

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

Вот например в Штатах есть учебные мобильные роботы для уроков информатики Finch.

Будем рады пообщаться, мы из Екатеринбурга — Хакспейса MakeItLab.
Я бы мог зайти на один или два урока и рассказать про разработку мобильных игр на Lua с Corona SDK. Если заинтересует их — уже сами продолжат изучать.
Если интересно — пишите.
Порекомендовал бы в качестве среды обучения PascalABC(http://pascalabc.net/).
В качестве быстрого старта — то, что нужно!
Сразу позволяет писать программы — без изучения особенностей IDE.
Да и Паскаль мы все знаем — проще объяснить…
Не думали использовать какой-нибудь визуальный язык, например Scratch (на хабре есть статья про него)? Это я к чему, когда я учился в школе, мы писали на Turbo Pascal, окошки делали на Turbo Vision, в университете была Delphi, сейчас же я пишу на Rails. Я ни о чем не жалею, но для «младшего подросткового возраста», наверное, лучше особо не отвлекаться на детали реализации текущих (или даже бывших) отраслевых лидеров.
PS. Ах да, в школе была «черепашка» лого — для рисования. Очень теплые воспоминания.
Не пользы для, а хохмы ради:
Как дошкольника научить лямбда исчислению? Alligator Eggs! worrydream.com/AlligatorEggs/
Во-первых у меня большая просьба: если вы знаете программы, которые могут заинтересовать детей

Возможно, вы это уже читали, но на всякий случай: есть неплохая книжка М.Мозговой «Занимательное программирование», ее легко найти в Интернете.
Эх, прочитать бы ваши комментарии тогда, когда я находился в самом начале пути программиста и не знал, куда деться! :(
Прочитал топик, вспомнил школьные годы :)
Моим учителям цены не было, начинали с Кенгурёнка:

image

В этой среде программирования два режима работы: командный и программный. В командном режиме все команды выполняются сразу, а в программном режиме — после команды Пуск.

Кенгурёнок очень хорош для понимания ветвления.

Помню, я в школе написал программу на бейсике-укнц, которая отображала определение случайно загаданного слова, а пользователь пытался по буквам угадать. Если букву не угадывал, рисовалась часть виселицы. В итоге, или слово угадаешь, или тебя повесят. Т.е. этакий совмещенный «Поле-Чудес», модный в то время, и детской игры «Виселица», в которую мы с сестрой играли. Там была база слов и их определений, была обработка введенных символов, было рисование графических примитивов (кружок, линия). Говорят, эта программа потом ходила по школам нашего городка как учебное пособие :)

Дома я написал уже спектрумовском бейсике игру-стрелялку. Внизу экрана влево-вправо двигаешь плаформу (прямоугольник) с пушкой стреляющей вверх по нажатию пробела, а сверху из случайных позиций выезжают вражеские корабли, у меня это были просто квадратики, к-е идут вниз. Нужно поставить платформу напротив и расстрелять корабль. Если три корабля прорвались — проиграл. Ну и вроде всё это ускорялось постепенно. Нужно настрелять как можно больше кораблей. Здесь хорошо изучать перерисовку графических элементов, эмитирующих движение платформы, корабля, снаряда; просчет траекторий, замкнутый цикл в реальном времени, задержки, граничные условия.
Что-то я еще там писал… но сейчас уже не вспомню, это были 1992-1995 года…

Короче, имхо, школьникам нужно давать задания, которые популярны в данную эпоху. Ну какие передачи по телику смотрят, во дворе во что играют, в какие игры рубятся. Трансформеры там, война русских с американцами, птицами в cвиней стрелять :) вобщем то, что модно, молодёжно, современно. Может с ними стоит поговорить, на чём они залипают. Их можно этим подкупить, заинтересовать. У каждого времени свои герои.
В качестве источника для идей проектов можно использовать книгу Шеня «Игры и стратегии с точки зрения математики».
А вот я бы настойчиво рекомендовал для обучения использовать не экзотические, а реальные промышленные инструменты.
Есть бесплатная версия Visual Studio Express.
И есть даже горизонт для развития — Team Foundation Server Express (или Team Foundation Service в интернете) для обучения командному взаимодействию.
Идея отличная, моё уважение, коллега! По поводу мини-игр, которые были бы интересны детям и полезны при обучении: вот парочка, использованных мной при обучении программированию. Их не сложно будет написать и самим детям, что несомненно большой плюс.
Довольно простенькая мини-игра — тот же однорукий бандит: таймер, 3 edit-а, кнопка по нажатию на которую поочерёдно перестаёт обновляться значение в edit-ах (при первом нажатии очки уменьшаются на 1), когда все остановлены — начисляются очки за 3 одинаковые цифры. Можно расширить задание, добавив уровни сложности — скорость вызова таймера.
Ещё одна не сложная мини-игра: Быки и коровы.
Также можно расширить задание с игрой угадай-ка: добавить варианты ответа «горячо-тепло-холодно» используя CASE и уровень сложности — количество попыток и разрядность числа.
Да, ещё можно раскурочить анимированную гифку с прозрачностью и создать простейший screen mate с анимацией по таймеру.
По мне, так лучше всё-таки начинать с чего-то более низкого и алгоритмического. Скорее всего тем, кто начал заниматься только из-за графической приманки, будет болезненно осознавать, что кнопочки и формочки это не главное. Если школьнику скучно думать, то и после того как он позанимается расставанием кнопочек по формочкам всё ещё ему будет скучно думать, а это самое главное в программировании.

Зря вы считаете, что прямо-таки очень мало школьников, которые хотят заниматься алгоритмикой и, вообще, думать, решать задачки. Вот, например, в Летнию Компьютерную Школу каждый год с России съезжается 400-500 школьников (да ещё и с конкурсом, и оплатой), чтобы кодить там решения всяких задачек и слушать лекции, спецкурсы. Вот примерная программа (D — самая слабая, A — самая сильная параллель). И, скажу вам, подавляющие большинство отзывов, в том числе и мой, крайне положительны по отношению к такой форме обучения и вообще, материалу.
В Санкт-Петербурге и Москве точно, но и в других городах, наверно, тоже, есть довольно много кружков такого же плана.
Все-таки, ЛКШ это для тех, кто постарше. С 7-8 класса и дальше можно уже заинтересовать алгоритмическими задачами. И мне кажется, именно на это и стоит делать упор в этом возрасте — ибо дальше это больше пригодится, чем формочки. А вот для тех, кто помладше, с формочками будет проще освоить азы — те же ifы, арифметику и т.п. А на циклах и сортировках можно в консоль уходить.
Спасибо за статью и за комментарии, у самого ребенку 12 лет будет. думаю с чего начать обучение программированию…
думаю начинать стоит с базовых вещей типа блок-схемы алгоритмы. А язык программирования значения не играет.
да и хочу raspberri pi для этого прикупить.
Как не странно, без блок-схем можно совсем обойтись, но это не важно.

с 12-ти, мне кажется, вот: isocode.ru/
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.