Хабрахабр

[Из песочницы] Как научить программировать свою девушку, если ты не педагог, но она в тебя верит

Когда твой парень - fullstack

Когда твой парень — fullstack

Работая программистом и проживая в пяти минутах ходьбы от офиса, крайне тяжело успеть «отойти» от работы, отойдя от работы.

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

Как бы не так!

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

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

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

О том, как я, не имея никакого практического опыта в обучении, решил ввести в программирование человека, объяснившего, что «ты же умный» и «всё у нас получится», расскажу под катом.

Добро пожаловать!

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

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

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

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

И, пожалуй, кто-то найдёт их не объективными, но я и не претендую на последнюю инстанцию. На самом деле, конечно, как и любой велосипедист, я тут же нашёл множество причин не использовать существующие решения. Итак, что же не так в куче бесплатных онлайн курсов?

Языки программирования

Множество терминов, регулярно читаемых нами в документации к stdlib очередного языка, воспринимаются нами, профессиональными программистами, интуитивно: statement, expression или даже parse — это то, что нам не приходится переводить, даже если наш уровень английского предполагает именно перевод, а не мгновенное понимание текста. Обучать программированию русскоговорящего человека нужно, само собой, на русском языке. Человеку, не связанному с программированием и даже просто с IT, многие из наших терминов просто сломают голову, напрочь отбив желание продолжать обучение.

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

Во-первых, в массе своей, это либо курсы по веб-программированию (PHP, JS, Python, etc), либо по этому вашему энтерпрайзу (Java, C#, etc), либо же это C/C++ — всё это не торт для новичка.

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

Что касается двух других категорий, то я, опять-таки, считаю, что это не то, что с чего нужно начинать новичку.

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

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

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

Стоит добавить, что до этого я не писал на Go, но по работе мне как раз нужно было написать быстрый многопоточный веб-сервис, а это значило, что я смогу обучать свою девушку, параллельно обучаясь сам.

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

Здравствуй, велосипед!

Практическая ценность

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

Конечно, бесплатный курс «Простой магазин на React+Redux» — это опыт, однако, как я уже говорил, на практике это полезно разве что человеку, желающему заиметь магазин, но не желающему нанимать кого-либо для его разработки.

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

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

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

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

Но что может заинтересовать девушку?
Свою первую программу (не считая того, что мы писали на уроках) я написал для младшего брата, когда тот стал учить таблицу умножения: ввод диапазона чисел, случайный вывод двух из них брату с предложением ввести их произведение, проверка и так далее по кругу.

В этом возрасте написать полезную (хоть сколько-нибудь) программу было для меня счастьем, то есть я был заинтересован. Это был, наверное, мой седьмой класс. Но заинтересовать семиклассника написанием примитивного «калькулятора» — легко, чем заинтересовать взрослую девушку?

В очередной раз за готовкой, она попросила меня записать в блокнот пропорции ингредиентов. Идея пришла, как водится, из быта.

Дорогая, нам срочно нужен велосипед!

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

Но неужели это просто будет база рецептов?

Конечно нет!

На чём, что и в каком порядке будем писать, я понял в тот же миг.

Back-end

Теперь же можно было определиться с тем, за что именно будет отвечать Go.
API. То, что начнём мы с Golang, — это было решено ещё до того, как стало понятно, что мы будем писать. Конечно же, API!

Язык позволяет средствами стандартной библиотеки поднять простой http-сервер, который будет прослойкой между БД и клиентами.

SQL — отличный язык для развития логики работы с данными, плюс мы сможем потрогать PL/pgSQL, который, в общем-то, в достаточной степени схож с Go, а значит, на этапе разработки бэкенда мы уже сможем в той или иной степени выучить три языка. Кстати, в качестве БД решено было использовать PostgreSQL.

Front-end

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

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

Посему пускай сначала разработает полноценный бэкенд, а уже потом переходит к клиенту. Во-вторых, мы должны научить человека в архитектуру.

Что касается клиента, тут для меня выбор тоже был очевиден.

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

Конечно, можно было бы использовать React или более экзотические решение наподобие Svetle, но мне кажется, что эти технологии — для более зрелых разработчиков. Речь идёт о Vue.js.

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

Именно на языке, поэтому Flow не рассматривался. Именно поэтому продолжать обучение, как мне кажется, правильней на языке со статической типизацией. С другой стороны хотелось сохранить максимальное соответствие с JS, не уводя девушку в CoffeeScript, Elm и т.д.

Говоря о фронтенде и современном стеке технологий, нельзя не вспомнить о Progressive Web Application (PWA).

По-моему, это идеальная технология для обучения или, точнее сказать, для того, чтоб заинтересовать ученика.

Не нужно учить сложные для новичка языки? Собственное приложение в мобильном телефоне вне зависимости от платформы? Это же прекрасная мотивация, пожалуй, одна из лучших, как мне кажется.

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

Общий язык

Последний вопрос, на который мне оставалось найти ответ, — это формат общения клиента с сервером.

Предлагать чистый REST мне не хотелось, так как это влечёт определённые проблемы, которые и породили такие решения как GraphQL. На одной чаше, как же иначе, был REST со всеми его преимуществами и недостатками, а на другой — GraphQL. Но опять-таки, интерес для меня, для других разработчиков — да, но для новичка GraphQL, как способ решения проблем, сопряжённых с использованием классического REST, интересен не будет, ведь новичку все эти проблемы неведомы, не так ли? Однако сам GraphQL, на мой взгляд, тоже не является удачной технологией, хотя определённый интерес представляет.

Почему бы не попытаться совместить идеи REST и GraphQL?

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

Что же нам предстоит пройти:

  • Сначала необходимо разработать архитектуру серверной части;
  • Затем познакомиться и спроектировать структуру базы данных;
  • Имея базу данных, мы приступаем к изучению Go и написанию сервера API;
  • Далее происходит знакомство с HTML и CSS;
  • Освоив основы вёрстки, быстренько разбираем синтаксис TypeScript;
  • Разобравшись с TypeScript, начинаем писать фронтенд на Vue.js;
  • Дорабатываем фронтенд до уровня PWA.

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

Однако, надеюсь, он всё же себя оправдает, а мой опыт станет полезным кому-то, кто попадёт в ту же ситуацию.

Спасибо за внимание!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть