Меня зовут Ростислав, вот уже семь лет я веду кружки по программированию для школьников 7-10 классов. Последние несколько лет я вел курсы по С++ в лаборатории робототехники Политехнического музея и ЦМИТе «Геккон клуб», а основная моя основная работа — это веб-разработка и разработка мобильных приложений. Интересней всего мне работать с медицинскими сервисами.

В этой статье я хочу порассуждать, как люди становятся крутыми специалистами в той или иной области, и каким образом на это влияет дополнительное внешкольное образование. Как строить учебные программы и какой язык выбрать для обучения? Что такое нужно делать с детьми, чтобы из них вырастали крутые мотивированные специалисты?

В ИТ эта проблема особенно актуальна — хороших программистов на рынке не хватает, зато очень много недоквалифицированных людей, которые никогда спецами не станут — просто потому, что у них нет к этому страсти.

Для начала стоит вспомнить, как я сам до этого дошел. Например, я точно помню, что выбор школы в пятом классе был отчасти обусловлен вкусной ромовой бабой в буфете, а в этой самой школе перед уроком английского, в далеком 2006-ом, в класс вбегает мой достаточно маргинальный одноклассник с криком «ребята, я сделал сайт нашего класса на MyLivePage! Записывайте адрес!». Это было настоящим открытием — оказывается, так можно, и это совершенно бесплатно. Тогда я решил сделать свой сайт и, конечно, про компьютеры. Я покупал компьютерные журналы и переписывал из них интересные новости, загружал интересный софт. На сайт заходили мои одноклассники, кто-то что-то комментил. Это было восхитительно! А затем нужно было разместить информер от яндекса, оказалось что это вообще не тривиально — нужно копаться в куче непонятного кода. Я покопавшись, конечно, ткнул его на нужное место, но решил, что с кодом надо бы разобраться. Сказано — сделано! Солнечным зимним вечером я зашел в книжный и купил на накопленные деньги свой первый учебник по HTML.

Спустя пару недель обучения стало понятно, что HTML — это круто, но вот чем обрабатывать формы — совершенно непонятно, но все говорят про какой-то PHP. Базовые вещи получалось делать по книжке, но вот ООП мне тогда не поддался и я решил пойти на курсы.

Я выбрал курс по С++ в “Школе программирования” в ДНТТМ. И вот это был по настоящему поворотный момент. Я оказался в кругу людей со схожими интересами, у меня сразу появилось много новых друзей. Во-первых, стало понятно, что я реально что-то могу, а во-вторых, куда стремиться дальше. Немалую роль сыграла система командных проектов, когда надо было сначала описать ТЗ, разделить работу, а затем регулярно отчитываться о работе. Мы были словно небольшая ИТ компания. А еще мне очень понравилась стажерская программа — благодаря ей я сам в итоге стал преподавателем.

Я поговорил с некоторыми своими знакомыми и учениками и услышал очень похожие истории. Например, такую мне рассказал Леван Квирквелия, сейчас ещё школьник, разработчик популярного мобильного приложения «МРКО — независимый электронный дневник», стабильно удерживающего первую строчку рейтинга AppStore и Play Market:
Во втором классе, когда я спросил учительницу информатики «как сделать сайт?», она сказала: HTML. С этим странным словом я пошел домой, а совсем скоро принял ужасное решение — пошел в книжный магазин. Книги я не любил, да и сейчас не люблю, поэтому выбрал самую тонкую книгу, на обложке которой было это слово, — «HTML и CSS для создания Web-страниц» Э. Кастро. Круто звучит да? Дома я скачал нужные программы, попробовал, поигрался. Свой первый сайт, который был выпущен в «продакшн», я сделал на прекрасном Narod.ru, («Яндекс», без тебя не было бы меня).

Дальше пошло развитие. Я постоянно хотел изучить все больше, хотел сделать свой сайт круче, хотел быть нужным, хотел зарабатывать на этом, я хотел быть молодцом. Дальше я развивался как программист: два года искал себя, изучал Java, C++. Еще за два года было много чего создано. Я сделал огромное количество проектов, которые не «выстрелили» (ничего тогда не раскручивал, не было денег), заработал первые 100?тысяч на заказе сайта от родственника. В итоге я нашел себя. Я понял, что больше всего на свете мне нравится:

  • делать крутые проекты, связанные с ИТ;
  • делать полезное людям;
  • быть молодцом (расшифрую: мой продукт лучший, все должны офигевать от него).

А Сева Жидков, девятиклассник, победитель олимпиады НТИ, хакатона Вконтакте 2016 и сотрудник Mail.ru (а еще создатель стартапов LeonardBot и Sheldon.ai) рассказывает:
Во втором классе я пошел на компьютерный кружок в местном университете, там были лого-миры или что-то такое. Потом, через пару лет, я хотел зарабатывать деньги и пытался научиться верстке и всему такому, так что деньги тоже были одной из изначальных мотиваций. Я загуглил “Как создать сайт” и выучил HTML. Первый сайт был для своего класса, хотелось тогда как-то выделиться, «стать крутым»

Прослушав множество таких историй, можно сделать определенные выводы по поводу того, как строить успешный образовательный процесс для школьников в ИТ:

  1. Движущей силой для развития чаще всего является возможность реализовать собственный проект, который как можно раньше показать друзьям (а лучше — всему интернету) или заработать на нем какие-то деньги. А значит такие проекты нужно делать как можно раньше. Чисто учебные проекты нужно стараться стилизовать под реальные.

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

  3. Материал усваивается хорошо, когда он вызывает сильный эмоциональный отклик. А значит если задача не проектная, она должна быть хотя бы веселой и странной, а лучше — очень веселой и очень странной. Сторителлинг про Лунтика, летающие «бугурты», в бою все средства хороши. Главная задача — не превратить процесс в скучное, противное занятие. Я видел множество людей, которые в течение многих лет в с начальной школы учились играть на музыкальном инструменте, но окончив обучение ни разу не брали его в руки — это самое страшное, что может с процессом обучения.

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

При выборе технологии я обычно руководствуюсь следующими критериями:

  1. Возможность решать интересные задачи. Многие преподаватели сходятся во мнении, что лучше всего показывать базовые алгоритмы на рисовании. Рисование — это первый шаг к собственной игре, а собственная игра для школьника — это очень увлекательно. Значит идеальный язык для изучения — это язык в котором можно рисовать как можно раньше.

  2. Простота и возможность строго последовательного изложения. Язык должен быть понятным, а мир программирования для ребенка в каждый момент времени должен иметь осязаемые границы. С одной стороны на каждом этапе должны быть видны перспективы в обучении — следующие шаги, но при этом арсенал должен на 90% состоять из понятных и знакомые инструментов. Написать поэму и так сложно, но написать ее на языке, где значение половины слов непонятно — скорее всего невозможно.

  3. Применимость в реальной жизни. Технология или хотя бы результат работы с ней должны быть «взрослыми». Детям хочется работать на равных со взрослыми, чувствовать свою значимость: настоящие сайты, настоящие приложения, и чтобы можно было прочитать программу собеседования на реальную должность и сказать «о, вот это я знаю! Осталось только прочитать остальное!».

Большинство современных преподавателей сходится во мнении, что идеальный первый «настоящий язык» (если не брать в рассмотрение «игрушечные» Scratch или школьный лого) — это Python. И Python правда крут! С одной стороны читаемый синтаксис, а с другой можно делать реальные проекты — хоть веб-сервисы, хоть телеграмм-ботов. Но лично с моей точки зрения Python — это далеко не идеальный выбор именно первого языка. Чтобы рисовать скорее всего понадобится PyGame, а подключение сторонних библиотек приводит к появлению в коде сложно объяснимых на этом этапе конструкций — объектов и модулей. Python — это очень мощный и удобный язык, он прекрасно соответствует первому и третьему критерию, но, кажется, не соответствует второму.

В свое время я прошел годовой курс по С++, и считаю, что это было очень правильным решением. Настолько правильным, что теперь я сам веду такой курс (программа курса на GitHub — первая и вторая часть). Плюсы — это почти латынь в программировании, зная плюсы, можно очень быстро понять любой си-подобный язык (а значит — вообще почти любой). К тому же плюсы выстраивают очень четкое понимание программирования от низкоуровневых аспектов до ООП. Причем каждый алгоритм и структуру данных можно сначала “изобрести” самому, реализовать, а только потом уже узнать о реализации из STL и использовать. Методически это очень правильно. Однако многие преподаватели считают (и они совершенно правы), что давать плюсы как первый язык — это садизм. Плюсы — это по-настоящему «взрослая технология», при изучении очень легко последовательно давать материал так, чтобы в коде отсутствовали неизвестные конструкции, но вот с рисованием (да и вообще с красивыми задачами) тут явные проблемы, как ни старайся сделать задачи веселыми. Либо надо использовать сторонние учебные библиотеки (а это не соответствует третьему критерию), либо ждать Qt — а это, извините, 36ое занятие в спокойном темпе работы. Выживают только самые стойкие. Значит плюсы на первом этапе отпадают, надо давать их позже.

Есть еще более классические варианты — Basic, Pascal — но все это в наши дни уже не используется на практике. А значит тоже отпадает по третьему критерию.



Так что же выбрать? На первом этапе нужно с одной стороны что-то яркое и несложное, а с другой стороны похожее на «взрослые языки» и со «взрослыми» возможностями. И по моему опыту — это Microsoft SmallBasic (программа курса на GitHub). Почему именно он?

  1. Ограниченное количество конструкций, каждая из которых видна при пролистывании.
  2. Очень дружественная среда, автоматически показывается справка на русском языке.
  3. Рисовать и начинать делать собственную игру можно начиная с первого занятия.
  4. Все основные конструкции — условия, циклы, переменные, функции на своих местах и работают как надо. Массивы тоже на своем месте…ну почти.

А главное — этот язык просто ужасен! Все переменные — глобальные, весь код в одном файле, из за чего в определенный момент работы над проектом код становится совершенно неуправляемым и продолжать разработку невозможно… И в этот момент мы мягко намекаем, что пора переходить на питон или плюсы. Алгоритмическая база дана, цели дальнейшего обучения теперь понятны, а значит есть мотивация идти вперед!

Как выстроить курс наиболее оптимально? Как можно быстрее переходить к процессу построения игры. Обычно на первом занятии я даю поиграться с консолью и черепахой, чтобы усвоится с переменными и понятием алгоритма в принципе. Уже на третьем занятии можно давать рисование “абстрактных картин”, а на четвертом — переходить к циклам, которыми можно рисовать более сложные изображения. А дальше уже анимации, GUI, файлы и проектная работа — продумывание и реализация собственной игры. За 12 занятий собственная игра будет готова!

Под конец станет ясно, что для реализации всех планов уже не хватает Smallbasic’а, и в этот момент рассказываем про более сложные и «правильные» языки, мотивируем ребят развиваться дальше, чтобы продолжить разработку.



В каком возрасте можно давать SmallBasic? По моему опыту — с шестого класса. Возможно, можно и раньше, но тогда страдает непрерывность обучения — больше, чем на год SmallBasic’а не хватит, а C++ по-моему опыту точно не стоит рассказывать раньше седьмого класса. Есть успешные шестиклассники, но в среднем идет очень туго.



А вот после базовой подготовки на С++ можно развивать в любом направлении: можно за час выучить Python и пилить прикладные проекты, а можно уйти в Java и мобильную разработку. С такой подготовкой в арсенале любая технология будет доступной.



Кстати, именно по такой схеме я действую на курсах по программированию для начинающих ЦМИТ “Геккон клуб”. Этим летом мы запускаем насыщенный интенсив по SmallBasic для ребят, окончивших шестой класс.
На чем начинать обучение программированию?

Проголосовало 180 человек. Воздержалось 35 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

Комментарии (54)


  1. hddmasters
    20.04.2017 02:33
    -1

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


    1. Error1024
      20.04.2017 05:54

      Я начинал с Sinclair Basic и считаю что лучше ничего не придумать, включил компьютер и он готов к программированию, даже не так — Бейсик в ПЗУ буквально заставлял тебя создавать.


      1. hddmasters
        20.04.2017 06:27

        Если говорить о ZX-Spectrum с его Z-80, то там, если что-то и желалось написать, то ничего особо путного, кроме как на ассемблере и не было возможности написать в силу весьма низкого быстродействия. Интерпретатор бейсика содержащийся в ПЗУ не позволял создать мало-мальски серьезное приложение даже по меркам тех времен. О чем собственно и свидетельствует тот факт, что 99% написанного ПО для ZX-Spectrum было исключительно на ассемблере.

        насколько помнится в 64КБ (ROM+RAM) версии ZX-Spectrum
        #0-#3FFF — область ПЗУ
        #4000-#57FF — экранное ОЗУ
        #5800-#5AFF — область атрибутов экрана
        #5B00-#FFFF — ОЗУ

        При такой организации и объеме памяти, а также скорости работы интерпретатора на бейсике ZX-Spectrum можно осваивать разве что крошечные задачки позволяющие понять отдельно взятые алгоритмы, но не написание какого-либо жизнеспособного ПО.

        P.S. и если уже хотелось творить на ZX-Spectrum, то приходилось открывать книжку с описанием модели памяти и ассемблерных мнемоник Z-80 и использовать GENS и MONS, а позднее TASM и STS.


        1. kx13
          20.04.2017 09:20
          +1

          на бейсике ZX-Spectrum можно осваивать разве что крошечные задачки позволяющие понять отдельно взятые алгоритмы, но не написание какого-либо жизнеспособного ПО.

          На большее он, вроде бы, и не претендовал. Для автоматизации каких-нибудь рутинных расчетов и изучению основ этот бейски вполне подходил.


          С помощью встроенного бейсика очень быстро можно понять нравится ли тебе программировать или нет.


          Если тебе нравится программировать переходишь на ассемблер и реализуешь там более серьезные задачи.
          А если хочется просто играть, набрал заветные: LOAD "", загрузил игру и играй себе.


        1. Wano987
          20.04.2017 10:36

          Хорош кормить людей копипастой.
          Ставь эмулятор, качай игры, нажимай shift+space — удивишься сколько игр написано на S-Basic 48k.
          Тока эта… там может стоять защита от взлома, как например в футбольном менеджере (border 0: ink 0: paper 0 — самое простое, тебя ещё и послать могут).

          Но да, графон как в Крузисе не получится.


          1. hddmasters
            20.04.2017 11:52

            А где копипаста?

            Ставь эмулятор, качай игры, нажимай shift+space — удивишься сколько игр написано на S-Basic 48k.

            За время пользования ZX-Spectrum (ПЭВМ Байт, сначала 48Кб, потом 128кб с TR-DOS и дисководом) с 1992-1999 увидел только то, что свыше 99% игр написаны на ассемблере. В свое время многие из них были перелопачены с помощью указанных выше отладчиков, ради добавления чит мода.


      1. roctbb
        20.04.2017 09:53
        -1

        Ну, кстати, в сегодняшних реалиях подобную штуку можно провернуть, как курс «интернет-вещей» на ардуино или SMT32 — будет «стильно, можно, молодежно».


    1. roctbb
      20.04.2017 09:55

      А в каком возрасте тогда его давать?


      1. hddmasters
        20.04.2017 10:15
        -1

        Если говорить о своем личном опыте, то ассемблер для КР1801-ВМ1 (ПЭВМ «БК0010-01») я начал осваивать в 10,5 лет самостоятельно. Ассемблер для Z-80 (ПЭВМ «Байт») в 12 лет. Без интернета и при минимальном объеме литературы. Полагаю при должном интересе к теме его способен понять любой ребенок. Другое дело, если интереса у ребенка нет. Тогда все объяснения пойдут прахом.


    1. VolCh
      20.04.2017 10:32
      +2

      Не согласен. Если бы я начинал с ассемблера, то вряд ли "заболел" программированием. А так Бэйсик-Микрон как первый язык (МК-61 не считаем для ясности), а Ассемблер i8080 (КР580ВМ80А) когда Бэйсик стал тесным, но навыки алгоритмизации уже появились.


    1. michael_vostrikov
      20.04.2017 12:04
      +2

      У нас даже в университете обучение начинали с C++/Pascal, а вы детям с ассемблера начинать предлагаете)


      1. hddmasters
        20.04.2017 12:16
        -1

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


        1. Error1024
          21.04.2017 02:04
          +1

          Ну меня бы к примеру не было, одно дело когда ты увидел демку, решил попробовать таже, и спустя вечер ты бодро мигаешь бордюром испытывая непередаваемою радость от «открытия», другое когда ты потыкал в ассемблер и спустя вечер смог или не смог тупо «Hello Word» из книги набрать, не поняв при этом ничего.
          Мне до какого-то времени казалось что компьютер именно так и работает внутри на Бейсике, но этого было достаточно, я понял основы алгоритмов, последовательного выполнения и т.д. а потом уже стал наращивать знания в ширь и глубину.


    1. OnYourLips
      20.04.2017 13:01
      +3

      Нельзя с него начинать: он на корню убивает всю мотивацию развиваться: человек не получает положительной отдачи после каждого урока в виде работающих программ.
      Если человек не мотивирован, то его производительность сильно падает.


      1. VolCh
        20.04.2017 13:49
        +1

        Именно. Банальный helloworld для консоли написать может ещё и можно за одно занятие, но чуть сложнее что — тупо даже набить с листа, доски или экрана не успеешь за 40-60 минут.


    1. potan
      21.04.2017 17:57

      Ассемблер дает слишком поверхностное знание архитектуры компьютера. Современная архитектура слишком сложная. Надо понимать и микроархитектуру (конвеер, кеш), и потребности ОС (защищенный режим, страничная память). Если с этим не разобраться, от изучения ассемблера возникнет только иллюзия понимания, от которой вреда больше, чем пользы.
      В SICP основы архитектуры процессоров хорошо описывают в конце курса, опираясь на изученный в начале язык высокого уровня. Такой подход дает лучшее понимание.


  1. Error1024
    20.04.2017 05:46

    Плюсы — это по-настоящему «взрослая технология», при изучении очень легко последовательно давать материал так, чтобы в коде отсутствовали неизвестные конструкции, но вот с рисованием (да и вообще с красивыми задачами) тут явные проблемы, как ни старайся сделать задачи веселыми. Либо надо использовать сторонние учебные библиотеки (а это не соответствует третьему критерию), либо ждать Qt — а это, извините, 36ое занятие в спокойном темпе работы. Выживают только самые стойкие. Значит плюсы на первом этапе отпадают, надо давать их позже.

    Есть еще более классические варианты — Basic, Pascal — но все это в наши дни уже не используется на практике. А значит тоже отпадает по третьему критерию.


    Delphi(Object Pascal)!
    Есть бесплатная Starter версия, GUI, графика и т.д. доступны прямо из коробки. Используется на практике.
    Есть также Open Source Lazarus, у которого кроме всего и русский интерфейс есть из коробки.


  1. AlexZaharow
    20.04.2017 06:24
    +1

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


    1. ru_vlad
      20.04.2017 08:02

      Соглашусь!
      Программист впрочем как и любой хороший специалист учиться всю жизнь!
      Но все же считаю программирование — это образ жизни, в некотором смысле философия.


  1. lzb_j77
    20.04.2017 07:03
    +1

    Я начинал с Бейсика на Спектруме. Годик-два потыкался, потом сразу на ассемблер перешёл, году эдак в 1993-ем. Вполне хороший язык программирования, я считаю :) Зато теперь понимаю, как работает компьютер. А если начинать сразу с QT/PHP/Perl/etc, тогда и начинается говнокод.


  1. Vjatcheslav3345
    20.04.2017 07:14
    +1

    Почему то не упоминается Смолток.
    Просто сейчас ситуация в программировании такая — нет языка, на котором можно было бы сначала хорошо учиться а потом работать. Поэтому, если нужна "латынь" для обучения "правильному" программированию — используется Ada или Компонентный Паскаль, Смолток, OCaml, ML.
    Если есть цель в том, чтобы научить применять на практике навыки программирования — Geogebra, Maxima, R, Haskell. Только нужна кооперация с учителями математики и геометрии — чтобы знать чему они обучают и синхронно с ними показывать программные решения для их математических и геометрических задач.


  1. MKMatriX
    20.04.2017 09:44

    Если действительно не хочется заниматься садизмом, то JS. Графика на canvas позволит сделать хоть 3d игрушку. Все кейсы отлично гуглятся даже без знания английского. И как бы не хотелось этого признавать, но это взрослый язык. Отдельным плюсом можно отметить webasembly, который позволит написать свой язык, со своим компилятором.


    1. roctbb
      20.04.2017 10:19

      У меня коллега тоже так считает, но у меня пока есть сомнения. В этом году мы как раз хотим попробовать сделать такой курс, посмотрим, что получится. Схема получается такая: HTML&CSS (2 недели) -> Bootstrap (1 неделя) -> JS -> Node.

      Но с JS у меня возникает вопрос на первой стадии: как дать базовую алгоритмику? Работа в консоли будет выглядеть странновато для ребенка, а манипуляции с DOM — это, вообще говоря, отдельная тема. Но, видимо, надо будет все таки стараться аккуратно сразу давать DOM.


      1. VolCh
        20.04.2017 10:38

        Может что-то типа React? При базовых знаниях HTML&CSS можно начинать алгоритмику без изучения DOM, но в с выводом результатов в знакомой парадигме тегов, свойств и т. п…


        1. roctbb
          20.04.2017 10:43

          Т.е. использовать React для печати так же, как и, например, в питоне? Интересная идея, спасибо, я подумаю об этом.


          1. VolCh
            20.04.2017 10:56

            Да. Только с тем различием, что печать не в консоль, а в окно браузера с использование знакомых технологий и парадигм, а не новых из PyGame и ко. Причём легко обеспечить преемственность в рамках одного проекта — сначала на HTML+CSS создаётся статический прототип какого-то приложения, а потом он натягивается на React (а можно сразу в index.html созданном create-react-app например писать статику) и начинается его динамизация.


      1. MKMatriX
        20.04.2017 11:26
        +1

        Я бы сказал что html и css как раз лучше опустить, оставив лишь часть необходимую для совсем элементарных вещей.

        И в плане алгоритмов можно начать (после базы) c алгоритма дейкстры https://jsfiddle.net/MKMatriX/wm1dzqt1/, после можно усилить его до чего-то такого https://jsfiddle.net/MKMatriX/c26fh2ky/59/

        Из бонусов тут как раз возможность быстро визуализировать алгоритмы.
        Еще js позволяет использовать ООП и ФП, что тоже плюс, причем в искусственных условиях это весьма приятно.

        А html и css пусть идут по желанию, отдельно.

        ПС https://tproger.ru/translations/first-person-engine-265-lines/ еще один довод за js.


    1. Error1024
      21.04.2017 02:08

      Мое имхо — не стоит начинать с js и web, в них внутри к сожалению кучу неясных новичку костылей, и просто странностей. обьяснить новичку let/var и их различие, уже сложно. "=", "==", "===" — тоже не придают ясности.


  1. gunGarave
    20.04.2017 09:44
    +3

    Basic лучше не брать в качестве первого языка, как и какой-нибудь Python. Они слишком «грязно» реализуют парадигмы. Будет потом у ребёнка извращенное понимание…


    1. roctbb
      20.04.2017 09:47
      +1

      В этом и вопрос, что лучше — дать изначально правильное понимание парадигмы или сначала мотивировать чем то простым, а потом уже уйти в серьезное обучение.


      1. gunGarave
        20.04.2017 11:15
        +1

        Выскажу своё субъективное мнение, что надо давать сразу правильное, потом будет сложнее переучиваться. А мотивация… она у каждого своя. Если человеку интересны ИТ и программирование — он будет осваивать (по себе знаю, всю жихнь учился по книгам/документации, работаю программистом всю жизнь, хотя образование — экономист-математик).
        Вот на «неправильной» парадигме учат, а потом студет выходит и не знает простейших вещей. Для HL, системщины или просто для работы в большом проекте (который потом надо поддерживать) — понимание теории очень важно. Знаю по своему горькому опыту.


    1. roctbb
      20.04.2017 10:10

      Есть ощущение, что во втором случае ученик загрустит и быстро это занятие бросит. У меня есть опыт как плюсов с нуля, так и сначала SmallBasic, а потом уже плюсов.

      В стартовой группе по плюсам к зачету отваливается гораздо больше детей, и я бы не сказал, что у ребят, которые начали со смолбейсика, а потом перешли на плюсы, есть какие то проблемы понимаем. Зато во второй группе появилась мотивация к самообучению, ребята вне кружка начали сами смотреть что-то новое: говоришь на втором занятии, что GUI у нас будет через пару недель, а на следующем занятии оказывается, что несколько человек уже сами разобрались. В стартовой группе по плюсам мотивировать ребят что-то почитать вперед или глубже обычно не получается.


      1. gunGarave
        20.04.2017 11:27
        +1

        Есть ощущение, что во втором случае ученик загрустит и быстро это занятие бросит.

        Может тогда ему и не стоит быть программистом? Я начинал с класики — паскаль/ам/си. Они требуют большой внимательности и понимания того, как и что работает. Но при этом, я не могу их назвать сложными. Как и работа с тем же Pure C и памятью скучной. Тут скорее зависит от того, что большинство людей просто не могут получить «фан» от работы и бегут в профессию «потомучтамодна!».
        У меня есть опыт как плюсов с нуля, так и сначала SmallBasic, а потом уже плюсов.

        У плюсов есть тоже разный уровень погружения. Базовый — не сильно сложнее какого-нибудь другого языка высокого уровня. Разве что семантика SmallBasic проще.
        В стартовой группе по плюсам к зачету отваливается гораздо больше детей, и я бы не сказал, что у ребят, которые начали со смолбейсика, а потом перешли на плюсы, есть какие то проблемы понимаем.

        Простите за грубость, но те, кто отвалились — им лучше выбрать что-то другое. Мы ведь не о домашнем проекте говорим (где выбирает каждый что хочет), а про образовательный процесс. Если человек не способен понять С++ или ему не интересно само по себе программирование — то может всё же лучше тратить время на тех, кому это по правде интересно?
        Ужасно когда приходит человек, занимавшийся рекламой ближайшие пять лет и решает внезапно, что он программист пройдя пару туторов по тому же JS и считает себя сотрудником на равне какому-нибудь специаилсту с 15+ стажа и опытом написания на Си и Лиспах, пониманием матана и т.п. Сам свидетель такого — это очень печально.
        Зато во второй группе появилась мотивация к самообучению, ребята вне кружка начали сами смотреть что-то новое: говоришь на втором занятии, что GUI у нас будет через пару недель, а на следующем занятии оказывается, что несколько человек уже сами разобрались. В стартовой группе по плюсам мотивировать ребят что-то почитать вперед или глубже обычно не получается.

        Простите за грубость — тут надо смотреть на материал, который вы даете и как его преподносите. В базовых знаниях по С++ нет ничего непостижимого, даже для ребенка 7 класса (сам я его начал тыкать вообще в классе 4-ом и даже тогда он ен казался особо сложным). Тут скорее качество самого материала проблема — либо в нем есть белые пятна (дети чего-то не понимают, т.к. им про это не объяснили), либо язык объяснений слишком сложный для них. Ну или есть вариант — программирование просто не для большинства, которое у вас в группах. У них гуманитарный склад ума и он не способны воспринимать что-то точное. Такое тоже бывает, и тут нет ничего страшного. Просто определенные языки и технологии в этом случае для человека закрыты


        1. roctbb
          20.04.2017 12:28

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


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


          1. gunGarave
            28.04.2017 06:40

            Идея у вас очень хорошая. Можно поинтересоваться — а каковы мотивы? Просто интересно.

            По поводу детей из третьей группы… Я бы сказал, что это утопия. Хорошими программистами становятся только настоящие гики, которые готовы быть погруженными в специальность с головой. Для которых это главный интерес, хобби, работа… чуть ил не смысл жизни в написании кода =), а таких как правило не нужно привлекать в школе. Первая и третья группы, в большинстве случаев не приносят никакой пользы своей сфере, они просто делают то, что умеют. Это что-то сродни труду робота. Один мой друг работает программистом, как раз из третьей группы. Знаете почему он пишет код? Он больше ничего не умеет. Его увлекли, вот так же. Но профессия ему мало интересна. И возьмите теперь меня — я из первой группы. Даже получив образование экономиста я продолжаю пистаь код. Я ловлю кайф от этого, мне это нравится. А вот он — несчастен


  1. fastwit
    20.04.2017 11:28
    +3

    Во-первых, спасибо, что занимаетесь обучением программированию школьников и вам это не безразлично. Во-вторых, не столь важно какой язык программирования будет первым. Гораздо важнее — личность преподавателя и подход к процессу обучения. Ниже поясню немного свой тезис.
    Вы, наверное, заметили что некоторые хабровчане в комментариях указали что первым языком для них был либо ассемблер, либо бейсик. И сейчас они успешные профессиональные разработчики. И может показаться, что это заслуга платформ и языков. Однако, это совсем не так. Ограничения и мотивация — сделали все дело. Если бы компьютеры нашей молодости имели только один язык, такой как brainfuck, мы бы сейчас писали о том, что мы начинали с него и было все хорошо. Ограничения — это данность. А вот мотивацию должен обеспечить преподаватель.
    Мой друг в молодости вел вводный курс по программированию для школьников. Это было в небольшом провинциальном городке, поэтому отчислять половину группы отстающих — не вариант, а также занимать детей компьютерными игрушками. Поэтому он объяснял некоторые принципы программирования с помощью цветных бумажных коробок, картона и шариков для пинг-понга. Я видел только одно занятие, где дети с коробочками в руках симулировали какой-то алгоритм. После таких занятий отстающие дети обычно подтягивались.


    1. VolCh
      20.04.2017 11:36

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

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


    1. gunGarave
      20.04.2017 11:53

      А вот мотивацию должен обеспечить преподаватель.

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

      И, по моему скромному мнению, именно ограничения подталкивают развиваться. Я вот в своё время любил Heretic и хотел сделать подобную игру, но с элементами РПГ. И начал читать, изучать… Первые попытки работать с графикой были не удачными — дикие тормоза, переполнение стека… И я начал читать, почему так, изучать как работает то, что я делаю на уровне железа, какие алгоритмы удачнее с точки зрения математики…


      1. fastwit
        20.04.2017 14:13

        Я хотел бы предостеречь вас от сопоставления себя с другими. Делить людей на избранных и остальных — не дело. Лично я никогда не имел ничего против белочек и орехов, шуток и прибауток. Собственно в этом и прелесть математики лично для меня. Когда ты можешь взять какой-то даже не серьезный контекст и перевести это в универсальный язык, чтобы найти решение. Собственно, в программировании также как и в математике никто не мешает заменить X и Y на белку и зайца, или наоборот. И это большая разница — думать о детях, что они глупее и понимать, что им пока не хватает аналогий и абстракций.
        Когда я думаю о мотивации детей к познанию, то всегда вспоминаю, как Фейнман рассказывал о своем отце. Преподаватели — это взрослые в жизни ребенка, которые практически на равне с родителями влияют на него.


        1. gunGarave
          28.04.2017 11:41

          Я хотел бы предостеречь вас от сопоставления себя с другими.

          Любой опыт субъективен. Я высказал ИМХО. Сравнивать себя с другими нужно, хотя бы чтобы иметь какую-то константу, от корторой можно отталкивать свои рассуждения.
          Делить людей на избранных и остальных — не дело.

          ИМХО, наоборот. Если я не биолог по натуре (мне это не интересно, противно, скучно) — нефиг меня пихать в медики. Только пациентов убью. С программированием — та же штука.
          Лично я никогда не имел ничего против белочек и орехов, шуток и прибауток.
          Собственно в этом и прелесть математики лично для меня. Когда ты можешь взять какой-то даже не серьезный контекст и перевести это в универсальный язык, чтобы найти решение.

          А я вот против, что и сказал выше. Сейчас же вы навязываете своё мнение мне, объект вашего сравнения — вы сами. Следовательно, сами не следуете своим же предостережениям и советам.
          Математика — сама по себе универсальный язык. Куда более абстрактно? Если мозг ребенка не может понимать абстрация — не надо его насиловать. Спортсмен, сантехник, рабочий завода — там от него будет больше толку. Если и там не сгодится — пусть танцует и поёт як попса.
          Собственно, в программировании также как и в математике никто не мешает заменить X и Y на белку и зайца, или наоборот.

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

          Смысл абстрации — отход от аналогий, чтобы они были не нужны. Пример — числа. Для того, чтобы понять что такое число — достаточно 1 аналогии и больше никогда не возвращаться к бабочкам, белочкам или паравозикам.
          Когда я думаю о мотивации детей к познанию, то всегда вспоминаю, как Фейнман рассказывал о своем отце. Преподаватели — это взрослые в жизни ребенка, которые практически на равне с родителями влияют на него.

          ИМХО в РФ они чаще отбивают желание учиться. Именно по их вине я н любил долгое время литературу. Спасибо дяде двоюродному, который дал почитать Саймака. Мотивация детей — это их заинтересованность. Почему-то взрослые считают, что ребенку интересны глупости, шалости и ограниченные развлечения. По сути сегодня детей по уровню интелекта расценивают как пьяного в дугу человека. Даже юмор для них похожий делают. Но это не правильно! Дети могут оценить гораздо более сложные вещи и освоить их — у них нет нашего закостенелого сознания и религиозной веры в парадигмы или догмы. Но это ИМХО


          1. fastwit
            28.04.2017 20:00

            Вы все мои слова переврали и перевернули. Затем вы отреклись от того, что делите людей на избранных (математиков) и всех остальных (биологов, сантехников и т.д.) и сами же себя опровергли дважды далее по тексту.
            Каким образом вы получили свою интерпретацию моего текста, которой вы возражаете мне не совсем понятно. Проверил текст на знакомых и коллегах, интерпретация совпала (согласен, что личное окружение — выборка не репрезентативная, но все же).
            Что касается детей, то во всем мире идет процесс возвращение математики (и физики) обратно в реальность при преподавании детям. Вы найдете массу видео от того же TED касательно этого вопроса.
            Я ни в коем разе не имею своей целью вас задеть. Просто разобраться.

            Смысл абстрации — отход от аналогий, чтобы они были не нужны. Пример — числа. Для того, чтобы понять что такое число — достаточно 1 аналогии...

            Вам не кажется это предложение противоречивым? Сначала вы пишите о том, что абстракция — это отход от аналогий, а следом, что аналогия хотя бы одна, но нужна.
            Человек так мыслит. Аналогиями. Или более точно, усвоенными паттернами. Лучше прочих усваиваются паттерны, которые мы усвоили при помощи различных способов восприятия (т.н. жизненный опыт). Благодаря тому, что пространственно в нашем мозгу паттерны пересекаются (отношение задействованных нейронов к паттернам — многие ко многим) мы можем создавать, выделять или воображать, некие абстракции. Но без аналогий их существовать не может.
            Ребенку действительно интересны глупости и шалости. Опыт моего окружения (возможно не репрезентативно) это подтверждает. И я не нахожу в этом ничего плохо. Вам будет интересно узнать о роли игры в развитии человека, а также во взрослой жизни. И то, что может показать глупостью, может быть в действительности эффективным способом обучения.


    1. gunGarave
      20.04.2017 11:59

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


    1. roctbb
      20.04.2017 12:12

      Я обычно использую кубики от лего :)


      Это продолжение все той же идеи — материал проще запоминается, когда он сопровождается яркими образами.


    1. fastwit
      20.04.2017 13:44
      +1

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


      1. VolCh
        20.04.2017 13:52

        А ограничения типа "писать будем на брэйнфаке" даст в среднем результаты хуже, чем даже на допотопном Бэйсике.


        1. fastwit
          20.04.2017 14:22

          Брейнфак — это не более чем гипербола. Но есть ли такая же существенная, как у бейсика с брейнфаком, разница между бейсиком, паскалем, питоном, джавой, C# и С++?


          1. VolCh
            20.04.2017 16:40

            Между бэйсиком и питоном небольшая, паскаль, джава, шарп — тоже близкие, C++ — отдельно.


      1. gunGarave
        28.04.2017 11:52

        Вы считаете, что дети все одного психотипа. И им всем интересна информатика. И им всем интересно быть в школе. И им не плевать на оценки. И что они все способны понять абстракции. И что у преподавателя и правда цель — обучение. Слишком много переменных и допущений. Корреляции нет в ваших техисах.

        Далее — мотивацию нельзя контролировать. Это бред школьных психологов. Ребенку либо интересно, либо нет. Кроме интереса, при отсутствии давящих факторов — нет. В их мире всё проще.


  1. pchelintsev_an
    20.04.2017 15:35
    +1

    А я рекомендую начинать с языка Python. На нём хорошо можно закрепить основы алгоритмизации без особых языковых заморочек, а потом переходить на C-подобные языки. Сейчас появилась возможность писать и запускать Python-программы на смартфонах и планшетах (для разных ОС). На мой взгляд, школьнику будет интересней написать и запустить свою первую программу на своём гаджете.

    image


  1. amaksr
    20.04.2017 18:18

    У меня один знакомый заставляет своих дочек 10 и 13 лет изучать Java, RUP, UML и прочий ентерпрайз. Требует от них понимания наследования, инкапсуляции и полиморфизма. Пока не ясно, какой будет результат. Но видимо могут быть разные пути как стать спецом в ИТ.


  1. serafims
    20.04.2017 21:27
    +1

    Программирование в этом возрасте — значит научить думать над алгоритмом, задачей, путями ее решения. Это будет полезно и тем, кто потом не будет программистом. Поэтому нет смысла учить сначала "прочему энтерпрайзу", ведь в школе сейчас задача всего дать понемногу, при этом программирование как раз то, что может а) потренировать мозги б) стать любопытным для дальнейшего изучения самостоятельно.
    К примеру, мы в школе изучали Pascal, но абстрактно, просто компилируя в консоль. Даже не собирая в exe. А реально интересно стало тогда, когда получилось сделать псевдографикой интерфейс, когда товарищ дал диск с Delphi… То есть нужно, чтобы было не сухое заучивание парадигм, а показать результат труда, с GUI это нагляднее и интереснее.


    1. serafims
      20.04.2017 21:31

      То есть надо оценить риски — всех научить глубокой теории — интересно будет 1% обучающихся, или всех научить базовым вещам, которые работают(!) и наглядно показывают смысл программирования — ожидается больше тех, кто заинтересуется. Мне кажется, второй путь ближе к целям школы.


      1. Error1024
        21.04.2017 02:12
        +1

        Глубокая телрия вместо интересной практики просто выкинет огромный процент потенциальных программистов.
        Могу сделать некую аналогию с тем что я в ВУЗах видел — в тех группах, где начинали с Паскаля к первому семестру и концу обучения было намного больше людей в «теме», тех кто не забил и все ещё учился программировать, а не дожить до получения диплома.
        Где с си сразу очень много людей посто «зарывались» в указателях, и прочих ненужных в начале вещах, им становилось непонятно, и от того не интересно.


  1. potan
    21.04.2017 17:11
    +1

    Я считаю, что начинать изучать программирование надо с языков Prolog или Haskell. Ни чего сложного в них нет (ну кроме того, что преподавателям лень разбираться), а умения мыслить математически строго, воспитываемого этими языками, современным программистам крайне не хватает.