Как я перешел на фриланс и перестал выгорать

Согласно свежей статистике, 73% разработчиков испытывали симптомы выгорания. При этом 70% пишут код ради развлечения по выходным – я считаю, что это очень интересный момент, это говорит о важности хобби-проектов и о том, что программирование само по себе не является фактором психологических трудностей. Вспоминается хрестоматийный эпизод из “Приключений Тома Сойера”, где покраска забора была и наказанием, и развлечением – все зависит от настроя и мотивации.

Распространено мнение, что лучший отдых – это смена деятельности. Но в случае с IT эту смену парадоксальным образом можно осуществить, “не отходя от кассы”. Я работаю дома и часто отдыхаю на рабочем же месте, просто переключаясь на хобби-проекты и другие интересные мне задачи. При этом бывает, что я пишу для души примерно то же самое, что и для заработка! Осознав этот примечательный факт, я решил, что мой опыт заслуживает описания в виде статьи.

(далее…)

OpenSource и выгорание. Что будет, если все махнут рукой?

В последнее время часто говорят о выгорании мейнтейнеров открытых проектов. Люди теряют интерес к обновлению и поддержке своих старых проектов, в результате чего многие (если не большинство) из библиотек в публичных репозиториях превращаются в abandonware – необновляемое заброшенное ПО. Это становится серьезной проблемой для проектов, зависящих от подобных библиотек, так как в заброшенном коде могут быть уязвимости. Например, при работе с NPM частенько можно видеть критические уязвимости в некоторых пакетах, причем они висят годами, так как никто не может создать новый релиз, кроме мейнтейнера, даже если ошибку легко исправить. Решения звучат разные: ввести некую форму демократии в управление проектами, создать автоматизированную систему финансирования для мотивации мейнтейнеров и пр. На мой взгляд, тут имеет место быть классический человеческий фактор, и потому проблему нельзя исправить чисто техническими и формальными методами – нужна смена парадигмы в головах, оздоровление мышления. Проблема не в технологии, а в психологии.

Потеря интереса к проекту, над которым вы работаете длительное время без материальной или моральной компенсации, – ситуация вполне ожидаемая. Далеко не всегда OpenSource-проект превращается в дело жизни, когда автор сам активно использует свой код на работе, в бизнесе или хобби – и, следовательно, имеет личную заинтересованность в его поддержке. Некоторые библиотеки и программы, которые выкладываются на GitHub, пишутся для решения разовой задачи, после чего автор забрасывает разработку как бесперспективную и неинтересную. Но чаще всего факторы, по моим наблюдениям, следующие:

  • Переход в другую профессиональную сферу, на другую платформу, другой стек технологий. Поддерживать проект на языке, которым вы уже активно не пользуетесь и который вам не нужен в резюме, становится довольно напряжно и выглядит как путь в никуда;
  • Смена приоритетов в личной жизни. Не все могут позволить себе выкраивать львиную долю свободного времени на OpenSource, жертвуя отношениями, семьей, друзьями, другими увлечениями помимо программирования;
  • Сообщество вокруг проекта становится токсичным. Неадекватные требования пользователей, наплыв “доброхотов” с советами, как надо все переделать, всевозможные тролли, хамы, а также люди, пытающиеся применить ваш проект не по назначению и регулярно изливающие на вас фрустрацию по поводу своих неудач;
  • Автор в принципе не видит смысла продолжать работу над проектом, так как это по совокупности причин не делает его счастливее. Играет роль социальная атмосфера и функция, которую человек выполняет в обществе. Для счастья человеку нужен смысл – и смысл жизни в целом, и смысл любой конкретной деятельности. Потеря смысла – катастрофа.

Выгорание – это реакция психики на стресс от ответственности, на эмоциональное перенапряжение. Следовательно, чтобы решить эту проблему, и разработчики, и пользователи должны пересмотреть свое отношение друг к другу. Стоит признать: пользователи слишком многого хотят бесплатно, а разработчики берут на себя слишком много бесплатной ответственности. Прогресс дается человечеству отнюдь не даром, как всем, наверное, кажется – происходит эксплуатация энтузиазма. Я предлагаю следующие тезисы, напоминающие о простых истинах и базовых фактах, касающихся социальных аспектов OpenSource – скопируйте их себе, распечатайте, повесьте на стену, делайте что хотите, главное – держите в голове:

  1. Вы вправе самостоятельно распоряжаться своей жизнью, временем и усилиями
    Цель не оправдывает средства, когда речь идет о жизни и здоровье. Вы можете строить планы и формулировать цели, но вы не обязаны жертвовать чем-либо – и никто не вправе требовать от вас жертв. Вы не обязаны делать то, что вам неинтересно или трудно.
  2. Ваш вклад в свободное ПО не определяет вас как личность
    Управление свободными проектами – лишь один из множества видов полезной деятельности, которые делают человека ценным для общества. Не надо думать, что если вы устали, утратили мотивацию писать и сопровождать свободный код, вы стали хуже как человек. Нет ничего плохого в том, чтобы переключаться, уделять больше внимания своему здоровью и благополучию, учиться чему-то новому, пробовать новые для себя занятия и виды творчества. Вы не раб сообщества СПО и не прикованы к своим репозиториям цепями.
  3. Свободное ПО – это подарок от разработчиков, а не их долг перед кем-то
    Скачав из Интернета архив со свободным кодом, вы получаете в свое распоряжение только этот код и ничего более! Вы не получаете право на время и усилия автора этого кода. Вы входите с автором в отношения лицензиара и лицензиата, которые прописаны в лицензии (прошу прощения за тавтологию). А в любой свободной лицензии заглавными буквами написано – никаких гарантий.
  4. Написав и выложив код, вы не становитесь автоматически ответственным за судьбу этого кода
    Ответственность возникает только по закону и добровольно заключенному договору. Вы не обязаны исправлять баги и вообще хоть как-то реагировать на багрепорты. Вы не обязаны что-то обновлять, “своевременно” выпускать релизы, поддерживать “в актуальном состоянии” пакеты в реестрах. Нигде такая ответственность не прописана, ни по какому закону она не возникает – просто нет ее от слова совсем.
  5. Все эти репозитории, VCS, менеджеры пакетов – один большой общественный эксперимент
    Никто не может гарантировать, что экосистема, основанная на чистом энтузиазме, будет стабильно работать фоном. Тот факт, что кто-то построил на основе СПО свой бизнес, начал зависеть от мейнтейнеров, которые чинят баги, реагируют на просьбы и выпускают обновления – это исключительно его проблема. Верить, что автор библиотеки никогда ее не забросит – убийственно наивное допущение. Нужно перестраховываться от этого риска, а не взваливать моральную ответственность на автора.

И напоследок, на правах имхо. Студенты-миллениалы, с небывалым интересом подхватившие идеи Ричарда Столлмана и Эрика Реймонда для того, чтобы изменить мир, сделали слишком много и получили взамен слишком мало – а то и в чем-то потеряли. Они положили молодость на то, чтобы приложения могли создаваться, как конструктор, из готовых блоков, доступных бесплатно – и это породило многомиллиардную индустрию, изменившую всю нашу жизнь. Но что в итоге? Да, мы теперь можем заказать еду в кафе при помощи мобильного приложения. Да, у нас есть соцсети и мессенджеры, электронный банкинг и кассы самообслуживания, голосовые помощники и системы умного дома. Но разбогатели на этом единицы, все миллиарды ушли в карманы Джеффов Безосов и Марков Цукербергов, а остальные – в том числе и разработчики свободного кода – вынуждены работать “на дядю” как и раньше, десятилетиями выплачивать ипотеку и лишь мечтать об образе жизни, который мог себе позволить рядовой обыватель XX века безо всяких компьютеров и приложений. А государство, тем временем, благодаря свободным технологиям получило небывалую власть: оно следит за людьми через камеры с распознаванием лиц, требует QR-код при входе в магазин во время пандемии, ловит инакомыслящих при помощи геолокации, соцсетей и все тех же “умных” систем обработки данных, созданных на основе бескорыстного труда идеалистов – на фундаменте для глобального цифрового рая строится глобальный цифровой концлагерь. Совсем не такой новый мир мы себе представляли, когда создавали что-то новое!

Вечно так продолжаться, конечно, не может. Если мир ответил на ваш благородный порыв столь цинично, то ответом должен быть цинизм в квадрате. Если общество не захочет меняться, если не будет оздоровления, то никто не будет больше ничего создавать. Вчерашние энтузиасты, которым никто даже не сказал “спасибо” (а лишь ущемили в правах), плюнут на все и уйдут в себя. Они будут стоять и смотреть, как рушится построенное ими здание.

Мысли о freeware

Будучи убежденным сторонником СПО, я часто задумываюсь, почему до сих пор существуют закрытые бесплатные программы (freeware)? В чем, как говорится, прикол? Их все еще очень много, и авторы даже не планируют их открывать. Я могу понять крупные компании, вложившие в свои коммерческие продукты миллионы долларов, но никогда не пойму энтузиастов, которые боятся выкладывать исходники своих персональных проектов.

Мне встречалось множество разных взглядов на этот вопрос, но все они сводятся к следующим основным пунктам:

1. Нежелание потерять контроль над проектом. Совершенно иррациональный страх – хотя бы потому что таких прецедентов попросту не было. Да, были случаи, когда форк становился популярнее оригинала, но еще ни разу никто не отбирал у изначального автора право развивать его детище так, как он хочет. Как он может “потерять контроль”? Эту мантру повторяют многие, но в ней нет и капли смысла. То, что под ней подразумевается – появление в одночасье сотен форков, несовместимых между собой – не более чем продукт чьей-то больной фантазии. В реальности же никто ничего не форкает без серьезной на то причины. Да, СПО – это анархия, где все делают, что хотят. Но это анархия разумных и опытных людей, и их суммарные усилия дают положительный результат, а не ноль. В противном случае движение СПО давно бы уже заглохло.

2. Страх оказаться обокраденным. Вторая по популярности фобия – многие боятся, что кто-то украдет их исходники, скомпилирует и будет продавать за деньги. Это теоретически возможно, но дело в том, что в случае со свободным ПО понятие кражи кода лишается всякого смысла – все свободные лицензии разрешают коммерческое использование, иначе они не были бы свободными. Вообще я бы не бросался словом “украсть” применительно к нематериальным объектам. К апологетам этого слова у меня много риторических вопросов. Как можно украсть то, что доступно всем? Кто станет покупать то, что в другом месте раздается бесплатно? Если вы считаете, что вашу программу будут покупать под чужим брендом, почему вы сами ее не продаете? Если вы не ведете бизнес, то почему беспокоитесь о недополученной прибыли? И так далее, и тому подобное… И я уже молчу о том, что открытие исходников никоим образом не мешает продавать программу – если хотите извлекать прибыль, можете, например, продавать бинарники.

3. Страх потерять репутацию из-за действий злоумышленников. Кто-то может взять ваши исходники, встроить вирусы-шпионы-бэкдоры, выдать за оригинал и наживаться на несчастных, ничего не подозревающих пользователях, а обвинять будут вас. Звучит пугающе, но, опять-таки, начисто лишено рационального зерна. Вы всегда можете (и должны) дать понять пользователям, где именно находится официальный источник сборок, чтобы скачивали только оттуда (а из других источников – на свой страх и риск). И вы никоим образом не отвечаете за чужие деструктивные действия с вашим кодом – вы даже не отвечаете за корректную и безопасную работу оригинального кода, потому что любой свободный софт распространяется без каких бы то ни было гарантий.

4. Ну и, наконец, то, в чем не каждый признается – нежелание показывать публике свой быдлокод. Могу сказать честно – чужой код мало кто читает, каким бы классным он ни был. Обычно это нужно для исправления багов, во всех остальных случаях люди просто компилируют исходники или копипастят отдельные компоненты, не вникая в детали. Поэтому большая часть программ представляет собой уродливых нечитаемых монстров, и с этим все давно смирились. Конечно, бывает и такой код, который можно смело в рамочке на стенку вешать – читаемый, лаконичный, красивый – но такой встречается очень редко.
Тот, кто все-таки захочет разобраться в вашем коде, вряд ли будет вас публично высмеивать – если, конечно, вы сами не попросите критики. Творчество есть творчество – любой имеет на него право, и никто из нас не идеален. Если вы не публикуете код только из страха критики, то я вас уверяю – бояться абсолютно нечего. Напротив, открытие плохого кода может стать важным шагом на пути саморазвития.

Я, конечно, уважаю авторское право и не считаю, что мне кто-то что-то должен. Открывать или не открывать код – личное дело автора. Есть много закрытых программ с солидным сообществом, и может показаться, что в исходниках там никто особо и не нуждается, пока автор регулярно выпускает релизы и исправляет баги. Но я должен предупредить: стоит автору потерять интерес, как сказка закончится. Поскольку программа бесплатна, у автора нет перед вами никаких обязательств, и вы останетесь с носом. Я видел десятки таких примеров, и в том числе среди коммерческих продуктов.
Никогда не стоит забывать Столлмана: используя закрытые программы, вы становитесь зависимым и беспомощным. Поэтому я предостерегаю от использования freeware – лучше отдайте предпочтение СПО.

Дао программиста

Некоторые из принципов, которых я придерживаюсь в своей работе, можно выразить в виде вот таких афоризмов:

1. Лучшая программа – это та, которая не была написана.

2. Простота – мать надежности.

3. Сложное должно быть простым.

4. Обычный программист думает: “Как сделать так, чтобы оно работало?”
   Хакер думает: “Как сделать так, чтобы оно не сломалось?”
  
5. Оптимизация – это зло.

6. Если программа падает, в ней есть ошибка.
   Если программа не падает, в ней все равно есть ошибка.
   Просто она еще себя не проявила.
  
7. Защита от дурака важнее защиты от недоброжелателя.

8. Хороший код не нуждается в комментариях.

9. Красивое решение – правильное решение.

10. Улучшить порой сложнее, чем переписать заново.