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

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

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


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

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

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

[identity profile] firtree.livejournal.com 2005-11-07 10:35 pm (UTC)(link)
Я тебе скажу зачем. Затем, что синглтон - _абстрактное_ понятие, а глобальный статический объект - его реализация. Отнюнь не единственная. Александреску в "Modern C++ Design" описывает много его вариантов. И все они реально нужны. Я использовал Мейерсовский синглтон, были попытки использовать феникс, а уж что там в нашей системе было накручено в подсистеме динамической загрузки модулей с учётом межплатформенной (win/unix) переносимости - я, увы, уже и не вспомню. И задача сделать это правильно и цивилизованно - непроста. Пока мы с напарником дошли до Мейерсовского синглтона как типового решения, мы много вариантов перепробовали.

И так с любым паттерном (мы использовали ещё две-три штуки максимум): это _абстракции_. Достаточно полезные, чтобы в их терминах придумывать систему.

[identity profile] firtree.livejournal.com 2005-11-07 10:37 pm (UTC)(link)
Это всё принципиально должно идти снизу. Если исполнитель не готов к использованию технологий и инструментов - заставляя его, ничего хорошего не добьёшься. Будет классическая "программа, написанная на C++ как на C". Единственное, что может сделать начальство: обучать и стимулировать. Ну и не мешать, прежде всего.

[identity profile] firtree.livejournal.com 2005-11-07 10:40 pm (UTC)(link)
> И как ПАТТЕРН позволяет грабли обойти? Пример?

Не паттерн, а книжка про паттерны. В ней есть комментарии: вот здесь такие-то грабли, не наступите, типовые способы их обхода такие:...

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

А может, ты сам Александреску почитаешь?

[identity profile] realsonic.livejournal.com 2005-11-07 10:43 pm (UTC)(link)
Вот мы делаем лучше: мы не обращаем внимания на стандарты, мы изобретаем свои велосипеды. :DD
Самое смешное - это правда. )

[identity profile] psilogic.livejournal.com 2005-11-07 10:49 pm (UTC)(link)
в шмышле велосипеды? ну да, паттерны - велосипеды... или нет?

[identity profile] psilogic.livejournal.com 2005-11-07 10:51 pm (UTC)(link)
дык мне 1 пример чтобы понять, есть ли смысл читать
may be там про те грабли, которые давно знакомы...

[identity profile] psilogic.livejournal.com 2005-11-07 10:51 pm (UTC)(link)
1 ткачиха по идее несколько станков обслуживает...

[identity profile] psilogic.livejournal.com 2005-11-07 10:52 pm (UTC)(link)
слышать то слышал, а руками не шшупал
вкусная штука или типа розы пурга рекламная?

[identity profile] psilogic.livejournal.com 2005-11-07 10:55 pm (UTC)(link)
Дык по идее все эти абстракции взялись, исходя из приемов программирования на реальном языке, а не из общетеоретических рассуждений - ничего принципиально нового. Думаешь, это как кандидаты на реализацию в виде лексических конструкций в самом языке или стандартных библиотеках?

[identity profile] firtree.livejournal.com 2005-11-07 11:27 pm (UTC)(link)
Дык и Ньютон законы из реальных опытов вытаскивал, но насчёт "принципиально нового" - ещё вопрос.

А что ты хочешь, чтобы принципиально новое высасывалось из пальца сверхчувственным прозрением? Жирно будет.

На лексику это пока не тянет. На библиотеку - _пока_ тоже, хотя у Александресу есть своя библиотека. Скорее, сейчас это такой уровень абстракции, который на языке ещё не принято записывать - только в комментариях и прилагающейся документации :-)

[identity profile] firtree.livejournal.com 2005-11-07 11:35 pm (UTC)(link)
Ну вот ты можешь мне точно описать время жизни глобальной статической переменной? А можешь сделать так, чтобы оно было меньше или больше по вкусу? Например, для конструирования нужна информация, которая при запуске спрашивается у пользователя или из конфигурационного файла. Или при окончании возникает потребность в переменной уже после окончания main () (для этого придуман феникс). Высший пилотаж - это задавать отношения между синглтонами "этот создаётся раньше, этот создаётся позже". Причём заметь, между синглтонами в разных единицах компиляции, которые знать друг друга не знают. А если надо обойти семантику "освобождение обратно захвату"? В смысле, не "[{}]", а "[{]}". Хотя это редко нужно, и лучше передизайнить.

Так вот, для многих из этих задач синглтон как глобальная статическая переменная непригоден. Это и есть грабли.

[identity profile] firtree.livejournal.com 2005-11-07 11:36 pm (UTC)(link)
Пардон, ткачиха или оператор автоматики?

[identity profile] realsonic.livejournal.com 2005-11-08 07:28 am (UTC)(link)
В смысле, что мы придумываем свои технологии и стандарты... которые часто что-нибудь дублюруют имеющееся, но на свой лад.

[identity profile] realsonic.livejournal.com 2005-11-08 07:31 am (UTC)(link)
У меня самого пока руки не дошли ) но наш архитектор говорит, что штука вкусная. ) С элементами розы, правда, но, насколько я понял, можно и без неё обойтись.

[identity profile] psilogic.livejournal.com 2005-11-08 09:24 am (UTC)(link)
Ну одно дело - это взять то, что давно известно на практике, и переименовать.
Другое - вывести из практики какие-то общие _закономерности_ и на основе их предложить новые практические приемы. И никакого сверхчувственного прозрения.

[identity profile] psilogic.livejournal.com 2005-11-08 09:28 am (UTC)(link)
Глобальная статическая по определению рождается на старте программы и уничтожается на выходе. Порядок рождения/уничтожения относительно других статических объектов неопределен. Если же ты хочешь "по вкусу" - то это будет уже не статическая, а динамическая (new/delete) а для разделяемого доступа статическим надо сделать указатель на нее.

[ Высший пилотаж - это задавать отношения между синглтонами ]

Ну если это высший пилотаж, старое поколение программистов может спать спокойно, не изучая паттерны :)

[identity profile] psilogic.livejournal.com 2005-11-08 09:28 am (UTC)(link)
А хрен его знает, детали не важны, ведь это просто пример.

[identity profile] psilogic.livejournal.com 2005-11-08 09:31 am (UTC)(link)
Ну да - обычные ножницы между сделать самому и откопать-освоить чужое. Почему то всегда забывают, что откопать-освоить тоже занимает рабочее время и немалое. Те, кто как в статье [livejournal.com profile] eugenebo не умеют самостоятельно писать код, для них просто выбора нет: они могут только откопать-освоить, сами ничего не способны написать. Надо будет такую запись отпостить, тоже может получиться интересное обсуждение :)

[identity profile] firtree.livejournal.com 2005-11-08 10:16 am (UTC)(link)
Та-а-ак, и как же ты сделаешь динамическую переменную с разделяемым доступом?

[identity profile] firtree.livejournal.com 2005-11-08 10:18 am (UTC)(link)
Синглтоны были давно известны на практике как глобальные статические переменные. Но была выведена закономерность: что нужно, чтобы он (1) существовал, и (2) был единственным. На основании этого были предложены новые практические приёмы.

[identity profile] firtree.livejournal.com 2005-11-08 10:19 am (UTC)(link)
Кстати, вот тебе задача, на которую я не знаю ответа: как ты сделаешь персистентный синглтон?

[identity profile] psilogic.livejournal.com 2005-11-08 11:01 am (UTC)(link)
что такое персистентный?

[identity profile] psilogic.livejournal.com 2005-11-08 11:03 am (UTC)(link)
очень просто: УКАЗАТЕЛЬ на нее сделаю статическим (для реализации указателя возможны варианты: extern-переменная, static-переменная, static-переменная класса, переменная в namespace, переменная, получаемая через get/set функции, которые опять же могут быть разных видов итд, итп)

[identity profile] firtree.livejournal.com 2005-11-08 02:49 pm (UTC)(link)
Сохраняющий состояние между запусками программы.

[identity profile] firtree.livejournal.com 2005-11-08 02:50 pm (UTC)(link)
Ну и? А инициализировать переменную кто будет, Пушкин? А удалять?

Page 2 of 3