metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-07-15 04:56 pm
Entry tags:

О допустимой сложности

Очередной раз уткнулся на работе в безумие.
Безумие заключается в том, что теоретически правильные методики работы приводят к разрастанию непонятного кода.
Теоретическая правильность заключается в DRY. Т.е. куски кода и данных, являющиеся отражением одних и тех же сущностей или потоков данных предметной области выносятся в отдельные модули, обобщаются, делаются универсальными и прочее.
Причем тут именно что не натягивание совы на глобус, когда "похожие" функции и данные насильственно обобщаются, а только те, где написание двух раздельных заведомо приведет к необходимости синхронной правки двух и более разных мест кода.

А возникающая непонятность - это то, что в результате один конечный результат работы зависит от десятков модулей, в каждом из которых функции высшего порядка посылают другие функции третим функциям, возвращающим функции, которые обрабатывают списки функций.
Это условно говоря, на практике там ничего сложнее "передать функцию-конвертор и параметры в обобщенную функцию и получить результат" нету. В паре мест есть reduce внутри reduce для сложной группировки, все это занимает 10-20 строк кода и спокойно целиком вмещается на экран.
Подобные вещи для меня являются достаточно простыми и самоочевидными. Даже в чужом коде (нормально написанном) понятно, как с таким работать: открываешь самую верхнюю функцию и начинаешь от нее идти по дереву вызовов, постепенно отсекая неинтересные ветки, пока не доберешься до нужной. Это даже в крестиках-жабах-дотнетах-питонах просто, а в функциональных языках с их лаконичностью и того проще.

А проблема в том, что потом это нужно объяснить коллегам. И тут начинается какая-то знатная хрень, потому что я объяснить не могу.
Для меня очевидно, что map/filter/reduce - это как 2+2, обработка последовательностей, на которой вообще вся эта функциональщина стоит, и что структура данных определяет вызываемые для нее функции и что общие функции и данные нужно выносить в отдельные модули, а не писать каждый раз заново одно и тоже. Но процесс раскладывания в уме ТЗ на эти базовые блоки и обратной сборки конечного результата из блоков - объяснению не поддается.
Писать же код в "понятном стиле", в том смысле, чтобы минимизировать сложность за счет написания в лоб, без зависимостей, не выделять отдельные функции для удобства чтения - это, по моему, какой-то совсем уже бред.

[identity profile] falcrum.livejournal.com 2012-07-15 03:06 pm (UTC)(link)
Ты понял, о чём я. Как только тебя перекупит Айсед, дети ребе Б начнут кушать картофельные очистки. :)

[identity profile] aamonster.livejournal.com 2012-07-15 03:21 pm (UTC)(link)
Почему-то у меня "перекупит Айсед" однозначно воспринимается как "перекупит и пустит на органы", потому как готовность ребе Айседа признать пригодность отличных от него человеческих существ к какой-либо деятельности - ну никак в голове не укладывается.

[identity profile] falcrum.livejournal.com 2012-07-15 03:30 pm (UTC)(link)
Ну, данный социопат :) (хотя он что-то такое уже и озвучивал) упомянут лишь в смысле "тот, кто даст в два раза больше денег". Но, вообще, то, что топикстартер начинает подобные проблемы обсуждать публично - уже вполне симптом.

[identity profile] metaclass.livejournal.com 2012-07-15 03:36 pm (UTC)(link)
Я их уже давно обсуждаю, в том числе и на работе. Проблема не решается, а меня потиху начинает бесить, что приходится объяснять элементарные вещи.

[identity profile] aamonster.livejournal.com 2012-07-15 03:47 pm (UTC)(link)
Я подобные проблемы (про число грузовика == 1) на прошлой работе обсуждал несколько лет. Но таки когда жареный петух в задницу клюнул (пришло интересное предложение... в итоге, правда, устроился в третье место, и как раз примерно с удвоением зарплаты) - сумел за разумное время передать дела.

[identity profile] mend0za.livejournal.com 2012-07-15 09:22 pm (UTC)(link)
В оффлайне он милый и вежливый. Особенно на работе. Там может и в еблет прилететь, не то что в жежешечке, воен и берсеркер.


[identity profile] nivanych.livejournal.com 2012-07-16 03:13 am (UTC)(link)
Он же такой большой и толстый!
Кто на него полезет-то!
;-)

[identity profile] aamonster.livejournal.com 2012-07-16 08:12 am (UTC)(link)
Сенсация дня! Айседа бьют по лицу на работе! :-D