vit_r: default (Default)
[personal profile] vit_r
The first draft of anything is shit.
Ernest Hemingway



Продолжаю сеанс терапевтической графомании, немного изменив модель поста про жестокость реального мира.

В принципе, это просто заметки на память. Делать что-то понятно и серьёзно долго и смысла не имеет.

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

Естественно, я не написал. Первым делом, жаль времени и сил. Во-вторых это никому не нужно. Макимально я получу пару комментариев «О да! Ты совершенно прав.»

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

То же, что пойдёт ниже, не более чем предварительные заметки к книжке на английском, которую я никогда не напишу.

Большинство задач для программистов чётко заданы и, как правило, уже имеют простое решение. (Вроде таблицы в Екселе, пузырьковой сортировки или процесса, выполняемого руками.) Простое решение по каким-то причинам не удовлетворяет людей с деньгами или свободным временем, и ресурсы бросаются на то, чтобы сделать это быстрее, красивее, компактнее, «как у Гугла» или просто заняться рефакторингом из любви к красивому слову и самому процессу. (Корень «фак» тут явно ссылается на онанизм.)

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

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

Это не agile. Точнее, не проповедуемый сейчас на всех углах agile первого уровня, который банально перекладывают ответственность на клиента, который обязан говорить, что нужно делать, как и с каким приоритетом. То есть, клиент решает задачу, программисты переводят решение на язык компьютеров, только клиент вдобавок ещё и платит за все косяки, глупости и ошибки. Причём не только свои, но и программистские.

Также я не agile, потому что не строю интерфейсы, прикручивая к ним задачу, а сначала выясняю структуру данных, способ их взаимодействия и логику процессов. То есть, думаю, что для agile первого уровня (впрочем как для большинства формальных моделей разработки) запрещено.

То, что команда agile рождает за два месяца бурной деятельности для пяти серверов с ночными авралами и работой по субботам, я получаю за три-четыре часа беседы с клиентом, расходуя только бумагу и чернила в маркерах. Короче говоря, я на несколько порядков быстрее и дешевле выясняю, что предложенное решение клиенту совершенно не годится, пользы не приносит, и надо искать какое-то другое.

Paper prototyping - очень хорошая вещь, но может оставить слишком много народу без работы.

То, чем я занимаюсь, напоминает и exploratory programming, но им не является. Потому как цель не просто выяснить, «как оно работает на самом деле», а понять, что и зачем нужно делать. Исследуется не решение задачи, а её формулировка. С кодом в руках, с кучей тестов и реальных примеров. Желательно ещё и с конечным пользователем под боком.

Это не prototyping. Потому что в нормальных условиях первый прототип выбрасывается. Я же могу менять 150% кода, но не сразу и не с нуля.

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

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

И вот для такой работы имеющиеся в наличии тулы и языки программирования в большинстве случаев или совсем не годятся, или требуют особых ухищрений при работе.

Продолжение следует.

Copyright

(CC BY-NC-ND 3.0) [livejournal.com profile] vit_r, 2012

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
Перевод на английский запрещён, потому как нефиг портить хорошую вещь.

Date: 2012-10-25 11:01 am (UTC)
From: [identity profile] gineer.livejournal.com
\\То, что команда agile рождает за два месяца бурной деятельности для пяти серверов с ночными авралами и работой по субботам, я получаю за три-четыре часа беседы с клиентом, расходуя только бумагу и чернила в маркерах. Короче говоря, я на несколько порядков быстрее и дешевле выясняю, что предложенное решение клиенту совершенно не годится, пользы не приносит, и надо искать какое-то другое.

Проблема в том, что:
очень сложно найти вменяемых\заинтерисованых в конечном результате заказчиков, чтобы с ними так обсуждать;
не менее сложно найти вменяемых\заинтерисованых в конечном результате собственных начальников, которые будут понимать необходимость такого шага;
ну и до кучи, найти вменяемых\заинтерисованых в конечном результате
программистов\разработчиков, готовых понимать и вести разработку в подобном стиле...
а так, да, все очень просто. :)



\\Желательно ещё и с конечным пользователем под боком.

Дык... это и есть тот же ажиль. ;)





\\И вот для такой работы имеющиеся в наличии тулы и языки программирования в большинстве случаев или совсем не годятся, или требуют особых ухищрений при работе.

А вот об этом... очень интересно.
Может можно(стоит?) заделать даже новый комюнити под эту тему?

Date: 2012-10-25 03:00 pm (UTC)
From: [identity profile] vit-r.livejournal.com
очень сложно найти вменяемых\заинтерисованых в конечном результате заказчиков, чтобы с ними так обсуждать;

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

не менее сложно найти вменяемых\заинтерисованых в конечном результате собственных начальников, которые будут понимать необходимость такого шага;

Это да. Но я стараюсь не влезать в такие ситуации.

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

Программисты получают готовую спецификацию и радостно ударяют по клавишам. Команда, формулирующая требования может (а впрочем и должна) быть достаточно компактной.




\\Желательно ещё и с конечным пользователем под боком.

Дык... это и есть тот же ажиль. ;)


Пардон, тот же agile требует наличия этого самого пользователя или лица его заменяющего.

На самом деле, не всё так страшно и достаточно просто приходить и периодически разговаривать. Правда, мне недавно один проект угробили, досрочно отрапортовав о почти полной готовности, и под это дело запретив общаться с заказчиком. Так что пришлось объяснить, что они не правы, и я получил только деньги, без чувства удовлетворения.



А вот об этом... очень интересно.
Может можно(стоит?) заделать даже новый комюнити под эту тему?


Были и кмюнити, были и долгие беседы. Только всё это бесполезно. Даже, если делать на английском. Совет "надо думать головой" совершенно непродаваем. А к нему всё в конечном итоге сводится.

И статьи тоже не интересно. И на конференции выступать - смысла не имеет.

Просто что-то приходит в голову и надо это куда-то сбросить, чтобы там не бродило и под ногами не путалось.

Date: 2021-03-24 06:12 am (UTC)
From: [personal profile] someusersp

То, что команда agile рождает за два месяца бурной деятельности для пяти серверов с ночными авралами и работой
по субботам, я получаю за три-четыре часа беседы с клиентом, расходуя только бумагу и чернила в маркерах. Короче говоря, я на несколько порядков быстрее и дешевле выясняю, что предложенное решение клиенту совершенно не годится, пользы не приносит, и надо искать какое-то другое.

Paper prototyping - очень хорошая вещь, но может оставить слишком много народу без работы.

То, чем я занимаюсь, напоминает и exploratory programming, но им не является. Потому как цель не просто выяснить, «как оно работает на самом деле», а понять, что и зачем нужно делать. Исследуется не решение задачи, а её формулировка. С кодом в руках, с кучей тестов и реальных примеров. Желательно ещё и с конечным пользователем под боком.


Во многом напоминает Specification by example и DDD (Domain Driven Design)

Date: 2022-12-09 02:46 pm (UTC)
coralsteel: (Default)
From: [personal profile] coralsteel
Старый спор можно ли автоматизировать творчество.
Альтшуллер придумал приемы.
Например, если две вещи плохо работают вместе, то нужен посредник между ними. Я этим неоднократно пользовался в программировании.

Profile

vit_r: default (Default)
vit_r

May 2025

S M T W T F S
     12 3
4 5 6 78 910
11 121314 15 16 17
18 1920 2122 23 24
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 25th, 2025 04:11 pm
Powered by Dreamwidth Studios
OSZAR »