metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-01-06 02:14 pm

Вползающий карго-культ

Ждевелоп написал очередной пост из серии "как на самом деле все происходит в ИТ" с привлечением меня в качестве отрицательного примера: http://jdevelop.livejournal.com/2067575.html
Парадоксально, но факт - метаклассы аутисты, даже будь они сто тыщ раз основа основ компании - в результате замыкают все на себя, и если они на более-менее ключевой позиции - то разработка превращается в карго-культ правил, которые остальные не понимают, а глава секты не считает нужным пояснить/написать/обсудить.

В данном случае, он прав, потому что я не умею объяснить некоторые вещи коллегам и разработка кое-где превратилась в натуральный карго-культ. Причина в том, что в силу ограниченности ресурсов, меня хватает только на то, чтобы "натянуть кложурь/F# на firebird/postgresql/mssql" из-за чего некоторые архитектурные решения и их причины остаются задокументированными только в виде заметок в таск-трекере. Ну скажем, я сейчас одновременно делаю 4 проекта, из которых два коробочных, и единственный способ при этом не сойти с ума - это делать их на общей кодовой базе, что налагает на нее некоторые ограничения, которые не очевидны коллегам, не видящим всей картины в целом.

Второй аспект, который лично мне не совсем очевиден до сих пор - это степень моей личной вины в разного рода нетривиальной херне, накопившейся за 15 лет работы. Кое-где причина заведомо в том, что я не умел в общепринятые инструменты (один проект, существующий с 1997 года, использует совершенно невменяемый велосипедный фреймворк, разработанный в припадке идиотизма и только сейчас дошли руки это наконец-то заменить на нормальный код, благо с тех пор появились интернеты, нормальные сервера и сети у клиентов).
Но вот конкретно текущая ситуация с несколькими проектами на двух работах, использующими общую кодовую базу и разного рода нетривиальные кодогенераторы и F# с кложурью - с ней не очевидно. С какой стороны я на это не посмотрю, альтернатива была только одна - упростить все в несколько раз, отказаться от мысли запустить где-то кроме винды, использовать только Firebird, снизить количество проектов до одного, убрать кодогенераторы и отказаться от повторного использования кода. Из плохого для конторы и клиентов тут только снижение эффективности/скорости работы, т.к. F#/clojure/метапрограммирование с кодогенераторами все-таки сильно упрощают разработку.

[identity profile] raydac.livejournal.com 2014-01-06 11:27 am (UTC)(link)
все думаю возродить нетривиальную херню в лице вебсервера с языком форт использованным для написания энтерпрайз системы

[identity profile] metaclass.livejournal.com 2014-01-06 11:32 am (UTC)(link)
Форты и всякие такие встраиваемые интерпретаторы это хорошо против больных на голову заказчиков, которые требуют проект на не подходящем для задачи языке.

[identity profile] vit-r.livejournal.com 2014-01-06 11:36 am (UTC)(link)
Не надо путать объяснение и обучение. Джобс - вон тоже один был и сейчас видно, насколько он был необходим. Незаменимые люди есть. И довольно часто.

А остальные, если не понимают, то спрашивают. Но для этого тоже надо набрать определённый уровень.

[identity profile] aamonster.livejournal.com 2014-01-06 11:37 am (UTC)(link)
Э... Честный форт, с единственным типом данных (число, оно же указатель на переменную или на слово)?
Или нечто на основе форт-машины вокруг строк (вроде вебсервера с ними много работают?)?

[identity profile] raydac.livejournal.com 2014-01-06 11:39 am (UTC)(link)
да forth это нормально и кошерно, там только обратная польская запись народ пугает.. я тут недавно в праздники с qbasic на питон проект один переписывал который формирует wav файлы для заливки в бк-0010, вот только теперь я можно сказать понял что такое реальный семантический разрыв между задачей и языком, я иногда без поллитра не мог понять что автор хотел сказать даже тем или иным участком кода в котором он оперировал двоичными данными жонглируя ими через строковые представления

[identity profile] raydac.livejournal.com 2014-01-06 11:41 am (UTC)(link)
не, там был не настолько низкоуровневый, он был поверх jvm и поэтому на стек можно было класть long и string

[identity profile] anonim-legion.livejournal.com 2014-01-06 12:07 pm (UTC)(link)
Прелесть какая. А что на оной херне было написано?

[identity profile] raydac.livejournal.com 2014-01-06 12:11 pm (UTC)(link)
система обработки заказов для одного завода, года полтора два проработала, потом переписали на перл вроде как, а то сложно было людей знакомых с фортом ужо в 99-2000м найти

[identity profile] anonim-legion.livejournal.com 2014-01-06 12:18 pm (UTC)(link)
Переписать с форта на перл для большей понятности - это достойно башорга... Тем более, что по вашим словам, оно изначально было сделано поверх jvm.

[identity profile] raydac.livejournal.com 2014-01-06 12:22 pm (UTC)(link)
я тогда уволился, а пришел человек со знанием перла, при таком выгоднее было на перл переписать, а то когда я увольнялся, они честно несколько месяцев искали в питере коголибо со знанием явы и форта, не нашлось.. в конце 90-х вообще с этим всем проще было, это сейчас все рабы трендов ))

[identity profile] falcrum.livejournal.com 2014-01-06 12:25 pm (UTC)(link)
Вроде тебе уже стопиццот раз объясняли, что основная проблема - это твоя незаменимость противогазами.

[identity profile] metaclass.livejournal.com 2014-01-06 12:31 pm (UTC)(link)
Ну так я до сих пор понять не могу - я в этом виноват или противогазы.

Просто общаясь в узком кругу айседов, руССких функциональщиков и прочих, сложно понять, какой реальный уровень разработчиков сейчас и на что лучше ориентироваться - на 10 обычных разработчиков или одного хорошего. При том, что по баблу и времени разработки тоже хрен поймешь, что лучше. Ну в целом, 10*1.5к явно больше чем 1*5к, но проблема в том, что на самом деле есть 2*3к (разные проекты для разных заказчиков и на разных языках) и с этим приходится вертется.

[identity profile] tiendil.livejournal.com 2014-01-06 12:39 pm (UTC)(link)
>Причина в том, что в силу ограниченности ресурсов, меня хватает только на то, чтобы "натянуть кложурь/F# на firebird/postgresql/mssql" из-за чего некоторые архитектурные решения и их причины остаются задокументированными только в виде заметок в таск-трекере.
Ну так для этого же есть археология кода или как там её правильно называть. Имхо, обязательный навых для всех. Не знаешь почему так сделано — лезешь в логи репозитория, в таски и смотришь.

[identity profile] metaclass.livejournal.com 2014-01-06 12:48 pm (UTC)(link)
Ну вот я в это умею (типа раскопать в чужом коде предысторию), а как объяснить другим - хрен его знает :)

[identity profile] serbod.livejournal.com 2014-01-06 01:02 pm (UTC)(link)
Похоже, это такая беда славянских программеров - полдня спорить и доказывать, что это сложно, невыгодно, нереализуемо. И за пять минут сделать.

Вот, пример моего лога, прямо из исходника, в начале файла. Размером примерно как твой пост:
---------------------------------------------------------------------------------------------------------------------------------------------------------------


Первоначально, программа работала как автономный демонстрационный модуль
управления шкафами, без связи со школьной базой. Все настройки хранились в конфиге.

2013-08-02
Добавилась связь со школьной базой, в ней хранились свойства шкафов и ячеек,
список аккаунтов. Была создана форма аренды ячеек (привязки аккаунта к ячейке),
формы редактирования шкафов и ячеек, формы журнала аккаунтов по классам и журнала
аренд, дерево разделов - классы, ящики, аренды. Добавлена возможность работы с
несколькими школами с общими шкафами. (для "двойной" школы в Питере)

2013-09-12
Добавились хранимые процедуры для изменения свойств шкафов и ячеек, и для аренды
(в центральной базе). Отключена возможность аренды и журнал аренд.

2013-09-02
В локальной базе заблокирован доступ к записи в таблицы шкафов и ячеек,
остались только процедуры для установки некоторых свойств. Создание и редактирование
шкафов и ячеек планировалось осуществлять в админке.

2013-09-11
В центральной базе появилась процедура для загрузки описания шкафов и ячеек
в виде XML. То есть, шкафы и ячейки создаются здесь, а потом подключаемся к центральной
базе и передаем содержимое XML-файла в процедуру. После этого подключаемся к школьной
базе, вызываем процедуру синхронизации с центральной базой, и в дальнейшем читаем
таблицы шкафов и ячеек из школьной базы.

2013-09-24
Принято решение, что изменения свойств шкафов и ячеек осуществляются здесь, а потом
измененные шкафы и ячейки сериализуются в XML и выгружаются на сервер, как при
создании шкафов. Отключены журналы аккаунтов, убрано пустующее дерево разделов,
формы шкафов перенесены на закладки.

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

2013-10-24
Заново включено периодическое чтение списка шкафов и ячеек из школьной базы.

2013-11-21
Исправлено чтение конфига логгера, добавлена информация о версии, код карты
пишется в ячейку шкафа при каждом цикле опроса

[identity profile] eleon.livejournal.com 2014-01-06 01:17 pm (UTC)(link)
Виноват не ты.

Ориентироваться лучше на 10 артурегов, чтобы bus factor был побольше. Артурега заменить проще, чем метакласса.

Экономически, без учета рисков, лучше работать с айседами и метаклассами, потому что айсед и метакласс на пару стоят как всего 6-7 арутрегов, а скорость обеспечивают, как 20. Но, сука, риски...

[personal profile] alll 2014-01-06 01:28 pm (UTC)(link)
Как человек, немного знакомый с фортом, перлом, питоном и C++ могу сказать, что написание кода например на C++ постоянно заставляет вспоминать анекдот "и эти люди запрещают мне ковырять в носу".

[identity profile] c-a-s-u-s.livejournal.com 2014-01-06 01:29 pm (UTC)(link)
плюс время хантинга другого гуру намного больше чем время хантинга не гуру, что увеличивает риски

[personal profile] alll 2014-01-06 01:34 pm (UTC)(link)
Да может и не надо объяснять червей и пауков, а надо лепить слой абстракций, на котором незамутнённые кодеры видят только розовых единорогов.

[identity profile] juan-gandhi.livejournal.com 2014-01-06 02:13 pm (UTC)(link)
Альтернативой кодогенератору может быть только интерпретация. (Я ничего не предлагаю, просто философствую.)

[identity profile] ng67.livejournal.com 2014-01-06 02:20 pm (UTC)(link)
Ну и зачем? Почему не использовать современные инструменты?

[identity profile] gds.livejournal.com 2014-01-06 02:22 pm (UTC)(link)
пробовали, гадость редкостная. Именно поэтому я сейчас делаю что-то типа ruby on rails, но без руби, а с окамлом и кодогенерацией.

[identity profile] falcrum.livejournal.com 2014-01-06 02:23 pm (UTC)(link)
Это проблема, когда метакласса переехало трамваем. Всё, контору можно закрывать.

[identity profile] ng67.livejournal.com 2014-01-06 02:23 pm (UTC)(link)
Вы просто не умеете их готовить.
Поверьте...

[identity profile] gds.livejournal.com 2014-01-06 02:25 pm (UTC)(link)
умею, но не люблю.

Page 1 of 3