Паралич анализа: вы знаете слишком много, чтобы просто писать код
Это перевод статьи Analysis Paralysis: Over-thinking and Knowing Too Much to Just CODE Скотта Хансельмана за 30 марта.
Прочитал сегодня пост на ArsTechnica «Я знаю слишком много чтобы программировать быстро. Что мне делать?» — это обзор вот этого вопроса на StackOverflow:
Я стал замечать, что чем более опытным я становлюсь, тем больше времени у меня занимает выполнение проектов или задач. Я не теряю квалификацию от возраста, нет. Проблема в том, что я вижу слишком много способов чему-то сломаться. А количество потенциальных ошибок и просто нюансов, о которых мне известно, становится всё больше и больше.
Простой пример: раньше я просто записывал данные в файл. Теперь я думаю о правах доступа, занятии файла другим приложением, многопоточности, атомичных операциях, фреймворках, разных файловых системах, количестве файлов в директории, предсказуемых названиях временных файлов, качестве моего ГПСЧ, отключении электричества во время любой операции, адекватном API для моего кода, нормальной документации и так далее.
Это просто бомба, прямо про меня. Я тоже недавно задумывался, а не от возраста ли появляются такие проблемы, но я просто не настолько стар. Проблему создаёт огромный опыт вкупе со слишком глубоким обдумыванием задачи. Я опытнее многих, но, очевидно, не настолько опытный, чтобы не страдать от паралича анализа.
У меня есть пара собственных проектов, над которыми я работаю на отдыхе и по вечерам, когда все спят. Первый — порт популярного iOS приложения под Windows Phone, второй — стартап с моим другом Грегом, мы пишем iOS приложение с облачным сервисом. Оба проекта начались просто замечательно, но потом обрушилось огромное количество проблем, и разработка заглохла.
Я начинаю реализовывать фичи, а потом забрасываю. Такое чувство, что я «сваплюсь на диск» — провожу больше времени перетасовывая идеи, а не реальзуя их. Я всё ещё достаточно продуктивен в общем, но когда я пишу код, я просто начинаю тормозить.
Я слишком много думаю. «Записать настройки в файл» превращается в путаницу из паранойи о многопоточности или миграции настроек из предыдущих версий приложения (которых ещё не существует, ага), и тогда объём задачи становится слишком большим. Я не боюсь больших проектов; это всё моя архитектурная паранойя. За все годы программирования я узнал о стольких потенциальных багах и проблемах, из-за которых что-то может не работать, что, в конце концов, не работает всё из-за меня.
YAGNI — «вам это не потребуется»
Правильный ответ, говорят, — You Ain’t Gonna Need It — вам это не потребуется. «Лучшее — враг хорошего.» Легко сказать, да трудно сделать. Mouviciel со StackOverflow пишет:
Похоже, вы недостаточно опытны.
Следующий ваш урок: выполняйте требования, ничего больше
Я это прекрасно понимаю, но для помощи мне часто нужен ещё один мозг.
Как меньше думать
Я узнал об Agile несколько лет назад. Больше всего из этой техники мне нравится парное программирование. С хорошим напарником получается делать работы в три раза больше, а не в два.
Так вот, я решил проблемы со своими стартапами, найдя напарников. Я не самый лучший программист, но вполне сносный. А когда работаю с напарником, то у обоих получается лучше. С Грегом я работаю над iOS, с Дженом – над другим проектом. Они явно пишут код лучше меня, хотя я тоже полезен. Они внесли в мою жизнь программиста свежий взгляд да привычку говорить YAGNI и просто реализовывать фичи. Ирония в том, что когда меня зовут в какой-то проект, я вношу то же самое.
Моей жене смешно. Старая шутка про отношения: ваш партнёр говорит вам что-то год за годом, а однажды вы спешите домой с работы, чтобы поделиться новой идеей от незнакомца… той самой идеей, о которой вам все эти годы говорил ваш партнёр.
Я работаю удалённо, так что всё моё парное программирование проходит через видеочат и демонстрацию экрана. Я использую Skype, Lync, Join.me, да всё что угодно. Мы с напарником по очереди проходимся по фичам в нашем органайзере, транслируем экран одного из нас другому, разговариваем и пишем код, продумываем и разрабатываем архитектуру, коммитим в Git, синхронизируемся и меняемся местами.
Так мы можем продержаться до трёх часов, затем уже устаём. Однако, чувство удовлетворённости от совместной работы над проблемой прекрасно.
А ваша программистская жизнь парализуется со временем? Как вы справляетесь с такими проблемами?
Автор: a553