Welcome to TechNet Blogs Sign in | Join | Help

Фермер против индустриального рабочего в программировании

Да-да, очередной кросс-пост с персонального блога.

Устами младенца:
- Ну-с, давай расскажи, чему вас сегодня учили в вашей американской креативной школе…
- Не такая уж она и кретинная!

Все-таки как многому может научить история в самых необычных областях. Например, в разработке софта. Сегодня я хотел бы поговорить о двух стилях работы групп на примере фермера и индустриального рабочего.

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

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

Ключевыми признаками жизни фермера являлись:

  • Прямая личная ответственность за надел и участок работы.
  • Значительная свобода в распоряжении своим временем,
  • И в результате, переработка, когда необходимо, и свободное время, когда нужной работы нет.

А потом на смену фермерам пришли индустриальные рабочие. Рабочий – это по сути раб, продающий время своей жизни в розницу, по часам. Тут уж не попрохлаждаешься, даже в межсезонье. Но и ответственность уже не твоя, а менеджера. Эй, ты, чего стоишь, вон возьми эту коробку, отнеси в третий цех! И все за что ты отвечаешь – это чтобы коробка прибыла в третий цех, и то, если кто удосужится проверить. А то, что эта коробка там никому не нужна – это не твое дело. Для этого менеджер есть, чтобы думать, где какие коробки нужны. Ему за это деньги платят. Собственно, менеджмент и вырос как суррогат личной ответственности работников, когда выполняющие работу уже не отвечают и не заинтересованы в том, чтобы их работа приносила реальную пользу фирме.

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

  • Отсутствие личной заинтересованности или ответственности в результатах работы всей фирмы в целом.
  • Полное отсутствие свободы решать, что, когда и как делать, чтобы получить желаемый результат,
  • И в результате, отсутствие свободного времени даже на самосовершенствование.

Как ни смешно (или грустно, это как посмотреть), в программировании также доминируют эти два стиля – программист-фермер и программист-рабочий.

Программист-фермер отвечает за свою функциональность, свой код, и без необходимости не лезет «через межу» и не мешает соседу, если тот сам не попросит. Программист-фермер работает от зари до зари, а то и больше, когда это приносит результат – чтобы разблокировать других членов группы, выпустить продукт вовремя, срочно доделать то, что нужно было вчера. Программист-фермер может взять месяц отпуска в «межсезонье» и ожидает, что за время его отсутствия никто на его участок не навалит мусора, и вообще, без необходимости соваться не будет. А если необходимо, то будут соваться только члены его группы, те, кто уже помогал ему в работе и знают, куда сваливать мусор, а куда не надо. Более того, даже и без отпуска, он может приходить на работу попозже, уходить пораньше, когда его участие не нужно для бизнеса, и – о, ужас – егосовершенно не волнует вопрос этики и пропуска оплачиваемого времени, поскольку он не на время работает, а на результат. Вот не было бы результата – это было бы для него этической проблемой. А буква контракта с обязанностью работать не менее восьми часов в день с двумя пятнадцати-минутными перерывами на туалет – это ж бред, неужто кто-то этого не понимает? Тем более, что все равно приходится большую часть года по 10-12 часов в день вкалывать, а не 8 как в контракте прописано. Увы, некоторые не понимают. Не понимают программисты-рабочие и менеджеры подобного пролетариата от клавиатуры.

Программист рабочий – это рабочий. Он день за днем, месяц за месяцем, год за годом работает положенные ему 10-12-14 часов, которые требует индустриальная потогонная система при отсутствии профсоюзов, выполняет то, что ему сказал менеджер, и ему глубоко до лампочки, получится у менеджмента что или нет. Конечно, вслух он этого обычно не говорит, поскольку система социалистической-индустриальной пропагадны не терпит подобных высказываний вслух, тем не менее, ему действительно глубоко безразличен результат, даже если он и понимает, какой же результат ожидается. Что тоже не часто случается. Программист-рабочий имеет взгляды идеально подогнанные под взгляды его менеджера. У программиста-рабочего нет времени полежать на завалинке и повырезать узорные наличники на окна, или там проследить за состоянием старого сарая на заднем дворе. Сарай – это вообще не его забота. А наличники... Какие там наличники? Пошли вы со своими Кижами! Тут нам надо детали клепать, да побольше и побыстрее! Или там, баги править. Что, кстати, правда, багов в коде написанном программистами-рабочими хватает. Только успевай править и вносить новые. Вот и получаются опусы вроде, «Ты на два часа раньше кончил, пойди почини им вот этот баг!» - «Да, ты что??? Мне пару дней надо разобраться, что у них там и как работает!» - «А ты не разбирайся. Ты просто баг почини. Вот у тебя пара часов есть, так давай, не дури...»

Забавно, что большинство «методик разработки софта» рождались именно как ответ на чаяния менеджеров осуществить своего рода «огораживание» как в Англии, согнать программистов-фермеров с их земель и запереть в больших фабриках.

Я думаю, у читателей уже сложилось ощущение, какой стиль программирования я уважаю, а какой не очень. Подозреваю, что кто-то уже строчит злобный комментарий, насчет моей «устарелости», и вообще, что переход от феодализма к капитализму был «прогрессивным» и «более эффективным», а потому и в программировании то же самое будет, и нечего тут переть супротив прогресса… Так? Так да не так.

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

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

С фермерами тоже не все так просто. Устарелая модель фермера-крестьянина базируется на том, что барон понятия не имел, когда сеять, когда собирать урожай, и вообще как и что делать. Его волновал только результат. В результате, фермер-крестьянин был не просто эксплуатируемым материалом, он был эксперт. Он имел доменное знание и лучше своего барона-менеджера знал, что и когда делать, чтобы получить результат. Вы обратили внимание, что это по сути определение «работника знания» по Дрюкеру? Коими программисты и являются, между прочим.

Конечно, все эти рассуждения не имели бы силы, если бы реальность рассудила все иначе. Скажем, цеховой средневековый мастер мог сколько угодно брюзжать о невозможности делать действительно красивые вещи и вытеснения их ширпотребом, но история рассудила не в его пользу. А что происходит в программировании?

И вопрос тут прежде всего делает ли переход от программистов-фермеров к программистам-рабочим производство софта более дешевым и быстрым?

В пользу программистов-рабочих можно сказать, что их использование делает сроки проектов более предсказуемыми. Еще один плюс в том, что некоторые проекты более высокого уровня квалификации и не требуют. Наваять UI в Visual Basic или там склепать простенький сайт под разработанный художником дизайн делается подмастерьями без особых проблем. Так что, в программировании несомненно есть место для программистов-рабочих. В минус идет куда более низкое качество, и то, что если уж такой проект проваливается, а это по-прежнему не такая уж редкость, то провалы проектов, использующих программистов-рабочих куда более зрелищны и эмоциональны для всех вовлеченных сторон. Не буду приводить примеры, большинство, думаю, и так вспомнят.

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

Кроме, конечно, случаев, когда к программисту-рабочему относились как к программисту-фермеру, в случае чего тот обычно заваливал свой кусок работы, что тоже трудно назвать эффективным. Но это уже дефект менеджмента – наняли не того человека. Это, кстати, указывает на еще один немаловажный момент. Разница между программистом-фермером и программистом-рабочим, а в равной мере между лидером креативных работников и менеджером индустриальных рабочих, в первую очередь не в квалификации, а в культуре. Помните, мы недавно говорили о культуре (видео здесь) и как ее тяжело менять? Во-во.

Published Friday, August 01, 2008 10:57 PM by EldarM

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# re: Фермер против индустриального рабочего в программировании

Переименуй фермера в крестьянина и рабочего в колхозника, и получишь классную агитку.

Saturday, August 02, 2008 11:23 AM by Ilyak

# re: Фермер против индустриального рабочего в программировании

Красивая метафора.

Интересно, каков процент программистов (персонала соответствущим образом квалифицируемого), пишущих код? Оригинальный код?

5%? как фермеров в США?

Ну very interesting ...

Saturday, August 02, 2008 1:30 PM by qualexander

# re: Фермер против индустриального рабочего в программировании

В фирмах у фермеров обычно отсутствует "Прямая личная ответственность за надел и участок работы." - лично я ещё никогда не слышал, чтобы программиста-фермера уволили за то, что он не сдал свою часть работы во-время, или за то, что в сданном коде много багов или дыр в безопасности. А если эту ответственность добавить - мы получим типичного фрилансера.

Saturday, August 02, 2008 9:34 PM by Powerman

# re: Фермер против индустриального рабочего в программировании

Да, нет, Powerman, в стартапах и мелких фирмах это запросто. А в больших да, никакой личной ответственности, сплошная лотерея. Именно потому что там парадигма рабочего-колхозника (спасибо, Илья, за идею - оценил, действительно звучит)

Квал: а это что за разработчики, что кода не пишут? Я таких не встречал. Наверное мы о немного разных индустриях говорим. В той, о которой вы говорите, наверное, и нужен пролетариат. Я даже и спорить не буду.

Sunday, August 03, 2008 12:32 AM by EldarM

# re: Фермер против индустриального рабочего в программировании

Коментарий здесь:

http://vtolkov.blogspot.com/2008/08/blog-post.html

Sunday, August 03, 2008 2:39 AM by Valery Tolkov

# re: Фермер против индустриального рабочего в программировании

Было очень интересно почитать ваши размышления. Прочитав определение программиста-фермера в первый раз, потом никак не мог избавиться от аналогии с фрилансером. Как верно замечено выше, программист-фермер в более-менее состоявшейся компании уже не несет ответственности за все последствия. В свое время мне довелось поработать с кодом такого программиста-фермера. Что действительно мешает - так это то, что действительно хорошо в этом кода разбирается лишь один человек - автор, но в силу роста компании и продвижения по должностям, времени у программиста-фермера на свой "сад" уже не остается. В итоге сложности те же, как и при перенимании огородного хозяйства. Эдакая проблема роста.

Sunday, August 03, 2008 4:05 PM by vtv

# re: Фермер против индустриального рабочего в программировании

Да, есть такая проблема. Иногда из-за того, что есть такая сумасшедшая штука как карьера, которая может вырвать программиста-фермера с его грядок и унести в город, в кабинеты с кожаными креслами. А иногда из-за того, что наваял он так, что никто другой не может разобраться. Что, в общем, значит, что и фермер он не очень. Однако чаще случается классическое огораживание или там коллективизация, когда его выпихнули с его огорода и хорошо еще если на перекрестке дорог не повесили за бродяжничество, а на его место посадили трех колхозников. И да, у колхозников с его кодом будут проблемы, чего греха таить. Далеко не все проблемы решаются после поллитры. Только он ли в этом виноват?

Понимаете, высокоэффективный код запросто может быть сложным в сложных областях, ничего с этим не поделать. Если вы хотите менять людей на нем, вы должны быть готовы платить цену переобучения, а то и частично переписывания. Таковы реалии. А если не хотите платить, не беритесь за сложную функциональность. Ваяйте формочки на VB и HTML... Так сказать, свободный выбор.

Я просто никогда не видел, чтобы пролетариат мог сделать хоть что-нибудь действительно сложное. Всегда где-то среди них прятался фермер, который и делал продукт возможным. А потом фермеру обычно давали по ушам. Ну, а потом, конечно, страдали, что колхозники не справляются. Ну, и этот сценарий у вас вызывает сочувствие к "бедному менеджеру"?

Sunday, August 03, 2008 11:53 PM by EldarM

# Валера, спасибо!

Ты как-то очень скромно просто дал ссылку на свой блог. Позволь ее повторить: http://vtolkov.blogspot.com/2008/08/blog-post.html Поскольку это - великолепно. Спасибо! Получил огромное удовольствие.

Monday, August 04, 2008 5:52 AM by EldarM

# re: Фермер против индустриального рабочего в программировании

Примерно мои мысли, только у меня метафоры были другими. И немного уточнений, ничего по сути не меняющих.

> Компьютер стоит примерно тысячу долларов на все время его существования. Ну, еще чуть-чуть на потребляемое электричество.

"Правильно" оборудованное рабочее место может (читай должно) и десятку потянуть. А за штуку можно только системник купить. Хороший монитор сам по себе больше штуки стоит.

> А найти программисту замену по разным оценкам стоит две-три месячных зарплаты. Плюс еще ввести нового программиста в курс дела и довести его до нужного уровня эффективности - это еще две-три месячных зарплаты.

Общий итог - 5 месячных окладов в Америке по расчетам кого-то из гуру и 8 месячных окладов в России - по моим. В России замена обходится существенно дороже из-за ряда факторов.

> Во всех этих случаях использование программиста-фермера значительно более эффективно. А обратных случаев я, в общем, не видел.

Существует значительное число фирм ваяющих скворечники на конвеере. Таких фирм даже больше, чем фирм производящих сложный софт. Для них "рабочий" может быть эффективней "фермера", если стоит на 10-20% дешевле.

Monday, August 04, 2008 6:24 AM by SALar

# re: Фермер против индустриального рабочего в программировании

Да, согласен. Ну, насчет таких фирм я уже выше и сказал:

> Наверное мы о немного разных индустриях

> говорим. В той, о которой вы говорите,

> наверное, и нужен пролетариат. Я даже и

> спорить не буду.

А что в России 8 окладов стоит заменить работника - интересно, спасибо!

Monday, August 04, 2008 8:15 PM by EldarM

# re: Фермер против индустриального рабочего в программировании

Спасибо за отзыв.

На местном рынке купил хлеб местной выпечки. Домой принесли, съели весь за один присест без ничего, даже ничем не намазав. Один запах чего стоит! Хлебом пахнет. Оказывается семейный бизнес. У них печь во дворе каменная. И мельница своя. И они мелют зерно, из свежей муки хлеб пекут. Ничего не замораживая, по старым рецептам из натуральных компонентов. Дорого. Но вкусно так, что денег не жалко. Жаль рынок работает только раз в неделю.

Вот я всё жду, когда потребитель пожелает вкуса в софте. Я бы тоже попробовал семейный бизнес открыть. Софт на ассемблере и Алголе-68, ручная работа, по старинным рецептам.

Tuesday, August 05, 2008 12:06 AM by Valery Tolkov

# re: Фермер против индустриального рабочего в программировании

хо-хо-хо-хо... по рецептам древних мастеров... да, это было бы здорово...

Wednesday, August 06, 2008 12:43 AM by EldarM

# Weekly linkdump #138 - max - ???????? ??????????????????????????

# re: Фермер против индустриального рабочего в программировании

Это вы, батенька, не в курсе некоторых тенденций. Есть менеджеры, которые хотят, чтоб программист имел свободу, как рабочий, а работал и отвечал - как фермер.

Friday, August 08, 2008 7:20 AM by undebugger

# re: Фермер против индустриального рабочего в программировании

Конечно, есть. Вот только, сьесть-то он сьест, да кто ж ему даст.

К слову, я и не говорил, что рабочие не страдают от дураков-менеджеров, что в этом случае и происходит.

Saturday, August 09, 2008 1:15 PM by EldarM

# re: Фермер против индустриального рабочего в программировании

Эльдар, а Вы сами-то огородик держали? Ну так чтобы так, как Вы это ярко так описываете: "потеряй он урожай, и вся его семья запросто могла помереть с голоду следующей зимой" - ? Вся Ваша красивая история о доблестном фермере и его натуральном хозяйстве благополучно рушится от одного упоминания наличия у фермера пары-тройки крепких сыновей и еще стольких же не менее крепких дочерей - в результате чего наш "самобытный фермер" вдруг взлетает аж до того самого "менеджера индустриального производства". А все эти россказни про "поваляться в межсезонье" - ну, собственно, как раз с сезонностью сельского хозяйства они и связаны-то. Достаточно дать нашему бравому фермеру комбайн, способный за день убирать все угодья, которые в свою очередь способен обработать человек самостоятельно - интересно только откуда возмется комбайн в условиях нашего "натурального фермерского хозяйства" - как тут же вся красивая пасторальная картина валится в наш современный грубый и невежественный индустриализм. Увы. А если еще вспомнить, что фермеру надо еще и во что-то одеваться, строить дом, и вообще... таки возвращаться к натуральному хозяйству? И с софтом, по моему нескромному мнению, ситуация совершенно и полностью аналогична. Равно как и ситуация с "тупыми наемными рабочими, которым глубоко наплевать на само предприятие" - это что-то Ваше сугубо личное и в нормальной жизни встречается, конечно - но как раз _нормальным_ состоянием не есть - зря Вы это так всех вот совсем, не только программистов, а и вообще, "с барского плеча", простите, "опускаете"...

Friday, November 14, 2008 5:48 PM by The Lex

# re: Фермер против индустриального рабочего в программировании

Интересная мысль, хоть и не новая.

Я бы крестьянина называл программистом, а колхозника - кодером. И все станет на свои места.

А на самом деле очень неплохое сравнение. Если на тему программистов переиначить труд К.Маркса "Капитал", то можно получить очень неплохие выводы, актуальные и полезные.

Saturday, November 15, 2008 9:23 AM by Clevelus

Leave a Comment

(required) 
required 
(required) 

  
Enter Code Here: Required
 
Page view tracker