?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

Программирование, исторический обзор - morfizm


Oct. 10th, 2017 04:29 am Программирование, исторический обзор

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

1993 - Basic для непрограммистов, Borland Pascal для всех, C для крутых. Простые алгоритмы, рекурсия. Компонентизация через модульность. Разбитие задачи на функции. Группировка функций в юниты.
1995 - Кстати, а вы знаете, что PHP (на котором написан Фейсбук) расшифровывается как "Personal Home Page"? Hypertext Preprocessor это уже придумано позже, дабы осветлить это название :) Помню Yahoo-директории, Geocities для домашних страничек, HTML-чаты и новинку: поиск через Altavista.
1995 - ООП. Turbo Vision. Reusability через инкапсуляцию, наследование и полиморфизм, причём полиморфизм подчёркивался, как самый мощный и правильный инструмент. Никто ещё не подозревает, что это, на самом деле, влечёт к созданию несопровождаемого кода.
1995 - Коментарии в коде - это признак качественного кода. Пишите побольше комментариев!
1995 - Все "нормальные" алгоритмы - быстрые сортировки, динамическое программирование, деревья - вплоть до красно-чёрных, хешфункции. Новинкой и изюминкой были продвинутые строковые алгоритмы вроде KMP, Boyer-Moore, суфиксные деревья.
1998 - Популярность T-SQL. Oracle, Microsoft SQL, Postgre SQL, mysql. Грамматики, автоматы, компиляторы.
1998 - C++, STL.
1998 - Visual Studio 6.0. Лучшая версия, после которой всё пошло по спирали вниз.
1998 - Delphi. Это для учёбы, для прототипов, для быстрых тулов и для лохов. А для серьёзных парней и system level programming - Visual Studio 6.0 и Unix: gcc/vim.
2002 - ООП-мания набирает обороты и достигает своего пика: UML-диаграммы. Late-binding. COM-объекты (бр-р-р).
2003 - Функциональный подход - это экзотика. Изучают в теории, наряду с Прологом, но никто не воспринимает всерьёз.
2005 - Windbg на своём пике, но, наверное, я был разбалован секретными плагинами для внутреннего пользования, вроде анализа heap'а для поиска leak'ов, appverifier и приватными виндозными символами. Новинка: time-travel debugging.
2005 - Зарождается важность многопоточных алгоритмов. Жонглировать локами - великое искусство и плодит кучу багов.
2005 - Война функций, возвращающих статус ошибки, с функциями, кидающие исключения. Исключения победят, но очень нескоро, потому что они всё ещё медленные.
2005 - Boost. Стандартизация стандартных классов. Уход от самопальных реализаций строк, битвектора и т.п. базовых вещей, потому что людям приходит осознание, что написать самопальную реализацию без багов принципиально невозможно, а баги эти жуткие. Можно месяц ловить и не поймать.
2005 - Начало понимания, что dead code надо удалять, он вреден.
2007 - Agile & Scrum восходит до уровня секты и начинает проникать в умы высшего начальства, насаждающего по всюду ежедневные stand-up'ы. Примерно в этот момент начинается глобальная промывка мозгов в сторону удешевления девелопмента через open space, офисы начинают уходить в историю. Всё это подаётся под соусом, что, мол, open space способствует активному collaboration, а это важно. Waterfall чморят в пользу коротких итераций, что фактически означает - херачим без дизайна и без тестирования-стабилизации. Результат будет очевиден через несколько лет.
2008 - От секты ООП-UML не осталось почти ничего. Бай-бай, Греди Буч. Кроме редких извращенцев, никто не помнит детали формальных диаграмм, кроме базового data flow и иерархии наследования. Последнее тоже уходит в анналы, потому что обществу по опыту последних 10 лет открывается истина, что от ООП единственное, что хорошо - это инкапсуляция и интерфейсы. Агрегация - ещё куда ни шло. Наследование чётко плохо, но иногда необходимо на уровне библиотек. Полиморфизм - отвратительно. Множественное наследование - вообще ужас.
2009 - Новая болезнь - design patterns. Считается модным в любой design discussion вплетать про заводы, строителей, адаптеры, фасады и прочее. Забегая вперёд, скажу, что за следующие 5 лет выжил только синглтон и итератор, про которые было известно ещё до design-pattern-мании. В Java community фабрики продолжали процветать, впрочем, опять же, там у них это было давно. Чтобы полюбить джаву минимальная необходимость это научиться по-философски улыбаться, строя очередную фабрику фабрик фабрик фабрик для прокси итератора колбека.
2009 - Distributed systems. C++ из "инструмента для всего" вытесняется вниз, на уровень OS kernel, компиляторов, игровых движков и отдельных tight-loop библиотек, а также в саппорт монстроидальных систем с 10-20 летней codebase. Принципиальная линейная scalability важнее 10x перформанса. Потому что вбросить железо для решения на ЯВУ - дешевле, чем вбросить 10x времени на разработку на C++. Компонентизация через SOA.
2010 - В корпоративных культурах новый вирус - ценности и принципы. Компании соревнуются в том, у кого круче рабочий набор. Менеджеры на совещаниях устраивают бои, стреляя аргументами из базовых принципов и базовых ценностей. Bs Bingo в самом расцвете сил. Зарождается популярность дивёрсити.
2011 - Machine learning стартует, начинает набирать обороты в реальных нагруженных задачах.
2011 - Понимание, что dead code надо удалять, поднимается на новый уровень. Сообщество программеров доходит до понимания, что надо избегать любого кода, который исполняется редко, потому что в нём точно будет много багов. Стартует идея, что защита от сбоев возможна только если специально вывести их на регулярную основу. Начиная с chaos monkey от Netflix'а до "crash-only deployment", когда выкатывание новой версии имплементируется через убийство хоста и его замену. Реакция на сбой неотличима от обычного deployment'а, значит, возникает часто, значит, работает надёжно.
2012 - Control loop theory. Дешевле, быстрее и надёжнее написать само-корректирующуюся систему, чем делать расчёт и планирование всех случаев. Признаётся невозможность для человеческой биомассы заранее учесть все случаи.
2012 - Распределённые системы стали стандартом. Железа уже так много, что хардварные сбои считаются нормой. Никто не дебаггает проблемы, случающиеся один раз, если они корректируются рестартом или заменой хоста. Становится важнее писать error-resilient software, чем пытаться делать error-proof. Кстати, в дебаггере и профайлере теперь сидят очень редко, потому что в распределённых системах это сложно. Легче использовать отладочную печать и мониторинг.
2012 - JavaScript переходит из разряда быстрого языка для детей, чтобы делать вебстраницы, в разряд мощного инструмента, сочетающего в себе плюсы из разных парадигм. Значительно ускоряется виртуальная машина для JS в браузерах. К сожалению, на средней зарплате UI программистов это пока не сильно отразилось.
2012 - Map-reduce-мания и Hadoop-мания.
2013 - Начинают рулить нечёткие алгоритмы, основанные на хэшировании. Повсюду распускаются бутоны блумфильтров.
2013 - Набирает обороты C++ 11, впитавший в себя функциональную парадигму и разные другие полезные стандарты, без компромисса по производительности. Переход на C++ 11 это качественный переход, это как новый язык, новая культура программирования.
2013 - Функциональный подход и немутабельные структуры данных как ответ на необходимость многопоточности, но так, чтобы не наступать на грабли с локами. Использование локов и даже явных тредов - плохой тон. Многопоточность в рамках одного процесса начинает напоминать распределённую систему с её микросервисами и streamed data-flow, но в миниатюре.
2014 - Начинает набирать обороты виртуализация и микросервисы. Спустя три года это уже стандарт разработки.
2015 - Коментарии в коде - это признак сложного кода, а сложность это почти всегда плохо. Код должен самодокументироваться и не нуждаться в комментариях. Комментарии это как deadcode, быстро протухают, вводят в заблуждение, тормозят прогресс.
2015 - От Agile не осталось практически ничего. Scrum и ежедневные стендапы - удел редких извращенцев, таки поверивших в обещания секты о рае в загробном мире, если они будут каждое утро стоять. От test-driven-development осталась идея testability. Да, надо писать тестируемый код, и да, тесты надо писать сразу с кодом. Но не обязательно сначала тесты. Процесс разработки свёлся к гибриду между водопадом и итерацией.
2016 - Machine learning набрал обороты и внедряется везде. Deep learning. The deeper the better. Микросервисы и контейнеры тоже везде. По крайней мере, в новых системах.
2016 - Map-reduce-мания и Hadoop-мания заменяется на потоковый дизайн (Flink). Он куда гибче и эффективнее по утизилации железа. Набирает обороты функциональный подход, который хорошо вписывается в это направление. Прогресс в нечётких алгоритмах и хешировании ведёт к общему прогрессу в передаче данных, например, использование Merkle trees для синхронизации как один из этапов передачи и преобразования данных в stream-based data pipeline.
2016 - В прогрессивных местах офисов уже почти нигде нет, open space победил. Личным офисом всё ещё могут заманивать компании, которые не предпочтительны по ряду других параметров: неинтересная система, куча legacy кода, ограниченный карьерный рост, низкая зарплата и пр.
2017 - Слово "дивёрсити" уже нельзя произносить с сарказмом, по крайней мере, открыто. Закрепляется устойчивый набор "правильных" религиозных убеждений, не демонстрируя которые, трудно устроиться на работу. На собеседованиях актуализируется culture fit. Выбирают кандидатов, которые показывают, как они с высунутым языком готовы работать за идею, а еда и зарплата - это незначительные мелочи. Впрочем, для хорошего кандидата это хорошо, потому что ему легче отфильтровать коллектив, в котором лицемерие будет зашкаливать.
2017 - В силу увеличения объёмов данных, нечёткие алгоритмы продолжают всё больше рулить. Давать очень хороший ответ в 99% случаев может быть на порядок дешевле, чем давать лучший ответ в 100%. Вот, я тут про BitFunnel написал в прошлом посте.
2017 - Cache is the new RAM, RAM is the new disk. Все знания, связанные с локальностью и скоростью доступа к диску по отношению к памяти, можно смело переносить на оптимизацию под процессорный кэш. Про диски можно почти забыть. В нагруженных распределённых системах они нужны только для логов, билда и разных данных, нужных только во время деплоймента и первого старта, вроде docker images и ML моделей.
2017 - Актуализация блокчейна как парадигмы софтварных систем. Про него, наверное, стоит написать отдельно.
2017 - Java значительно улучшилась и во многих случаях приближается к производительности C++. Это удивительный рывок. Ещё каких-то 7 лет назад Eclipse был отвратительной тормознёй, а сегодня IntelliJ Idea - это шустрая IDE, которой приятно пользоваться.
2018 - ? Я не знаю, что нас ждёт, но думаю, что основной двигатель прогресса будет переход на machine learning, и какие-то следствия (которые пока не очень ясны) из этого процесса. Есть одно опасение: если раньше группа из 20 человек делала систему со сложными эвристиками "вручную", то сегодня группа из 5 человек может сделать то же самое на machine learning'е. А завтра сможет группа из 2, потому что будут всё более мощные универсальные решения, которые можно будет лишь сконфигурить или расширить под свои нужды. Это довольно большая оптимизация по человеческому ресурсу, и не очень понятно, хватит ли роста индустрии для того, чтобы этим 15 (а завтра - 18) человекам, которые не попали в уменьшенную группу, было чем заняться. Мне кажется, карьерный impact от перехода на machine learning может быть более радикальным, чем карьерный impact от перехода на распределённые системы в 2008-2009. По моим наблюдениям, человек такого же уровня по опыту и сообразительности, но оставшийся вне сферы high load, big data and scalable systems, в среднем, зарабатывает вдвое меньше. Я опасаюсь, что следующий переход может быть ещё более внушительным, и нужно внимательно следить, чтобы случайно не сделать неверный шаг в сторону от того, куда оно всё идёт. Я уже ощущаю необходимость специально делать какие-то телодвижения, чтобы за этим активно следить.

Upd.: я понимаю, что этот рассказ очень biased в сторону моего личного пути. В отдельных индустирях, скажем в играх, базах данных, операционных системах, open source, и даже в том же ML более детально, можно было бы написать про другое. Я не призываю спорить, приводя свой путь в качестве контраргумента (хотя мне было бы жутко интересно прочесть аналогичные исторические обзоры под другим углом). Но мои личные впечатления охватывают не только лично меня, а и круг знакомств, похожих людей, я делаю какие-то обобщающие выводы. Мне интересны замечания, когда я совсем не попал про какие-то общие тенденции, или попал, но заметил их с задержкой лет в 5, или пропустил что-то важное и интересное, а также интересно другое видение на 2018+, исходя из вашего опыта.

17 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:gwynbleidd_2004
Date:October 10th, 2017 03:22 pm (UTC)
(Link)
можно для гуманитариев уточнить. это что получается скоро компы вместо программистов сами для себя проги писать будут ?
From:passerbyp
Date:October 10th, 2017 04:13 pm (UTC)
(Link)
...уточняю для гуманитариев... производительность труда гуманитариев настолько низкая, что компьютеры скоро вместо гуманитариев будут сами для себя писать....
From:morfizm
Date:October 10th, 2017 05:59 pm (UTC)
(Link)
Может быть, но очень нескоро. Думаю, ещё есть пара десятилетий, пока этого можно вообще не бояться.

Сейчас происходит что-то аналогичное анализу в математике. Например, 100 лет назад аналитическое дифференцирование и интегрирование имело производственное применение. Это нужно было уметь делать, чтобы решать задачи. Те задачи, которые символьно не решаются, мало использовались. С развитием компом и численных методов область применения значительно расширилась, но теперь 99% производственных задач настолько сложные, что иначе как численными методами их не решить. А для оставшегося 1%, где символьное решение существует, можно использовать пакеты вроде Mathlab или Wolfram Alpha, которые его посчитают.

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

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

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

Чтобы хоть как-то приблизиться к тому искусственному интеллекту, про который мы читали в фантастических книгах и смотрели в фильмах, нужно решить задачу семантического распознавания естественного языка. Это (на сегодня) всё ещё неподъёмная задача, решения которой не видно даже на горизонте.

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

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


Edited at 2017-10-10 06:03 pm (UTC)
From:morfizm
Date:October 10th, 2017 06:12 pm (UTC)
(Link)
Кстати, психологи, sales & marketing тоже имеют риск вытеснения машинами. У машинного обучения куда больше шансов "хакнуть" человеческую психику и выдавать наилучшие советы, наилучшую рекламу, наилучшие убеждающие аргументы, а данные для обучения можно собирать в самом процессе работы.
From:gwynbleidd_2004
Date:October 11th, 2017 10:56 am (UTC)
(Link)
ОК, спасибо за столь развернутый ответ! Любопытно. Да, действительно в "простых" профессиях роботы вполне себе могут вытеснить людей.
From:passerbyp
Date:October 10th, 2017 04:06 pm (UTC)
(Link)
...очень подробно и хорошо написано... я бы добавил timeline c 1975 по 1996 год, но не буду по причинам обвинения в участии в Куликовской битве...

...что касается будущего, то сегодня вырисовываются три направления, которые могут в будущем будут определять развитие и возможно, что на стыке этих направлений возникнет, что—то п&инципиально новое... во—первых, это cloud технологии, где победил Linux и open source, со всеми вытекающими последствиями... во—вторых, нейросети и AI... ...и в третьих, квантовые компьютеры....

...по предыдущему моему опыту, который может быть конечно ошибочен, самое интересное случится на стыке этих направлений!
From:mrumka
Date:October 10th, 2017 06:31 pm (UTC)
(Link)
Офигеть,

Пол жизни за 10 минут чтения. ))
From:unstablebear
Date:October 10th, 2017 08:30 pm (UTC)
(Link)
Крутой обзор, спасибо. Тут моя личная история с IT.

Как оно в остальном мире я начал понимать в 2000х, до этого жил в изоляции )) О программировании узнал из журнала "Наука и жизнь" в начале 90х. Пытался понять программы и алгоритмы описанные в статьях(мне было лет 8-9). Жил я в маленьком поселке, доступа к компьютерам, интернету, или фидо у меня не было как и знакомых компьютерных энтузиастов.

1994 - Отец достал клон Sinclair ZX Spectrum, первые игры и простейшие программы на BASIC

1996 - IBM XT, курс ремонта IBM совместимых в заочной школе при МИФИ, рисование гипоциклоид по примерам из учебника в Turbo Basic 1.0, Norton Commander, убитый autoexec.bat и месяц ковыряния в голом DOS, а потом починенный autoexec.bat )) Смешные пародии на антивирус касперского.

1999 - у меня появился комп на базе i386, в Turbo Pascal писал простые игрушки, графический редактор и т.п.

2002 - машина на Pentium I, наконец-то нормальные трехмерные видеоигры. Ставлю первый линух, модем не работает, т.к. дешевый и софтовый. В журнале "Хакер" говорят что тру хакеры собирают ядро линукса, ну я и собираю ) Еще пишут что асм это круто, осилить не хватает воли.

2004 - Первая официальная работа программистом, в конторе со своим продуктом на FoxPro 2.5 и Visual Foxpro. Босса зовут Владимир Ильич, наставляет протирать мониторы спиртом каждую пятницу, так же инициировал церемонию освящения офиса, видимо чтобы бизнес шел. Вычитал из "Хакера" про фрилансеров, которые работают удаленно и катаются по миру как сыр в масле, начал понимать к чему стремиться.

2005 - Написал курсовой проект - легковесный файловый мененджер на плюсах и WinAPI, на презентации чувствовал себя альфа-самцом, т.к. все остальные проекты были довольно скучной херней, а мой мененджер даже файлы шифровать умел. Получил часы ASUS от представителя компании как поощрительный приз за участие в какой-то конференции к которой была приурочена курсовая.

2006 - Уволился из конторы, переехал в другой город, начал писать на Java

2008 - Сменил работу, начал писать на groovy и узнавать о функциональном программировании. Там же познакомился распределенными системами(связанными по message bus), индексированием документов, шаблонами проектирования, даже участвовал в разработке доморощенной ESB (:facepalm:). Познакомился со Scala и D. Scala покорила надолго, начал присматриваться к Haskell.

2011 - Сменил работу, наконец-то удаленка. Бакенд для невысоконагруженной мультиплейерной онлайн игры на Java. Познакомился с Netty, набил руку на рефакторинге кода. Запомнился чувак, software architect в местной такси конторе доказывавший мне во время собеседования, что python превосходит Java во всем, в том числе в производительности, а удаленная работа - миф, т.к. он пробовал и у него не получилось. В итоге они меня не пригласили к себе работать, печалька.

2013 - Снова сменил работу. Grails/Groovy, AWS, больше паттернов и даже немного DDD(которое я тогда не оценил, но вообще неплохая штука как оказалось). Удаленка рулит, переехал с семьей в Крым, но в марте 2014 внезапно исчезли деньги из банкоматов, авиасообщение закрыли и мы недолго думая(решение приняли через час как проснулись и посмотрели новости), что пора сматывать удочки. Переехали в Сочи, город, в котором самые крутые зимы на моей памяти. Через пару недель Крым перестал быть прежним.

2015 - Переехал в Швецию, работа в офисе, но какая, куча интересного народу из всех уголков мира, microservices, Big Data, Scala!!!

2017 - Сменил работу, перешел в маленький стартап(15 человек), Java, microservices, AWS . Нас в бакенде двое, казалось бы надо насадить функциональщину везде, но коллега пришедший раньше меня апологет Node.js и Java - наш common denominator :( Первые месяцы после перехода со Scala на Java мучали ломки, теперь уже привык

По поводу прогнозов, тут уже выше написали про ML и quantum computing. Про AI кажется что он сдулся, neural networks напоминает ремесло нежели науку: накидали слоев, потренировали, оценили результат, подкрутили параметры, повторили - откуда тут взяться интеллекту - не понятно. Если что-то прорывное и произойдет то в недрах корпораций, которые могут позволить себе колоссальные компьютерные ресурсы и научную разработку в области quantum computing, что может привести к революции в ML и может даже даст нам strong AI.
From:freeborn
Date:October 10th, 2017 08:37 pm (UTC)
(Link)
"А потом наступил тысяча девятьсот семнадцатый год.

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

From:freeborn
Date:October 10th, 2017 08:42 pm (UTC)
(Link)
не раскрыта тема C#/.NET, NoSQL, cloud services, web apps everywhere, mobile apps...
From:dipsober
Date:October 10th, 2017 09:51 pm (UTC)
(Link)

Отличный пост! Было бы интересно почитать подробнее про ваше понимание будущего блокчеинов и про то, как и когда всем (срочно?) переходить в ML/deep learning - очень насущная тема :)

From:aklepatc
Date:October 10th, 2017 11:59 pm (UTC)
(Link)
Очень здорово. Спасибо!
From:zlata_gl
Date:October 11th, 2017 10:43 am (UTC)

Моя биография

(Link)
1975 - Алгол
1978 - ассемблер Intel-8080, Только ассемблера еще не было, писала в восьмеричных кодах.
1979 и дальше - Электроника-60, ассемблер PDP11 (а поначалу - опять же восьмеричные коды)
Cross-Assembler писала сама на PL1, ЕС-1020.
1987 - Паскаль на СМ-4. Даже обучалку написала.
1989 - Паскаль на 286-й машинке.
1993 - FoxPro-2 (MS-Dos)
1997 - Дельфи
1998 - ассемблер Intel-8051.
1999 - VHDL
С 2004 - LabView.
Параллельно - до 2004-цифровая электроника, потом - аналоговая.
From:mrumka
Date:October 12th, 2017 03:21 am (UTC)
(Link)
Кстати по поводу ошибок и перезагрузки нашел весьма интересный прием, но для игрушек:

В начале ролика Бёртон напоминает об одном интересном моменте из Sonic 3D для Mega Drive. Если постучать по картриджу с игрой, то открывается меню выбора уровней. Это не было добавлено в игру авторами.

По словам Бёртона, процесс сертификации игры у Sega мог затянуться на недели, если игра хотя бы один раз вылетала. Для проверки тестировщики часто оставляли игру включенной в течение нескольких дней. Если игра вылетала, то проект возвращали разработчикам. При этом отчёты об ошибках от Sega не отличались внятным изложением проблем, как и причин их появления. Авторам приходилось самим выискивать причину бага, что требовало много времени.

Во время разработки Mickey Mania в 1994 году перед тем, как отправить игру на сертификацию, Бёртон внёс изменения в её код. В итоге, вместо сообщения об ошибке появлялась надпись с информацией о том, что был обнаружен секретный портал. Этот портал переносил героя в следующий или предыдущий уровень. Благодаря этому, игра продолжала работать долгое время.

Идея сработала, и Бёртон повторил её в 1995 году в проекте Toy Story. В этот раз он замаскировал вылеты под мини-игру, которая позволяла герою восстановить запас здоровья.

В Sonic 3D в 1996 году Бёртон заменил сообщения об ошибке появлением экрана с выбором уровня. Схема сработала, но впоследствии пользователи обнаружили интересный момент. Стоило постучать по картриджу Sonic 3D или подёргать картридж, и появлялся список уровней. Тогда казалось, что это намеренно сделанный авторами секрет.

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

https://www.youtube.com/watch?v=i9bkKw32dGw
From:unstablebear
Date:October 12th, 2017 10:25 am (UTC)
(Link)
Крутой ход :)
From:raindog_2
Date:October 13th, 2017 01:39 am (UTC)
(Link)
Ага, хороший обзор! Со многими наблюдениями я согласен, но как минимум в двух большой сдвиг во времени (с моей хронологией) -
С++ пришел в 1990-м с Turbo C++, который потом стал Borland C++.
А с OOP (в то время - практически как с религией) я познакомился на год раньше чем с С++, Turbo Pascal 5.5.
Ну и Design Patterns - книжка by gang of four вышла году в 94-95-м и к 2000 это уже было общей религией. В интервью в Гугл в 2003 году мне задали вопрос про мой любимый design pattern (кажется я рассказал про Visitor pattern); но уже на тот момент движение выдохлось, так что я отметил про себя тогда, что вопрос - плохой.
Сейчас свою хронологию напишу :)
From:livejournal
Date:October 21st, 2017 06:39 pm (UTC)

из жж программиста

(Link)
User generationp referenced to your post from из жж программиста saying: [...] даже даст нам strong AI. https://morfizm.livejournal.com/1137372.html?thread=12827356#t12827356 [...]