|
1 | 1 | # Оглавление |
| 2 | + |
| 3 | +1. Введение |
| 4 | + 1.1. Подход к изучению программирования |
| 5 | + 1.2. Примеры на языках JavaScript, Python и C |
| 6 | + 1.3. Моделирование: абстракции и повторное использование |
| 7 | + 1.4. Алгоритм, программа, синтаксис, язык |
| 8 | + 1.5. Декомпозиция и разделение ответственности |
| 9 | + 1.6. Обзор специальности инженер-программист |
| 10 | + 1.7. Обзор парадигм программирования |
| 11 | +2. Базовые концепты |
| 12 | + 2.1. Значение, идентификатор, переменная и константа, литерал, присвоение |
| 13 | + 2.2. Типы данных, скалярные, ссылочные и структурные типы |
| 14 | + 2.3. Контекст и лексическое окружение |
| 15 | + 2.4. Оператор и выражение, блок кода, функция, цикл, условие |
| 16 | + 2.5. Процедурная парадигма, вызов, стек и куча |
| 17 | + 2.6. Функция высшего порядка, чистая функция, побочные эффекты |
| 18 | + 2.7. Замыкания, функции обратного вызова, обертки и события |
| 19 | + 2.8. Исключения и обработка ошибок |
| 20 | + 2.9. Мономорфный код в динамических языках |
| 21 | +3. Состояние приложения, структуры данных и коллекции |
| 22 | + 3.1. Подходы к работе с состоянием: stateful and stateless |
| 23 | + 3.2. Структуры и записи |
| 24 | + 3.3. Массив, список, множество, кортеж |
| 25 | + 3.4. Словарь, хэш-таблица и ассоциативный массив |
| 26 | + 3.5. Стек, очередь, дэк |
| 27 | + 3.6. Деревья и графы |
| 28 | + 3.7. Проекции и отображения наборов данных |
| 29 | + 3.8. Оценка вычислительной сложности |
| 30 | +4. Расширенные концепции |
| 31 | + 4.1. Что такое технологический стек |
| 32 | + 4.2. Среда разработки и отладка кода |
| 33 | + 4.3. Итерирование: рекурсия, итераторы и генераторы |
| 34 | + 4.4. Структура приложения: файлы, модули, компоненты |
| 35 | + 4.5. Объект, прототип и класс |
| 36 | + 4.6. Частичное применение и каррирование, композиция функций |
| 37 | + 4.7. Чеининг для методов и функций |
| 38 | + 4.8. Примеси (mixins) |
| 39 | + 4.9. Зависимости и библиотеки |
| 40 | +5. Распространенные парадигмы программирования |
| 41 | + 5.1. Императивный и декларативный подход |
| 42 | + 5.2. Структурированное и неструктурированное программирование |
| 43 | + 5.3. Процедурное программирование |
| 44 | + 5.4. Функциональное программирование |
| 45 | + 5.5. Объектно-ориентированное программирование |
| 46 | + 5.6. Прототипное программирование |
| 47 | +6. Антипаттерны |
| 48 | + 6.1. Общие антипаттерны для всех парадигм |
| 49 | + 6.2. Процедурные антипаттерны |
| 50 | + 6.3. Объектно-ориентированные антипаттерны |
| 51 | + 6.4. Функциональные антипаттерны |
| 52 | +7. Процесс разработки |
| 53 | + 7.1. Жизненный цикл ПО, анализ предметной области |
| 54 | + 7.2. Соглашения и стандарты |
| 55 | + 7.3. Тестирование: юниттесты, системное и интеграционное тестирование |
| 56 | + 7.4. Проверка кода и рефакторинг |
| 57 | + 7.5. Оценка ресурсов, план и график развития |
| 58 | + 7.6. Анализ рисков, слабые стороны, не функциональные требования |
| 59 | + 7.7. Координация и корректировка процесса |
| 60 | + 7.8. Непрерывная интеграция и развертывание |
| 61 | + 7.9. Оптимизация множества аспектов |
| 62 | +8. Расширенные концепции |
| 63 | + 8.1. События, таймеры и EventEmitter |
| 64 | + 8.2. Интроспекция и рефлексия |
| 65 | + 8.3. Сериализация и десериализация |
| 66 | + 8.4. Регулярные выражения |
| 67 | + 8.5. Мемоизация |
| 68 | + 8.6. Фабрики и пулы |
| 69 | + 8.7. Типизированные массивы |
| 70 | + 8.8. Проекции |
| 71 | + 8.9. I/O(ввод-вывод) и файлы |
| 72 | +9. Архитектура |
| 73 | + 9.1. Декомпозиция, именование и связывание |
| 74 | + 9.2. Взаимодействие между компонентами ПО |
| 75 | + 9.3. Связывание через пространства имен |
| 76 | + 9.4. Взаимодействие с вызовами и колбэками |
| 77 | + 9.5. Взаимодействие с событиями и сообщениями |
| 78 | + 9.6. Интерфейсы, протоколы и контракты |
| 79 | + 6.7. Луковая (onion) или слоеная архитектура |
| 80 | +10. Основы параллельных вычислений |
| 81 | + 10.1. Асинхронное программирование |
| 82 | + 10.2. Параллельное программирование, общая память и примитивы синхронизации |
| 83 | + 10.3. Асинхронные примитивы: Thenable, Promise, Future, Deferred |
| 84 | + 10.4. Сопрограммы, горутины, async/await |
| 85 | + 10.5. Адаптеры между асинхронными контрактами |
| 86 | + 10.6. Асинхронная и параллельная совместимость |
| 87 | + 10.7. Подход к передаче сообщений и модель акторов |
| 88 | + 10.8. Асинхронная очередь и асинхронные коллекции |
| 89 | + 10.8. Lock-free структуры данных |
| 90 | +11. Дополнительные парадигмы программирования |
| 91 | + 11.1. Обобщенное программирование |
| 92 | + 11.2. Событийное и реактивное программирование |
| 93 | + 11.3. Автоматное программирование: конечные автоматы (машины состояний) |
| 94 | + 11.4. Специализированные языки для предметных областей (DSL) |
| 95 | + 11.5. Программирование на потоках данных |
| 96 | + 11.6. Метапрограммирование |
| 97 | + 11.7. Динамическая интерпретация метамодели |
| 98 | +12. Базы данных и постоянное хранение |
| 99 | + 12.1. История баз данных и навигационные базы данных |
| 100 | + 12.2. Ключ-значение и другие абстрактные структуры данных |
| 101 | + 12.3. Реляционная модель данных и ER-диаграммы |
| 102 | + 12.4. Бессхемные, объектно- и документо-ориентированные базы данных |
| 103 | + 12.5. Иерархическая модель данных и графовые базы данных |
| 104 | + 12.6. Колоночные базы данных и in-memory базы данных |
| 105 | + 12.7. Распределенные базы данных |
| 106 | +13. Распределенные системы |
| 107 | + 13.1. Межпроцессное взаимодействие |
| 108 | + 13.2. Бесконфликтные реплицированные типы данных (CRDT) |
| 109 | + 13.3. Согласованность, доступность и распределенность |
| 110 | + 13.4. Стратегии разрешения конфликтов |
| 111 | + 13.5. Протоколы консенсуса |
| 112 | + 13.6. CQRS, EventSourcing |
0 commit comments