В 2017-м году я проходил собеседование в одну компанию, которой на очень специфический проект нужен был человек с очень специфическим набором знаний, а именно: портирование windows-приложения на linux. Специфика заключалась в том, что приложение было написано на C# и C++ и задача стояла максимально сохранить существующую кодовую базу. Одна из идей состояла в том, что пользовательский интерфейс писать на python и из него дергать библиотеки на C# (перекомпилированные компилятором mono под linux), которые в свою очередь, дергают библиотеки на C++. Никаких оберток для вызова шарповых dll из питона не существовало, но зато существовал способ вызывать нативные библиотеки из питона и способ вызывать шарповые библиотеки из кода на C/C++. В итоге я решил написать такую прослойку сам. В итоге должно работать как-то так:
Добавилось два новых "слоя" - питон и нативная обертка для вызова шарповых библиотек. Выглядит громоздко, но иначе никак. В теории понятно, как делать, и за пару дней я сделал это все на практике на линуксе, создав набор из файлов исходного кода и скриптов, которые собирали все в готовые к работе библиотеки. Сейчас-то я понимаю, что тут ничего аж такого гениального нет, но на тот момент я собой гордился. Самое интересное, что из всех людей, которые собеседовались параллельно со мной на эту позицию, эту задачу смог решить только я, так что повод для гордости все же есть. Потому что питонщики понятия не имеют, что такое С++ (что как раз понятно), а те плюсовики, которых собеседовали, имеют смутное представление о C# и питоне и тем более как это взаимодействует с нативными библиотеками.
Но мне понравилось не только это а еще и то, что на собеседовании никто не мурыжил "классическими" вопросами типа "а зачем в С++ виртуальный деструктор" или "напишите свой собственный умный указатель". Спрашивали прямо по проекту и именно то, что от меня в итоге хотели получить.
Комментарии