Кирилл Котиков

Что если принятие языка программирования - это рынок лимонов?

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

Рынок лимонов для подержанных автомобилей

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

Другими словами, если есть 10% вероятность того, что Автомобиль A может развалиться сразу после того, как вы оплатите его, и 50% вероятность того, что Автомобиль B сделает то же самое, то цена Автомобиля B будет снижена сильнее, чем цена Автомобиля A.

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

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

В какой-то момент модель достигнет равновесия, но можно видеть, как эта информационная асимметрия вредит рынку в целом, даже если позволяет отдельным участникам этой модели

использовать других участников.

Рынок внедрения языков программирования

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

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

Мы сможем найти или обучить нужное количество программистов с нужным уровнем навыков в рамках нашего бюджета и вблизи наших предпочитаемых мест?
Являются ли необходимые библиотеки для этого языка достаточного качества и зрелости? Если нет, насколько сложно будет создать и поддерживать собственные библиотеки?
Сколько будет стоить развертывание и поддержка программного обеспечения, написанного на этом языке?
Какие инструменты и утилиты доступны в экосистеме вокруг языка и программного обеспечения, написанного на этом языке?
Что делает язык легким? Что делает сложным? Что он позволяет? Что он делает невозможным?
Накладывает ли язык какие-либо ограничения, которые мы еще не приняли?
Как язык вписывается в нашу текущую технологическую платформу?

Программисты плохо отвечают на эти вопросы. Программисты плохо признают - не говоря уже о анализе - бизнес-проблемах. Не ожидайте, что поставщики, такие как Microsoft, Oracle или консалтинговые компании в области предприятийных технологий, такие как IBM, Accenture или SAP, ответят на эти вопросы за вас.

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

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

Кроме того, только вы знаете риски и вознаграждения, применимые к вашему бизнесу.

Автомобили - товар, а языки программирования - нет

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

Один язык программирования может быть похож на другой. Фактически, многие языки программирования легко группируются в семейства с похожими характеристиками. Однако язык программирования больше похож на набор инструментов для решения проблем, чем на автомобиль для перевозки людей, продуктов или детской футбольной команды от точки А до точки Б.

Другими словами, два автомобиля схожего года выпуска примерно эквивалентны с точки зрения риска "лимона", в то время как два языка программирования могут быть похожими по широкому спектру, но очень разными с точки зрения риска для вашего бизнеса.

Риски внедрения языков программирования

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

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

Неэффективные стратегии управления рисками внедрения языков программирования

Вы могли заметить, что за маркетинговыми кампаниями стоят языки программирования, библиотеки, инструменты и экосистемы для предприятий, которые пытаются устранить риски принятия. "Никто никогда не был уволен за покупку IBM", говорили люди раньше. "Крупнейшие компании работают на Oracle", говорят некоторые. "Все в нашем офисе знают Microsoft", можно услышать.

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

Крупная компания, стоящая за языком программирования, продаст вам контракты на поддержку, библиотеки, консультационные часы и инструменты, но она не напишет ваше программное обеспечение за вас. Она не волшебным путем решит ваши проблемы, если ваши проблемы не сводятся только к "У нас слишком много денег".

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

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

Лимонный рынок языков программирования

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

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

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

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

Риск найма специалиста без достаточного опыта для помощи в решении текущих, среднесрочных и долгоср

очных потребностей бизнеса возрастает.

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

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

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

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

Асимметрия внедрения языков программирования

В отличие от рынка подержанных автомобилей, разработчики, бизнесы и языки программирования не находятся по противоположным сторонам единственной сделки при принятии языка программирования. С другой стороны, сообщество или коммерческая организация, связанная с языком программирования, может решить избежать определенного рынка или ниши из-за ощущаемого отсутствия ценности. Ценность рынка или ниши не определяется исключительно решениями о найме, принимаемыми бизнесами на основе шума вокруг языка, но можно заметить, что шум вокруг языка, такого как PHP, как "очень простого для создания веб-страниц", привлек достаточное количество низкоквалифицированных разработчиков, которых можно нанять за минимальную зарплату для написания ужасного программного обеспечения, и в такой ситуации вам будет очень трудно нанять отличных PHP-разработчиков, поскольку они являются редкостью в большой пуле дешевых PHP-разработчиков и не готовы работать за минимальную зарплату. Точно так же избыток недорогих разработчиков из Индийского субконтинента, выпускаемых школами по Java и C#, делает эти языки менее рискованными (если вы считаете разработчиков дешевыми, заменяемыми элементами). Компьютерное программирование и разработка программного обеспечения - это искусство, так же как и наука; попросите любого программного инженера сделать что-нибудь максимально дешево, и вы получите как минимум удивленный взгляд.

Нет, асимметрия заключается в следующем: при выборе языка для принятия вы не будете знать, насколько хорошо он будет соответствовать потребностям вашего бизнеса до его принятия. Вы уже знаете это для языков программирования, которые вы уже используете. У вас есть асимметричные знания, и это затрудняет вам оценку риска. (Конечно, это относится ко всем программам, которые вы еще не написали. Это характер программного обеспечения; вы не знаете, как его написать, пока

не напишете его.)

Если вы действительно просвещенный бизнесмен или технолог, вы можете найти язык программирования без шума, но с зрелостью отличных библиотек, инструментов и разработчиков. Конечно, вы заплатите немного больше, чем за небольшую армию подростков, владеющих PHP, или для удаленных разработчиков на Java или C# из отдаленных часовых поясов. Но взамен вы можете обнаружить, что у вас есть разработчики с глубоким пониманием сильных и слабых сторон технологии, которые понимают инструменты и экосистему и которые мотивируются чем-то, кроме погони за последней модой.

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

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

ентами, спорящими каждый пенни.