psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2005-11-06 11:23 pm

Программистское

Под катом много мата. Накипело.


Лектор по психологии труда - эдакий старичок-профессор толкует (цитирую по памяти): "концепция индивидуального стиля деятельности заключается в том, что каждый индивид достигает максимальной производительности, если имеет свободу варьировать трудовую деятельность под свой темперамент и индивидуальные черты характера. Например, ткачиха-холерик быстро бегает от станка к станку, ткачиха-флегматик двигается медленнее, но более рассчетливо, в результате обе достигают высокой произволительности. Чего бы не было, если бы они пытались подражать друг другу."

Я это к чему. У нас, в программировании, в последние годы, куда ни плюнь - в очередной пиздоблядский злоебучий стандарт попадешь. Жопу почесать нельзя без того, чтобы не вляпаться в очередной RPC, блядь. И как же они заебали этой модой на тотальную стандартизацию, чтобы пизду им только во сне видеть.

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

[identity profile] metaclass.livejournal.com 2005-11-06 09:05 pm (UTC)(link)
А я-то думал, что только я всю эту муть от теоретиков программирования не одобряю. :)

[identity profile] max-gashkov.livejournal.com 2005-11-06 09:12 pm (UTC)(link)
Чем плохи стандарты сами по себе? Зачем наступать разным людям на одни и те же грабли десятки раз?
А паттерны — хочешь используй, а хочешь — нет, это же дело добровольное ;)

[identity profile] psilogic.livejournal.com 2005-11-06 09:18 pm (UTC)(link)
Дык... вот... ищу единомышленников. Жопой чую непорядок с этой ботвой. Но жопа может и ошибаться...

Например, зачем разводить месиво и придумывать название "синглтон", когда речь идет всего лишь о глобальном статическом объекте? Ну присобачили к нему функцию, которая его возвращает, чтобы строчек кода было по-больше, а зачем бодягу разводить??

[identity profile] psilogic.livejournal.com 2005-11-06 09:19 pm (UTC)(link)
Да при чем тут грабли вообще? Вон выше пример паттерна. Объясни, при чем тут грабли?

[identity profile] metaclass.livejournal.com 2005-11-06 09:46 pm (UTC)(link)
Как раз паттерны еще не самое страшное. Ибо их никто не стандартизировал, слава ш-шпанчику, да и пользоваться только советуют.
Я ими пользуюсь в разумных пределах. Но иногда из-за отсутствия времени или изначально безумной постановки задачи приходится забивать и делать как удобно. Потом все равно переделывать:)
Синглетон отличается от статического объекта тем, что создается при первом обращении к нему. Может оно и имеет смысл, если объект какой нибудь ограниченный ресурс потребляет, чтобы его потребить как можно позже.

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

[identity profile] rmihael.livejournal.com 2005-11-06 10:05 pm (UTC)(link)
анонимный коммент выше -- мой. пароль отвалился.

[identity profile] psilogic.livejournal.com 2005-11-06 10:43 pm (UTC)(link)
дочёрта усилий - для правильной реализации? она ж тупая?
ааа... понял - для ПРАВИЛЬНОЙ... а там небось наворотили говна... а?

[ наследованием и так далее было вполне себе паттерном. Просто слова тогда ещё не придумали. ]

Так ведь придумали же: "виртуальные функции", "наследование". А это называется плагиат чистой воды: переименовать и выдать за открытие

[identity profile] psilogic.livejournal.com 2005-11-06 10:45 pm (UTC)(link)
У нас предприятие разорилось оттого, что начальство захотело делать проект на Розе. Сдох чудовищный проект по срокам и ресурсам после пары лет мучений и десятков занятых людей. Потом то же самое сделали на дельфи-си за 4 месяца вчетвером.

[identity profile] max-gashkov.livejournal.com 2005-11-06 11:59 pm (UTC)(link)
Стандарты и паттерны — вещи разного порядка, вот что я хотел сказать.

«Синглтон» произносится быстрее, чем «глобальный статический объект!» :Р

[identity profile] sanitareugen.livejournal.com 2005-11-07 05:31 am (UTC)(link)
1. Зачем стандарты нужны? И кому?
Начальству, вестимо. Для того, чтобы не иметь дело с одним умным, но с произвольным количеством взаимозаменяемых винтиков. Умный, он может за месяц сделать. А может прибавки потребовать, запить или уйти в отпуск. А заменить нельзя. Умные, они штучный товар.
2. Поэтому вводится стандарт. Которому обучают обезьян. А если вдруг человек попадётся - то дрессируют до обезьяньего состояния.
3. Другая причина - оправдание существования самого начальства. При нормальной разработке критерий один - работает/не работает. А сие значит, что начальник нужен на момент приёмки, не более. А это обидно и опасно для карьеры. Поэтому вводятся промежуточные итоги работы. Никак не влияющие на результат, но вполне оправдывающие наличие Руководящих Структур.
4. Ну и последнее - страховка. Если делают обычным путём - есть вероятность, что работу завалят. И оправдаться нечем. Уволят-с начальника (и исполнителя тоже, но кого его судьба волнует?). А так - всегда можно объяснить тем, что программисты стандарты нарушали. Их увольняют, а начальнику максимум выговор. За то, что необеспечил контроль.

[identity profile] rmihael.livejournal.com 2005-11-07 06:55 am (UTC)(link)
> дочёрта усилий - для правильной реализации? она ж тупая?
> ааа... понял - для ПРАВИЛЬНОЙ... а там небось наворотили говна... а?
Ну если брать в качестве примера ту реализацию, которую вы привели в стёртом комменте -- то до правильной ей очень далеко. Во-1ых не закрыты конструктор копирования, деструктор и оператор присваивания. Во-2ых никак не определён порядок уничтожения синглтона. В-3их - оно вообще не заработает, потому что вы забыли выполнить присваивание в getInstance().В-4ых - а почему именно так? Ведь можно вместо проверки указателя на null использовать статические переменные -- или класса, или функции.
А что начинает твориться, когда есть несколько зависимых синглтонов...

> Так ведь придумали же: "виртуальные функции", "наследование". А это
> называется плагиат чистой воды: переименовать и выдать за открытие
не помню, что кто-то выдавал эти приёмы за своё открытие. Да и в книге GOF нигде не говориться, что описанные там паттерны -- изобретение авторов. Наоборот, во вступлении прямым текстом пишут, что это не так.

[identity profile] metaclass.livejournal.com 2005-11-07 08:52 am (UTC)(link)
Вот примерно поэтому все эти трехбуквенные аббревиатуры и есть печаль.
Роза - Rational Rose? Ну так на ней нельзя делать проекты, ее как вспомогательное средство использовать в лучшем случае можно.

[identity profile] psilogic.livejournal.com 2005-11-07 11:30 am (UTC)(link)
Ага, та самая роза...

[identity profile] psilogic.livejournal.com 2005-11-07 11:40 am (UTC)(link)
[ Ну если брать в качестве примера ту реализацию, которую вы привели в стёртом комменте -- то до правильной ей очень далеко. ]

[ Во-1ых не закрыты конструктор копирования, деструктор и оператор присваивания. ]

Конструктор закрыт

[ Во-2ых никак не определён порядок уничтожения синглтона. ]

Вот потому то деструктор вообще не написан - его реализация зависит от конкретного случая. Если надо, чтобы уничтожался он овнером, то одно, если по счетчику ссылок - другое и т.п. Аналогично с конструктором присваивания.

[ потому что вы забыли выполнить присваивание в getInstance().]

А что в коде, составленному после чтения болтовни по паттернам, я бы ни в коем случае не опачатался бы? :) Так же точно опечатался бы - уж такая работа, что опечатки считаются в порядке вещей.

[ В-4ых - а почему именно так? ]

А почему не так? Работает - и ладно.

[ Ведь можно вместо проверки указателя на null использовать статические переменные -- или класса, или функции. ]

Можно. Можно вообще написать еще 10 вспомогательных классов и красивенькую иерархию в розе нарисовать :) Но это если платят за строки, а не за сроки :)

[ А что начинает твориться, когда есть несколько зависимых синглтонов... ]

А что начинает твориться? :)

Вы так и не ответили на мой вопрос. Вот ввели понятие "синглтон", описали. КАК это помогает производственному процессу? Вы сказали про грабли - на КАКИЕ грабли мешает наступать и почему?

[ Наоборот, во вступлении прямым текстом пишут, что это не так. ]

Ну и зачем новые названия для старых понятий? Что дают новые слова??

[identity profile] psilogic.livejournal.com 2005-11-07 11:41 am (UTC)(link)
Ну порядок может и разный, а принцип один: ковровая стандартизация всего вплоть до стиля "как быстро бегать между станками"

[identity profile] psilogic.livejournal.com 2005-11-07 11:48 am (UTC)(link)
[ с произвольным количеством взаимозаменяемых винтиков. ]

Во. Это совершенно верно и рационально. НО. См. че говорил психолог. Этот процесс должен иметь границы, т.к. винтики в результате будут использоваться неэффективно, и их потребуется больше. Интересно, где грань и как ее найти.

Промежуточные итоги, кстати, вешчь реально необходимая. Если сроки срываются, лучше об этом знать заранее -чтобы вовремя принять меры (расширить штат, перераспределить ресурсы, обсудить с заказчиком, дать пизды лентяям). Без промежуточных итогов риск гораздо больше.

Но этот вопрос со стандартизацией не связан IMHO

А вот по 4-му пункту ЕСЛИ соблюдать все стандарты, то скорее всего сроки будут сорваны, программисты отмажутся соблюдением, а начальство получит пизды за невыполнение задачи

[identity profile] rmihael.livejournal.com 2005-11-07 04:33 pm (UTC)(link)
> Конструктор закрыт
Только обычный, а не копирования.
> Вот потому то деструктор вообще не написан - его реализация зависит от
> конкретного случая. Если надо, чтобы уничтожался он овнером, то одно,
> если по счетчику ссылок - другое и т.п. Аналогично с конструктором
> присваивания.
Конкретных случаев не так уж и много. И вполне полезно их рассмотреть в одном месте во избежание различных граблей. У тех же Влислидеса и Александреску примеров таких граблей именно для синглетона приведено немало.
> А что в коде, составленному после чтения болтовни по паттернам, я бы ни
> в коем случае не опачатался бы? :)
Да стебусь я слегка :)
> А почему не так? Работает - и ладно.
Именно, что работает. А остальные варианты работают далеко не всегда. И если бы я в своё время не прочитал подробного разбора синглетона как шаблона, то непременно бы реализовал бы его на статическом члене класса. Тем более, что строк там меньше.
> А что начинает твориться? :)
Начинает играть неопределённый порядок уничтожения объектов. Сам на такое натыкался, очень неприятный баг.
> Вы так и не ответили на мой вопрос. Вот ввели понятие "синглтон",
> описали. КАК это помогает производственному процессу? Вы сказали про
> грабли - на КАКИЕ грабли мешает наступать и почему?
1. Словарная функция.
2. Грабли у Александреску и Влислидеса, делать конспект у меня охоты нет, уж извините :)
3. Опыт накапливается. Не нравится вам какой-то шаблон -- не используйте. Мне вон Visitor не нравится, так я без него и обхожусь.
> Ну и зачем новые названия для старых понятий? Что дают новые слова??
А зачем математики определения вводят? Вон Ньютон уже вполне спокойно оперировал пределами и производными. Хотя определения появились сильно позже. По вашей логике надо было просто тщательно курить "Флюкции и флюенты", а не страдать чепухой с формальными определениями.

[identity profile] psilogic.livejournal.com 2005-11-07 05:00 pm (UTC)(link)
[ Только обычный, а не копирования. ]

А зачем? Защита - не самоцель, при остром желании в одном месте можно ведь и memcpy поюзать.

[ У тех же Влислидеса и Александреску примеров таких граблей именно для синглетона приведено немало. ]

И как ПАТТЕРН позволяет грабли обойти? Пример?

[ И если бы я в своё время не прочитал подробного разбора синглетона как шаблона, то непременно бы реализовал бы его на статическом члене класса. Тем более, что строк там меньше. ]

Объясняй, давай, в чем бонус.

[ Начинает играть неопределённый порядок уничтожения объектов. Сам на такое натыкался, очень неприятный баг. ]

При чем тут паттерн?

[ 1. Словарная функция. ]

И только :)

[ 2. Грабли у Александреску и Влислидеса, делать конспект у меня охоты нет, уж извините :) ]

Хоть 1 пример граблей с пояснениями, почему именно ПАТТЕРН от именно этих граблей спасает.
Ошибки разные можно годами описывать - было бы желание :)

[ А зачем математики определения вводят? ]

Затем же, зачем программеры вводят функции - чтобы диповать информацию, обозначить часто встерчающуюся комбинацию слов одним словом.

[identity profile] rmihael.livejournal.com 2005-11-07 05:11 pm (UTC)(link)
Давайте сначала определимся, что считать паттерном. А то как бы всё это в терминологический спор не вылилось.

[identity profile] psilogic.livejournal.com 2005-11-07 08:44 pm (UTC)(link)
Вот вы и объясните - я же только по диагонали просмотрел, а вы, наверное, книжку прочли...

[identity profile] firtree.livejournal.com 2005-11-07 10:14 pm (UTC)(link)
Я не понял, зачем ткачихе от станка к станку бегать? Ей что, за одним работы мало?

Про паттерны ты немножко неправ, но это отдельный разговор. С ними самое главное - не воспринимать их как стандарт.

[identity profile] realsonic.livejournal.com 2005-11-07 10:21 pm (UTC)(link)
Слава Богу, нашему начальству вообще всё равно, как и в чём мы будем делать. :) Они ставят пачку новых ТЗ примерно раз в месяц, а дальше уже мы сами себе жизнь усложняем. :)
Они только пытаются нам условия создать... с переменным успехом... :\

[identity profile] realsonic.livejournal.com 2005-11-07 10:21 pm (UTC)(link)
А про Borland Together слышал? С его обратным инжинирингом...

[identity profile] firtree.livejournal.com 2005-11-07 10:26 pm (UTC)(link)
Стандарты тоже вещь реально необходимая - если это _умные_ стандарты. По сути, стандарт должен быть продолжением архитектурного замысла.

[identity profile] firtree.livejournal.com 2005-11-07 10:28 pm (UTC)(link)
С маленькой поправкой: это не муть, если понять, что это и зачем, и не от теоретиков, а от практиков.

Page 1 of 3