Рост ([info]rajaka) wrote,
  • Mood: nerdy
  • Music: minus 8 presents batucada vol 2 - 01 - milton banana trio - opiniao

Как избежать ловушки Допосинения (обход кода по кратчайшему пути)

Как работать долго, уставая при этом минимально? Написанное ниже касается программирования, но применимо также и другим видам головной боли интеллектуальной деятельности.

Программирование -- деятельность мозгоемкая. Если ее не контролировать, эффективность падает. Вообще, оно вполне поддается управлению, для этого придуманы и паттерны, и методики, но, как в любом деле, здесь есть свои ловушки. Сейчас рассмотрим капкан под названием "Допосинение" (или "ни шага дальше, пока это не заработает").

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

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

Допосинение является ловушкой. Это когда программист утратил чувство реальных размеров проблемы и может бороться с ненавистным "багом" часами, расходуя энергию в режиме берсерка. Он забывает, что в целом програма уже работает (или что есть более важные места для исправления). Часто исправление одной микро-ошибки, которую кто-то и ошибкой даже не посчитал бы (ведь можно просто улучшать то, что уже работает) забирает большую часть энергии. У художников это называется "рисовать портрет с уха", кажется.

Это антоним к "расширению сознания" -- а именно сужение его в одну мысль-точку: "это должно заработать именно так и не иначе".

Чтобы избежать ловушки Допосинения, нужно научиться отлавливать тот момент, когда усталость достигает некоего порогового уровня. Как только это случилось, нужно переключаться на другую задачу и возвращаться к этой только потом (часто "потом" оказывается, что и возвращаться-то уже не к чему -- проблема была смехотворной).

Структура объектно-ориентированного приложения фрактальна, и заблудиться во фрактале так же легко, как в горах. А чтобы все же не заблудиться, нужно представлать себе, в какой части фрактала ты находишься, и если это его относительно малая часть и ты в ней уже давно (уже четыре часа переписываешь 10 строк кода, а они все не работают, как ты хотел) -- то пора выбираться на уровень выше и решать другие проблемы. Главное, сделать это до того, как решение данной задачи отняло почти все силы.

А какие способы есть у вас?

Tags: productivity

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    Your reply will be screened

    Your IP address will be recorded 

  • 48 comments

[info]olbka

June 18 2006, 17:30:41 UTC 5 years ago

Я давно уже не пишу никакие программы, но когда пишу статьи (а тут тоже мозговой штурм иногда бывает похлеще кодинга) мне помогает 5-ти минутный буквально перерывчик с распитием чая или просто наблюдением пейзажев из окна. Главное, отойти подальше от ноута. А потом подходишь и думаешь: " ФИ, я я еще думала как это правильно написать!"

[info]rajaka

June 18 2006, 17:34:50 UTC 5 years ago

Точно!
Некоторые с этой же целью перекуривают. В этом польза курения :-Р
А у нас такой вид тут из окна -- в самую даль... Пойду на закат гляну!

[info]olbka

5 years ago

[info]rajaka

5 years ago

[info]constantiner

June 18 2006, 18:18:32 UTC 5 years ago

Я стараюсь проблемы делить по приоритетам. Если есть некая проблема, я трачу на нее столько времени, сколько соотвествует ее приоритету, а если не решаю - откладываю. Если проблема интересна и я считаю, что ее решение принесет мне не только устранение проблемы, но и весьма ценный опыт, то могу потратить на проблему больше времени (но, понятно, если нет существенно более срочных и приоритетных проблем). Ну и добавлю, что оценки приоритетов - субъективны, выстраиваются и корректируются динамически и зависят от юолее глобальных сроков и задач.

[info]rajaka

June 18 2006, 18:25:57 UTC 5 years ago

Знаешь, за что я тебя так ненавижу?

К твоим ответам не придерешься. То есть, конечно, при желании придраться можно, но желания такого даже не возникает ;)

[info]rajaka

5 years ago

[info]rajaka

5 years ago

[info]rajaka

5 years ago

[info]ghamster

June 18 2006, 18:39:03 UTC 5 years ago

Замечательна заметка! Спасибо! %)

а про перерывчик уже сказали. =)

[info]rajaka

June 18 2006, 19:03:56 UTC 5 years ago

Ага. Зато ты напомнил, ты хороший будешь. Пойду еще раз на закат гляну.

[info]cybrarian

June 18 2006, 18:44:44 UTC 5 years ago

зная эту ловушку, я стараюсь вообще уйти из программирования. в анализе и проектировании такого, слава богу, нет)

[info]rajaka

June 18 2006, 19:05:12 UTC 5 years ago

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

[info]cybrarian

5 years ago

[info]rajaka

5 years ago

[info]liquidautumn

June 18 2006, 21:57:33 UTC 5 years ago

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

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

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

[info]rajaka

June 19 2006, 12:15:45 UTC 5 years ago

Подпишусь под каждым твоим словом.

Интересно: ты описываешь противоположную показаной сторону циклического блуждания во фрактале разработки -- назовем это "макро-тупики", когда человек не может начать делать что-то конкретное. Кажется, это также называют анти-паттерном "Аналитический паралич" ("Analysis paralysis"): Выделение непропорционально больших усилий фазе анализа проекта. Вместе с упомянутыми "микро-тупиками" они дают два пограничных уровня возможных тупиков. А сколько их посередине.. %-)

Про разделение сказано особенно хорошо, это вообще очень "разгружающая" методика.

[info]phwizard

June 18 2006, 22:28:18 UTC 5 years ago

написать план и четко расписать задачи по дням, не успел - все равно переходишь к следующей, в дополнительное отладочное время стараешься всё закончить что не успел

[info]rajaka

June 19 2006, 12:33:41 UTC 5 years ago

Да, соблюдение точное подцелей -- рулит!

[info]michael_klishin

June 19 2006, 03:25:58 UTC 5 years ago

TDD -- и любой баг отлавливается в период времени ~ Допосинения/10000.

[info]rajaka

June 19 2006, 12:17:59 UTC 5 years ago

Surely! Расшифрую, вдруг кто не знает: Майкл говорит о т.н. Test Driven Development.

[info]arura

June 19 2006, 05:40:50 UTC 5 years ago

Программ не пишу, но это касается любой деятельности где необходима концентрация.
Заходишь в цикл, осознаёшь и выходишь из него, меняя что то. Например холодный душ.
Щас вот с гитарой так парюсь. )))

[info]rajaka

June 19 2006, 12:33:13 UTC 5 years ago

Холодный душ -- это правильно.

И я могу один аккорд долго играть.. и самое опасное в том, что мне это звучание даже нравитс, транс такой простой и легкий получется ;)

[info]arura

5 years ago

[info]che_shire

June 19 2006, 06:04:29 UTC 5 years ago

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

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

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

[info]rajaka

June 19 2006, 12:36:29 UTC 5 years ago

"Общий коллапс" ;) Так эта тварь еще и нарастает лавинообразно. Бдительность и еще раз бдительность!

[info]ljazzy

June 19 2006, 10:29:56 UTC 5 years ago

ничо себе ты умняк залепил...

[info]rajaka

June 19 2006, 11:57:31 UTC 5 years ago

Во гад, знает же способы -- и молчит ;-)

[info]ljazzy

5 years ago

[info]rajaka

5 years ago

[info]ljazzy

5 years ago

[info]junique

June 20 2006, 09:32:39 UTC 5 years ago

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

[info]rajaka

June 20 2006, 10:51:43 UTC 5 years ago

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

[info]liquidautumn

July 12 2006, 04:58:02 UTC 5 years ago

хочешь поработать над рельсовым проектом?

[info]rajaka

July 12 2006, 10:01:23 UTC 5 years ago

Сорри, только не сейчас

Работы по флэшу/флексу -- гора. Растущая ;)

Знакомых тебе предлагать для работы?

[info]vvvostr

4 years ago

[info]rajaka

4 years ago

[info]vvvostr

4 years ago

[info]rajaka

4 years ago

[info]vvvostr

4 years ago

Anonymous

June 7 2007, 09:19:49 UTC 4 years ago

Любовная магия. Привороты.

MESSAGE
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…