metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-02-15 12:43 pm

Об изобретении велосипедов и "готовых" решениях

Как известно, страшным грехом в современном программировании считаются синдром NIH, изобретение велосипедов и попытки решить уже решенные задачи, а уже нахождение новых задач - страшнейшее богохульство, на уровне осквернения могил и нежелания смотреть олимпиаду по телевизору.
В связи с этим, в своих дотнет-проектах я стараюсь использовать два стандарных инструмента: MSBuild для сборки и t4 для генерации повторяющегося кода.
Так вот, если первый всего лишь содержит мелкие странности (типа считает переменные окружения своими переменными, но не передает автоматически свои обычные переменные, если вызывает сам себя и не содержит внятных средств организации подпроцедур - т.е. области видимости переменных в нем - это ad-hoc ад писанный людьми, которые никогда не читали SICP), то второй - это теоретически правильное, но неудобное при разработке дичайшее безумие.
И я уверен, что аналогичный темплейтер, сделанный на clojure, был бы намного понятнее, нежели "готовое" решение.

[identity profile] bydl0coder.livejournal.com 2014-02-15 11:56 am (UTC)(link)
Да когда как. Встречал и любителей текст писать и тех, у кого в шаблонах никаких дивов-классов не было, одни хелперы. Хорошо, когда шаблонизатор оба подхода поддерживает, как в рельсах, например.

[identity profile] jakobz.livejournal.com 2014-02-15 12:03 pm (UTC)(link)
Моя позиция примерно такая: да, если обезьянам дать гранату - они могут покалечиться. Но я не обезьяна, и мне не нравится что мне по этой отмазке гранату не выдают. И мне не нравится что людей по-умолчанию считают обезьянами.

[identity profile] bydl0coder.livejournal.com 2014-02-15 12:06 pm (UTC)(link)
Так сложно правильную гранату сделать. Я с ходу не представляю даже, какой в сишарпе может синтаксис, для передачи шаблона в хелпер.

[identity profile] bydl0coder.livejournal.com 2014-02-15 12:11 pm (UTC)(link)
В руби передача шаблона в хелпер работает, потому что такой синтаксис, любому методу помимо аргументов из его декларации можно передать еще и функцию. Будет он ее использовать или нет - его дело, но передать можно. Типа такого:
def foo(x)
  # doing stuff
end

foo(10) do
  puts "Some stuff for foo to call"
end