Привет, Хабр! Сегодня я тебе расскажу историю о том, как я взял на себя ответственность за обучение программированию трех разных человек, которые казались абсолютно безнадежными и никто (даже их самые близкие родственники) в них не верил. Важно то, что каждый из них уже проявлял интерес к программированию раньше, но ни один из доступных методов обучения не давал результата. Сегодня эти люди свободно делают программы без моей помощи (работают над «проектами мечты»), а один из них даже устроился в хорошую IT-компанию.
В чем заключались проблемы каждого из учеников, как я их преодолевал и что они теперь из себя представляют – рассказываю в этой статье.
Как я пришел к надобности учить гуманитариев программированию
Я не могу себя назвать супер-программистом, явно не дотягиваю до великих мастеров, но за свои 12+ лет карьеры прошел через многое. Когда я работал в одной из Российских IT-компаний, мне доверили проводить тренинги для заказчиков, благодаря чему я почувствовал в себе интерес к обучению других людей, что продолжил делать на своих следующих местах работы.
Довольно быстро я загорелся наставничеством и начал обучать программированию знакомых молодых ребят. Самым важным правилом для меня было: брать «под крыло» только тех, кто уже хоть что-то умеет и проявляет реальный интерес к разработке, а не тех, которые кричат «Крута, пограмисты много зарабатывают, хочу так же».
«Если хочешь рассмешить Бога, расскажи ему о своих планах»: 2020 внес много корректировок в планы каждого. Онлайн школы начали появляться с такой скоростью, что очень быстро количество моих падаванов сократилось. А так как я уже не мог представить свою жизнь без наставничества, мне пришлось начать соглашаться учить тех, кто ничего не умеет и хочет «только срубить бабла и быстрее переехать за бугор». Примечательно, что «первая тройка игроков» появилась в моей жизни почти одновременно, тем самым сделав мне вызов.
Статус-кво на начало обучения
Каждый из моих учеников имел свой бэкграунд, и единственное, что их объединяло – катастрофическая нелюбовь к техническим наукам (на самом деле и гуманитарии из них были так себе). При этом все они пришли ко мне не сразу, а попробовав начать свою карьеру в IT другими способами.
Я дорожу своими учениками и не хочу, чтобы кто-то из их знакомых понял о ком идет речь, поэтому назову их так, чтобы никто не догадался
Рамсес знал, что в Интернете есть всё, он даже смог найти несколько видеокурсов по программированию (на ютубе), нашел всякие полезные справочники, установил себе несколько IDE и принялся изучать программирование именно таким образом. Стоит похвалить Рамсеса – ведь среди всех моих учеников из этой статьи он продвинулся дальше всех в плане умения писать код, однако, не мог объяснить что и зачем он пишет (по сути просто отлично писал по памяти то, что уже видел).
Гильгамеш хорошо общался со школьным учителем Информатики, который был опытным программистом, отработавшим несколько лет в крупных компаниях. Заработав первые деньги работая барменом-официантом, Гильгамеш отдал их учителю для того, чтобы тот посидел с ним и «погонял» по программированию. Как оказалось, если человек мастер в программировании и умеет читать школьный материал – он далеко не всегда умеет действительно научить программировать.
Ахилл не имел навыков поиска в Интернете, да и в школе у него учитель был откровенно слаб, зато он видел классные рекламные ролики и читал красивейшие сайты одной популярной онлайн-школы, которая обещала за полгода сделать из него джуниора и устроить на работу. У Ахилла богатые родители, поэтому инвестировать пару сотен тысяч рублей в обучение сыночка для них не было проблемой… Вот только после прохождения обучения, как оказалось, Ахилл не мог даже объяснить мне «А что такое переменная?»
Как я нашел подход к каждому ученику
Дело в том, что почти все технические специалисты привыкли строить повествование по схеме «Что (О чем я говорю) -> Как (применять то, о чем я говорю) -> Зачем (вообще это нужно)». Но как оказалось - это не очень правильный подход, и гораздо продуктивнее идти от обратного: сначала ищем «Зачем» это ученику, после чего объясняем «Как» мы будем это делать и уже только потом начинаем «что-то» делать.
Если вам интересна эта тема - можете погуглить «Why How What»

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

И тут мне пришла в голову мысль: «А почему бы нам не попробовать визуальное программирование?».
После детально проведенного анализа мой взгляд упал на RPA-платформу UiPath, которая мне показалась интересной по следующим причинам:
Можно визуально программировать в виде последовательности действий
Можно визуально программировать в виде блок-схем
Есть машины состояний (ВАУ!), которые так же настраиваются визуально
Есть переменные с типами данных из .NET, что позволяет научить работе с разными типами данных
Можно использовать готовые блоки с действиями, которые позволяют не писать много строчек кода для выполнения понятного действия
Можно писать выражения с использованием операций, методов, функций, классов на языках программирования VB.NET и C#
Можно писать целые блоки кода на языках программирования VB.NET и C#
Можно использовать любые NuGet-пакеты и создавать свои собственные точно так же, как и в Visual Studio
Можно использовать готовые блоки действий для взаимодействия с различными веб-сервисами, которые можно настраивать даже без знания основ программирования (а при желании никто не мешает написать собственный блок кода взаимодействия с веб-сервисами на VB.NET или C#)
Есть серверные компоненты, благодаря которым можно научиться разрабатывать клиент-серверные приложения, обрабатывать большие очереди заданий и понимать тонкости работы с сетью
Как выбор повлиял на процесс обучения
Скорость обучения визуальному программированию с поверхностным изучением типов данных меня поразила – уже после первого занятия мои ученики сделали простенькие программы и могли объяснить в них каждое действие.

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

После того, как я обращал внимание падаванов на неполноценность их разработок, они загорелись желанием улучшать их: разбираться в типах данных глубже, сокращать количество действий, обрабатывать ошибки, писать программный код самостоятельно вместо использования готовых блоков. Честно признаться - по началу я и сам не ожидал такого результата, но это не погрешность и не исключение, а реальный факт для всех трех учеников.
Какие перспективы у визуального программирования?
RPA-платформы только набирают обороты, а уже на сегодняшний день в России UiPath используется в более чем 150 ведущих компаний (это не считая почти 10 тысяч компаний по всему миру). На сайтах по поиску работы можно обнаружить, что количество вакансий с требованием знания именно этой платформы постоянно увеличивается, а это означает, что всё больше молодых специалистов, начавших путь именно с UiPath, могут войти в дело довольно легко. Кроме того, один из моих учеников благодаря освоению визуального программирования смог самостоятельно освоить и «классическое» программирование на языке C#, после чего устроился джуниором в одну из небольших IT-компаний.
Отдельно важно отметить то, что согласно публикациям Кто такие citizen developers, Роботы для каждого (ГазПромБанк) крупные организации используют именно UiPath для обучения своих специалистов из не-IT подразделений для разработки собственных роботов-помощников, а это означает, что навыки, которым я научил своих учеников, им точно пригодятся, даже если они не пойдут именно в программисты.
И тут можно было бы завершить мысли о будущем визуального программирования ограничившись корпоративным сектором, но лично мне очень интересно было узнать от одного из учеников о том, что оказывается в современном игровом движке Unreal Engine тоже присутствует возможность визуального программирования. Честно признаюсь – я не работал с этим движком, но судя по тому, что я увидел в разных статьях и видеороликах, это очень похоже на RPA.

А что вы думаете про графическое программирование и технологию RPA в частности?