Моему старшему сыну Ноа три месяца назад исполнилось семь лет. Если бы он мог обменять всю свою семью на два часа игры в Minecraft, то сделал бы это без раздумий. Ещё одна любовь всей его жизни — это Super Mario Maker. У меня бегали мурашки, когда я видел, как он играет в уровни, которые я проходил в его возрасте. Примерно пять месяцев назад я покинул свою семью ради ежегодного паломничества на ludum dare: соревнование разработчиков игр, во время которого мы запираемся в квартире с друзьями, возвращаемся в состояние пещерного человека, не спим 48 часов и создаём с нуля готовую игру. Когда я гордо демонстрировал свою революционную игру уровня AAA своей жене, Ноа, разумеется, заинтересовался. Поэтому я познакомил его с миром кода, показал, как из простых слов (он только что научился читать) можно создать настоящую игру. С того самого дня Ноа постоянно просил меня научить делать собственные видеоигры. И в течение следующих пяти месяцев я искал Святой Грааль языка/IDE для детей в надежде превратить эту искру интереса в запоминающийся опыт…
Мои поиски приводили меня на бесконечные форумы, благодаря которым я попробовал бесчисленное множество рекомендуемых языков и платформ: SmallBasic, Pico-8, Smalltalk, Scratch и т.д. Я даже задавал вопросы великим оракулам StackOverflow, но тщетно. Спустя пять месяцев я пришёл к разочаровывающему выводу: ничто и близко не сравнимо с тем, что было у меня в мои годы. 30 лет спустя QBasic по-прежнему остаётся лучшим языком для новичков в программировании.
«Боже, пожалуйста, не учи его пользоваться GOTO!»
10 PRINT "О НЕТ, ЧТО ЖЕ ТЫ ДЕЛАЕШЬ?!” 20 GOTO 10
Да, QBasic — ужасный процедурный язык. Он знакомит с концепцией, которая большинством считается вредной, использует неудобный синтаксис для неявных объявлений, он не регистрозависим, индексы в нём начинаются не с нуля, и так далее, список бесконечен… При развитии навыка гораздо лучше нарабатывать правильные рефлексы с самого начала, чем исправлять годы неверной практики. Если последовать этому совету, то мне, вероятно, стоило бы начать с основ языка Ruby, который я люблю. Тем не менее, несмотря на то, что большинство этих концепций QBasic большинство считает «красными флагами», в то время они имели свою цель: сохранение простоты и доступности языка; от этого принципа все остальные языки отказались в пользу гибкости, сложности и логики.
Сегодня я установил QBasic на 11-дюймовый HP Stream сына, установку пришлось выполнять вручную через DOSBox. Он дважды нажал на значок рабочего стола и спустя долю секунды мы уже увидели IDE, приветствовавшей нас вводным экраном, который вызвал у меня кучу воспоминаний:
Потом я сказал Ноа, что существует священный ритуал, обязательный для всех, входящих в тайный круг программистов: начинать обучение с программы, приветствующей всех программистов мира. Пока я диктовал формулу, он медленно искал каждую клавишу, аккуратно печатая пальцем правой руки волшебные слова: PRINT "hello world"
Он нажал F5 и поразился, увидев, как его код скопилировался в текст, отображаемый на чёрном экране. Он улыбнулся, дал мне пять, а потом записал код в свой маленький блокнот на будущее.
Мы изучили ещё пару команд: CLS, COLOR, PLAY, INPUT и IF. Ничего не нужно было объяснять: никакой сложности, никаких неуклюжих операторов, никаких абстрактных концепций, никакой документации, которую необходимо изучать, никаких концепций объектов/классов/методов, не требовалась установка никаких фреймворков, нет кучи меню и кнопок в IDE, никаких специальных ключевых слов или скобок. Это был код во всей его чистейшей простоте и форме.
Спустя менее часа он написал собственную программу — интерактивное и невероятно изощрённое приложение, сообщающее о том, что думает о вас компьютер:
… которое Ноа с искренней гордостью запустил для своего двоюродного брата и лучшего друга Кристиана:
… после чего он легко объяснил, как оно работает и что делает код!
То есть всего за один час мой семилетний сын не только смог написать свою первую текстовую игру, но и ощутил удовольствие и трепет, возникающие при создании, компилировании и запуске собственной программы. Дополнительные очки за то, что она умещается на одной странице блокнота:
Я был так рад, что он понял, почему я постоянно говорю, что у меня лучшая работа в мире.
Единственное, о чём я сейчас сожалению, так это о том, что за тридцать с лишним лет мы не смогли придумать для детей чего-то лучшего: Qbasic имеет ограниченное множество простых ключевых слов (вся справка умещается на одном экране, вызываемом по F1, и дополнена простыми примерами!), не отвлекает кодера визуальными артефактами, обладает очень компактной и уютной средой разработки, сразу же указывает на ошибки, компилирует и исполняет код за доли секунды нажатием одной клавиши, и к тому же чрезвычайно прост. Мы создали более надёжные и сложные языки/фреймворки/IDE (которые, разумеется, необходимы для любого практичного приложения), но никогда не придумывали более простого способа получить прямой доступ к удовольствию от программирования, чем QBasic. Даже запуск QBasic сегодня стал пугающей задачей для новичков, работающих на современной машине Mac/PC/Linux, хотя раньше для этого достаточно было просто вставить 3,5-дюймовую дискету в дисковод A:…
Но, впрочем, хватит проповедей, сегодня ведь нужно праздновать знакомство ещё одного человека с радостями и красотой программирования!
Ура!
На правах рекламы
Наша компания предлагает современные серверы в аренду для любых проектов. Создайте собсвенный тарифный план в пару кликов, максимальная конфигурация бьёт рекорды — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!
Присоединяйтесь к нашему чату в Telegram.
Автор: Mikhail