metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-02-15 01:59 pm

Безумие и отвага

Вопрос на собеседование:
Вам дается 100 проектов, содержащих t4 шаблоны, написанные старообрядческими псоглавцами.
Ваша задача написать MSBuild скрипт, который перегенерирует весь код, созданный из этих шаблонов.

Смех тут в том, что студия перегенерирует код только если зайти в t4 шаблон и пересохранить его, чтобы время изменилось. А изменение файлов, включенных через include не вызывает перегенерацию.

[identity profile] bydlorus.livejournal.com 2014-02-15 03:23 pm (UTC)(link)
Речь идёт о том, что люди советуют переписать проект, которому 10-15 лет, в котором 10 миллионов строк кода, который активно продаётся, портируется на другие платформы, и над которым трудятся сотни уже обученных программистов, с С++ на их уютный лямбда-язык. Потому что С++ это же фуфуфу. Ну типа перепишем всё это на руби и сразу наступит щасте.

[identity profile] jakobz.livejournal.com 2014-02-15 03:35 pm (UTC)(link)
Во-первых, нигде выше в камментах нету упоминания про этот проект.

Во-вторых 10 миллионов строк кода на C++, которые еще и продаются, определенно стоит если не переписать, то потихоньку переписывать. Вынимать high-level логику в более приспособленный язык. Этот путь уже прошли даже игры, где производительность и память в абсолюте. Если у вас какой-нибудь QT на плюсах для UI - вы просто слоупоки.

[identity profile] bydlorus.livejournal.com 2014-02-15 03:38 pm (UTC)(link)
И на чём переписывают C++, чтобы производительность выросла, а потребление памяти упало?

[identity profile] jakobz.livejournal.com 2014-02-15 03:42 pm (UTC)(link)
Чтобы производительность приложения выросла - на шейдеры. Чтобы производительность команды выросла - на все что угодно - по производительности труда C++ сосет у всех существующих и даже влачащих жалкое существование языков.

[identity profile] bydlorus.livejournal.com 2014-02-15 03:47 pm (UTC)(link)
Речь шла о производительности программы, не надо перескакивать на команду. GPU в проекте используется - отдельно для особо нагруженных статвычислений. На какой именно из языков программирования вы предложили в предыдущем комменте переписать проект на 10 млн строк, чтобы выросла производительность его исполнения и уменьшилось потребление памяти? Весь целиком на шейдерах или какой-то другой вариант?

[identity profile] jakobz.livejournal.com 2014-02-15 03:49 pm (UTC)(link)
> Речь шла о производительности программы

Да ну! Где? И что же вы такое пишете на 10 миллионов строк высокопроизводительное?

[identity profile] bydlorus.livejournal.com 2014-02-15 03:57 pm (UTC)(link)
Да, реально речь шла наоборот, о переписывании логики на высокоуровневом языке, не так понял.

Но для этого в проекте есть два своих встроенных языка. Собственно, проект заключается в написании платформы для построения других приложений. Также, хочу заметить, что 10 миллионов строк кода - это только сама основа. Ещё туева хуча кода на встроенных языках, кода клиентов (тонкий на js, мобильные клиенты и т.п.), кода тестов, кода сторонних приложений (всякие сервера поиска), кода сервисов (в т.ч. на жабе, например). Не сомневаюсь, что и это всё тоже надо переписать на руби.

[identity profile] blackyblack.livejournal.com 2014-02-16 08:22 am (UTC)(link)
2 своих встроенных языка, 10 млн строк на с++, повысить производительность и снизить выделение памяти... Вам по такому проекту никто ничего конкретного посоветовать не сможет, потому как специфика какая-то очень специфичная. Переписывать всё не нужно, но выделять из системы подсистемы (с 10 млн строк кода это просто необходимо) и переписывать их на более поддерживаемых языках вполне реально. В итоге вполне вероятно может вырости и производительность, и кодовая база может уменьшиться, и на поддержку можно будет меньше народа сажать.

[identity profile] bydlorus.livejournal.com 2014-02-16 08:50 am (UTC)(link)
Смешно, да. Только портировали на линукс и другие платформы (типа макос), а теперь будут опять переписывать. Всё чтобы хипстеры не остались без работы.

[identity profile] blackyblack.livejournal.com 2014-02-16 05:30 pm (UTC)(link)
Причём тут хипстеры? Вы при портировании увеличили кодовую базу и увеличили затраты на поддержку. Грамотное разбиение софта на подсистемы и переписывание части подсистем на адекватные языки позволит снизить затраты на поддержку и уменьшить кодовую базу.
Зачастую при переписывании на функциональном языке проявляются алгоритмические проёбы, которые никаким с++ не компенсируются.

[identity profile] bydlorus.livejournal.com 2014-02-16 05:40 pm (UTC)(link)
Вы предполагаете, что
- С++ неадекватный язык - несмотря на то, что на нём уже написан огромный проект и он приносит прибыль, так что непонятны ваши критерии адекватности
- система не разбита на подсистемы - а она разбита, и весьма грамотно
- существуют "адекватные" и "неадекватные" языки в вакууме, т.е. сами по себе, без конкретной ситуации
- сами по себе языки (а именно функциональные) позволяют выявить какие-то там проёбы, видимо, они и есть серебряная пуля

В общем, мне даже непонятно, как тут можно спорить, вы совершенно во всём правы.

http://www.joelonsoftware.com/articles/fog0000000069.html

The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they've been fixed.

[identity profile] blackyblack.livejournal.com 2014-02-16 05:51 pm (UTC)(link)
"С++ неадекватный язык"
В подавляющем большинстве случаев.

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

"существуют "адекватные" и "неадекватные" языки в вакууме"
Нет, если бы существовали адекватные языки в вакууме, я бы предложил переписать весь проект на адекватный язык. Я же предложил переписать часть подсистем на адекватный язык. Очевидно, адекватный предметке конкретной подсистемы.

"сами по себе языки (а именно функциональные) позволяют выявить какие-то там проёбы"
Вы в это не верите? Серьёзно? Даже ни тени сомнения? Ну извини, даже обсуждать тогда не хочется.

[identity profile] bydlorus.livejournal.com 2014-02-16 05:58 pm (UTC)(link)
Так я не понял, надо переписывать все старые проекты с кобола на что-то современное, или не надо? Потому как вопрос стоит так, что надо и это не обсуждается - если речь о с++. А про кобол, тоже безоговорочно переписывать? Я так понимаю, что да, странно, что вы упомянули только, что на нём больше не пишут, ведь очевидно, что все проекты на коболе давно переписывают на руби и функциональных языках, позволяющих выявить проёбы старых проектов на коболе.

[identity profile] blackyblack.livejournal.com 2014-02-16 06:04 pm (UTC)(link)
Я не знаю, переписывают ли все проекты на коболе или нет. Если бы у меня был проект на коболе, то я бы его не трогал, до тех пор, пока не потребуется новый функционал, который внедрить будет дороже, чем переписать заново.
Ещё раз, я ни разу не сказал, что нужно всё и безоговорочно переписывать. Нужно в любом случае сравнивать отдачу от переписывания с затратами.

[identity profile] bydlorus.livejournal.com 2014-02-16 06:08 pm (UTC)(link)
Мне почему-то утверждают, что безусловно С++ нужно переписать. Несмотря на то, что люди проект в глаза не видели, а ответственные за него уже приняли решение не переписывать, а продолжать и портировать, и это при том, что в проекте уже достаточно других языков. Рад, что речь наконец-то зашла о затратах. А может, дело даже и не в затратах. Просто у людей есть опыт работы с функциональщиками, и она решили - а ну его нахер, пусть лучше С++. Всякое бывает ;-)

[identity profile] anonim-legion.livejournal.com 2014-02-15 03:56 pm (UTC)(link)
САПР какой-то пишете?

[identity profile] bydlorus.livejournal.com 2014-02-15 03:58 pm (UTC)(link)
olap/bi

[identity profile] metaclass.livejournal.com 2014-02-15 04:21 pm (UTC)(link)
Переписывать в таком виде нахрен не надо, да.
Но может оказаться, что трудозатраты на поддержку и доработку некоторых подсистем можно сократить, втащив лямбды и прочую чернягу, тогда нужно будет сравнивать - то ли лучше долго, медленно, но без потрясений писать на С++, то ли втянуть одноразово что-нибудь более вменяемое, с учетом потенциальных затрат на поддержку в будущем.

[identity profile] bydl0coder.livejournal.com 2014-02-17 07:02 am (UTC)(link)
Если вы такие умные, почему строем не ходите? Почему на хаскеле, скале и окамле ни одного продукта нет?

[identity profile] metaclass.livejournal.com 2014-02-17 07:30 am (UTC)(link)
На скале есть, а хаскель с окамлом весьма специфические в плане библиотек и их версий.

[identity profile] bydl0coder.livejournal.com 2014-02-17 09:59 am (UTC)(link)
Как раз на хаскеле что-то (бессмысленное и мало кем используемое) есть, а на скале нет. Сервисы, фреймворки, но не продукты.