HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <blockquote><p>"Компьютер - это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы". Алан Кокс, прим. Википедия</p>
1 <blockquote><p>"Компьютер - это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы". Алан Кокс, прим. Википедия</p>
2 </blockquote><p>Как вы уже заметили, одну и ту же программу можно написать множеством различных способов. Если не брать во внимание случаи, когда программа написана просто плохо, то остаются подходы, которые имеют как преимущества, так и недостатки относительно друг друга. Иными словами, вся наша жизнь состоит из компромиссов.</p>
2 </blockquote><p>Как вы уже заметили, одну и ту же программу можно написать множеством различных способов. Если не брать во внимание случаи, когда программа написана просто плохо, то остаются подходы, которые имеют как преимущества, так и недостатки относительно друг друга. Иными словами, вся наша жизнь состоит из компромиссов.</p>
3 <h2>Парадигма программирования</h2>
3 <h2>Парадигма программирования</h2>
4 <blockquote><p>Это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию)</p>
4 <blockquote><p>Это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию)</p>
5 </blockquote><p>Подходы к написанию программ принято называть парадигмами. И эти парадигмы резко отличаются от того, чем они являются в науке.</p>
5 </blockquote><p>Подходы к написанию программ принято называть парадигмами. И эти парадигмы резко отличаются от того, чем они являются в науке.</p>
6 <p>Своим современным значением в научно-технической области термин "парадигма" обязан, по-видимому, Томасу Куну и его книге "Структура научных революций". Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Согласно Куну, в процессе развития научной дисциплины может произойти замена одной парадигмы на другую (как, например, геоцентрическая небесная механика Птолемея сменилась гелиоцентрической системой Коперника), при этом старая парадигма ещё продолжает некоторое время существовать и даже развиваться благодаря тому, что многие её сторонники оказываются по тем или иным причинам неспособны перестроиться для работы в другой парадигме.</p>
6 <p>Своим современным значением в научно-технической области термин "парадигма" обязан, по-видимому, Томасу Куну и его книге "Структура научных революций". Кун называл парадигмами устоявшиеся системы научных взглядов, в рамках которых ведутся исследования. Согласно Куну, в процессе развития научной дисциплины может произойти замена одной парадигмы на другую (как, например, геоцентрическая небесная механика Птолемея сменилась гелиоцентрической системой Коперника), при этом старая парадигма ещё продолжает некоторое время существовать и даже развиваться благодаря тому, что многие её сторонники оказываются по тем или иным причинам неспособны перестроиться для работы в другой парадигме.</p>
7 <p>Термин "парадигма программирования" впервые применил в 1978 году Роберт Флойд в своей лекции лауреата премии Тьюринга.</p>
7 <p>Термин "парадигма программирования" впервые применил в 1978 году Роберт Флойд в своей лекции лауреата премии Тьюринга.</p>
8 <p>Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:</p>
8 <p>Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:</p>
9 <blockquote><p>Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.</p>
9 <blockquote><p>Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.</p>
10 </blockquote><p>Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.</p>
10 </blockquote><p>Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.</p>
11 <p>А по нашему мнению, каждая новая парадигма в арсенале разработчика делает его профессионалом качественно нового уровня.</p>
11 <p>А по нашему мнению, каждая новая парадигма в арсенале разработчика делает его профессионалом качественно нового уровня.</p>
12 <p>Например, владение декларативной парадигмой помогает программисту применять в нужных местах функции высшего порядка, элементы логического программирования, а также помогает избегать ненужных изменений состояния. И всё это с лёгкостью можно использовать почти в любом современном императивном языке.</p>
12 <p>Например, владение декларативной парадигмой помогает программисту применять в нужных местах функции высшего порядка, элементы логического программирования, а также помогает избегать ненужных изменений состояния. И всё это с лёгкостью можно использовать почти в любом современном императивном языке.</p>
13 <h2>Примеры парадигм</h2>
13 <h2>Примеры парадигм</h2>
14 <ul><li>Императивное программирование</li>
14 <ul><li>Императивное программирование</li>
15 <li>Функциональное программирование</li>
15 <li>Функциональное программирование</li>
16 <li>Логическое программирование</li>
16 <li>Логическое программирование</li>
17 <li>Программирование, управляемое данными (ООП)</li>
17 <li>Программирование, управляемое данными (ООП)</li>
18 <li>Событийно-ориентированное программирование</li>
18 <li>Событийно-ориентированное программирование</li>
19 <li>Автоматное программирование</li>
19 <li>Автоматное программирование</li>
20 <li>Actor-based программирование</li>
20 <li>Actor-based программирование</li>
21 </ul><p>Этот курс посвящён одной из самых важных парадигм программирования. Эта парадигма не требует поддержки со стороны языка и применима в бесчисленном количестве ситуаций для управления системами со сложным поведением. То есть поведением, в котором результат операции зависит не только от входных данных, но и от предыдущего состояния системы.</p>
21 </ul><p>Этот курс посвящён одной из самых важных парадигм программирования. Эта парадигма не требует поддержки со стороны языка и применима в бесчисленном количестве ситуаций для управления системами со сложным поведением. То есть поведением, в котором результат операции зависит не только от входных данных, но и от предыдущего состояния системы.</p>
22 <h2>Автоматное программирование</h2>
22 <h2>Автоматное программирование</h2>
23 <blockquote><p>Парадигма программирования, основанная на применении конечных автоматов для описания поведения программ</p>
23 <blockquote><p>Парадигма программирования, основанная на применении конечных автоматов для описания поведения программ</p>
24 </blockquote><p>Автоматное программирование имеет под собой серьёзную математическую базу. Сразу предупрежу, что в этом курсе математики не будет. Основная задача курса - дать интуитивное понимание автоматов и научиться их видеть и применять в реальной жизни.</p>
24 </blockquote><p>Автоматное программирование имеет под собой серьёзную математическую базу. Сразу предупрежу, что в этом курсе математики не будет. Основная задача курса - дать интуитивное понимание автоматов и научиться их видеть и применять в реальной жизни.</p>
25 <p>Те, кто хотят узнать про эту тему чуть глубже и стать немного ближе к чистому Computer Science, я рекомендую почитать про машину Тьюринга.</p>
25 <p>Те, кто хотят узнать про эту тему чуть глубже и стать немного ближе к чистому Computer Science, я рекомендую почитать про машину Тьюринга.</p>
26 <p>Темы, затрагиваемые в курсе:</p>
26 <p>Темы, затрагиваемые в курсе:</p>
27 <ul><li>Состояние</li>
27 <ul><li>Состояние</li>
28 <li>Конечные автоматы</li>
28 <li>Конечные автоматы</li>
29 <li>Диаграмма состояний (UML)</li>
29 <li>Диаграмма состояний (UML)</li>
30 <li>Библиотеки для описания автоматов</li>
30 <li>Библиотеки для описания автоматов</li>
31 <li>Шаблоны проектирования (State, State Machine)</li>
31 <li>Шаблоны проектирования (State, State Machine)</li>
32 </ul>
32 </ul>