Hardcode. Хакер из преисподней - Александр Яманов
Странные они. Разве я кого-то подгонял? Наоборот, изначально предупредил, что мне нужно качество, а не скорость. Но народ привык в НИИ к авралу и необходимости подгонять проекты под излишне сжатые сроки. Вот и задёргался, ещё и подумал, что у меня фиксированный бюджет. Нет, с финансами всё в порядке. Наш хохлодруг оплатил банкет, заодно выдал нам практически бесконечный абонемент.
А если начнут заканчиваться средства, то в 404 хватает чиновников-воров, которых можно потрясти на предмет оказания помощи соседям. Я бы добавил — нужно потрясти.
Глава 24
Сентябрь. 2012 года. Воронеж. Российская федерация.
Наш офис постепенно превращался в логово безумных инженеров, но главная проблема была даже не в железе, а в том, как мы это железо проектировали.
Дима чертил рамы в тяжеленном, неповоротливом SolidWorks. Андрей гонял симуляции в Ansys, который на наших процессорах считал одну плату по полдня.
Виталик параллельно ковырял прошивку в Eclipse, матерясь каждый раз, когда из-за изменившейся геометрии луча БПЛА приходилось вручную переписывать коэффициенты в коде.
Я смотрел на этот зоопарк софта, и внутри мне становилось дурно. Мне ведь известны сквозные, бесшовные среды проектирования. Там конструктор, схемотехник и программист работали в едином облачном пространстве. Подвинул транзистор на 3D-модели — у теплофизика тут же пересчитали градиент температур, а у кодера автоматически обновился дескриптор периферии в микроконтроллере.
А сейчас настоящая задница. Бюрократия и процессы уничтожат любую задачу. Пусть у нас хоть трижды талантливый коллектив.
В принципе было бы очень даже неглупо написать сначала базовый продукт, выкинуть в open source без важных фич. Тогда, возможно, даже получится потянуть полноценный САПР. Особенно если залить денег. Та же грантовая система отлично поможет набрать энтузиастов.
Вечером, когда Иван Петрович ушёл домой, а Дима с Андреем уехали за очередной партией текстолита, я собрал софтверное ядро команды. Виталик расположился за своим столом, протирая очки и одновременно разминая шею. На экране моего ноутбука в скайпе висели два окна группового звонка.
Николай — тот самый матёрый системщик из мифов про айтишников, съевший собаку на низкоуровневых драйверах. Он у нас таганрожец. Из Минска смотрел в камеру бледный, невыспавшийся Алексей.
— Парни, есть идея, — начал я, разворачивая маркерную доску. — Мы тонем в рутине. Перенос данных из одного софта в другой сжирает половину времени. Нам нужна своя среда разработки. Единый САПР. Мы объединим в нём трёхмерное твердотельное моделирование, трассировку печатных плат, симуляцию тепловых и аэродинамических нагрузок и, самое главное, среду разработки прошивки. Всё в одном флаконе. Живой сквозной проект.
В скайпе повисла тяжёлая тишина. Первым её нарушил Николай. Из динамиков донеслось его глуховатое, прокуренное хмыканье.
— Командир, ты масштаб задачи представляешь? Ты хочешь скрестить Катю, Альтиум и Кейл. Над каждым из них институты десятилетиями работают. На каком железе ты это крутить собрался? Среднестатистический комп захлебнётся от одной только динамической перетрассировки платы в реальном времени, пока рендерится 3D-модель корпуса.
Виталик согласно закивал, преданно глядя на Николая.
— Да, шеф. Это же гигантские математические ядра. Матрицы плотности, уравнения Навье — Стокса для аэродинамики… Мы просто упрёмся в производительность процессоров. Про пассивную память я вообще молчу, ×32-системы вылетят по Out of Memory на первой же сложной сборке, — добавил Алексей.
Теоретически парни правы. Кто спорит? Только они рассуждали категориями архитектурных паттернов 2012 года. В эту эпоху индустрия разработки ПО переживала пубертатный период. Процессоры обзавелись несколькими ядрами, и программисты, дорвавшись до многопоточности, пихали её куда ни попадя. Под каждую чих-пых задачу плодились тяжёлые, независимые параллельные потоки, которые затем бесконечно воевали друг с другом за ресурсы. Оперативная память забивалась дублирующимися структурами данных, а синхронизация между ними превращалась в сущий кошмар из мьютексов и постоянных блокировок.
В моём же распоряжении был весь стек технологий из тридцатых годов. Я наизусть помнил элегантные алгоритмы иммутабельных структур данных, безналовые реактивные потоки и принципы распределённых вычислений, которые станут глобальным мейнстримом и золотым стандартом индустрии только лет через семнадцать-восемнадцать.
Но просто вывалить на них эти архитектурные чертежи в готовом виде было опасно. Николай и Алексей не были рядовыми формошлёпами, пишущими сайты на заказ. Это матёрые, прожжённые деды низкоуровневого софта, которые привыкли ковырять байты ногтями. Они мгновенно почуют неладное, если молодой программист выдаст им фундаментальную парадигму, до которой мировая компьютерная наука ещё физически не дозрела. В лучшем случае меня посчитают шпионом какой-нибудь зарубежной корпорации. Поэтому действовать нужно было ювелирно. Пришлось спешно натягивать маску самоучки.
— Смотрите, — я подошёл к доске и начал быстро набрасывать схему, стараясь, чтобы маркер скрипел тихо, без удара по нервам. — Нам не нужно тащить за собой старые движки. Мы не будем использовать стандартное полигональное представление для тяжёлого 3D. Мы напишем ядро на функционально представленных геометрических объектах. Слышали о таком? Математическое описание формы через функции трёх переменных. Это сократит потребление памяти под геометрию в сотни раз. Вместо миллионов полигонов — чистая математика.
В окошке Минска Алексей резко подался вперёд, чуть не сбив стоявшую перед ним чашку с кофе.
— Погоди… Если описывать твёрдое тело аналитически, то пересечения, вырезы и скругления — это просто логические операции над функциями. Довольно годно для оптимизации. Для этого не нужны гигабайты ОЗУ.
— Именно. Математики всё придумали за нас, и можно спокойно пользоваться, не изобретая велосипед, — подхватил я, чувствуя, как заглатывается наживка. — А теперь главное. Как связать это с прошивкой Виталика? Мы сделаем микроконтроллер софтверно-зависимым от геометрии. Внутри САПРа будет крутиться легковесный компилятор. Виталий пишет код, например, для фильтра Калмана. САПР знает физические параметры платы из геометрического ядра. Ёмкость дорожек, массу луча, на котором стоит датчик. И компилятор на лету подставляет эти физические константы прямо в регистры ассемблера при сборке бинарника.
Виталик выронил маркер, который крутил в руках.
— То есть мне не нужно будет пересчитывать тайминги под новую ревизию платы? Софт сам поймёт, что дорожка до гироскопа стала длиннее на три миллиметра и ёмкость изменилась?
— Сам поймёт, — твёрдо сказал я. — Николай, по твоей части: чтобы всё это не тормозило, мы откажемся от стандартной потоковой модели Windows. Сделаем модульную архитектуру на основе ориентированных ациклических графов. Алексей, ты под это дело соберёшь нам кастомное ультралёгкое графическое ядро на OpenGL, которое будет задействовать текстурные шейдеры для параллельного просчёта тепловых матриц. Графика сама посчитает тепло, понимаешь? Зачем нам грузить центральный процессор, если у нас есть видюха?
На другом конце провода в Таганроге Николай молчал минуты две. Он закурил сигарету и сделал несколько затяжек. Было слышно, как он тяжело дышит и зачем-то