Обзову это
"Я и программирование."
Начинал я, как ассемблерщик. Сперва БК-0010, с ассемблером PDP-11. Потом 8086, вплоть до 286. Даже диплом техникума по своей специальности "техник-электрик по ремонту и эксплуатации электронных вычислительных машин, приборов и устройств" я защищал по программе на ассемблере - я написал маленький редактор для редактирования текстов из DBaseIII, поскольку у нее не было внутреннего редактора.
TASM рулил. MASM выдавал странные "Phase error between passes," не справляясь с наличием переходов с меняющимися между проходами размерами смещений. У TASM был более строгий (!) режим ideal, лучше проверяющий типы и с более стройным синтаксисом. Потом в TASM появились ОО-расширения и я на них написал свою библиотеку интерфейса пользователя (кнопки, переключатели, поля ввода, все такое).
Я написал на ассемблере, наверное, строк с миллион. Написал упаковщик (LZSS+Huffman и PPMD, с мордой). Писал кучу всяких прототипов.
С
Александром Петровым, лучшим моим другом, я познакомился через ассемблер. Прототипы я писал для реализации его идей. Там было много - от видеостримера до VoPL (Voice over Phone Line - передача упакованного голоса по модему на 9600+ с шифрованием).
После поступления на работу в ЮнионКард (92), мне пришлось ассемблер слегка оставить в стороне - достаточно быстро стало ясно, что даже x86 ассемблер не переносится между разными OS, а у нас в работе их было три штуки - DOS, Windows NT и OS/2. Правда, C к тому времения я знал достаточно хорошо. И C++ тоже, но последним я не пользовался - чего-то в его модели ОО не хватало в сравнении с моделью TASM. ;)
Правда, быстродействия мне часто не хватало и я вставлял ассемблер. Все еще. В криптографии, например - реализовал наибыстрейший (за исключением bit-sliced) вариант DES.
До 98 года я сбацал пару Фортов - на ассемблере, оптимизирующий, и на Си, для скриптов. Вторым вариантом даже пользовался кто-то из коллег. Кстати, я хотел сделать Форт-процессор (посмотрев на f21 и прочие) со многими ядрами и посылкой сообщений между ядрами. Этот процессор сильно напоминал бы то, что я сейчас называю "вычислитель будущего," только он был бы крив до безобразия. Начал я с модели, да только не пошла она - уровень описания был низенький.
Вот. А дальше я написал статью
Заметки о вокселях. И это был переломный момент.
Мне очень понравилась идея такой вот иерархической визуализации, после написания статьи я подумал, что надо бы ее расширить и углубить, приделать тени и прозрачность. Соответственно, требовалось множество экспериментов, поскольку наверняка пришлось бы пробовать разные варианты физических моделей. Поскольку я был уже достаточно опытен, я понимал, что Си не подходит (ассемблер тоже, хехе), C++ тоже не подходил. И я пошел искать средство для экспериментов. Тут меня просто понесло.
Я попробовал m4 в качестве варианта метапрограммирования. Получилось так себе - сразу полезли ошибки типов и я отбросил эту идею, как малопродуктивную вообще.
К тому времени у меня уже был интернет, три или четыре года, уже, как был. Я отыскал список языков программирования и начал исследовать все по списку, почти по алфавиту. Основным требованием была компилируемость и выразительность (немногословность записи решений).
Сперва я отбросил все варианты C. Потом что-то еще. Потом еще что-то и проход на третий по этому списку я попал на Хаскель.
Да. Как хорошо известно читателям моего блога, я попал на Хаскель.
К тому времени я уже забыл про мою исходную проблему, меня интересовал поиск подходящего средства для экспериментов, причем такого, против которого не восставала бы моя интуиция, вооруженная опытом девяти лет программирования.
В Хаскеле меня поразили выразительность и вывод типов. На тот момент это был практически идеал.
Через пару лет я подумал, что достаточно его освоил (хаха) и попытался применить его в нашей разработке. Второе, что я сделал, это обогнал ведущего плюсовика в написании скрипта обработки логов на предмет утечки памяти. ;)
Сейчас я понимаю, что перл или подобное было бы еще лучше.
Дальше были несколько провалившихся прототипов разных проектов.
Первое, что я сделал, однако, тоже было неудачным - мне не удалось встроить hugs в нашу программу.
Потом я попытался отыскать подходящий GUI и наткнулся на FranTk, из изучения которого я узнал про тикль, он же Tcl/Tk.
И вот тикль мы сумели применить в создании ПО для банкоматов. Он был форсирован сверху начальством, которому понравилось на нем писать. ;)
Надо признаться, что сперва мы на нем написали систему документооборота, она получилась плохой, пользоваться было неудобно. А вот первые альфы нашего ПО для банкоматов клиенты встретили радостным писком - там можно было менять экраны WYSIWYG, гибко менять диалог с клиентом и (!) гонять программу не на банкомате, а на его эмуляторе, не отходя от рабочего места. Она работала на всех банкоматах одинаково с минимальной конфигурацией. В общем, получилось очень хорошо. В ней было несколько DS(E)L, практически каждый разработчик написал хотя бы один (для чеков принтера (с условиями!), для диалога с клиентом, для описания конфигурации, для описания драйверов, тесты, и тд, и тп).
Вот.
По увольнению из ЮнионКард (то есть, из дочерней фирмы "Программные Системы и Технологии") я попал в игростроение. C++, вариантов нет. Хотя, я там попытался прототипировать интегратор физики на Хаскеле. Кстати, эта моя идея, интегрировать с помощью степенных рядов жесткие системы, похоже, не работает. Ну, да ладно.
А потом я ушел на более свободные хлеба в смысле выбора средств их добычи.
Все, что после - новейшая история. ;)