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] metaclass.livejournal.com 2014-02-15 11:48 am (UTC)(link)
ЕБАНЫЙПИЗДЕЦЯПОШУТИЛЖЕ!

[identity profile] denisioru.livejournal.com 2014-02-15 11:48 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)

[identity profile] bydlorus.livejournal.com 2014-02-15 12:44 pm (UTC)(link)
> изначально так пишутся

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

[identity profile] metaclass.livejournal.com 2014-02-15 12:52 pm (UTC)(link)
Я твои речи перестал понимать, можно переходить к инвективной лексике уже?:)

Если чо-то хочешь сказать, пиши прямо, а за ерничанием - к бостонскому в журнал, там такое любят.

[identity profile] bydlorus.livejournal.com 2014-02-15 01:11 pm (UTC)(link)
Я тоже не понимаю, мы вроде говорили о желании некоторых переписать проект на 100 подпроектов (и очевидно набрать/переобучить 100 новых программистов), а тут внезапно перешли на обсуждение чего-то, что уже написано на их любимом языке и переписывать не надо. Ну это они наивно думают, что не надо, т.к. считают, что с их-то любимого языка никто переписывать не будет. А потом придут менеджеры и скажут - нам нужны подешевле программисты, заменить все эти лямбды на что-то более индусское.

Критерии - они разные бывают.

[identity profile] metaclass.livejournal.com 2014-02-15 01:24 pm (UTC)(link)
100 проектов - это блин *.*proj в вижуал студии, средство разбиения проекта на подпроекты.
Никто ничего не переписывает, за исключением доработок с рефакторингом с вычищением накопившегося за десяток лет бреда. Или там например - зачем я буду использовать код 2005 года на .net 1.1, если он заменяется парой строчек на LINQ сейчас?

Если к тебе приходят менеджеры и говорят, на чем писать - у меня для тебя плохие новости :)

[identity profile] cottidianus.livejournal.com 2014-02-15 02:05 pm (UTC)(link)
> Смех тут в том, что студия перегенерирует код только если зайти в t4 шаблон и пересохранить его, чтобы время изменилось.
gmake умеет --always-make или .PHONY targets для вещей, которые надо пересобрать не смотря на таймштампы

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

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

[identity profile] anonim-legion.livejournal.com 2014-02-15 03:18 pm (UTC)(link)
А вы вроде с F# работали, у него есть мощнейшая система макросов. На ней кодогенерацию не делали?

[identity profile] metaclass.livejournal.com 2014-02-15 03:22 pm (UTC)(link)
В F# вроде макросов нет же? TypeProvider-ы и то начиная с какой-то версии, которую я у себя на 2010 студию воткнуть не могу.

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

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

[identity profile] bydlorus.livejournal.com 2014-02-15 03:30 pm (UTC)(link)
Как раз недавно перенесли проект с .net 1.1 на 2.0. Просто перекомпилировали. На лямбдах не переписывали, кложурь втыкать не стали. Зачем? Проект критический, управляет лицензиями, хипстеров к нему подпускать нельзя и новые баги там нежелательны.

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

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

[identity profile] jakobz.livejournal.com 2014-02-15 03:38 pm (UTC)(link)
Да в дотнете не сильно проблема генерировать MSIL налету - все имеется. Там написать компилятор какого-нибудь своего паскаля - задача для продвинутого студента. Нахер T4 - не ясно вообще.

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

Page 1 of 3