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 11:11 am (UTC)(link)
Из того, что я успел заметить в этом вашем чятике, решение очевидно - переписать всё на кложуре. Ну или на руби. Но обязательно переписать!

[identity profile] metaclass.livejournal.com 2014-02-15 11:47 am (UTC)(link)
Если переписывание упростит жизнь на десять лет вперед - обязательно переписать.

[identity profile] bydlorus.livejournal.com 2014-02-15 11:54 am (UTC)(link)
Конечно же упростит. Этот вопрос даже не обсуждается. Очевидно, что основная проблема любой разработки на 100 подпроектов - это выбранный язык.

[identity profile] metaclass.livejournal.com 2014-02-15 12:01 pm (UTC)(link)
Если нужны функции высшего порядка, лямбды и метапрограммирование, а выбрана жаба - то это действительно проблема.

Я не знаю, может у вас на лавке запасных сидит сотня мидлов с джуниорами и всем похер, будут они код писать один день или неделю. А у меня сокращение трудозатрат на фигню вида "как сымитировать на дотнете лисп" сильно упрощает жизнь.

[identity profile] bydlorus.livejournal.com 2014-02-15 12:06 pm (UTC)(link)
> сымитировать на дотнете лисп

Да просто странные задачи в вашей предметной области. Обычно нужно что-то вроде "написать сайт". Из требований обычно сроки и затраты, "функции высшего порядка" в требованиях не встречал. Особенно после 10 лет разработки и при наличии 100 проектов.

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

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

[identity profile] bydlorus.livejournal.com 2014-02-15 12:29 pm (UTC)(link)
> Причем сделать так, чтобы при этом не сломались основанные на этом же коде еще пару десятков проектов,

Я так понимаю, для этого обычно все эти десятки проектов и переписываются на функциях высшего порядка.

[identity profile] metaclass.livejournal.com 2014-02-15 12:41 pm (UTC)(link)
Они не переписываются, они изначально так пишутся.

А вообще - если я вижу что одной лямбда функцией можно заменить интерфейс+реализацию (до какого-то там дотнета не было лямбд и вывода типов нормального), то я так и делаю - меньше кода, меньше в голове держать.

Edited 2014-02-15 12:42 (UTC)

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 12:44 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-02-15 12:52 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 13:11 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-02-15 13:24 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 15:30 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-02-15 16:23 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2014-02-15 16:35 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-02-15 16:50 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 16:59 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-02-15 18:47 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 19:09 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2014-02-15 19:13 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 19:18 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-02-16 08:14 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2014-02-16 08:21 (UTC) - Expand

(no subject)

[identity profile] osdm.livejournal.com - 2014-02-17 09:51 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-02-17 10:27 (UTC) - Expand

(no subject)

[identity profile] osdm.livejournal.com - 2014-02-17 10:32 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-02-17 11:16 (UTC) - Expand

[identity profile] mudasobwa.livejournal.com 2014-02-16 05:26 am (UTC)(link)
А писать подпроекты на разных языках — запрещено директивой №125887432504?

[identity profile] bydlorus.livejournal.com 2014-02-16 07:53 am (UTC)(link)
Все на разных или можно комбинировать? Сколько должно быть подязыков в подпроектах, чтобы хипстеры остались довольны, есть какие-то критерии? А то хипстеры не спрашивают ведь, какие и что... слышат С++ и сразу "переписать!" орут, ручки трясутся, жилка синяя на лбу бьётся, слюна в уголке рта...

[identity profile] mudasobwa.livejournal.com 2014-02-16 09:27 am (UTC)(link)
Я не собирался оскорблять ваши религиозные догматы, я лишь заметил, что проблема выбора языка устарела на 15 лет.

[identity profile] bydlorus.livejournal.com 2014-02-16 09:58 am (UTC)(link)
Именно поэтому, кроме 10mloc на с++, используется ещё куча других языков, для своих задач. Но это никого не интересует, общая диспозиция такая: "C++? - Заменить!".

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

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

[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 млн строк, чтобы выросла производительность его исполнения и уменьшилось потребление памяти? Весь целиком на шейдерах или какой-то другой вариант?

(no subject)

[identity profile] jakobz.livejournal.com - 2014-02-15 15:49 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-15 15:57 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2014-02-16 08:22 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-16 08:50 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2014-02-16 17:30 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-16 17:40 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2014-02-16 17:51 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-16 17:58 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2014-02-16 18:04 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2014-02-16 18:08 (UTC) - Expand

[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)
Как раз на хаскеле что-то (бессмысленное и мало кем используемое) есть, а на скале нет. Сервисы, фреймворки, но не продукты.

[identity profile] avnik.livejournal.com 2014-02-15 03:27 pm (UTC)(link)
Даже на lein скорее, а не просто на кложури.