Analysis Paralysis: Over-thinking and Knowing Too Much to Just CODE english

By Scott Hanselman

Паралич анализа: вы знаете слишком много, чтобы просто писать код russian

Перевод @a553

I read a post on ArsTechnica today called “I know too much to program quickly. What can I do?” that is summary of a StackOverflow question by Zilk, who says:

Прочитал сегодня пост на ArsTechnica «Я знаю слишком много чтобы программировать быстро. Что мне делать?» — это обзор вот этого вопроса на StackOverflow:

Lately, I've been noticing that the more experience I gain, the longer it takes me to complete projects, or certain tasks in a project. I'm not going senile yet. It's just that I've seen so many different ways in which things can go wrong. And the potential pitfalls and gotchas that I know about and remember are just getting more and more.

Trivial example: it used to be just "okay, write a file here". Now I'm worrying about permissions, locking, concurrency, atomic operations, indirection/frameworks, different file systems, number of files in a directory, predictable temp file names, the quality of randomness in my PRNG, power shortages in the middle of any operation, an understandable API for what I'm doing, proper documentation, etc etc etc.
Я стал замечать, что чем более опытным я становлюсь, тем больше времени у меня занимает выполнение проектов или задач. Я не теряю квалификацию от возраста, нет. Проблема в том, что я вижу слишком много способов чему-то сломаться. А количество потенциальных ошибок и просто нюансов, о которых мне известно, становится всё больше и больше.

Простой пример: раньше я просто записывал данные в файл. Теперь я думаю о правах доступа, занятии файла другим приложением, многопоточности, атомарных операциях, фреймворках, разных файловых системах, количестве файлов в директории, предсказуемых названиях временных файлов, качестве моего ГПСЧ, отключении электричества во время любой операции, адекватном API для моего кода, нормальной документации и так далее.

This really hit me because THIS IS ME. I was wondering recently if it was age-related, but I’m just not that old to be senile. It’s too much experience combined with overthinking. I have more experience than many, but clearly not enough to keep me from suffering from Analysis Paralysis.

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

I have two side projects I’m doing on vacations and in the evenings when the house is asleep. One is a port of popular iOS application to Windows Phone, the other is a iOS app with a cloud service startup with my buddy Greg. Both projects have had awesome beginnings and then stalled when things just got overwhelming.

У меня есть пара собственных проектов, над которыми я работаю на отдыхе и по вечерам, когда все спят. Первый — порт популярного iOS приложения под Windows Phone, второй — стартап с моим другом Грегом, мы пишем iOS приложение с облачным сервисом. Оба проекта начались просто замечательно, но потом обрушилось огромное количество проблем, и разработка заглохла.

I kept starting features, the stalling. I felt like I was thrashing to disk, spending more time swapping ideas around in my head rather than just doing them. I’m still getting lots of things done, in general, I’m productive, but when I code I just thrash.

Я начинаю реализовывать фичи, а потом забрасываю. Такое чувство, что я «сваплюсь на диск» — провожу больше времени перетасовывая идеи, а не реальзуя их. Я всё ещё достаточно продуктивен в общем, но когда я пишу код, я просто начинаю тормозить.

I’m overthinking stuff. “Write settings to a file” turns into a mess of paranoia around concurrency situations, upgrading settings from previous versions of the app (that don’t exist, mind you), and it just snowballs from there. It’s not exactly scope creep, but It’s a kind of architectural paranoia. I see so many issues and possible bugs that I’ve learned over the years that could derail a feature that I end up derailing the feature.

Я слишком много думаю. «Записать настройки в файл» превращается в путаницу из паранойи о многопоточности или миграции настроек из предыдущих версий приложения (которых ещё не существует, ага), и тогда объём задачи становится слишком большим. Я не боюсь больших проектов; это всё моя архитектурная паранойя. За все годы программирования я узнал о стольких потенциальных багах и проблемах, из-за которых что-то может не работать, что, в конце концов, не работает всё из-за меня.

YAGNI

YAGNI — «вам это не потребуется»

The answer, they say, is You Aren’t Gonna Need It. “Perfect is the enemy of the good” reminds user Telastyn. These are easy to intellectualize but hard to internalize. User Mouviciel says:

Правильный ответ, говорят, — You Ain’t Gonna Need It — вам это не потребуется. «Лучшее — враг хорошего.» Легко сказать, да трудно сделать. Mouviciel со StackOverflow пишет:

Looks like you are not experienced enough :). The next lesson is: stick to requirements, not more.
Похоже, вы недостаточно опытны. Следующий ваш урок: выполняйте требования, ничего больше

I get that, but me, I often need another brain to complement my own.

Я это прекрасно понимаю, но для помощи мне часто нужен ещё один мозг.

HOW I SOLVE OVERTHINKING

Как меньше думать

I learned about Agile from James Shore while I was working at Corillian some years ago, but It’s Pairing that resonates with me the most. With a good pair, you’ll get 3 times the work, not double.

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

I worked my way through both these startup issues by bringing in another brain. I’m not the best programmer, but I do OK. But somehow we are both better when we pair. I paired with Greg on the iOS and my new friend Jan Hanneman on the other. They are both clearly better coders than I, which is intimidating, but I’m still sure I provide value. What they gave me was a fresh perspective and a focus to say “YAGNI” and just get features done. The ironic part is, if I’m brought in on a project to pair, that’s what I bring also.

Так вот, я решил проблемы со своими стартапами, найдя напарников. Я не самый лучший программист, но вполне сносный. А когда работаю с напарником, то у обоих получается лучше. С Грегом я работаю над iOS, с Дженом – над другим проектом. Они явно пишут код лучше меня, хотя я тоже полезен. Они внесли в мою жизнь программиста свежий взгляд да привычку говорить YAGNI и просто реализовывать фичи. Ирония в том, что когда меня зовут в какой-то проект, я вношу то же самое.

My wife thinks this is hilarious. It's the old relationship joke where your partner says something for years and years, then one day you rush home from work to share this amazing new "insight" from a stranger...the same insight your partner has been sharing all this time.
Моей жене смешно. Старая шутка про отношения: ваш партнёр говорит вам что-то год за годом, а однажды вы спешите домой с работы, чтобы поделиться новой идеей от незнакомца… той самой идеей, о которой вам все эти годы говорил ваш партнёр.

Since I work remotely, all my Pair Programming has to happen over video chat and screen sharing. I use Skype, Lync, Join.me, and whatever else works. We take turns working through features in Trello boards, sharing one person’s screen, talking and coding, designing and brainstorming, then commiting to Git, syncing, and switching the share.

Я работаю удалённо, так что всё моё парное программирование проходит через видеочат и демонстрацию экрана. Я использую Skype, Lync, Join.me, да всё что угодно. Мы с напарником по очереди проходимся по фичам в нашем органайзере, транслируем экран одного из нас другому, разговариваем и пишем код, продумываем и разрабатываем архитектуру, коммитим в Git, синхронизируемся и меняемся местами.

This seems to work well for sessions as long as 3 hours, but after that, we get pretty wasted. However the feeling of accomplishment when you work through a problem with a partner is also magnified.

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

Does your coding life get paralyzed? How do YOU work through it?

А ваша программистская жизнь парализуется со временем? Как вы справляетесь с такими проблемами?

Тексты были взяты из открытых источников и соединены в формате "билингва" (bilingual book). Для каждой страницы указан источник, автор и переводчик. Если вы заметили неточность перевода, или неправильно сопоставленные абзацы, или текст оформлен неаккуратно - сообщите в комментариях.

Responses

Для добавления комментариев необходимо авторизоваться
Showing 1-2 of 2 items.

Интересно

Отличная статья. Я раньше тоже надолго замирал, придумывая как я буду делать, но ничего не делая. Мне помогли жёсткое планирование дня и декомпозиция задач.