Рубрики
Без рубрики

Принцип 80/20 в программировании

В этой статье вы узнаете о глубоком воздействии принципа 80/20 в вашей жизни в качестве программиста. Он основан на первом проекте главы из моей предстоящей книги «от 1 до 0: Минималистичный подход к программированию “. Принцип 80/20 имеет много имен, но второй самый известный – Парето … Принцип 80/20 в программировании Подробнее »

Автор оригинала: Chris.

В этой статье вы узнаете о глубоком воздействии принципа 80/20 в вашей жизни в качестве программиста. Он основан на первом проекте главы из моей предстоящей книги «от 1 до 0: Минималистичный подход к программированию “.

Принцип 80/20 имеет много имен, но второй самый известный – это принцип Парето, названный в честь Его Дискреза Вильфредо Парето. Итак, как работает принцип и почему вы должны заботиться?

Основы принципы Парето

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

Скорее всего, вы уже слышали о принципе 80/20 – это везде в литературе личной производительности. Причина его популярности в два раза. Во-первых, принцип позволяет быть ленивым и продуктивным одновременно – если вы можете выяснить вещи, которые имеют значение и сосредоточиться на тех беспомощно. Во-вторых, принцип наблюдается везде в реальном мире. Очень трудно даже придумать некоторое явление, где эффекты поставляются одинаково от причин. Идите вперед и попробуйте найти некоторые примеры дистрибутивов 50/50, где 50% эффектов происходят от 50% причин! Конечно, распределение не всегда 80/20. Бетонные числа могут измениться на 70/30, 90/10 или даже 95/5. Однако распределение всегда сильно перекошено в отношении меньшинства причин, которые дают большинство эффектов.

Вот пример распределения Парето:

Рисунок: Пример распределения Парето: причины упорядочены в соответствии с результатами, которые они производят.

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

Оптимизация программного обеспечения приложений

На следующем рисунке показано приложение распределения Pareto к проекту программного обеспечения: меньшинство кода отвечает за большую часть времени выполнения. Ось X показывает функции кода, отсортированные по времени выполнения, которые они несут. Ось Y показывает время выполнения этих функций кода. Устройства не имеют значения здесь, но вы должны понимать, что затененная область доминирует в общей площади под участком. Большинство кодовых функций вносят гораздо меньше до общей среды выполнения, чем несколько выбранных функций кода. Расходы много времени, оптимизируя «тривиальные многие», едва, обеспечивают любое улучшение общего времени выполнения.

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

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

Мало кто знает, что принцип был успешно использован крупными вычислительными компаниями, такими как IBM, Microsoft, и Apple для создания компьютеров, которые чувствуют себя намного быстрее и создать пользовательский опыт, который ранее был неслыханным. Как они это сделали? Они направили их внимание на «топ-20%» – неоднократно оптимизируя 20% кода, который был выполнен чаще всего по среднему пользователю. Не весь код создан равным. Меньшинство кода имеет доминирующее влияние на пользовательский опыт, в то время как большая часть кода мало влияет на него. Например, вы дважды щелкнули значок несколько раз в день-программы, должны очень быстро загружаться для большого пользовательского опыта – но вы изменяете права доступа файла только редко, если вообще. Принцип 80/20 говорит вам, где сосредоточить свои усилия по оптимизации!

Производительность

На самом деле, принцип 80/20 является принципом фокуса. Сосредоточив внимание на жизненно важном, а не тривиально, что многие, вы можете 10x, даже 100x вашу производительность на работе. Не верь мне? Давайте рассчитаем, откуда эти номера приходят, предполагая, что основное распределение 80/20.

Рисунок: Средний выход 20% верхних исполнителей составляет 16x средний выход 80% нижних исполнителей.

Реальный мир говорит нам, что меньшинство людей производит большинство результатов. Этот фундаментальный принцип наблюдается в широком спектре различных применений. Давайте подключимся в некоторых номерах, чтобы получить интуицию, насколько велика разница в производительности. Например, давайте будем использовать консервативные параметры 80/20: 80% результатов происходят от 20% людей. В некоторых областях (как программирование) распределение, вероятно, гораздо более перекошено.

Предыдущая фигура показывает, что в компании из 10 человек только два человека производят 80% результатов, в то время как восемь производят 20% результатов – прямое следствие принципа 80/20. Если вы делитесь на 80% на два, вы получаете средний выход на 40% на высший человек в компании. В то же время, если вы разделите 20% результатов, полученных восьми людьми, вы получаете в среднем 2,5% на недействительное лицо. Разница в производительности 16x!

И отметить, что это не теоретическая разница, которая может быть достигнута при некоторых непрактичных настройках – эта 16x разница в среднем выступлении уже является фактом в миллионах организаций по всему миру.

Разница в производительности существует: в вашей организации есть два человека, которые создают более 10 раз выше выхода, чем «нормальный» сотрудник. Вопрос в том, как вы можете стать одним из этих двух? Или, чтобы сформулировать его в целом: как вы можете «перейти к левой» на кривой распределения Pareto в вашей организации (см. Рисунок)?

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

На оси Y в нашем мире 80/20 я использовал этикетку «вывод», чтобы сохранить его общим. Возможно, вы захотите оптимизировать доход (20% людей зарабатывают 80% доходов). Вы можете оптимизировать для счастья (20% людей наслаждаются 80% счастья на работе). Возможно, вы захотите оптимизировать для ежемесячных активных пользователей (20% сайтов имеют 80% ежемесячных активных пользователей). Вы можете оптимизировать продажи книги (20% книг получают 80% от продаж). Или вы можете оптимизировать цитаты (20% исследователей получают 80% цитат).

Это показывает критическое избавление, которое следует из принципа 80/20: быть понятным, что вы хотите оптимизировать.

Метрики успеха

Допустим, мы хотим оптимизировать доход в качестве прокси для счастья. Как вы можете перейти к левому в кривой Парето?

Теперь вы оставляете точную науку, потому что вам нужно найти причины, по которым некоторые люди добиваются успеха: какой из их опытов создает большую часть успеха? Вам необходимо найти правдоподобный, упрощающий аргумент в вашей конкретной отрасли и разработал действий метрики успеха, которые вы можете контролировать. Если вы делаете все больше, вы станете более успешным. Если у вас меньше всего, вы станете менее успешным. Сложная вещь состоит в том, что метрики успеха отличаются в большинстве месторождений. На самом деле, принцип 80/20 также применяется к метрикам успеха: некоторые метрики успеха имеют доминирующее влияние на вашу работу в поле, в то время как другие вообще не имеют значения.

Например, при работе в качестве докторской исследователя я вскоре понял, что это все о цитатах. Чем больше цитата у вас есть как исследователь, тем более достоверность, видимость и возможности вы будете испытывать в науке. Как мы можем влиять на цитаты («сегодня», я увеличиваю количество цитат », вряд ли действует метрика успеха)? Цитаты приходят от высококлассных документов. Если вы публикуете более высококлассные документы, вы получите больше цитатов. Таким образом, написание высококлассных документов является наиболее важной деятельностью для большинства ученых. Тем не менее, многие исследователи отвлекаются на вторичные мероприятия, такие как подготовка презентаций, организация, преподавание, пить кофе, самые успешные исследователи, в значительной степени сосредоточены на создании максимального количества высококачественных документов. Для исследователей, распределение Парето метрики успеха для исследователей может выглядеть так:

Рисунок: Метрика успеха в исследовании: количество слов, написанных на бумаге высокого класса.

Заменив обобщенные «вывод» с новым метрическим успехом «количество слов, написанных на бумаге высокого класса», вы получили кристально чистое представление о том, что вы должны сделать каждый день, чтобы подтолкнуть к левому в исследованиях. Если вы пишете больше слов сегодня, вы будете публиковать свою следующую бумагу высокого класса раньше, получать больше цитатов быстрее, выращивать свой научный след и стать более успешным ученым в результате. Красота этого подхода 80/20 состоит в том, что он позволяет найти ваш фокус. Все остальное не имеет значения. Вы можете отдохнуть, откинуться назад и сосредоточиться на вещах, которые очень важны. Вы можете потратить меньше времени на все разные задачи. Вам не нужно умереть смертью тысячи порезов. Вы можете лениться со всеми видами деятельности, но одну: писать документы. Вы можете смешать большинство вещей, игнорировать электронные письма, не переходите к встречам, которые не подтолкнут вас к большему количеству бумаг, ленивы во всей другой деятельности. Скажем, вы работаете 8 часов в день, и вы распространяете свой день в восемь одночасовых мероприятий. После завершения метрического тренировки успеха вы понимаете, что вы можете пропустить две активности 1Н в день и сократить четыре из них вдвое, чтобы завершить их через полчаса вместо часа (быть менее перфекционным). Вы спасли 4H в день, но вы все еще выполняете, скажем, 80% ваших результатов. Теперь вы инвестируете 2 часа в пишу больше слов к высококлассным документам в день. В течение нескольких месяцев вы подали дополнительную бумагу и со временем вы отправите гораздо больше бумаг, чем любой другой из вашего коллеги. Вы работаете только 6 часов в день, и вы генерируете несовершенное качество в большинстве ваших рабочих задач. Но вы сияете, где он имеет значение: вы отправляете больше исследовательских работ, чем кто-либо другой в вашей среде. В результате вы скоро будете одним из лучших 20% исследователей. Вы генерируете больше с меньшим количеством.

Это сила мышления 80/20: вы инвестируете ресурсы, где у них самый высокий кредит. Вы создаете больше результатов, инвестируя меньше времени, усилия, деньги. Вы становитесь ленивым в большинстве вещей в жизни. Но вы сосредоточены некоторые из сохраненного времени, энергии и денег на те, которые являются дико важными. Вместо того, чтобы стать «Джезером всех сделок, мастером никого», вы становитесь одним трюком пони. Вы в значительной степени сосредоточены на жизненно важном мало и игнорируют тривиальные многие. Вы ведете менее напряженную жизнь, но вы наслаждаетесь более плодами от вашего инвестированного труда, усилий, времени и денег.

Парето последствия для кодер

Давайте рассмотрим еще один пример: если вы читаете эту книгу, вы программист. В программировании результаты намного сильно перекошены к вершине, чем в большинстве других полей. Вместо 80/20 распределение часто больше похоже на 90/10. Билл Гейтс сказал, что «отличный оператор оператора токарного станка несколько раз командам заработной платы средней токарной станки, но отличный писатель программного кода стоимостью 10 000 раз стоит в 10000 раз в цене среднего программного обеспечения». Билл Гейтс охватил сотни тысяч программистов и разработчиков программного обеспечения, и если он сделает это утверждение, он должен иметь некоторые заслуги. Интересно, что разница не 16x, как вы видели ранее. Разница между великим и средним программным писателем составляет 10 000 раз! Как это может быть? Ну, вот несколько причин, по которым это экстремальное распределение Парето, особенно в мире программного обеспечения:

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

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

Ключевой вопрос: как вы становитесь отличным программистом? Потому что, если вы можете стать отличным программистом, у вас всегда будет гораздо больше работы, чем вы можете справиться, и самые успешные компании в мире Google, Facebook, Amazon, Apple и Microsoft – будут рады оплатить вам большие премии для ваших услуг.

Метрика успеха для программистов

К сожалению, утверждение «становится отличным программистом» не является метрикой успеха, вы можете напрямую оптимизировать – это многомерная проблема. Отличный программист может означать много вещей. Он или она быстро понимает код, знает алгоритмы и структуры данных, знают различные технологии и их сильные и слабые стороны, могут сотрудничать с другими людьми, коммуникативны и креативны, остаются обусловленными и знают о способах организовывания процесса разработки программного обеспечения и обладают сотнями мягкие и тяжелые навыки. Но вы не можете освоить все это! Если вы не сосредоточитесь на жизненно важном, вы стану порабощены тривиальными многими. Чтобы стать отличным программистом, вы должны сосредоточиться на жизненно важном. Один из тех жизненно важных немногих мероприятий, которые гарантируют, что вы станете лучшим кодером с течением времени, является метрикой успеха «Напишите больше строк кода». Если вы пишете больше строк кода, чем ваши сверстники, вы станете лучшим кодером, чем большинство ваших сверстников. Это упрощение многомерных проблем, но мы упрощаем к жизненному желанию немногим – путем оптимизации прокси-метрики «Напишите больше строк кода», мы увеличили наши шансы на успех на целевой метрике «Станьте большим писателем программного кода» ( Смотрите рисунок).

Рисунок: Метрика успеха в программировании: количество линий кода написано.

Начиная больше кода, вы создаете петлю самоусиливающей обратной связи. Начиная больше кода, вы начинаете лучше понимать код лучше. Вы говорите и ведите себя больше похоже на экспертное кодер. Вы привлекаете лучшие кодеры и более сложные задачи программирования, поэтому вы пишете больше кода и стали еще лучше. Вам платят все больше и больше за строку кода, который вы пишете, таким образом, это имеет экономический смысл написать больше кода вместо того, чтобы делать домашние работы или делать утомительные непрограммированные задачи на работе. Вы или ваша компания обязаны все остальное. Чем больше вы код, тем более успешной вы стану. Здесь у вас есть активность 80/20, которую вы можете следить каждый день: отслеживать количество строк, которые вы каждый день и оптимизируете его. Сделайте это игрой, чтобы хотя бы сопоставить ваше среднее каждый день. Если вы кодируете больше, вы в конечном итоге присоединяетесь к топ-10% кодеров с уровнями дохода, намного выше шести фигур.

Отношения между фокусом и распределением Парето

Тесно связанная тема, которую я хочу обсудить, это фокус. Принцип 80/20 объясняет, почему фокус настолько мощный. Давайте погрузимся в аргумент!

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

Рисунок: Непрерывная польза от улучшения вашего ранга в распределении Парето.

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

Рисунок: Нелинейность выхода ранга – стратегическое объяснение попытки силы фокуса.

Обратите внимание, что это верно не только через широкие и независимые области, такими как программирование, шахматы и политика. Это также относится к узким областям, таким как программирование. Например, Боб может провести свое время, прочитав три общих книги (давайте назовем их: введение в Python, введение в C ++ и введение в Java), в то время как Алиса читает три книги, дайвинга глубоко в Python (давайте назовем их: введение в Python, введение в Машинное обучение с Python и машинным обучением для экспертов).   В результате Алиса будет сосредоточена в том, чтобы стать экспертом на машине и может потребовать более высокой заработной платы для ее специализированного набора навыков.

Взносы GitHub

Еще один пример для распределения Парето ушел экстремальный, можно увидеть в взносах в репозитории GitHub. Есть научные доказательства того, что взносы в проекты с открытым исходным кодом – распределены Парето. [1] Давайте рассмотрим дико репозиторий для машиностроения вычислений в Python: Tensorflow. Вот семь лучших вкладчиков в репозиторий GitHub:

Рисунок: репозиторий GitHUB Tensorflow «Commit». [2]

Вот таблица, показывающая одни и те же данные численно:

Вкладчик Коммиты
Tensorflower-садовник 21426
Yongtang 1251
мерз 1120
гунан 1091
River707. 868
Benoitsteiner 838
Sanjoy 795

Пользователь Tensorflow-садовник внес более чем 20% из 93 000 коммит на этот репозиторий. Учитывая, что есть тысячи участников, распределение гораздо более экстремально, чем распределение 80/20. Причиной этой крайней агрессии состоит в том, что вкладчик Tensorflow-садовник состоит из команды кодеров в Google, который создает и поддерживает этот репозиторий. Однако интересное наблюдение состоит в том, что лучшие участники являются чрезвычайно успешными программистами с впечатляющими трековыми записями, работающими для некоторых из самых успешных компаний в мире. Вы можете публично проверить их на странице GitHub. Независимо от того, были ли они успешными до или после того, как они сгенерировали большое количество коммитителей в репозиторий с открытым исходным кодом – это простое теоретическое обсуждение. Для всех практических вопросов вы должны начать привычку успеха писать больше строк кода каждый день. Там ничего не останавливает вас от становления # 2 на репозитории Tensorflow – совершив ценный код в репозиторий Tensorflow 2-3 раза в день в течение следующих 2-3 лет. Если вы упорствуете, вы можете присоединиться к рядам самых успешных кодеров на Земле – выбрав одну мощную привычку и придерживаясь к нему три года!

Основной водитель превосходства состоит в том, чтобы использовать принцип 80/20 на нескольких фронтах: во-первых, вы сосредоточены на меньшинстве мероприятий, которые наиболее способны подталкивать вас к успеху в вашей профессии. Во-вторых, вы делаете больше этих мероприятий, чем 80% профессионалов в вашей отрасли, чтобы вы находитесь в топ-20% профессионалов, касающихся этих выбранных мероприятий. Привязывая эти два распределения Парето – выберите лучшие 20% мероприятий и присоединяйтесь к топ-20% с точки зрения количества выполнения активности – максимально используйте ваши ресурсы, и вы станете неудержимой силой в вашей отрасли. Вы готовы пройти на Луну?

Программист чистый ценность

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

Рисунок: Самоочередная чистая стоимость 60 программистов.

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

Марк Цукерберг, Билл Гейтс, Элон Мускус, Стив Возняк пришел на ум. Каждый из этих технологических гений создал прототипы своих услуг сами по себе, укладывая руку на исходный код. Количество миллионов программного обеспечения значительна.

[1] https://www.researchgate.net/publication/228728263_Evidence_for_the_Pareto_principle_in_Open_Source_Software_Activity

[2] https://github.com/tensorflow/tensorflow/graphs/Contributors.

[3] https://www.networthshare.com/publicprofiles/Occupation/11

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

Оригинал: “https://blog.finxter.com/the-80-20-principle-in-programming/”