PTC, Inc.

PTC — международная компания, пионер в создании программного обеспечения параметрического проектирования (САПР). Один из основных продуктов фирмы — «PTC/Creo», программа для трёхмерного дизайна, в разработке которой я участвовал. Это аналог CATIA, SolidWorks или AutoCAD, используемый ведущими производителями в аэрокосмической (NASA, Boeing, Airbus, Hill Helicopters), компьютерной (Samsung, Apple), автомобильной (Toyota, Hyundai, Carlin, CUPRA, Volvo) и других областях. Я как-то раз получил сообщение о проблеме даже от дизайнера украшений 🙂 К слову, проблема эта была в действиях пользователя, — он неправильно использовал одну из наших функций.

Моя машина, — Hyundai i20, — спроектирована в программе, которую я писал.

Я работал в отделе, разрабатывающем функциональность Family Table. Этот функционал позволяет создавать несколько различных деталей на основе одной («базовой») и списка изменений, записанного в таблице. Пример: автомобиль может быть оснащён несколькими разными двигателями. Создаётся базовый чертёж автомобиля, а затем строится таблица, в которой указываются различия между моделями, — какой чертёж двигателя подгружать, как сдвигаются крепления двигателя к корпусу, какие нужны изменения в трансмиссии и т. п.. Вот эта таблица называется Family Table. На основе базового чертежа и записей в Family Table очень просто создать целое семейство похожих моделей, и это по-любому будет проще и быстрее, чем для каждой модели ради, может быть, изменения в одном болтике рисовать отдельный трёхмерный чертёж с нуля.

Вышеупомянутый дизайнер украшений использовал Family Table для того, чтобы на основе диаметра кольца размещать на нём разное количество бриллиантов на равном расстоянии друг от друга: чем шире кольцо, тем больше бриллиантов на него можно налепить.

Демонстрация «Concept Design». На основе одной модели стула создаются несколько ветвей тестовых моделей, наилучшая из которых затем станет следующей версией основной модели.
Фотография: PTC.

Опыт работы

  • Начал в 2012, закончил в 2016.
  • Должность: Разработчик программного обеспечения.

Мои достижения

Во время работы над программой «PTC/Creo»:

  • Участвовал в разработке поддержки чертежей, созданных в программах-конкурентах.
  • Разрабатывал функциональность «Concept Design», позволяющую создавать несколько веток чертежей с возможными изменениями существующего проекта, сохранять особенно успешные чертежи, быстро переключаться между ними, видеть список изменений между чертежами и в конце концов решить, какой из всех этих прототипов лучше всего годится для того, чтобы назвать его новой итерацией основного проекта.
  • Участвовал в разработке продукта «Creo Layout», позволяющего воссоздать трёхмерный объект на основе двухмерных чертежей.

«PTC/Creo» за свою долгую жизнь работал на туче всевозможных платформ. Часть кода, который я видел, была написана в 1986 году, ещё до появления официального стандарта языка С. Эту программу можно было запустить на любой операционной системе, от IRIX до MacOS 9 Classic. В PTC меня научили правильному подходу к обеспечению портируемости программы: весь внутренний код программы начисто оторван от операционной системы, а между программой и операционной системой размещается библиотека HAL (Hardware Abstraction Layer), которая переводит вызовы программы в то, что ожидает операционная система. Таким образом, для запуска Creo на новой операционной системе нужно было всего лишь создать новый HAL.

Спустя неделю после начала работы в PTC мне поручили доказать, что я освоился с программой трёхмерного моделирования, и нарисовать колесо со спицами и ступицей. Я подошёл к вопросу креативно: моё колесо было золотым, с покрышкой из орехового дерева.
Собственноручно сделанный скриншот. Кликабельно.

Понятно, что абсолютное большинство HAL-библиотек давно не поддерживалось, — ну кому придёт в голову в 2014 году загружать систему трёхмерного моделирования на мёртвой операционной системе, последняя версия которой вышла в 2006 году? Тем не менее, в офисах было полным-полно оборудования, казавшегося мне легендарным: кинескопные мониторы Silicon Graphics, клавиатуры SUN с кучей дополнительных клавиш слева от буквенного блока, серверы HP-UX и прочее в том же духе… Разработка «Creo» тоже была необычной: код писали в операционной системе Solaris, тестировали под HP-UX, а компилировали и продавали версии под Windows и под macOS X. Я был третьим разработчиком, которому сразу поставили для разработки компьютер с Windows, и одной из моих первых задач было создать руководство по переносу всей разработки на Windows. После решения всех проблем я подготовил двухчасовую лекцию о порядке разработки, компиляции и тестирования под Windows, включая работу с системой управления версиями и прочими интересностями. Эта лекция прошла с полным аншлагом, потому что присутствие было обязательным, она даже была записана на видео в качестве руководства для последующих поколений. По результатам этого проекта я получил «Certificate of Excellence» («Сертификат за выдающиеся достижения») с сопутствующей денежной премией 😊

А у вас было когда-нибудь, чтобы баг сам намекал вам, где вы оказались? 😉
Собственноручно сделанный скриншот. Кликабельно.

Одним из недостатков «Creo» была необходимость статической линковки всей программы. Для Linux, Solaris и подобных систем вся программа компилировалась в один гигантский бинарник больше гигабайта весом. Всё, что только есть в «Creo», становилось частью этого исполняемого файла. Напоминаю, мы говорим о 2012 году; я никогда раньше не видел исполняемый файл такого размера, да и сейчас такие файлы — редкость, я надеюсь.

На мой вопрос «почему бы не распотрошить программу и не вынести её части в подгружаемые библиотеки» мне было сказано, что надо бы, но до этого никогда ни у кого не доходят руки. Тогда-то я и познакомился с тем, как относится начальство к термину „Refactoring”. Справедливости ради надо заметить, что другие разработчики всё-таки понимали, что это надо делать, выполняли refactoring по частям во время работы над другими проектами, и под Windows программа уже действительно могла похвастаться каким-то количеством динамически подгружаемых библиотек.

Большой проблемой было быстродействие программы. Детали в чертеже «PTC/Creo» связаны между собой. Их может быть много. В чертеже корабля (да, в «PTC/Creo» проектируются и корабли целиком тоже) может быть четыре миллиарда деталей, каждая с чётко прописанным расположением и с целым списком зависимостей: болтик А скрепляет между собой детали Б В посредством ушек Б1 и В1 с отверстиями в них. Изменение положения ушка Б1 ведёт к изменению детали Б, к изменению положения ушка В1 и детали В. Ушко с отверстием В1 при этом может оказаться в таком месте, где оно не может размещаться из-за того, что там уже помещается деталь Г. Изменение диаметра болтика А ведёт к изменению диаметра отверстий в ушках Б1 и В1, что потенциально отражается как на стоимости деталей, так и на их прочности. Всё это необходимо учесть.

Перерасчёт всего чертежа в результате изменения одного параметра (или больше) называется «регенерацией», потому что вся геометрия, по сути, пересоздаётся заново. И распараллелить эти вычисления на несколько разных потоков не получится, потому что заранее неизвестно, на какие именно части повлияет то или другое изменение одного параметра. Поэтому весь чертёж, сколько бы деталей в нём ни было, перерассчитывается снова, в один поток, по одной детальке за раз. Время регенерации чертежа корабля из четырёх миллиардов деталей на компьютере образца 2010-х годов вы себе хорошо представляете? Вот тут-то и были нужны способности программиста, умеющего писать быстрый и оптимизированный код. Коллеги, с которыми я работал в «PTC», просто настоящие звери, способные скомпилировать, отдебажить и запустить хоть программу XXII съезда КПСС, причём на минимуме ресурсов.

Во время работы над проектом «ThingWorx»:

Затем я в течение года участвовал в разработке проекта ThingWorx, платформе для быстрого развития проектов в сфере Industrial Internet of Things и Augmented Reality. На основе этой платформы, например, компания «John Deere» создала трактор, который сам заказывает деталь взамен сломавшейся, а приехавшему с деталью механику показывает в дополненной реальности, как эту деталь быстрее и правильнее заменить.

  • Я был единственным из всего коллектива, кто сидел в офисе в Хайфе; остальной отдел размещался в офисе в Герцлии. Моё особое положение послужило причиной того, что в течение первого года я практически всё время занимался научно-исследовательской работой, сравнивая различные технологии и давая рекомендации начальству.
  • Например, я сравнивал различные серверы баз данных и рекомендовал использовать в проекте PostgreSQL.
  • За эту свою научно-исследовательскую деятельность я получил оценку «Exceeded Expectations» («Выше ожидаемого») на ежегодной аттестации.
  • Выписка из результатов моей аттестации за 2015 год.
    Собственноручно сделанный скриншот. Кликабельно.
  • После того, как исследовательская фаза завершилась, мы начали писать код, причём на Angular JS. Я, системщик, должен был писать на JavaScript! Я ведь даже не знаю, под какой операционной системой мой код будет работать! Это оказалось настолько далеко от того, чем я любил заниматься, что я достаточно быстро взял ноги в руки и покинул это место.