Впечатления о книге — Чистый Agile — Роберта Мартина

Чистый Agile — Роберт Мартин

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

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

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

Мысли автора описаны в неформально-разговорном стиле, поэтому некоторые выражения могут показаться не совсем корректными. 

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

Вся суть Agile в четырех предложениях Манифеста:

  • Люди и взаимодействия важнее процессов и инструментов
  • Работающий продукт важнее исчерпывающей документации
  • Сотрудничество с заказчиком важнее согласования условий контракта
  • Готовность к изменениям важнее следования первоначальному плану

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

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

Один из наиболее важных методов экстремального программирования — разработка через тестирование. Ее можно описать тремя простыми правилами:

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

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

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

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

Занимаясь этой деятельностью, мы прежде всего научились ценить:

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

Впечатления о книге — Постигая Agile — Дженнифер Грин

Книга Постигая Agile — Дженнифер Грин

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

Лично мне, книга интересна тем, что на ее страницах раскрываются тайны таких модных понятий как Agile, Scrum, XP, Lean, Kanban как обособленно, так и в сравнении, а, точнее, в гармоничных комбинациях. Другими словами эти методологии и философии дополняют друг друга или лучше раскрывают…

Основные понятия, которые для себя отметил описываются ниже.

Agile

Именно изменение образа мыслей превращает группу сотрудников, добавляющую в свою работу несколько agile-методов, в настоящую команду, которая действительно улучшает способ создания ПО

Манифест гибкой разработки программного обеспечения:

Люди и взаимодействия важнее процессов и инструментов
Работающий программный продукт важнее исчерпывающей документации
Сотрудничество с заказчиками важнее согласования условий контракта
Готовность к изменениям важнее следования первоначальному плану 

12 принципов гибкой разработки программного обеспечения 

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

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

  1. Мы принимаем изменения в требованиях даже на поздних этапах реализации проекта. Agile-процессы позволяют использовать изменения для повышения конкурентоспособности продукта.

Agile-команды одобряют изменения, рассматривая их как положительные и полезные события для проекта

  1. Мы стремимся поставлять полностью рабочее программное обеспечение каждые несколько недель, в крайнем случае — каждые несколько месяцев. Чем чаще, тем лучше.

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

  1. Наиболее эффективный и действенный способ передачи информации — это встреча членов команды разработки ПО.

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

  1. Представители бизнеса и команда разработки должны работать над проектом вместе.

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

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

Каждый член agile-команды чувствует свою ответственность за проект и отвечает за успех

  1. Рабочее программное обеспечение — это главная мера прогресса проекта.

Наиболее эффективный способ коммуникации в ходе реализации проекта — поставка рабочего программного обеспечения и передача его в руки пользователя

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

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

  1. Постоянное внимание к техническому совершенству и качественной архитектуре способствует гибкости.

Хорошо разработанное и реализованное программное обеспечение намного быстрее поставляется клиенту, потому что в него проще вносить изменения

  1. Простота — это искусство не делать лишней работы.

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

  1. Лучшая архитектура, требования и дизайн создаются в самоорганизующихся командах.

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

  1. Команда постоянно ищет способы стать более эффективной путем настройки и коррекции своих действий

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

Scrum 

Правила Scrum 

— В scrum-проекте существует три основные роли: владелец продукта, scrum-мастер и член команды.

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

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

— Ежедневно все члены команды участвуют в короткой встрече (Daily Scrum — ежедневный scrum-митинг), чтобы рассказать друг другу о достижениях и обсудить то, что препятствует дальнейшей работе. Каждый человек отвечает на три вопроса: что я сделал с момента последнего ежедневного совещания? Что буду делать вплоть до следующего ежедневного совещания? Какие препятствия есть на моем пути?

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

Чтобы работать по Scrum, команда должна глубоко и на интуитивном уровне понимать коллективную ответственность и самоорганизацию 

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

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

Экстремальное программирование 

Две основные практики XP — разработка через тестирование и парное программирование    

Lean (бережливое мышление)

Lean — это мышление, а не методология

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

Любая деятельность, которая явно не добавляет ценности проекту, считается потерями. Lean-команды стремятся увидеть их и исключить из проектов, насколько это возможно.    

Канбан 

Канбан — это метод улучшения процессов, используемых гибкими командами 

Канбан отличается от гибких методологий, таких как Scrum и ХР.

Scrum преимущественно ориентирован на управление проектами: объем работы, который должен быть проделан, чтобы эта работа была выполнена, и результат, необходимый пользователям и стейкхолдерам.

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

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

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

Затем принимайтесь за основные практики:
— визуализацию;
— ограничение числа задач в работе (WIP);
— управление потоком;
— сделайте правила явными;
— введите петли обратной связи;
— развивайтесь совместно и экспериментируйте (используя моделирование или научный подход).

Типичная канбан-доска показывает крупные рабочие элементы, а не отдельные задачи

Впечатление о книге — Грокаем алгоритмы — Адитьи Бхаргавы

Книга Грокаем алгоритмы Адитьи Бхаргавы

Сразу хочу поделиться мыслями:

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

Ниже приведены, освещенные в этом труде, понятия, алгоритмы и технологии

  • Бинарный поиск (в том числе в сравнении с обычным поиском перебором) и массивы. Хотя массив поиска должен быть отсортированным чтобы им пользоваться
  • О-большое — порядок времени работы алгоритма. Важное понятие для оценки эффективности (скорости работы) алгоритмов или сравнения разных алгоритмов
  • Задача о коммивояжере (как пример задачи, которую очень тяжело выполнить точно)
  • Связанные списки, как альтернативный массивам тип данных
  • Сортировка выбором
  • Рекурсия и стек (стек вызовов)
  • Быстрая сортировка (используется понятие алгоритма «Разделяй и властвуй» и рекурсия)
  • Хеши, Хеш-таблицы, Хеш-функции
  • Графы, Поиск в ширину для описка кратчайшего пути по графу (когда весов у ребер нету)
  • Алгоритм Дейкстры для поиска наиболее выгодного (быстрого) пути по графу (когда весы у ребер появляются)
  • Жадные алгоритмы, как быстрые, но приближенного решения сверх-сложных задач (NP-полных)
  • Множества
  • Динамическое программирование, как метод решения сложных задач с помощью разбиения на более простые
  • Шутливый Алгоритм Фейнмана (1 — сформулировать задачу, 2 — хорошенько подумать, 3 — записать решение)
  • Алгоритм k-ближайших соседей, как распостраненный метод решения многих задач классификации (распределение по категориям) и регрессии (прогнозирование ответа)
  • Извлечение признаков
  • Машинное обучение на примерах OCR, спам-фильтра, прогноза биржевых торгов

В последней главе книги вскользь (тезисно) касаются следующих тем

  • Возвращаемся к деревьям
  • Инвертированные индексы
  • Преобразование Фурье
  • Параллельные алгоритмы
  • MapRecude и распределенные алгоритмы
  • Фильтры Блума и HyperLogLog
  • Алгоритмы SHA и сравнение файлов
  • Алгоритм Диффи-Хеллмана
  • Линейное программирование

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

Впечатления о книге — Искусство объяснять — Ли Лефевер

Книга Искусство объяснять Ли Лефевера

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

Чем то, концепция произведения напоминает таковую из книги «В работу с головой«, где рассматривается углубленная работа, на первый взгляд, элементарное понятие.

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

Цель книги — помочь читающему переосмыслить свою манеру объяснять и научиться упаковывать идеи в объяснения, которые приносят реальную пользу.

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

  • Объяснения требуют умения поставить себя на место собеседника. Это перекликается с умением слушать из очень полезной книги — 7 навыков высокоэффективных людей . Другими словами, процесс объяснения основан на эмпатии — важной способности понимать и разделять чувства другого человека
  • Формулирование объяснения помогает на лучше понимать идею
  • Основная причина множества неудачных объяснений — «проклятие знания», так как оно снижает нашу способность правильно оценивать аудиторию или собеседника
  • Хорошие объяснения повышают уверенность в себе, плохие — снижают или полностью уничтожают
  • Контекст — важная часть объяснения, которая делает идею, факт или историю понятнее и полезнее. И если аудитория разношерстная, другими словами, присутствуют и эксперты и новички, необходимо формировать контекст с уровня начинающим, а затем покрывать экспертов
  • Основной вопрос любого объяснения: почему это должно меня интересовать? При эффективном использовании, контекст помогает ответить на этот вопрос, создавая ощущение согласия по поводу предмета в целом
  • История. Цель истории в объяснении — добавить к изложению фактов человеческие переживания. Не нужно быть профессиональным рассказчиком, чтобы использовать истории. Истории используются, чтобы заинтересовать предметом объяснения
  • Истории чаще подходят для объяснений, где главная тема связана с действиями человека или с его опытом
  • Связи, как аналогии. Связи со старым способом, представленные в виде отчаяния или проблемы, делают необходимость новых решений ясной и понятной. Пример связи нового и старого: Google Docs это как Word но удобнее для совместной работы с файлом.
  • Использование связей — это еще один способ укрепить уверенность людей и снизить цену понимания определенного вопроса
  • При объяснении, Историю или Связь можно использовать, как совместно, так и отдельно, т.е. не обязательно применять их обоих для объяснения одного предмета
  • Описание — новая ступень объяснения. Применяется когда необходимо ответить на вопрос «как я могу это использовать?» вместо «почему меня это должно интересовать?» (о котором уже позаботились Контекст, История и Связь)
  • Упрощение используется, когда необходимо сложную идею сделать простой. С любой сложной идеей можно так поступить. Правила упрощения:
    • Не делать предположений о том, что люди уже знают
    • Использовать самые простые слова
    • Мысленно уменьшить масштаб предмета объяснения
    • Забыть о подробностях и исключениях
    • Жертвовать точностью ради понимания
    • Связать базовые идеи с тем, что понимает аудитория
  • Ограничения с которыми мы сталкиваемся, когда формируем объяснения. Хотя они и ограничивают, на самом деле, они и освобождают. Мы намеренно создаем «контейнер», который позволяет быстро решить, что положить внутрь, а что оставить снаружи и выкинуть из головы, чтобы сосредоточиться на других вопросах
  • Сценарий объединяет все части объяснения: контекст, связь, историю, описание, и в сценарии они принимают форму. Краткий обзор элементов сценария по порядку:
    • соглашение
    • контекст — проблема/отчаяние и нахождение решения
    • история
    • связь
    • описание
    • реализация решения — как
    • призыв к действию
  • Некоторые идеи трудно понять без иллюстрации, т.е. слов не всегда бывает достаточно. Такие идеи становятся понятными после того, как мы включаем визуализацию:
    • графики и временные графики
    • диаграммы
    • карты
    • блок-схемы
    • портреты пользователей

Впечатления о книге — Remote. Офис не обязателен — Джейсона Фрайда

Обложка книги Remote. Офис не обязателен

Книга от основателей компании 37signals, Джейсона Фрайда и Дэвида Хайнемайера Хенссона (так же известен как создатель известного фреймворка Ruby on rails). Личности достаточно известные, отчего их, кристаллизированные в книге, мысли, идеи, подходы имеют высокую ценность.

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

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

Отмечу некоторые ключевые моменты книги, которые заинтересовали меня лично…

  • Типичный офис стал «зоной прерываний», в которой каждый сегмент времени наполнен телеконференциями, созвонами, синхронизациями, встречами, совещаниями и прочими стандартными, но необязательными с точки зрения работы прерываниями. Осмысленная, творческая, сложная и важная работа требует длительных периодов концентрации, когда ничто не отвлекает и можно с головой погрузиться в то, чем занимаешься. Кстати, это посвящена целая исследовательская работа, описанная в предыдущей статье о книге «В работу с головой. Паттерны успеха от IT-специалиста».
  • Для успешной удаленной работы необходимо разработать подходящий распорядок дня и придерживаться его. Для этого нужно выйти на новый уровень личной ответственности. Это более высокий уровень, чем может показаться вначале, особенно для тех, кто от природы склонен откладывать дела на потом.
  • Большинство страхов, связанных с к удаленной работе возникают из-за недоверия к людям. А люди обладают поразительной особенностью отвечать вашим ожиданиям. Вот такой замкнутый круг, из которого жизненно-важно выходить. Так же можно резюмировать, что не стоит брать на работу того, кому не сможешь доверять и работать на босса, который не доверяет тебе.
  • Есть мнение, что дома люди чаще отвлекаются. Если и так, то лучший способ бороться с отвлекающими факторами — интересное, захватывающее дело. Большинство людей хотят работать, поскольку это тонизирует их и приносит удовольствие.
  • Время от времени — например, когда ситуация на работе становится напряженной — могут портиться даже отношения между добро-желательно настроенными людьми. Лучший способ не допустить этого — иметь на борту как можно больше оптимистов, тех, кто делает все возможное, чтобы у всех было отличное настроение.
  • Важно не только учитывать характер нанимаемых сотрудников, но и постоянно следить за атмосферой в коллективе. Не стоит позволять неприятным людям отравлять жизнь другим. В случае удаленной работы это смертельно опасно.
  • При подборе удаленных работников нужно особенно внимательно относиться к поощрению культурного разнообразия и личного развития. А так же поддерживать развитие команды.
  • Если рассматривать принятую разницу зарплат между столицей, крупными городами и провинцией, не стоит позволять относиться к себе как к второсортному работнику лишь из-за того, что живешь не в мегаполисе, вы можете спровоцировать аналогичное пренебрежительное отношение к себе и в остальных вопросах. Так же и с нанимающей стороны, не стоит поощрять такую дифференциацию вознаграждений для своих работников.
  • Удаленная работа ускоряет процесс «высадки» неправильных людей и появлении «на борту» людей правильных
  • Умение хорошо писать является важной чертой эффективного удаленного сотрудника. Чтобы получать такой навык (и многие другие) нужно много читать и изучать методы работы хороших писателей.
  • Самый точный способ оценить человека, при соискании на должность, — нанять его для выполнения небольшого задания, прежде чем решиться доверить большой проект.
  • При приеме на работу, личная встреча помогает понять последнее: нравится ли нам кандидат как человек. Необходимо пригласить человека на обед или же в офис, в результате, можно будет понять, комфортно ли ему с нами, и, комфортно ли нам с ним.
  • Вам, как руководителю, придется принять как данность, что ваши подчиненные будут ошибаться — конечно, непреднамеренно — и что эти ошибки — обычная плата за их обучение и независимость.
  • На самом деле, главным врагом удаленной работы является не «недо-«, а переработка. Это могло бы выглядеть как мечта работодателя: сотрудники во всю трудятся сверхурочно, не требуя за это компенсацию. Однако, если работа поглощает целиком, повышается вероятность «выгорания«. Это случается, даже когда человек любит свое дело.
  • Культура переработки легче складывается в компаниях, где суперменов-трудоголиков постоянно играют «наверху».
  • Попытки подстегнуть мотивацию угрозами или наградами абсолютно неэффективны. На самом деле они приводят к противоположному эффекту. Есть только один надежный способ поднять мотивацию — поощрять людей работать на тем, что им нравится, и только с теми людьми, которые не оставляют их равнодушными.
  • Смена декораций может способствовать появлению множества различных плодотворных идей.

Впечатления о книге — В работу с головой. Паттерны успеха от IT-специалиста Кэла Ньюпорта

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

Но читая книгу «В работу с головой. Паттерны успеха от IT-специалиста», понимаешь, что тема далеко не простая. И, одно дело, понимать эффективность углубленной деятельности, а другое — уметь входить в это состояние.

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

Данная книга — своего рода научная работа, посвященная одному вопросу — сосредоточении на работе. Но доносится простым мотивирующим языком.

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

Материал изобилует историями и примерами очень знаменитых личностей и чуть менее известных. На страницах вы найдете подходы от Билла Гейтса, Чарльза Дарвина, Карла Юнга, Теодор Рузвельт, Дж. К. Роулинг, Джека Дорси, Энди Гроува, Уолтера Айзексона, Джерри Сайнфелда, Рика Фаррера, Михая Чиксентмихайи, Сантьяго Гонсалеса, Дэвида Девэйна, Брайана Чаппелла, Нила Стивенсона, Дональда Кнута и многих других.

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

Выделяется 4 способа погружения в работу:

  • «Монашеская» система. Эта система пытается увеличить объем углубленного труда посредством исключения или радикального уменьшения поверхностных обязанностей. Применима для людей, чей профессиональный спех в первую очередь зависит от выполнения этой единственной задачи на высочайшем уровне. Примерами могут быть ученые, работающие над важной научной работой, или писатели, сидящие над книгой.
  • Двухрежимная система. При этом, происходит распределение времени: какие то четко определенные отрезки (дни, недели, месяца) посвящаются углубленной работе, а оставшееся время открыты для всего прочего. Если, например, уделять такой работе лишь несколько часов по утрам, это время окажется слишком коротким, чтобы считать его периодом углубленной работы.
  • Ритмическая система. Цель здесь — задать в работе определенный ритм, который освободит вас от необходимости тратить энергию на решения, надо ли вам погружаться в работу, и если надо, то когда. Ритмическая система чрезвычайно широко распространена среди офисных работников.
  • Журналистская система. Подход, при котором вы вставляете углубленную работу в свое расписание в любой подходящий момент.

Какие еще моменты из книги я отметил для себя:

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

Впечатления о книге Программист-фанатик Чеда Фаулера

Программист-фанатик — видимо так его видят в издательстве книги

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

Автор книги позиционирует назначение книги следующим образом — показать системный путь построения незаурядной карьеры разработчика программного обеспечения.

Делает он это на собственных примерах или же примерах хороших знакомых.

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

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

Найдите свой рынок

  • В любое время, на рынке разработки, есть множество языков программирования и технологий. Какие то более удачные, какие то — менее. Какие то предназначены для решения одних задач, какие то — для других. Мысль в том, что не все технологии одинаково востребованы, и специалисты, соответсвенно, оплачиваются по разному. С этой точки зрения необходимо использовать дисбаланс рынка и смотреть в сторону инструментов, пользующихся большим спросом, либо же приглядываться с более высоко-оплачиваемым, но более рискованным
  • Для супер-героя в мире разработки, умение хорошо писать код мало. Чтобы стать незаменимым, нужно детально разбираться в особенностях бизнеса, с которым связана текущая деятельность. Проще всего считать, то мы специалисты в таком то языке и именно за это нам платят. Однако, знание специфики работы в определенной отрасли может стать определяющим фактором, способным серьезно повлиять на возможность трудоустройства или же повышение.
  • Тут же, наводит на мысль, что и бизнес, с которым будет связана работа, нужно выбирать осознано, чтобы разбираться с ним было не в тягость.
  • Будь худшим. Не в плане, быть ленивым и безответственным, а ответственно подходить к своему окружению. Речь о коллективе, так как окружающие люди влияют и на ваш результат. Попадая в коллектив сильных ребят, вы будете улучшать свои навыки очень быстро
  • Очень важный совет — инвестировать в себя, свои знания время; изучать новые технологии и методологии. Это, не только создает образ правильно мотивированного и увлеченного своим ремеслом человека, но и делают вас глубже, лучше, умнее и изобретательнее, увеличивают вариативность решения задач

Инвестируйте в себя

  • Работа в стабильной компании создает чувство и зону комфорта. Негативными последствиями этого может стать закостенелость, застои в развитии. Для противодействия этому, автор предлагает рассмотреть альтернативы, например разработку своего проекта. Выход из зоны комфорта будет полезен для дальнейшего развития
  • Старайтесь быть универсальным. Это увеличивает вероятность остаться в выбранной вами компании, несмотря на встряски и штормы, в которые бросают вашу шлюпку различные кризисы. Ваши навыки не должны ограничиваться одной технологической платформой или стеком технологий
  • При этом, в текущем стеке стремитесь быть специалистом, интересуясь процессами, которые могут быть инкапсулированы. Необходимо быть любознательным, экспериментатором. Иногда тяжело сразу же в чем то разобраться, тут поможет правильная постановка вопроса (Зачем это нужно? Почему происходит именно так?..). Через какое то время ваш ум приведется в новое состояние и появится ответ
  • Сложно быть посредственным специалистом, правильно выбрав бизнес, работу, технологию. И наоборот, какое то время можно притворяться, но недостаток энтузиазма обязательно скажется как на вас, так и на вашей работе
  • На начальном этапе карьеры, большой рывок вперед может помочь сделать хороший наставник. Важно, чтобы рядом с вами был такой человек, которому ты доверяешь и которым восхищаешься, помогающий правильно сориентироваться в плане профессионального роста. Однако, на практике, это далеко не всегда реализуемо. В таком случае — воспитывай себя сам
  • Если хочешь по-настоящему что-то изучить, попробуй научить этому кого-то другого. Передача опыта не только поможет другому специалисту, но и закрепит ваши знания. Параллельно, нужно тренироваться самому, на пределе своих возможностей
  • Хороший способ увеличения производительности — автоматизация своей работы

Исполнительность и качество

  • Даже монотонные и неинтересные задачи не стоит воспринимать как тюремную каторгу. Взгляните на такую рутину, как на соревнование, таким образом, можно выполнить их куда быстрее. Становитесь тем, кто толкает вперед, а не показывает себя жертвой
  • Люди, обеспечивающие бесперебойную работу над проектом без многочисленных указаний сверху, высоко ценятся постоянно занятыми начальниками и заказчиками. Кстати, это один из критерием, когда разработчика причисляют к миддлам или сеньорам, в противопоставлении джуниорам
  • Очень хороший подход в собственном развитии — это улучшать компанию изнутри, буть неравнодушным к ее судьбе, что, в любом случае, будет иметь хорошие последствия и для работника. Превышение ожиданий работодателя является вполне достойно целью
  • Успех вашего начальника — это и ваш успех. Думайте не о том, на какое место ты хочешь попасть после повышения, а о задачах, которыми придется заняться, завершив текущие дела. Что выдающегося вы можете сделать на текущей должности
  • Избегайте бесед о продвижении по службе и офисной политике. Так же избегайте сплетен. Сплетни и интриги вредят компании и, в последствии, вредят каждому ее члену
  • Чувство незаменимости является плохим симптомом, особенно у разработчиков программного обеспечения. Заменить нельзя только того, кто справляется со своей работой особым, недоступным другим способом. Вы нигде не должны чувствовать себя слишком комфортно
  • Так как все мы делаем ошибки, мы даем право на ошибку другим. И в разумных пределах не судим друг друга
  • Озвучивайте проблему сразу же, как только о ней узнали, не пытайтесь ее скрыть
  • Предлагайте решение. Если вы его не знаете, предлагайте план поиска решения
  • Просите помощи. Даже если вина за возникновение проблемы лежит целиком на вас, не позволяйте собственной гордости усугубить ситуацию, отказываясь от помощи
  • Имейте смелость говорить «нет» на нереальные просьбы или требования. Имейте смелость быть честным

Маркетинг — не только для бизнесменов

  • Вам придется много писать. Поэтому, лучше научиться делать это хорошо. А, ведь, если уделять тексту сообщений недостаточно внимания — можно передать информацию искаженно и потом разбираться, почему же вас не так поняли
  • Необходимо четко понимать, какую пользу для бизнеса приносит ваша деятельность, в понятных бизнесу терминах
  • Сделать свои имя известным и заставить о себе говорить проще всего с помощью публикаций и выступлений. Читайте блоги. Затем заведите свой блог. Отрабатывайте навык письменной речи; постепенно он будет улучшаться, что придаст вам дополнительную уверенность. При этом, начинать нужно раньше, чем почувствуете себя готовым — т.е. прямо сейчас
  • Работа над программами с открытым исходным кодом не только дает возможность создать себе имя, но и демонстрирует вашу увлеченность данной областью деятельностью

Сохраняйте конкурентные преимущества

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

Впечатления о книге — Программирование без дураков авторов Пассиг Катрин и Яндер Йоханнес

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

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

Книга позиционирует себя как руководство для программирования «less wrong», т.е. «менее неверно», другими словами — программировать правильнее с точки зрения опытных программистов, до которых дотянулись авторы книги и их окружение. Я думаю, она выполняет эту цель.

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

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

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

  1. Книга на примерах показывает, что значит плохой программист (и от обратного, мы понимаем, что не нужно делать, чтобы быстрее становиться хорошим)
  2. Дает советы общего (около-программного) плана, которые помогут быть хорошим программистом
  3. Вводим в курс проблемы именования переменных, функций, классов и т.д. Не дает универсальных решений, подчеркивая, что в разных языках и фреймворках правила могут отличаться. Так же не стоит забывать, что нету каких то абсолютно общепринятых правил и, может так статься, что нужно следовать ранее установленным договоренностям
  4. Важность комментариев и документированности кода. Однако, важно не злоупотреблять комментированием и понимать, где они к месту, а где могут даже мешать пониманию кода
  5. Подходы к чтению кода и поиску информации
  6. Важный вопрос, который подымается в книге, и которым грешат разработчик постарше — это попытки оказать помощь в случае, если она (помощь) не требуется или нежелательна (непрошена второй стороной)
  7. Целый раздел посвящен работе над ошибками разнообразнейших типов, поиск багов, составление и проверка гипотез, анализ и отладка кода, потенциально слабые места программ, вопросы рефакторинга и тестирования программного обеспечения
  8. Материал из книги учит не изобретать велосипеды (почему она не попадалась мне в начале карьеры 🙂 ). Как искать эти «велосипеды» и применять в своих условиях
  9. Чуточку, пытается направить читателя в поиске первого или следующего языка программирования (а так же фреймворка, менеджера пакетов и тому подобное)
  10. Вводит в курс важной темы систем контроля версия и работы с ними
  11. Помогает не бояться командной строки
  12. Открывает завесу в понятиях объектно-ориентированного программирования (как преимущества так и недостатки, а так же — альтернативы)
  13. Освещаются вопросы хранения данных (начиная с текстовых форматов и заканчивая графовыми базами данных) 
  14. Уделяется внимание важным вопросам безопасности информации
  15. В финале, рассматриваются не вошедшие, но немаловажные вопросы, с которыми рано или поздно сталкиваются все разработчики. И дает напутствие на дальнейшее развитие в сторону хороших программистов

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

Хотя, лично я, некоторые главы просто просматривал, не останавливаясь на деталях, так как дошел да этих истин самостоятельно. Но при этом получил удовлетворение, что все эти годы, двигался в правильном направлении.

Впечатления о книге — 7 навыков высокоэффективных людей Стивена Кови

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

Проблемы книги (лично для автора статьи)

  1. Сами 7 навыков сложно сформулировать кратко и емко, так чтобы обращаться к их формулировкам постоянно. 
  2. Книга читается легко, в ней хорошие примеры, но это мало помогает для себя обобщить эти 7 навыков. Даже по прочтении книги 2 раза и по прошествии нескольких недель, непросто сформулировать для себя эти навыки. Хотя, может это задумка автора, и для полного понимания навыков, необходимо провести некоторую «домашнюю работу» с выписыванием ключевых идей для себя отдельно
  3. Книга была написана очень давно (1989), хотя, автор утверждает, что с течением времени 7 приводимых навыков стали еще более актуальными. Тем не менее, ощущается некий налет «ретро» в том, как доносится информация

Почему книгу стоит прочитать

  1. Это общепризнанный кладезь знаний/инсайтов/мыслей/триггеров. Она поможет ответить на сложные социально-психологические вопросы, которые вы, может даже и сформулировать не решались.
  2. По прочтении книги, становится понятно от куда корни терминов, которыми оперируют хорошие менеджеры. Например, тот же, квадрант Эйзенхауэра (срочно-важно), правило Парето (20/80), принцип «Выиграл/выиграл», понятие «проактивности» и многие другие. Т.е. позволит говорить с людьми, достигших значительных успехов в само-развитии, на одном языке.
  3. Может помочь задать направлении дальнейшего развития личности (вряд ли это будет первая книга, которая это сделает, но может быть лучшей или же помочь, на одном из «перекрестков развития»)

Для себя, я отметил следующие положения по каждому из 7 навыков:

Навык 1: Будьте проактивны

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

Навык 2: Начинайте представлять конечную цель

  • Смысл навыка заключается в том, чтобы уже сейчас начать формировать свое представление образа, картины или парадигмы конечных целей вашей жизни. Составить систему оценок и критериев по которым будет оцениваться все остальное.
  • В продолжении предыдущего пункта, лидерство — это формирование направления развития и задач компании или группы, установление продуктивных, теплых, доверительных отношений внутри коллектива или семьи. Эти лидерство отличается от управления, которое подразумевает только следованию уже установлены правилам, контроль и решение сиюминутных трудностей
  • В личном плане, основой второго навыка будет составление и следование положениям личной миссии — способу фокусироваться на том, каким вы хотите быть и что вы хотите делать, а так же ценности и принципы, которые будут лежать в основе вашего характера и поступков
  • Помещая в центр нашей жизни верные принципы, вы создаете прочную основу для развития жизне-обеспечивающих факторов: внутренняя безопасности, планирование, мудрость и личная власть
  • Личная миссия семьи (или организации) — фундаментальная основа, конституция семьи, нормы и критерии для вынесения суждений и принятия решений, которые способствуют ее единению и долгому существованию
  • Без вовлечения в процесс формирования личной миссии семьи или организации нету и приверженности, это необходимо учитывать при формировании личной миссии

Навык 3: Сначала делайте то, что необходимо делать сначала

  • В основе третьего навыка лежат принципы персонального управления. Лидерство определяет что нужно делать сначала, а управление помогает выполнять это
  • Для понимания, что нужно делать сначала, нужно понять матрицу управления временем (квадрант Эйзенхауэра)
  • Важные несрочные дела требуют от нас большей инициативы, большей проактивности, при этом они создают новые возможности. Когда выполняются такие дела, наша эффективность совершает огромный скачок
  • Фокусировка на важных несрочных делах приводит к тому, что количество кризисов и проблем (которые идут из квадранта 1 — срочные-важные) сокращается до разумного предела, так как вы планируете будущее и предпринимаете шаги, предотвращающие развитие кризисных ситуаций. 
  • Так работает принцип Парето: 80 процентов результатов проистекает из 20 процентов усилий
  • Метод недельного планирования (в отличии от метода дневного планирования) наделяет свободой и гибкостью, необходимой для того, чтобы справляться с непредвиденными обстоятельствами, в том числе

Навык 4: Думайте в духе «Выиграл/Выиграл»

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

Навык 5: Сначала стремитесь понять, а потом — быть понятым

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

Навык 6: Достигайте синергии

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

Навык 7: Затачивайте пилу

  • Данный навык говорит о том, что нужно развивать самый главный ресурс — нас самих. Необходимо обновляться в 4х измерениях равномерно: физическом, духовном, интеллектуальном и социально-эмоциональном
  • Каждое из измерений очень важно само по себе, однако наиболее эффективным процесс становится только тогда, когда он разумно сбалансирован
  • При этом, при правильном развитии одного или нескольких измерений естественным образом подтягивает другие измерения
  • Навык 7 относится не только к личности, но и организациям