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

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

Date: 2014-02-15 02:23 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Если что, эти ваши джавы, на которых эти ваши 10 джуниоров с эффективностью в -0.01% от метакласса пилят опердени, придумали такие же точно метаклассы. Нет ничего плохого и невозможного в том, что умный чувак напилит себе уютный язык/фреймворк/тулзу/генератор кода, который позволит ему делать работу в 10 раз быстрее. И ничего плохого нет в том, что эта тулза будет сыроватая и пропиетарная, и юзабельна только автором. В конечном итоге все библиотеки выкристализовываются из такого вот опыта.

А позиция "я буду херачить дрова на яве, а эти дебилы пусть дальше изобретают бензопилу, пойду обосру их" - она глупо выглядит банально. Со скудоумием можно уметь жить достойно, и трудоустраивать скудоумных - тоже хорошая тема. Но возводить скудоумие в идеал - это уже смешно выглядит.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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

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

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

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

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

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

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

Date: 2014-02-15 03:58 pm (UTC)

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

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

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

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 27th, 2025 05:36 pm
Powered by Dreamwidth Studios