<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Victor Pryazhnikov</title>
    <description></description>
    <link>https://pryazhnikov.com/</link>
    <atom:link href="https://pryazhnikov.com/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Sat, 01 Feb 2025 21:21:56 +0000</pubDate>
    <lastBuildDate>Sat, 01 Feb 2025 21:21:56 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      
    
      
    
      
      <item>
        <title>Виды жизненного цикла</title>
        <description xml:base="https://pryazhnikov.com/notes/systems-lifecycle-types/">&lt;blockquote&gt;
  &lt;p&gt;Данный пост написан по материалам &lt;a href=&quot;/ru/system-thinking-practicum/&quot;&gt;практикума системного мышления&lt;/a&gt; от “Школы системного менеджмента”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;водопадный&quot;&gt;Водопадный&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Водопадный&lt;/em&gt; или &lt;em&gt;каскадный&lt;/em&gt; вариант жизненного цикла — это последовательность стадий.
В один момент времени работа ведется только над одной стадией. После завершения работы над ней результаты передаются на следующую и начинаются работы на следующей стадии. Главная особенность тут — невозможность возврата к предыдущим стадиям после их завершения (отсюда и название: вода в водопаде может течь только в одном направлении).&lt;/p&gt;

&lt;p&gt;Между стадиями работ происходит проверка и приёмка результатов предыдущих стадий, по результатам которых принимается одно из возможных решений:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;продолжение работ и переход к следуюущией стадии;&lt;/li&gt;
  &lt;li&gt;возвращение на доработку;&lt;/li&gt;
  &lt;li&gt;прекращение работ по системе.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Места проверки и приёмки между стадиями называются &lt;em&gt;контрольные точки&lt;/em&gt; (milestones). Они известны заранее и используются в планировании работ по проекту.&lt;/p&gt;

&lt;h2 id=&quot;спиральный&quot;&gt;Спиральный&lt;/h2&gt;

&lt;p&gt;Главное отличие &lt;em&gt;спирального варианта жизненного цикла&lt;/em&gt; от водопадного заключается в том, что каждая стадия повторяется несколько раз. Каждый виток спирали — это итерация, похожая на обычный водопад. В рамках итерации мы так же последовательно выполняем все виды работ, а отличие заключается в том, что следущая итерация начинается не с нуля, а с результатов, полученных на предыдущей итерации.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pryazhnikov.com/assets/systems-thinking/Spiral_model.png&quot; alt=&quot;Модель спирального жизненного цикла&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;гибкий&quot;&gt;Гибкий&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Гибкие методологии&lt;/em&gt; относятся к разновидности спиральной модели. Их используют в проектах, в которых много неопределённости и нельзя создать план работ перед началом выполнения этих работ.&lt;/p&gt;

&lt;p&gt;В гибких методологиях мы имеем дело с какими-то &lt;em&gt;проблемами&lt;/em&gt; (issues), у которых есть описание и известна только ближайшая контрольная точка. При её достижении можно понять, какова следующая контрольная точка и что нужно делать дальше. Обычно для отслеживания состояния таких проблемам используются специальные программы — issue tracking systems.&lt;/p&gt;

&lt;p&gt;В рамках гибких методологий могут сущестовать итерации, похожие на витки в спиральной модели. Главное отличие тут - в том, что после каждой итерации мы должны иметь какой-то вариант работающей системы. В спиральной же модели готовая система появляется после последнего витка.&lt;/p&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Spiral_model&quot;&gt;Страница Spiral model в Википедии&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_project_management#Issue&quot;&gt;Страница Issues в Википедии&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Issue_tracking_system&quot;&gt;Страница Issue tracking system в Википедии&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Agile_software_development&quot;&gt;Страница Agile software development в Википедии&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.litres.ru/anatoliy-levenchuk/sistemnoe-myshlenie/&quot;&gt;Учебник “Системное мышление 2019”&lt;/a&gt;, глава №9 (“Не жизненный не цикл”) и №10 (“Вид жизненного цикла”).&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/notes/systems-lifecycle-types/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/notes/systems-lifecycle-types/</guid>
        
        
        <category>notes</category>
        
      </item>
      
    
      
      <item>
        <title>Жизненный цикл&amp;#x3A; версии 1.0 и 2.0</title>
        <description xml:base="https://pryazhnikov.com/notes/systems-lifecycle-versions/">&lt;blockquote&gt;
  &lt;p&gt;Данный пост написан по материалам &lt;a href=&quot;/ru/system-thinking-practicum/&quot;&gt;практикума системного мышления&lt;/a&gt; от “Школы системного менеджмента”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Система не создаёт сама себя, а появляется в результате работ, которые выполняют &lt;em&gt;системы обеспечения&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Изначально жизненным циклом называли отрезок времени, на котором выполнялись работы над целевой системой, в результате которых менялось состояние этой системы. Сам жизненный цикл разложен на последовательность крупных работ, которые нужно выполнить (они также называются &lt;em&gt;стадии&lt;/em&gt; или &lt;em&gt;фазы&lt;/em&gt; жизненного цикла).&lt;/p&gt;

&lt;p&gt;Список стадий может быть разным для разных систем. Вот например стадии создания автоматизированной системы по &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&quot;&gt;ГОСТ 34.601-90&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Формирование требований&lt;/li&gt;
  &lt;li&gt;Разработка концепции&lt;/li&gt;
  &lt;li&gt;Техническое задание&lt;/li&gt;
  &lt;li&gt;Эскизный проект&lt;/li&gt;
  &lt;li&gt;Технический проект&lt;/li&gt;
  &lt;li&gt;Рабочая документация&lt;/li&gt;
  &lt;li&gt;Ввод в действие&lt;/li&gt;
  &lt;li&gt;Сопровождение&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Такой вариант описания называется &lt;strong&gt;жизненным циклом версии 1.0&lt;/strong&gt;. Его можно считать надсистемой для всех систем обеспечения.&lt;/p&gt;

&lt;p&gt;Использовать такой вариант жизненного цикла неудобно по нескольким причинам:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Он предполагает последовательное выполнение стадий, что не стыкуется с современными методами работы.&lt;/li&gt;
  &lt;li&gt;Список стадий описывает менеджерскую составляющую проекта, но ничего не приносит в инженерную. По стадиям можно спланировать сроки, но нельзя понять, что же именно деллается, какие конкретно работы выполняются.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Чтобы решить эту проблему в &lt;strong&gt;жизненном цикл версии 2.0&lt;/strong&gt; делается переход от рассмотрения набора стадий к рассмотрению с точки зрения выполняемых &lt;em&gt;практик&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Практика — это набор из теоретической &lt;em&gt;дисциплины&lt;/em&gt; (абстракции, которая описывает деятельность) и поддерживающей её &lt;em&gt;технологии&lt;/em&gt; (того, с чем приходится работать на практике). Задача практики - описать работу с этой практикой с точки зрения роли, которую она играет в работе по созданию системы.&lt;/p&gt;

&lt;p&gt;Таким образом, представление жизненного цикла системы раскладывается на две состявляющие части:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;анализ необходимых практик - тут мы получаем список тех действий, которые нужно выполить для того, чтобы сделать систему;&lt;/li&gt;
  &lt;li&gt;синтез списка работ - тут список список работ, выполняющих эти действия с помощью собранных ранее практик.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.litres.ru/anatoliy-levenchuk/sistemnoe-myshlenie/&quot;&gt;Учебник “Системное мышление 2019”&lt;/a&gt;, глава №9 (“Не жизненный не цикл”).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&quot;&gt;Статья “Жизненный цикл системы” в Википедии&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 28 Mar 2020 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/notes/systems-lifecycle-versions/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/notes/systems-lifecycle-versions/</guid>
        
        
        <category>notes</category>
        
      </item>
      
    
      
      <item>
        <title>Системные уровни и эмерджентность</title>
        <description xml:base="https://pryazhnikov.com/notes/systems-breakdown/">&lt;blockquote&gt;
  &lt;p&gt;Данный пост написан по материалам &lt;a href=&quot;/ru/system-thinking-practicum/&quot;&gt;практикума системного мышления&lt;/a&gt; от “Школы системного менеджмента”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Мы живём в мире сложных систем. Автомобиль или самолёт состоят из сотен тысяч отдельных деталей. Невозможно помнить про все эти детали, поэтому приходится управлять вниманием, концентрируясь только на важном. Для проведения такой фокусировки в системном подходе используются два понятия – системное разбиение и эмерджентность.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Системное разбиение&lt;/strong&gt; позволяет смотреть как на совокупность уровней (они называются “системными уровнями”). Идея этого разложения заключается в переходе от отдельных деталей и рассмотрению системы как набор систем, входящих в её состав (они называются подсистемами). Каждая из таких систем выполняет какую-то функцию внутри системы, в которую она входит.&lt;/p&gt;

&lt;p&gt;Таким образом нужно рассматривать не детали по отдельности, а иерархию систем, которые из них получаются. При этом в один момент нужно рассматривать не всю иерархию, а выбрать одну систему (её называют &lt;em&gt;целевой&lt;/em&gt;), после чего смотреть на один уровень вверх (на её надсистему) и один вниз (на её подсистемы). Это ограничение уменьшает количество объектов рассмотрения и позволяет игнорировать несущественные моменты, но при этом понимать, как система работает в целом.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Эмерджентность&lt;/strong&gt; (или “системный эффект”) позволяет оставить в составе системы только необходимые части. Само слово “эмерджентность” означает, что у системы появляется новое свойство или новая функция, которого нет у его частей по отдельности.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Например, телевизор, инфракрасный порт и пульт вместе дают новое свойство - управлять телевизором на расстоянии. При этом нельзя добавить к телевизору только пульт или только инфракрасный порт, т.к. по отдельности они не дадут нового свойства (т.к. у телевизора не будет или источника, или приемника сигнала).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При разбиении системы следите за двумя моментами, связанными с эмерджентностью:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Добавлять новый элемент в рассматриваемую систему стоит только если он приносит что-то новое. Если не появляется нового свойства, то зачем же он нужен?&lt;/li&gt;
  &lt;li&gt;Если набор систем, собранных вместе, не дают нового свойства, то их нельзя считать новой системой.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.litres.ru/anatoliy-levenchuk/sistemnoe-myshlenie/&quot;&gt;Учебник “Системное мышление 2019”&lt;/a&gt;, глава №4 (“Системные уровни”).&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 22 Feb 2020 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/notes/systems-breakdown/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/notes/systems-breakdown/</guid>
        
        
        <category>notes</category>
        
      </item>
      
    
      
      <item>
        <title>Процессы в компьютерных программах с точки зрения системного подхода</title>
        <description xml:base="https://pryazhnikov.com/notes/systems-physical-processes/">&lt;blockquote&gt;
  &lt;p&gt;Данный пост написан по материалам &lt;a href=&quot;/ru/system-thinking-practicum/&quot;&gt;практикума системного мышления&lt;/a&gt; от “Школы системного менеджмента”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Системный подход разделяет понятия описания и воплощения системы. &lt;strong&gt;Описания&lt;/strong&gt; существуют в абстрактном мире и используются как инструмент мышления и переноса опыта между разными проектами. &lt;strong&gt;Воплощения&lt;/strong&gt; систем должны находиться в физическом мире, представлять собой конкретный объект, занимающий конкретное место в пространстве и выполняющий конкретную функцию.&lt;/p&gt;

&lt;p&gt;Программы как воплощения систем также работают в физическом мире и представлены не их исходным кодом, а компьютерами, на которых они работают в момент выполнения своей функции, где хранятся и передаются данные, которые используются в момент работы программы, и т.д.&lt;/p&gt;

&lt;p&gt;Аналогичный “физический” подход используется и для описания &lt;strong&gt;процессов&lt;/strong&gt;, происходящих в системах. Процесс происходит не сам по себе, а с участием каких-то физических объектов, которые взаимодействуют друг с другом. Вот эти объекты во время своего взаимодействия при выполнении процесса и станут физическим воплощением этого процесса.&lt;/p&gt;

&lt;p&gt;Возьмём заказ билета на самолет через сайт авиакомпании в качестве примера. В этом процессе будут задействованы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;покупатель, который заказывает билет;&lt;/li&gt;
  &lt;li&gt;ноутбук, с которого покупатель заполняет форму заказа;&lt;/li&gt;
  &lt;li&gt;сервера авиакомпании, которые генерируют веб-страницу с формой заказа и обрабатывают введенные в неё данные;&lt;/li&gt;
  &lt;li&gt;сервера платёжной системы, которые показывают форму оплаты и обрабатывают данные карты;&lt;/li&gt;
  &lt;li&gt;сервера мобильного оператора, которые отправляют SMS с кодом подтверждения платежа;&lt;/li&gt;
  &lt;li&gt;телефон покупателя, на который приходит SMS с кодом подтверждения платежа;&lt;/li&gt;
  &lt;li&gt;почтовые сервера, на которые приходит письмо с купленным билетом.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;При желании этот список можно продолжать как “вширь” (добавляя новые шаги покупки билета), так и вглубь (детальнее прорабатывая каждый шаг). Важно помнить, что процесс ограничен не только в пространстве, но и во времени - поэтому учитывайте только те объекты, которые участвуют в рассматриваемом процессе во время его выполнения.&lt;/p&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.litres.ru/anatoliy-levenchuk/sistemnoe-myshlenie/&quot;&gt;Учебник “Системное мышление 2019”&lt;/a&gt;, глава №2 (“Воплощение и описание системы”) — отдельно рекомендую прочитать раздел “компьютерные программы” в конце главы.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 08 Feb 2020 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/notes/systems-physical-processes/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/notes/systems-physical-processes/</guid>
        
        
        <category>notes</category>
        
      </item>
      
    
      
      <item>
        <title>Как использовать термины в разговорах?</title>
        <description xml:base="https://pryazhnikov.com/notes/systems-terms/">&lt;blockquote&gt;
  &lt;p&gt;Данный пост написан по материалам &lt;a href=&quot;/ru/system-thinking-practicum/&quot;&gt;практикума системного мышления&lt;/a&gt; от “Школы системного менеджмента”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Термин&lt;/strong&gt; — это слово, которое обозначает какой-то объект (или &lt;strong&gt;“концепт”&lt;/strong&gt;). Проблема с терминами заключается в том, что есть разные “диалекты” и одна и та же вещь быть названа разными терминами.&lt;/p&gt;

&lt;p&gt;Спорить о терминах и пытаться переучить собеседника — это плохая идея. Во-первых, это может привести к ожесточённым спорам за правильное название. Во-вторых, даже в случае успеха это повлияет на собеседника и он перестанет говорить так же уверенно, как раньше с использованием хорошо знакомого ему языка. &lt;/p&gt;

&lt;p&gt;Для того, чтобы успешно договориться, нужно концентрироваться не на словах-терминах, а на том, &lt;em&gt;что они означают&lt;/em&gt;. Если значения термина непонятны, то лучше попросить собеседника объяснить термин, либо разъяснить собственное понимание для того, чтобы сверить его с пониманием собеседника. Экстремальным случаем подобной техники является табуирование, т.е. замена непонятного или спорного слова-термина на его объяснение. &lt;/p&gt;

&lt;p&gt;При этом объяснять лучше не на базе других терминов (которые тоже могут быть различаться), а на уровне физического мира. В системном подходе для этого используется понятие 4D-объекта - если объект занимает одно и то же место в (трехмерном) пространстве в одно и то же время (т.е. в четвертом изменении), то это один и тот же объект.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Работая в web-студии много лет назад я неосознанно использовал подобную технику, когда нужно было разобраться с проблемами одного заказчика, который плохо разбирался в интернет-сайтах и использовала термины с непонятными значениями. Она называла ссылки “переходами” и никто не понимал, о чем она говорит и что хочет. Разобраться с её пожеланиями мы смогли только после того, как перестали её поправлять, а посадили её у экрана монитора и просили показывать “пальцем” на то, про что она говорит.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;При этом нельзя игнорировать сами слова-термины.&lt;/p&gt;

&lt;p&gt;Чтобы договориться с человеком, важно понимать его &lt;strong&gt;интерес&lt;/strong&gt;. Интерес зависит от &lt;strong&gt;роли&lt;/strong&gt;, которую играет человек, причем один и тот же человек может играть разные роли, у которых разные интересы. Как раз используемые &lt;em&gt;термины помогают понять, в какой роли находится человек&lt;/em&gt;, что он хочет и о чем с ним говорить. Поэтому нужно не игнорировать термины, а следить за ними и сопоставлять с тем, что человек говорит.&lt;/p&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.litres.ru/anatoliy-levenchuk/sistemnoe-myshlenie/&quot;&gt;Учебник “Системное мышление 2019”&lt;/a&gt;, глава №1 (“О мышлении”) — очень большая глава-введение в системное мышление.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sewiki.ru/%D0%95%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%BE_%D0%BD%D0%B0%D1%83%D1%87%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D1%8F&quot;&gt;Экстенсионализм&lt;/a&gt; — описание 4D экстенсионализма в Systems Engineering Thinking Wiki.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://lesswrong.ru/wiki/%D0%A2%D0%B0%D0%B1%D1%83%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&quot;&gt;“Табуирование”&lt;/a&gt; — описание приёма в wiki русскоязычного сообщества LessWrong.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 01 Feb 2020 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/notes/systems-terms/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/notes/systems-terms/</guid>
        
        
        <category>notes</category>
        
      </item>
      
    
      
      <item>
        <title>Практикум системного мышления</title>
        <description xml:base="https://pryazhnikov.com/ru/system-thinking-practicum/">&lt;p&gt;Сегодня начался &lt;a href=&quot;https://system-school.ru/praktikum&quot;&gt;практикум системного мышления&lt;/a&gt; от “Школы системного менеджмента”. Главное отличие этого практикума от &lt;a href=&quot;/ru/systems-thinking-course/&quot;&gt;онлайн-курса&lt;/a&gt;, который я проходил около года назад, заключается в том, что мы будем не просто “изучать системное мышление”, а сразу применять его в своём рабочем проекте. После прохождения онлайн-курса було много сложностей как раз с применением на практике и я решился пройти еще один курс.&lt;/p&gt;

&lt;p&gt;В течение следующих 12 недель я буду проходить курс и планирую периодически записывать сюда какие-то основные моменты. Не получится делать это оперативно (практикум предполагает самостоятельную работу по 10 часов в неделю), но надеюсь, что периодически я буду переносить сюда основные моменты из своих записей.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Этот пост будет пополняться&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;содержание&quot;&gt;Содержание&lt;/h2&gt;

&lt;h3 id=&quot;неделя-1&quot;&gt;Неделя №1&lt;/h3&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Заметка &lt;a href=&quot;/notes/systems-terms/&quot;&gt;“Как использовать термины в разговорах?”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;неделя-2&quot;&gt;Неделя №2&lt;/h3&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Заметка &lt;a href=&quot;/notes/systems-physical-processes/&quot;&gt;“Процессы в компьютерных программах с точки зрения системного подхода”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;неделя-3&quot;&gt;Неделя №3&lt;/h3&gt;

&lt;h3 id=&quot;неделя-4&quot;&gt;Неделя №4&lt;/h3&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Заметка &lt;a href=&quot;/notes/systems-breakdown/&quot;&gt;“Системные уровни и эмерджентность”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;неделя-5&quot;&gt;Неделя №5&lt;/h3&gt;

&lt;h3 id=&quot;неделя-6&quot;&gt;Неделя №6&lt;/h3&gt;

&lt;h3 id=&quot;неделя-7&quot;&gt;Неделя №7&lt;/h3&gt;

&lt;h3 id=&quot;неделя-8&quot;&gt;Неделя №8&lt;/h3&gt;

&lt;h3 id=&quot;неделя-9&quot;&gt;Неделя №9&lt;/h3&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Заметка &lt;a href=&quot;/notes/systems-lifecycle-versions/&quot;&gt;“Жизненный цикл: версии 1.0 и 2.0”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;неделя-10&quot;&gt;Неделя №10&lt;/h3&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Заметка &lt;a href=&quot;/notes/systems-lifecycle-types/&quot;&gt;“Виды жизненного цикла”&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;неделя-11&quot;&gt;Неделя №11&lt;/h3&gt;

&lt;h3 id=&quot;неделя-12&quot;&gt;Неделя №12&lt;/h3&gt;
</description>
        <pubDate>Mon, 27 Jan 2020 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/ru/system-thinking-practicum/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/ru/system-thinking-practicum/</guid>
        
        
        <category>ru</category>
        
      </item>
      
    
      
      <item>
        <title>Обзор конференции Стачка 2019 в Иннополисе</title>
        <description xml:base="https://pryazhnikov.com/ru/stachka-innopolis-2019/">&lt;h2 id=&quot;введение&quot;&gt;Введение&lt;/h2&gt;

&lt;p&gt;Конференция &lt;a href=&quot;https://nastachku.ru/&quot;&gt;“Стачка”&lt;/a&gt; уже 7 лет проводится в Ульяновске и сами себя они называют “крупнейшей регональной IT-конференцией. В этом году она впервые прошла не только в Ульяновске, но и в Иннополисе на территории &lt;a href=&quot;https://university.innopolis.ru/&quot;&gt;местного университета&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://pryazhnikov.com/assets/i/stachka__university.jpg&quot; alt=&quot;&amp;quot;Здание Университета Иннополис&amp;quot;&quot; title=&quot;Здание Университета Иннополис&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Мне удалось побывать на этой конференции и она поразила меня количеством докладов (в течение двух  дней доклады шли в тринадцать паралелльных треков), широтой тематики (тематика секций простиралась от обычных уже бэкенд разработки, QA и искусственного интеллекта до SEO, IT-сообществ и даже графического продакшена). Найти интересные доклады можно было без особых проблем, хотя нужно отметить, что многие из них читались ранее и на других конференциях. Пожалуй, единственным неприятным моментом было отсутствие видеозаписи.&lt;/p&gt;

&lt;p&gt;В обзоре я расскажу про основные моменты запомнившихся докладов.&lt;/p&gt;

&lt;h2 id=&quot;обзоры-докладов&quot;&gt;Обзоры докладов&lt;/h2&gt;

&lt;h3 id=&quot;как-ускорить-аб-тесты-в-10-100-раз-валерий-бабушкин-x5-retail-group--яндекс&quot;&gt;Как ускорить А/Б тесты в 10-100 раз (Валерий Бабушкин, X5 Retail Group / Яндекс)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/kak-uskorit-a-b-testy-v-10-100-raz&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Доклад состоял из двух частей: в первой Валерий рассказал, что такое A/B тестирование и зачем оно нужно, а во втором показал несколько приёмов, с помощью которых можно быстрее получить результаты теста с нужной степенью уверенности.&lt;/p&gt;

&lt;p&gt;Всего было три приёма:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Линеаризация - тут мы делаем замену переменной и оцениваем не саму метрику теста (в качестве примера был CTR у какой-то ссылки), а её отличие от значения в контрольной группе. Это значение получается более чувствительным, что сокращает время на получение результата теста с нужной степенью уверенности.&lt;/li&gt;
  &lt;li&gt;Перевзвешивание (reweighting) - оно позволяет решить проблему наличия разных пользователей (с большой активностью и маленькой, “зевак” и реальных покупателей в магазине и т.д.). Основная идея тут в том, что пользователи учитыаются с разными коэффициентами. Про подбор коэффициентов Валерий не рассказал, сославшись на то, что его просили не раскрывать детали (видимо, это коммерческая тайна).&lt;/li&gt;
  &lt;li&gt;Использование теоремы Байеса - основная идея тут была в том, что мы переходим от сравнения с контрольной группой к сравнению с моделью поведения в контрольной группе, созданной с помощью машинного обучения. Детали я не записал и не смог восстановить по презентации, но кажется, что по смыслу это похоже на описанное в статье &lt;a href=&quot;https://vc.ru/ontico/82932-uchet-dannyh-o-proshlom-povedenii-polzovatelya-v-metrikah-a-b-testirovaniya&quot;&gt;“Учёт данных о прошлом поведении пользователя в метриках A/B-тестирования”&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;как-перестать-бояться-и-начать-разрабатывать-специализированные-структуры-данных-алексей-миловидов-яндекс&quot;&gt;Как перестать бояться и начать разрабатывать специализированные структуры данных (Алексей Миловидов, Яндекс)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/kak-perestat-boyatsya-i-nachat-razrabatyvat-specializirovannye-struktury-dannyh&quot;&gt;Описание&lt;/a&gt;, &lt;a href=&quot;https://clickhouse.github.io/clickhouse-presentations/database_saturday_2019/&quot;&gt;презентация&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Алексей Миловидов - тимлид команды, занимающейся разработкой ClickHouse, и на его докладе был аншлаг. В докладе Алексей рассказал про задачу анализа фрода для Яндекс.Метрики и решении, которое он делал для хранения необходимой для этого информации. Он рассказал про набор оптимизаций, которые позволили не одном сервере хранить данные для 600К RPS. Мне запомнились эти:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Cчётчики с вероятностным инкрементом старших байтов для хранения количества запросов к конкретным URL - это позволяет (с погрешностью) хранить счётчики с миллиардными значениями в одном байте:&lt;br /&gt;&lt;img src=&quot;https://pryazhnikov.com/assets/i/stachka__milovidov-counters.png&quot; alt=&quot;Как посчитать от одного до миллиарда, используя 1 байт&quot; title=&quot;Слайд из презентации &amp;quot;Как перестать бояться и начать разрабатывать специализированные структуры данных&amp;quot;&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/HyperLogLog&quot;&gt;Hyperloglog&lt;/a&gt; для хранения уникального количества (кажется) IP адресов, запрашивающих URL - тут для меня стало откровением, что при снижении точности результата можно очень серьёзно сэкономить место для хранения счётчиков (с нескольких килобайт буквально до пары десятков байт).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Counting_Bloom_filter&quot;&gt;Counting bloom filters&lt;/a&gt; - разновидность фильтров Блума, считающие не факт наличия значения в потоке, а количество вхождений (до определённого предела). Они позволяли вообще не хранить информацию об URL, которые запрашиваются слишком редко.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Этот доклад понравился мне больше всех остальных на этой конференции. Это уже повтор выступления Алексея с &lt;a href=&quot;https://events.yandex.ru/events/yasubbotnik/17-aug-2019/&quot;&gt;одного из “Яндекс.Субботников”&lt;/a&gt;, поэтому есть вероятность, что “Яндекс” опубликует видео или текстовую расшифровку. Пока же рекомендую посмотреть презентацию.&lt;/p&gt;

&lt;h3 id=&quot;как-разрабатывается-популярный-opensource-фреймворк-александр-макаров-yii&quot;&gt;“Как разрабатывается популярный OpenSource фреймворк” (Александр Макаров, Yii)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/yii-proshloe-i-buduschee&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Александр Макаров рассказал про то, что стоит за разработкой популярного open source продукта. В целом было довольно интересно и я вынес оттуда две основные мысли:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Работа над популярным продуктом - это не столько про программирование, сколько про работу с сообществом, которое пользуется этим продуктом.&lt;/li&gt;
  &lt;li&gt;Работа над популярным продуктом требует множество усилий, поэтому стоит подумать, зачем оно автору и зарабатывает ли он на нём что-то. Если нет, то есть серьёзная вероятность, что в какой-то момент проект окажется заброшенным.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;тестирование-больших-кросс-командных-проектов-в-дедлайн-павел-сташевский-lamoda&quot;&gt;Тестирование больших кросс-командных проектов в дедлайн (Павел Сташевский, Lamoda)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/testirovanie-bolshih-kross-komandnyh-proektov-v-dedlayn&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Павел рассказ про то, как тестировать большие изменения в крупных проектах. Большая часть доклада была посвящена тому, как нужно готовиться к тестированию подобных проектов. Основные действия, которые я запомнил:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Выделить список заинтересованных лиц (стейкхолдеров проекта) и собрать из них проектную команду. В этой команде не обязательно должны быть все заинтересованные, но стоит добавить туда “тест лида” (обычно из команды функционала, который будет задет больше всего). Задача тест лида - следить за тестированием всего проекта (и знать проект лучше всех).&lt;/li&gt;
  &lt;li&gt;Разобраться в бизнес-требованиях проекта и разложить их на составляющие (не только с точки зрения IT-систем, но и с точки зрения данных в этих системах и операционных процессов, которые участвуют).&lt;/li&gt;
  &lt;li&gt;Собрать требования и подготовить тест-план, ориентируясь на реальность сценариев и их ценность с точки зрения бизнеса. Это позволяет сократить количество сценариев и “победить” комбинаторный взрыв.&lt;/li&gt;
  &lt;li&gt;После сбора стоит показать сценарии всем членам команды проекта.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Также стоит подготовить план наблюдения за проектом, который потребуется после выкладки. Этот план представляет набор метрик (как технических, так и продуктовых), по которым можно понять, как проект работает в продакшене.&lt;/p&gt;

&lt;h3 id=&quot;профессиональная-убедительность-для-инженеров-перед-менеджерами-алексей-пименов-realresult&quot;&gt;Профессиональная убедительность для инженеров перед менеджерами (Алексей Пименов, RealResult)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/professionalnaya-ubeditelnost-dlya-inzhenerov-pered-menedzherami&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Этот доклад был в сравнительно небольшом зале и там был аншлаг - я вообще не смог зайти так, чтобы было видно презентацию, и просто слушал доклад.&lt;/p&gt;

&lt;p&gt;Основной тезис заключался в том, что когда инженеры пытаются убедить менеджеров в своей правоте они апеллируют к цифрам и логике. Проблема в том, что этого мало, т.к. в голове человека есть две системы (система I и система II по Даниэлу Канеману) и к логическим аргументам нужно добавить визуализацию, которая наглядно продемонстрирует идею. Дальше были прикладные примеры диаграмм, которые можно получить из данных трекеров задач, и кейсы-примеры, в которых они помогли.&lt;/p&gt;

&lt;p&gt;Алексей показал такие виды диаграмм:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;накопительная диаграмма потока: сколько задач в каких статусах находилось в системе в этот день;&lt;/li&gt;
  &lt;li&gt;спектральная диаграмма: гистограмма распределения количества задач по времени, потраченному на их выполнение;&lt;/li&gt;
  &lt;li&gt;эффективность потока: показывает долю времени простоя задачи при переходе между статусами.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Именно выгрузки задач использовались как самый доступный для инженеров способ перейти к финансовым вопросам, которые более интересны менеджерам. Сложно оценить, сколько мы заработаем, если сделаем X, но гораздо проще понять, сколько мы тратим, не делая X.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;всё-пошло-по-кафке-григорий-кошелев-скб-контур&quot;&gt;Всё пошло по Кафке (Григорий Кошелев, СКБ Контур)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/vse-poshlo-po-kafke&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Доклад состоял из двух основных частей. В первой Григорий рассказал, как устроена Apache Kafka, а во второй части прошёлся по “граблям”, с которыми они сталкивались. Общий посыл был в том, что нужно очень аккуратно подходить к настройке и следить за изменениями в поведении параметров при обновлении версии. Пересказывать проблемы нет особого смысла - лучше посмотрите презентацию.&lt;/p&gt;

&lt;p&gt;Главное, что вынес - что документация к Кафке написана не очень хорошо и если нужно больше информации по тому, как всё устроено и работает, то стоит читать KIP-ы (&lt;a href=&quot;https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals&quot;&gt;Kafka Improvement Proposals&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Григорий уже выступал в этом году с похожими докладами:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://2019.codefest.ru/lecture/1398&quot;&gt;“А вы Кафку пробовали?”&lt;/a&gt; на CodeFest (есть видео и презентация)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://2019.jpoint.ru/talks/1xa5ea6p9djq1phnauiygm/&quot;&gt;“Когда всё пошло по Кафке”&lt;/a&gt; на JPoint (есть видео и презентация)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;продукто-ориентированный-программист-дмитрий-шестернин-flowwowcom&quot;&gt;Продукто-ориентированный программист (Дмитрий Шестернин, flowwow.com)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/produkto-orientirovannyy-programmist&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Рассказ от небольшого онлайн-магазина цветов (как я понял, работающего по Uber модели) про то, как им удаётся работать над продуктом при небольших ресурсах. Основная идея - нанимать программистов, которым интересно думать о продукте, а не тех, кому интересны только технологии.&lt;/p&gt;

&lt;p&gt;Из всего доклада запомнилось буквально пара мыслей:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;У них явно определены три основные бизнес-метрики (“трафик”, “конверсия в покупки”, “повторные покупки”) и одна техническая (“снижение стоимости поддержки”) и для любой задачи должна быть определена метрика, которую должна улучшить эта задача. Если её нет, то нужно предварительно разобраться, а стоит ли делать задачу.&lt;/li&gt;
  &lt;li&gt;У всей компании внутри есть доступ к финансовым показателям, что позволяет видеть свой вклад от реализации задач. Кроме этого активно практикуется раздача бонусов “спасибо”, с помощью которых дают возможность почувствовать себя важным тем сотрудникам, которым тяжело увидеть свой вклад на графиках.&lt;/li&gt;
  &lt;li&gt;Dogfooding - любой сотрудник может периодически получить купон на какую-то сумму и сделать заказ, но потом обязательно должен написать фидбек. Это помогает понять, с какими проблемами сталкиваются реальные клиенты, и побывать в их шкуре.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Забавный факт: идею важности “думания о продукте” Дмитрий подтвердил на деле тем, что за время проведения конференции подключил к flowwow единственный цветочный магазин в Иннополисе.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;rest-api-сервер-от-кода-до-деплоя-борис-ершов-nixys&quot;&gt;Rest API сервер от кода до деплоя (Борис Ершов, Nixys)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/rest-api-server-ot-koda-do-deploya&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Рассказ про то, как они разрабатывают, выкатывают и эксплуатируют микросервисы на языке Go. Часть вещей, про которые рассказывал Борис, лежит на github. Мне больше всего понравилась часть про накатывание миграций для обновления схемы БД и их откат в случае проблем.&lt;/p&gt;

&lt;p&gt;Общая идея заключается в том, что в контейнер зашивается версия схемы данных, в которой он должен работать, и всё необходимое для накатывания миграций. При развертыватывании новой версии сервиса, он сам накатит нужные миграции в случае, если версия БД меньше чем необходимая для его работы.&lt;/p&gt;

&lt;p&gt;При проблемах в первую очередь откатывается на предыдущую версию сервис, а при необходимости уже потом “по кнопке” откатывается миграция схемы БД. Чтобы это работало нужно думать об обратной соместимости версии базы данных (т.е. не нужно добавлять новую колонку и сразу удалять неиспользуемую, а стоит разделить это на несколько отдельных миграций).&lt;/p&gt;

&lt;h3 id=&quot;эластик-весом-весом-в-петабайт-владимир-лила-скб-контур&quot;&gt;Эластик весом весом в петабайт (Владимир Лила, СКБ Контур)&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://nastachku.ru/elastik-vesom-vesom-v-petabayt&quot;&gt;Описание&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Очень хороший доклад, позволяющий понять, что представляет собой эксплуатация Elasticsearch с большим количеством данных. Владимир занимается обслуживанием эластика, который используется для хранения логов от всех приложений “Контура” и поиска по ним. Владимир рассказал про следующие моменты:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;почему они используют Kafka для записи данных в Elastic;&lt;/li&gt;
  &lt;li&gt;как организованы и как хранятся индексы;&lt;/li&gt;
  &lt;li&gt;какие задачи по работе с индексами автоматизированны и почему именно они.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;У меня нет практического опыта работы с “эластиком” и было интересно послушать про это. Если тема интересна, то рекомендую посмотреть видео (на “Стачке” видеозаписи не было, но Владимир в этом году выступал с этим же докладом на DUMP, &lt;a href=&quot;https://www.youtube.com/playlist?list=PLRdS-n5seLRpbOXIlWaWDQWig1XRFwJBY&quot;&gt;записи откуда можно найти&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Полезные ссылки:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://opendistro.github.io/for-elasticsearch/&quot;&gt;сборка ElasticSearch с открытой лицензией от Амазон&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/elastic/curator&quot;&gt;curator&lt;/a&gt; - набор утилит для работы с индексами ElasticSearch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;

&lt;p&gt;В целом конференция мне понравилась (за исключением некоторых организационных моментов) и я могу рекомендовать её к посещению.&lt;/p&gt;
</description>
        <pubDate>Mon, 04 Nov 2019 00:00:00 +0000</pubDate>
        <link>https://pryazhnikov.com/ru/stachka-innopolis-2019/</link>
        <guid isPermaLink="true">https://pryazhnikov.com/ru/stachka-innopolis-2019/</guid>
        
        
        <category>ru</category>
        
      </item>
      
    
      
    
  </channel>
</rss>
