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

Держать его просто глупо! Минимализм в программировании: как сложность наносит вред вашей производительности

Эта статья основана на главе книги из моей предстоящей книги «От одного до нуля: минималистичный подход к программированию». Мои студенты программирования часто пишут с их борьбой и неудачами. Многие студенты в конечном итоге преодолевают свою борьбу, но большой процент из них отказывается от их амбиций программирования после того, как осознает, насколько усердно создание программного обеспечения может … Держите его простым, глупым! Минимализм в программировании: как сложность вредит вашу производительность Подробнее »

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

Эта статья основана на главе книги из моей предстоящей книги «От одного до нуля: минималистичный подход к программированию» .

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

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

Это не основные причины Почему они терпят неудачу.

Вместо этого они терпят неудачу, потому что они перегружены сложностью, скрывающейся везде в программировании Отказ Сложность заставляет их бросать полотенце. Это несчастный, потому что есть много способов смягчить вредные последствия сложности в программировании. В предыдущей главе вы уже узнали некоторые стратегии о 80/20 Принцип (Сосредоточьтесь на жизненно важном и пожертвовать тривиальным многочисленным!).

В этой главе мы собираемся всеобъемлющий взгляд на эту важную и чрезвычайную тему. Что именно сложно? Где это происходит? Как это выглядит?

Давайте начнем с быстрых обзоров – есть значительная сложность при выборе права

  • Язык программирования среди десятков популярных языков,
  • Проект кодирования для работы по-из тысяч проектов с открытым исходным кодом и множествами проблем,
  • Библиотеки на языке ( Scikit-Learn vs numpy vs tensorflow ),
  • Новые технологии для «ставки на приложения -alexa», приложения для смартфонов, веб-приложений на основе браузера, встроенные приложения на Facebook или WECHAT, приложения для виртуальной реальности и
  • редактор кодирования такие как пичарм, простаистые и атом.

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

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

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

Итак, что такое Лучший способ начать учиться программировать ? На мой взгляд, лучший способ начать состоит в том, чтобы выбрать практический кодовый проект – простой, если вы начинаете – и подтолкните его до завершения.

  • Не читайте книги по кодированию, прежде чем сделать это.
  • Не читайте случайные учебники в Интернете.
  • Не прокрутите бесконечные каналы на Stackoverflow.

Просто настройте проект и начните кодировать с ограниченными навыками, которые у вас есть и ваш здравый смысл.

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

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

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

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

Вы будете бореться с сложностью в:

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

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

Корень проблемы является подавляющей сложности и отсутствие фокуса. Итак, возникает вопрос:

Как решить сложность и отсутствие фокусировки?

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

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

Что такое сложность?

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

Словарь Merriam Webster определяет сложность как «Что-то сложное» Отказ Термин комплекс определяется как «Целое состоит из сложных […] части» Отказ Если вы разрешите термин сложный – «Сложно проанализировать, понимать или объяснить» -Вы в конечном итоге со следующим шероховатым определением:

Сложность : «Все, состоит из частей, сложно проанализировать, понимать или объяснить» Отказ

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

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

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

  • Сложность в реальном цикле проекта
  • Сложность в программном обеспечении и алгоритмической теории
  • Сложность в обучении
  • Сложность в процессах
  • Сложность в социальных сетях
  • Сложность в вашей повседневной жизни
  • Сложность в реальном цикле проекта

Лучший способ учиться и создать длительное значение – это ваше участие или посвящение проекта реального мира. Но как это выглядит, когда реальный проект приходит к жизни? Давайте погрузимся на разные этапы жизненного цикла проекта: планирование, определение, проектирование, строительство, тестирование и развертывание (см. Рисунок 1).

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

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

Планирование

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

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

Эта фаза имеет решающее значение, поскольку он может спасти вас от огромных потерь энергии ниже по потоку на следующих фазах. Владельцы бизнеса знают, что Распределение капитала (или вообще говоря: Распределение ресурсов ) – единственная самая важная функция генерального директора. Фаза планирования – это место, где рычаги играют в самой полной мере: ошибки планирования могут привести к миллионам долларов впустую ресурсы впустую доллару. С другой стороны, осторожное планирование имеет силу установления бизнеса для больших успехов в течение многих лет. Фаза планирования – это отличное кредитное точка, где вы можете применить ваш недавно приобретенный навык 80/20 мышление Отказ

Однако этап планирования также очень трудно сделать правильно.

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

Определяющий

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

Проектирование

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

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

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

Строительство

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

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

Тем не менее, этап здания всегда полон Новые и возникающие проблемы Отказ Неожиданные вещи случаются, что замедляют прогресс, такие как ошибки во внешних библиотеках, проблемы с производительностью, поврежденные данные, человеческие ошибки и многие другие. Строительство Программного продукта – это очень сложный Endeavor. Чтобы написать отличное программное обеспечение, вы должны использовать искусственный язык и правильно объяснить тупыми машинами, что делать в каждом возможном обстоятельствах. Небольшая орфография) может решить правильность и жизнеспособность всего программного продукта.

Тестирование

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

Вы сделали? Не совсем!

Вы все еще должны Проверьте поведение вашего программного продукта для различных пользовательских входов и шаблонов использования Отказ Похоже, незначительная деталь, но эта фаза часто является наиболее важным из всех!

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

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

  • Что если ваши автомобильные езду на небольшой дороге без дорожных знаков?
  • Что если машина перед вами резко останавливается?
  • Что если несколько автомобилей ждут друг друга на перекрестке?
  • Что если водитель внезапно улетает приближается к трафику?

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

Развертывание

Ваше программное обеспечение прошло строгий этап тестирования. Теперь пришло время освободить его и бросить его на рынок Отказ

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

Вы уже обескуражены? Хорошо – теперь вы знаете врага. Но оставайся с нами, потому что в этой книге есть решение!

Сложность в программном обеспечении и алгоритмической теории

В то время как в целом процесс программного обеспечения существует значительная сложность, в течение данного программного обеспечения есть столько сложности. Сложность в программном обеспечении -Как это определено? У вас может быть уже есть интуиция относительно сложности в программных продуктах ( «WOW – Как они реализовали эту функцию обнаружения лица! Должно быть, было действительно сложно!» ).

Но в программном проекте есть много метрик, которые измеряют сложность программного обеспечения в более формальный путь Отказ

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

Другими словами, вам нужно сортировать список. Сортировка списка более сложна для 1 000 000, чем для 100 игроков. Есть тысячи алгоритмов для сортировки списка. Некоторые алгоритмы масштабируются лучше с увеличением размера ввода списка; другие масштабируются хуже. Пока вам приложение служит несколько сотен пользователей, это не имеет значения, какой алгоритм вы выберете. Но, поскольку ваша пользовательская база растет, сложность выполнения списка растет сверхлинейно. Вскоре ваши пользователи придется ждать дольше и дольше для того, чтобы список был отсортирован. Они начинают жаловаться – вам нужны лучшие алгоритмы!

На рисунке 2 показаны алгоритмическая сложность двух схематических алгоритмов. На оси X он показывает размер списка, который будет отсортирован. Ось Y показывает время выполнения алгоритма (во временных единицах). Алгоритм 1 гораздо медленнее, чем алгоритм 2. На самом деле неэффективность алгоритма 1 становится все более и более очевидной, более элементы списка должны быть отсортированы. В результате ваше игровое приложение становится медленным и медленным, чем больше пользователей играют с ним.

фигура 2 : Алгоритмическая сложность двух разных сортировков алгоритмов.

Вот почему Алгоритмическая сложность – это тщательно исследованное поле С десятилетиями прогресса и множествами компьютерных ученых, которые постоянно снижают алгоритмическую сложность алгоритмов, чтобы решить те же проблемы быстрее и быстрее. На мой взгляд, алгоритмы, произведенные в течение десятилетий исследования компьютерных наук, являются одними из самых популярных Ценные технологические активы человечества Отказ Эти алгоритмы позволяют нам решать те же проблемы с меньшим количеством ресурсов, а не один раз, а кончились и снова. Мы действительно стоим на плечах гигантов.

Интересно, что алгоритмическая сложность не единственная метрика, которая измеряет сложность Кодекса. Есть также некоторые практические меры, такие как Цикломатическая сложность , метрика, разработанная Thomas McCabe в 1976 году, которая описывает количество линейно независимых путей через ваш код: количество путей, которые имеют хотя бы один край, это не на другом пути. Например, код с помощью оператора IF приведет к двум независимым путям через ваш код, поэтому он будет иметь более высокую цикломатическую сложность, чем плоский код без оператора IF. Цикломатическая сложность представляет собой твердую меру когнитивной сложности многих основных основ.

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

Сложность в обучении

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

В 2012 году Google объявил, чтобы заполнить структуру данных, называемую «График знаний» с информацией. График знаний представляет информацию в сетевой структуре, которая вместо хранения глупых и независимых фактов, поддерживала взаимосвязь между различными фактами и информацией.

Затем система поиска Google использовала эту взаимозависимость фактов на Обегайте результаты поиска с знаниями на высоком уровне и создать много ответов автономно.

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

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

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

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

Вы могли бы узнать о практических инструментах, таких как Python, Numpy, Scikit-Survey, CCXT, Tensorflow и колба. Вы могли бы узнать о торговых стратегиях и философии фондового рынка. И, на самом деле, многие люди приближаются к этим проблемам с таким мышмым. Они никогда не перестают учиться. Они никогда не чувствуют себя готовы начать проект. Они продолжают учиться, потому что чем больше они учатся, тем меньше они знают. Каждая из упомянутых категорий потребует тысячи часов обучения, чтобы освоить его. Вы никогда не достигнете достаточного овладения на всех этих областях, чтобы по-настоящему удовлетворить ваше желание чувствовать готовку. Разочарован и перегружен сложностью всего усилия, вы чувствуете, как бросать в полотенце и покинуть поле для более интеллектуальных кодов. Сложность собирается взять ее следующую жертву: вы.

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

Сложность в социальных сетях

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

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

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

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

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

Есть ли дополнительные источники сложности? Вы ставят, есть!

Сложность в процессах

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

Сложность процесса дается его количеством действий, участников или филиалов. В целом, если у вас больше действий, процесс становится все сложнее (см. Рисунок 3).

Рисунок 3. : Два примерных процесса: Разработка одного человека в развитие команды.

Было разработано много процессов, и многие программные компании следуют за моделями процессов для разработки программного обеспечения (например, Agile Development, Scrum), поддерживать отношения с клиентами (например, CRM, Scripts) и создания новых продуктов и бизнес-моделей (например, бизнес-модель холст). Если люди являются жизненным слоем бизнеса, процессы – вены и артерии. Если ваши артерии раздаются, вам нужно быстро избавиться от узких мест, или ваше тело будет страдать. Это то же самое для бизнеса: если бизнес страдает, вы должны удалить узкие места в ваших бизнес-процессах, чтобы остаться в живых.

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

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

Сложность в вашей повседневной жизни или смерти тысячи сокращений

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

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

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

Тем не менее, то, что вы желаете в большинстве мгновений Мгновенное удовлетворение Отказ Если вы собираетесь погрузиться в глубокую работу, ваша подсознание понимает, сколько усилий и ищет способы сбежать от усилий, участвующих в глубокой работе. Вы хотите ответить на сообщение от своего друга, потому что он будет производить легкий повышение ваших эндорфинов. Вы хотите заниматься бессмысленным Chit Chat в кофейном углу. Вы хотите посмотреть Netflix и TV. Обещание задержанного удовлетворения становится менее и менее привлекательным по сравнению с счастливым, красочным и оживленным миром мгновенного удовлетворения.

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

Как справиться с сложным миром

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

Давайте передам некоторые из наиболее важных последствий предыдущих аргументов:

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

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

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

Как принцип 80/20, сложность везде, и вам постоянно нужно думать о том, как уменьшить сложность и упростить вещи. Держать его просто глупо!

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

… продолжение следует …

Эта статья основана на проекте новой главы моей предстоящей книги «От одного до нуля: минималистичный подход к программированию» Отказ Оставайтесь настроек для обновлений запуска!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Вы хотите развивать навыки Хорошо округлый Python Professional То же оплачивается в процессе? Станьте питоном фрилансером и закажите свою книгу Оставляя крысиную гонку с Python На Amazon ( Kindle/Print )!

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

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

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