Многие мои читатели называли меня циничным, когда я делал заявления наподобие «вам всегда нужно угождать своему менеджеру» или «большие технологические компании имеют право решать, над какими проектами вы работаете». Алекс Веннерберг привёл веские доводы того, что я циник, в своём посте Software Engineers Are Not Politicians («Разработчики — это не политики»). Вот некоторые выдержки из него:

Я не сомневаюсь, что советы [автора статьи] довольно эффективны для лавирования на верхних уровнях в организации, занимающейся разработкой крупного программного продукта с долгой историей. Но при этом теряется какая бы то ни было к��нцепция пользы. Разве слишком наивно заявлять, что разработчики — это не «просто инструменты в политической игре», а специалисты, цель которых заключается в использовании своего опыта для решения важных задач?

Ирония заключается в том, что подобное мышление уничтожает саму способность компании зарабатывать деньги… идея о том, что разработчики должны уяснить свою обязанность выполнять приказы менеджера, на мой взгляд, довольно уныла. Возможно, это хороший способ беспроблемной работы в бюрократической организации, и, разумеется, нам часто приходится идти на компромиссы и получать указания, но это это вряд ли поможет выполнять свою работу качественно.

Я понимаю, почему люди так думают. Но мне нравится работать в больших технологических компаниях! И я вижу в себе профессионала, решающего важные задачи. А ещё я считаю, что лавирование в компании с целью реализации для пользователей новых фич или улучшений — это превосходный (если не лучший) способ выполнять свою работу качественно.

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

Идеалистичный взгляд более циничен, чем считают идеалисты

Приведу одно из «идеалистичных» мировоззрений в разработке ПО. Разумеется, я излагаю его в наиболее радикальной форме, но, мне кажется, многие люди верят в него более или менее бук��ально1:

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

Если сформулировать всё это письменно, то можно сразу увидеть, что это невероятно цинично. По крайней мере, это циничный взгляд на своих коллег и начальство, среди которых по большей мере люди, похожие на вас: они выполняют свою работу, балансируя между стремлением делать её качественно и желанием угодить руководству. Это циничный взгляд на высшее руководство компании. К тому же я думаю, что он неточен: судя по моему ограниченному опыту, люди, управляющие крупными технологическими компаниями, на самом деле хотят выпускать для пользователей качественное ПО.

Идеалистичен этот взгляд только в том смысле, что он не согласен с необходимостью компромиссов для каждого отдельного разработчика. В соответствии с этим взглядом, вы никогда не должны писать плохое ПО. Как бы сильно компания ни убеждала вас идти на компромиссы и просто выпустить что-нибудь, вы морально обязаны держать оборону и посылать её к чёрту. На самом деле, при этому вы ведёте войну с общим вырождением современного мира ПО. Вы, подобно невоспетому герою, защищаете потребности конечного пользователя, который и не подозревает о вашем существовании.

И я, конечно же, вижу, чем привлекательна такая точка зрения! Но я не считаю, что она идеалистична. Она исходит из того, что мир фундаментально испорчен и эгоистичен, и из веры в невозможность реальных изменений к лучшему. Иными словами, я думаю, что это циничный взгляд.

Циничный взгляд более идеалистичен, чем думают идеалисты

Я не вижу резкой границы между разработчиками-пешками в «политической игре» и профессионалами, решающими важные задачи. На самом деле, я думаю, что на практике почти все важные задачи решаются игрой в политические игры.

Существует очень мало задач, которые можно решить в одиночку. Разработчики ПО сталкиваются с большей долей таких задач, чем люди в среднем, потому что в сфере создания ПО один разработчик может внести огромный вклад, внеся единственное изменение в код. Но чтобы вносить изменения в большие продукты, например, сделать так, чтобы 150 миллионов пользователей GitHub смогли использовать LaTeX в Markdown, нужно координироваться с таким количеством людей в компании, что обязательно влезешь в политику.

Нет никакого секрета в том, что разработчики ПО не принимают масштабных решений в крупных технологических организациях. Они не задают направление развития компании. В определённой мере они имеют политическое влияние, преобразуя направление движения компании в конкретные технические изменения. Но на самом деле, это довольно большая степень влияния!

У крупных технологических компаний сотни миллионов (или миллиарды) пользователей. Небольшие изменения в их продуктах могут иметь огромное положительное или отрицательное влияние на картину в целом. Я вижу это так: решение принять участие в неприятном политическом процессе внесения таких изменений вместо того, чтобы отказаться от него, как от чего-то грязного — это проявление идеализма.

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

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

Цинизм как прививка

Циничное изложение мыслей похоже на большинство лекарств: ядовитость зависит от дозы. Здравая доля цинизма может служить прививкой от чрезмерной циничности.

Если у вас нет слегка циничного объяснения тому, почему разработчики в крупных технологических компаниях пишут плохой код (например, подобного тому, что дал я), то вы рискуете найти чрезмерно циничное. Скажем, вы можете подумать, что разработчиков в крупных технологических компаниях намеренно деморализуют, чтобы помешать им объединяться в профсоюзы, но это безумие. Технологические компании просто не приспособлены для участия в подобных заговорах.

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

Мысли в заключение

Идеалистичный взгляд отражён в огромной доле статей о разработке ПО. У нас нет нехватки в книгах или постах, объясняющих (и абсолютно справедливо), что мы должны ценить качественный код, должны быть добры к своим коллегам, должны стремиться к работе над проектами, положительно влияющими на мир, и так далее. Однако есть нехватка в материалах, точно описывающих способ функционирования крупных технологических компаний.

Разумеется, циничные статьи могут наносить вред людям: расстраивать их или превращать их в в прожжённых циников. Но идеалистичные статьи тоже могут вредить. Есть целое поколение разработчиков ПО, у которых в 2010-х возникла фактически неверная модель того, как работают крупные технологические компании; в 2020-х многих из них перемололо. Им было бы гораздо лучше, если бы они усвоили правильную модель работы таких компаний: при этом не только бы снизилась вероятность возникновения у них проблем, но и они бы лучше справлялись с достижением собственных идеалистичных целей2.

Дополнение: этот пост получил популярность на Hacker News и к нему оставили много комментариев. Некоторые комментаторы заявили, что непоследовательно с моей стороны говорить, что «я выполняю хорошую работу», если мой работодатель совершает различные неэтичные действия. Вполне справедливое замечание! Но этот пост не о том, этично ли работать в Microsoft. Он стал продолжением текста How good engineers write bad code at big companies [перевод «Почему хорошие разработчики пишут плохой код в больших компаниях» на Хабре], поэтому здесь меня больше интересует не циничная мысль «биг-тех — это зло», а утверждение «биг-тех некомпетентен».

Другие комментаторы оспорили моё утверждение о том, что высшее руководство стремится выпускать качественное ПО, заявив, что оно не захочет ради этого поступиться своим личным успехом. Разумеется, я с этим согласен. Те люди, которые готовы жертвовать своей карьерой, обычно не добираются до высших должностей. Но это не всегда игра с нулевой суммой. В конце концов, хорошее ПО зарабатывает компаниям деньги.

Кроме того, два комментатора привели ссылку в качестве примера того, что крупные технологические компании на самом деле участвуют в заговорах против своих сотрудников. Меня это не убеждает. Компании действительно структурированы так, чтобы вступать в заговор относительно зарплат, но они не приспособлены для того, чтобы намеренно деморализовать сотрудников — у них просто нет столь тонкого контроля над культурой! Если уж у них и есть какой-то контроль, то в том, что они стремятся делать сотрудников счастливыми, чтобы те работали за меньшие деньги и не увольнялись.


  1. Я не думаю, что в данном случае выдумываю «соломенное чучело». В прошлом я часто встречал все эти утверждения, и подозреваю, что как минимум некоторые из моих читателей искренне согласны с следующим параграфом. Если вы один из таких читателей (или согласны с этим примерно на 50%), то сделайте одолжение и напишите мне об этом! Если я не получу писем, то, вероятно, переформулирую эту фразу.

  2. Конкретные подробности этого можно прочитать в моём посте How I influence tech company politics as a staff software engineer. Кроме того, если вам интересно, я написал гораздо менее подробную версию этого поста в самом начале 2024 года, назвав её Is it cynical to do what your manager wants?.