Маленькое программистское затруднение
На этом _why не успокоился. Продолжением попытки максимально эффективно учить новичков программировать стало создание собственной среды разработки на Ruby, которую он назвал Hackety Hack.
Чтобы максимально точно позиционировать эту IDE, _why выпустил манифест Little Coder’s Predicament, объясняющий суть предназначения Hackety Hack и рассказывающий о проблеме высокого порога вхождения в современное программирование, устранить который отчасти и предназначена эта программа-среда.
Он объясняет это так:
Мы живем в мире ужасно сложных и продвинутых технологий, которые окружают нас повсюду. Неважно, осознаем мы это или нет, но факт заключается в том, что наши бабушки сегодня пользуются смартфонами, наши дети играют на iPad и т. д. – но технологии, скрытые под капотом всех этих предметов, ужасно сложны и комплексны.
Я помню, как в старые добрые времена смог сам легко освоить программирование на Commodore 64, но попробуйте сегодня разобраться в таком же возрасте в программировании под Windows, создать свой собственный поиск-аналог Google или написать свое приложение для любимого iPhone. Сделать это будет не так-то просто, как было во времена моего детства.
Я называю этот возросший порог для вхождения в мир программирования Little Coder’s Predicament и пытаюсь преодолеть его посредством новой идеологии обучения программированию, реализованной в Hackety Hack.
Итак, этот редактор реализует блоковую концепцию построения программ из уже готовых кусков кода (заготовок, сниппетов). При этом у новичка есть возможность начинать учиться в процессе создания приложений, сразу разбираясь в его устройстве на примерах составных кусков кода (в чем активно помогает эта IDE), а также модифицируя их под свои текущие нужды (поставляется обширная библиотека подобных сниппетов на все случаи жизни).
Такой полуфабрикатный подход позволяет немедленно начать писать программы любому человеку практически без какого-либо предшествующего опыта. Технически редактор базируется на Ruby и Shoes toolkit (библиотека для создания сложных графических интерфейсов).