7 причин ненавидеть свой код |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Некомпетентность — причина многих бед в мире программного обеспечения, но я всё чаще нахожу, что есть вид компетентности, столь же разрушительный. Видите ли, на свете полно программистов, которые горячо пекутся о своём коде. И я, в прошлом, — тоже, но оказалось, что есть веские причины избегать этого; причины, по которым нам стоит ненавидеть наш код...
Причина 1: Благодаря этому вы не противитесь изменениям
Самый продуктивный способ создавать программное обеспечение — пораньше сделать релиз и часто выпускать новые версии, получая отзывы от реальных пользователей, верно? Это спасает нас от реализации ненужных функций, помогает создать сообщество, и так далее. Куда реже говорят о том влиянии, которое этот способ оказывает на наше отношение к коду. Необходимость познакомить пользователей со своей программой ужасает, ведь она может им не понравиться. И чем более любовно мы создаём и отшлифовываем каждый класс перед релизом, чем тщательнее мы продумываем свои абстракции и структуры, тем крепче мы привязываемся эмоционально к тому, как мы всё это сделали.
В результате мы инстинктивно сопротивляемся внесению существенных изменений в код на основе первых откликов от пользователей, хотя в этом-то и заключался весь смысл. Это бессознательная эмоциональная реакция, которую мы оправдываем себе, утверждая, что пользователи просто не разобрались с этой функцией, или что нужно только её еще немного подшлифовать, тогда как, если посмотреть объективно, возможно, самое дельное — это полностью переработать её, сделать что-то несколько иное.
По сути, лучший способ заботиться о своих пользователях — это ненавидеть свой код.
Причина 2: Так советует Джефф Этвуд
> Вы можете отличить компетентного разработчика от некомпетентного с помощью одного простого вопроса на интервью: „Какой самый худший код вы недавно видели?“
> Если в ответ вы не услышите немедленно и без колебаний два слова: „Мой собственный“, то можете на этом закончить интервью.
— Jeff Atwood[1]
Джефф время от времени подвергается нападкам за это утверждение, что мы пишем плохой код, за его готовность смириться с этим. Я считаю, что люди неверно его понимают. Смысл не в том, что вы — плохой программист, а в том, что невозможно стать великим программистом, не создавая код, за который вам потом бывает стыдно. Если вы думаете, что весь написанный вами код прекрасен, то вы, похоже, ничему не учитесь.
Причина 3: Если вы довольны своим кодом, вы тратите на него слишком много времени
Энди Брайс (Andy Brice) прекрасно сказал[2], что если вы не стесняетесь своей версии 1.0, значит, вы выпустили её слишком поздно — и потратили много времени, создавая продукт, идеальный с вашей точки зрения. Вместо этого, вам стоило бы выпустить версию пораньше и узнать, что о ней думает пользователь. Другими словами, если вы довольны кодом, то вы затратили много усилий, оттачивая и переделывая его, пока он вам не понравился, вместо того, чтобы сделать продукт, который понравится людям.
Никого не волнует, делаете ли вы рефакторинг, чтобы использовать шаблон проектирования "Цепочка обязанностей"; всем нужны только простые изящные функции, которые работают с самого начала. И нам стоило бы тратить время на то, чтобы делать именно их.
Причина 4: Так учит Библия
> Никто не может служить двум господам: ибо или одного будет ненавидеть, а другого любить; или одному станет усердствовать, а о другом нерадеть. Вы не можете служить пользователю и коду одновременно.
–Матф. 6:24 (слегка перефразировано)
Причина 5: Любовь к коду ради кода превращает ваш продукт в отстой
Любовь к своему коду — это своего рода заносчивость. Под её воздействием вы пишете код для того, чтобы можно было работать над ним в будущем, или похвастаться ловким трюком перед коллегами.
Эта любовь неуместна, никто не станет оценивать ваш код за его красоту и непротиворечивость. Его будут оценивать люди, которые всего лишь хотят сделать свою работу. Они будут любить его, если он облегчает им задачу, и будут ненавидеть, если он отвлекает их от основной задачи и осложняет жизнь.
> Разработчик: Я восхищён возможностями Unix/AJAX/C#/чего-то-ещё.
> Клиент: Я хочу закончить свою работу и пойти поиграть во дворе.
– Scott Berkun[3]
Однажды я потратил шесть месяцев, работая над прекрасно выстроенной версией 2.0 продукта нашей компании. Мы начинали с нуля, поэтому могли повсюду использовать модульные тесты, код был полностью модульным, и с ним было приятно работать. Мы избавились от малопонятного, запутанного кода, которого было достаточно в первой версии.
Мы продемонстрировали первый прототип менеджерам и маркетологам, и они сказали:
> Отлично, так это будет готово через месяц?
В ошеломлении, я объяснил, что нам ещё нужно добавить целую кучу функций и протестировать множество вещей. У них вытянулись лица, и в этот миг я понял, что было совершенно неважно, насколько красивым был новый код. Доведение его по функциональности до уровня старого кода стоило бы слишком дорого.
Эта внутренняя красота вообще ничего не стоила; ценились только доступные пользователю функции. Проект был свёрнут, и совершенно справедливо.
> Беспокойство об эстетичности кода, вместо заботы об эстетичности самого продукта... сродни заботе композитора об эстетичности нотной записи вместо заботы о качестве звука, который люди слышат, когда играет оркестр.
– Scott Berkun[3]
Причина 6: Это то, чего бы хотел Ганди
> Возненавидь класс Пользователь, но возлюби пользователя.
— Махатма Ганди (слегка перефразировано)
Причина 7: Так вы станете лучше как разработчик
Как и большинство людей, я пришёл в программирование, потому что хотел писать что-то для себя и своих друзей. И пока я находился в стадии восторженного новичка, я был счастливым пользователем и счастливым разработчиком. Мой код был полным отстоем, но я об этом ещё не знал.
Потом я занялся программированием ради программирования, и дошёл до того, что стал сильно заботиться о вещах типа шаблонов проектирования, которые я применял, и о том, будет ли этот цикл for переделан в третий раз. В конце концов эта стадия "фаната абстракций" сделала меня практически неспособным создавать что-то действительно стоящее, так как я постоянно запутывался в высших слоях дизайна и не довёл до конца ни одной полезной функции.
Само собой, когда я стал писать профессионально, я должен был заботиться о функциональности, и вынужден был наблюдать, как мой прекрасный код уродуется снова и снова во имя прибыли, чтобы успеть выпустить эту функцию к следующему релизу. Такое способно из любого сделать тёртого морского волка.
Со временем я снова стал находить удовольствие в программировании, с помощью динамических языков и веб-фреймворков, которые позволяют выпускать на свет полезные программы за один день. Я начал писать побочные проекты, которыми мне действительно хотелось бы пользоваться. Я обрёл свободу писать минимально необходимый код, чтобы сделать что-то полезное. Я стал "гуру", который ошибочно полагает, что он лучше всех, поскольку он наконец-то опять стал продуктивным.
Но я пока ещё не стал великим. Каким может быть следующий шаг? Я не знаю. Читать больше кода[4]? Писать меньше кода[5]? Может быть. Но сейчас я чувствую, что для роста в другом направлении — создании потрясающих программ — мне нужно пожертвовать своей гордостью, которую я взрастил по отношению к моему искусству:
> Седьмая степень смирения есть, когда кто считает себя низшим, и худшим всех, не языком только, но и внутренним чувством сердца, говоря с Пророком: я же червь, а не человек, поношение у людей и презрение в народе, несу ужасы Твои и изнемогаю. И еще: Благо мне, что я пострадал, дабы научиться уставам Твоим.
— Устав преподобного Венедикта 7.51-54
До сегодняшнего дня я считал эту цитату в чём-то нелепой или жестокой, но теперь я начинаю верить, что преодолеть наше эго и признать, что мы пишем недостойный код, но всё равно писать его, — это крайне необходимый шаг для того, чтобы стать действительно великим программистом. Возможно, мы могли бы смириться и признать, что, в конечном счёте, код совсем не так уж важен.
Постскриптум: Я не говорю, что нам нужно начать писать плохой код. Жизненно важно иметь представление о том, каким в итоге будет код[5], но вместо того, чтобы работать и работать, пока не достигнем этого итога, и только затем продавать продукт, мы должны писать наименьшее, что сойдёт нам с рук, постепенно приближаясь к идеалу. Необходимо видеть эту разницу.
--
[1] http://www.codinghorror.com/blog/2009/07/nobody-hates-software-more-than-software-developers.html
[2] http://successfulsoftware.net/2007/08/07/if-you-arent-embarrassed-by-v10-you-didnt-release-it-early-enough/
[3] http://www.scottberkun.com/essays/46-why-software-sucks/
[4] http://coderoom.wordpress.com/2010/03/26/on-the-fear-of-reading-code/
[5] http://coderoom.wordpress.com/2010/04/16/code-for-flexibility-a-manifesto/
© http://coderoom.wordpress.com
Original (English): 7 Reasons To Hate Your Code
Translation: © Vadim, space_indus, S2im, Taren, Gargo .
