Один из самых забавных парадоксов в вычислительной технике и один из самых же долгоживущих, связан с её, техникой, кажущейся сложностью. Или простотой. Так простотой или сложностью? Это-то и смешно, и грустно одновременно: сформулировать однозначно не получается, потому что каждый видит проблему под своим углом, со своей стороны!
Между тем правильное понимание этого парадокса способно принести ощутимую выгоду. И чтобы понять, с какой стороны находитесь лично вы, попробуйте ответить на вопрос: стали ли за последние 30-40 лет компьютеры проще или сложнее? А потом и — считать ли случившиеся изменения положительными или отрицательными?
Кто-то ответит: конечно стали проще! Какие могут быть сомнения? Легендарные 8-битные машины — ZX Spectrum, Apple II, Commodore 64 и им подобные — были беспощадны к пользователю! Включив такой компьютер, вы сразу попадали в то, что сегодня называется «средой разработки», а попросту — в язык программирования. И в лучшем случае это был BASIC, а в худшем вообще монитор-отладчик, понимавший только шестнадцатеричное счисление.
Иначе говоря, пользователь волей-неволей должен был сразу становиться и программистом. Потому что необходимо знать хотя бы основы программирования, даже чтобы просто вбить в бейсике команду «LOAD», загружая игру.
Вот, вспомните как это было, например, на «Спектруме»: поставьте свободный эмулятор FUSE (apt-get install fuse-emulator-gtk), скачайте откуда-нибудь оригинальную прошивку (48.rom), и оцените тот факт, что без инструкции вы не сможете с таким компьютером сделать ничего! (Если только не научились уже когда-то).
Но кто-то ответит: стало сложней! Ведь — попробуйте сосчитать, сколько операций нужно совершить, чтобы хотя бы привести современный компьютер в то же состояние, в которое он попадал сорок лет назад после включения? Будет на нём свободная операционная система (например, Linux) или проприетарная (MS Windows, OS X), не так важно. Сперва система должна загрузиться. Потом загрузится «рабочий стол», с которым вы должны уметь обращаться. Уже через него нужно будет отыскать способ установить нужный язык программирования, а потом, вероятно, настроить. И только после всего этого вы сможете написать первые строчки своей программы.
Да, свободный софт даёт фору: в нём число операций меньше, просто потому, что во многих дистрибутивах Linux, например, инструменты для разработчиков предустановлены и надо лишь знать, что запустить. И всё равно список необходимых предварительных действий будет длинным — вместо единственного пункта сорок лет назад: нажатия кнопки питания! Вот и выходит, что компьютеры стали сложней.
Парадокс налицо — и время от времени он порождает ожесточённые споры (вот пример такой дискуссии, разгоревшейся в феврале на популярном технофоруме Slashdot). Но что если попробовать оценить произошедшие перемены по другой шкале? Не «проще — сложнее», а чисто механически, беспристрастно.
Что произошло с вычислительной техникой за последние сорок лет? Она обросла новыми слоями абстракции. Разработчики постарались оградить пользователя от лишней информации — то есть такой, которая для повседневного пользования компьютером не нужна. Вот откуда GUI вместо командной строки, вот откуда «иконки» вместо адресов в оперативной памяти, и прочее, и прочее. Оценка же этих изменений, естественно, зависит от целей, с которыми пользователь к компьютеру подступается. Если он собирается лишь запускать готовые программы, то скорее всего оценит перемены как упрощение. Если же намеревается программировать, оценит их как усложнение.
Что в свою очередь привело к неожиданному эффекту. Теперь люди, желающие изучать программирование, жалуются, что одновременно (или даже заранее) они вынуждены изучать и вещи, которые вообще-то знать не планировали и не желают: установку нового софта, настройку операционной системы (т.е., по сути системное администрирование), некоторые концепции хранения данных (разница между «облаком» и локальным накопителем, разделение данных и программ, права доступа и т.п.). Само по себе это неплохо и несомненно окажется полезно для новичка как программиста в будущем, но ещё больше удлиняет и без того уже неблизкий путь к первым ступеням.
И отсюда выход на второй вопрос: хорошо или плохо то, что произошло с компьютерами за сорок лет? Получается: плохо! Получается, компьютерная эволюция выбрала интересное, полезное, но не лучшее из направлений. Вместо того, чтобы облегчить задачу освоения всем новичкам, она облегчила её одним за счёт других! И тот факт, что программистов сегодня хронически не хватает, можно объяснить отчасти этим же. Откуда же им взяться, если уже на первых ступенях изучения вычтехники в новичке ломают программиста, принуждая его становиться пользователем?!
Простого лекарства, увы, не существует: «болячка» слишком запущенная! Один из вариантов: смириться со сложившимся положением вещей и сделать акцент на популяризации неполноценных, но максимально простых средств разработки. Это могут быть, например, работающие прямо в браузере языки программирования — собранные в коллекции наподобие compileonline.com. Сюда же относятся и инструменты, не требующие настройки — к примеру, замечательный RFO-BASIC для Android (свободный осовремененный диалект старины бейсика). Решение не совсем честное, потому что не снимает проблемы, а лишь отдаляет момент, когда пользователь всё-таки должен будет освоить все слои абстракции. Но есть и вариант более жёсткий: заменить «неправильный» компьютер «правильным».
Конечно, возвращаться сегодня к 8-битным моделям начала 80-х годов смысла нет: их производительность и коммуникационные возможности недостаточны. Но ведь можно отыскать микропроцессорные устройства и среды разработки, которые обременены минимумом слоёв абстракции, зато остаются практически полезными даже в наше непростое время. Лучшим примером, без сомнения, является платформа Arduino (подробный рассказ о ней здесь уже был, см. «Малыш на миллион»).
Arduino — это не полноценный компьютер, а скорее набор «кубиков», из которых можно собирать несложные цифровые устройства. Хороша эта платформа тем, что путь от программы до «железа» тут максимально короткий: например, чтобы зажечь светодиод, можно просто вывести бит в нужный порт. Почти как сорок лет назад!
Другая популярная «образовательная» платформа, Raspberry Pi, в этом смысле хуже: там, хоть пользовательская среда и ориентирована на разработку и обучение, слоёв абстракции немногим меньше, чем на нормальной персоналке. Плюс к тому, модули Arduino дёшевы (сотни рублей), что делает их идеальным «провокационным» подарком школьнику и студенту.
Сможет ли программист, начавший с Arduino, впоследствии освоить все слои абстракции на «полноразмерной» персоналке? Без сомнений. Ведь смогли же это сделать те, кто начинал с 8-битных машин сорок лет назад! А бонусом такого образования станет отсутствие у человека ложного чувства утраты, которое мучает сегодня миллионы людей, не могущих забыть свои первые «коммодоры», «атари», «спектрумы», «макинтоши».
Тем, чья «цифровая юность» пришлась на 80-е, кажется, что эпоха «правильных компьютеров» ушла безвозвратно. Начавшим с Arduino ностальгировать будет незачем. И дискуссия о том, стали компьютеры сложнее или проще, сойдёт на нет сама собой... ;-)
--------------------------------------------
Этот текст всегда доступен по адресу linux.su/260218.shtml