Люди, как мне кажется, обычно испытывают трепетные чувства к тому, что они делают или создают. Нам иррационально сильно не нравится, когда наши действия критикуют; нам не нравится, когда созданная нами вещь оказывается бесполезной. К программированию это тоже относится.
Процесс написания кода - интересная вещь. С одной стороны, это сугубо утилитарная вещь: мы просто хотим чтобы наша программа что-то сделала. С другой стороны, в программировании есть очень много от искусства: один и тот же код можно написать очень-очень сильно по-разному, и чем больший кусок кода мы берём, тем больше становится этих вариантов. Стиль программирования можно сравнить со стилем художника: у каждого программиста есть любимые приёмы, любимые алгоритмы, и даже любимое форматирование текста! Если ты довольно долго работаешь в команде, то однажды замечаешь, что можешь сказать кто написал код без каких-либо подсказок - просто по стилю.
Как художник любит или ненавидит свои картины, так и программист может любить или ненавидеть свой код. Для нас код может быть как хитроумным, изящным, стильным, так и скучным, запутанным, уродливым.
В сухом остатке: мы хотим, чтобы нашей программой пользовались, и мы не любим, когда нашей программой недовольны. Это относится и к тем программам, что мы пишем на работе.
Итак, подходим к сути. Причин, по которым я пишу этот пост, две.
Один из продуктов, который мы писали - это таск-трекер, то есть система для учёта различных задач. Что это такое? Например, вы хотите организовать работу какого-то отдела. Сотрудники в этом отделе как-то взаимодействуют между собой: готовят документы и передают их друг другу; совершают типовые, но важные действия - звонки клиентам, совершения платежей и т.п. Чтобы избавиться от человеческого фактора, когда кто-то кому-то что-то забыл передать или поручить, а так же для наглядного представления текущих процессов существуют таск-трекеры. Для каждой задачи создаётся отдельная запись, содержащяю всю нужную информацию, которая может быть связана с другими задачами - получается цельный “маршрут” выполнения работы в наглядном виде.
Итак, на наш таск-трекер мы потратили очень, очень много времени. Получился вполне неплохой продукт, который требовал оптимизации и доработки UX/UI[1], но в целом работоспособный. А потом… его забросили. Для меня, как для человека, который очень сильно приложил лапу к разработке, это было очень неприятно. Понятно, что у меня никаких прав на продукт нет, это собственность компании; понятно, что деньги я получаю за время; но всё равно, это было как… как будто нечто, над чем я увлечённо трудился, просто выбросили в мусор.
Второй причина написания поста возникла недавно. Мы разрабатываем некую систему для неких задач (NDA[2] и всё такое 😅), и некоторые запросы от заказчиков (их несколько) идут вразрез друг с другом и, что хуже, с моим видением прекрасного. Опять-таки, понятно что продукт делается под заказчика, я делаю его не для себя. Но я хочу чтобы моя работа мне нравилась! Это как будто ты с любовью к своему труду высекаешь из камня статую прекрасной богини, а потом приходит кто-то и говорит, что статуя должна быть с тремя руками, одноглазая и хромая. Неприятное ощущение. И главное, ты даже не можешь возразить - ну вот нужна заказчику трёхрукая статуя, жить он без неё не может.
К чему я про это всё рассказываю? Всё просто - я переживал неприятные эмоции из-за того, что с творениями, к созданию которых я имею отношение, обошлись не так как мне бы хотелось. И вот совсем недавно я понял Очень Важную Вещь; Вещь, которая кажется очевидной, но так трудно осознаваемой.
Программы, написанные тобой за деньги - это НЕ твои программы. Они НЕ должны тебе нравится. Ты НЕ должен привязываться к ним душой.
После того, как я это осознал, мне стало так легко. Я всё ещё могу из любви к прекрасному писать красивый и изящный код, но что там с ним будут делать - мне искренне безразлично. У меня есть свои проекты, которые выглядят и работают так, как хочу я.
И это классно.
- 1.Пользовательский интерфейс (UI) относится к интерактивности, внешнему виду и ощущению от продукта или веб-страницы, в то время как пользовательский опыт (UX) охватывает общее впечатление пользователя от продукта или веб-сайта. ↩
- 2.(Non-Disclosure Agreement) — это соглашение о неразглашении, которое обязывает стороны сохранять в тайне определённую информацию, например, конфиденциальную деловую информацию или коммерческую тайну. ↩