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

[identity profile] metaclass.livejournal.com 2014-02-15 04:23 pm (UTC)(link)
Блядь, на улице 2014 год и 4.5 дотнет. Если уж перетаскивать то сразу на него, чтобы потом еще десять лет не ждать.

[identity profile] metaclass.livejournal.com 2014-02-15 04:50 pm (UTC)(link)
Для 4 дотнета срок выдержки для выпадания хипстерятины в осадок уже прошел, а трудозатраты по переносу между 1.1->2.0 и 1.1->4.0 совершенно однохренственны.
Кроме того, начиная с 3.5-4.0, имеются в меру полезные вещи. которых раньше не было - лямбды, LINQ, параметры по умолчанию, динамики и прочее такое.

У меня есть несколько сторонних либ в проекте, так они успешно все на 4.5 сбежали уже, впрочем для таких случаев я либо их пересобираю под свою версию, либо бэкпортирую новые фичи :)

[identity profile] bydlorus.livejournal.com 2014-02-15 04:59 pm (UTC)(link)
На сервере 2-й. Собрали под 2-й и всё работает. Зачем нужно ставить на сервер 4-й, в этом какой-то профит? Чего ждать 10 лет? Вот не понимаю я. Зачем делать ненужную на данный момент работу, может, через год фирма разорится и ничего уже и не надо будет. Да мало ли что ещё может быть.

[identity profile] vp.livejournal.com 2014-02-15 06:47 pm (UTC)(link)
Безусловно, если проект не развивается - нечего его трогать. Но если по плану проект проходит рефакторинг и человек на нем серьезно работает, то есть всегда 100500 мест, например, с обработками безумных списков, где не использовать всю мощь .нета, коя в linq - это ИТ преступление. Ибо после рефакторинга такого рода выражение читается почти как на человеческом языке, вместо того, что там раньше было. Вы не согласны?

[identity profile] bydlorus.livejournal.com 2014-02-15 07:09 pm (UTC)(link)
Безусловно, согласен. Более того, linq на полную мощь я начал использовать сразу, как он только появился (ну, например, когда его поддержка в NHibernate ещё не была закончена, не говоря уже о повсеместно Linq-to-Objects в коде). Однако в данном случае я привёл конкретный пример и даже прямо указал, что проект критический, управляет лицензиями. Когда мы переписывали этих "червей и голоса из розеток" (а точнее код внутри MS Commerce Server) на что-то нормальное (я принял решение использовать появившийся тогда ASP.NET MVC и не прогадал), мы обсудили этот сервер лицензий и приняли решение оставить его как есть, а не то что переписывать. Даже на тот момент .NET 1.1 был устаревшим (пришлось ставить MSBee), но его работа была слишком критической, а т.к. это в общем-то веб сервис, то снаружи не важно, на чём он крутится.

Но тут-то суть в том, что даже неглядя на чёткое указание - критический проект, решили не переписывать - и неглядя на отсутствие информации, развивается проект или нет, ребе М. настаивает на переписывании. Сразу и безоговорочно. Ну фетиш такой у человека, что ли. Что странно, т.к. ребе М. признался, что сам-то он ничего не переписывает. Только другим советует.

[identity profile] berezovsky.livejournal.com 2014-02-15 07:13 pm (UTC)(link)
В чём понт употреблять жидовские обращения типа "ребе"? Жиды - это типа смешно?

[identity profile] bydlorus.livejournal.com 2014-02-15 07:18 pm (UTC)(link)
Уважаемые ребе называют себя ребе. Я просто говорю с ними на их языке. Не называть же их мне жидовскими мордами, в самом деле?

(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

[identity profile] osdm.livejournal.com 2014-02-17 09:51 am (UTC)(link)
Читается отлично! Одна проблема - очень тормозит. LINQ можно использовать только там, где перформанс не критичен.

[identity profile] metaclass.livejournal.com 2014-02-17 10:27 am (UTC)(link)
Почему он тормозит? Там же либо тупая функциональщина либо генерация SQL.

(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++? - Заменить!".