DEV-000 Структура курса
Примечание: Некоторые модули еще не доступны. Названия доступных модулей отображаются в виде ссылок, тогда как недоступные модули отображаются в виде обычного текста.
Модуль 0: Менталитет разработчика
Этот модуль охватывает фундаментальные концепции, лежащие в основе всего мира разработчика, такие как абстракция и иерархия.
Темы включают:
- Абстракция
- Иерархия
- Стандарты
Модуль 1: Абстрактный компьютер
Предварительные модули:
- Модуль 0: Менталитет разработчика
В этом модуле объясняется, как компьютер абстрагируется для разработчиков. Темы включают:
- Архитектуры наборов команд (ИСК).
- Применение памяти, стек и куча.
Модуль 2: Языки программирования
Предварительные модули:
- Модуль 0: Менталитет разработчика
- Модуль 1: Абстрактный компьютер
В этом модуле дается общее представление о языках программирования. Это не учебник по конкретному языку; вместо этого он объясняет, как работают языки программирования в целом, знакомит с синтаксическими конструкциями, присутствующими в почти всех основных языках, и сравнивает стили и проектные решения нескольких языков программирования.
Этот модуль не предполагает, что у вас есть опыт в программировании, но это не учебник по программированию. Вместо изучения программирования только из этого модуля, вы ожидаете обращаться к GPT, чтобы фактически писать код на конкретных языках.
После изучения этого модуля вы должны хорошо понимать, как работают современные языки программирования и почему они разработаны определенным образом. С помощью GPT вы должны быть в состоянии начать писать код на любом языке.
Конкретные темы, рассмотренные в этом модуле, перечислены ниже.
Основы программирования
- переменные и типы
- операторы управления потоком
- функции
- классы
- модули
Таксономия языков программирования
- скомпилированные языки против интерпретируемых языков + основанных на виртуальной машине
- статическая типизация против динамической типизации
- сборка мусора против ручного управления ресурсами
- высокий уровень против низкого уровня
Общие концепции в языках программирования
- Абстракция
- Интерфейсы и категории и полиморфизм
- Метапрограммирование
- макросы на основе поиска и замены
- обобщенное программирование
- Владение и продолжительность жизни
- Обработка ошибок
- обработка try-catch
- результат
Другие "необычные" языки
- LISP
Модуль 3: Кодирование правильно
Предварительные модули:
- Модуль 2: Языки программирования
В этом модуле объясняются "хорошие практики" и парадигмы программирования, и, что более важно, логика, лежащая за ними.
После изучения этого модуля вы должны получить хорошее представление о том, как проектировать и писать большие проекты с сотнями тысяч строк кода.
Общие практики кодирования
- Стиль кода
- Кодекс поведения
- Соглашения об именах идентификаторов
- Комментарии и docstrings
- Тестирование (упомянуть некоторые концепции)
Принципы программирования
- Синтаксис и семантика: Что может быть против того, что должно быть (и обычно есть)
- Не повторяйся
- Правило элегантности
- Иерархия
- Связь и сцепление
- Зависимость от интерфейсов, а не от реализаций
- Написание комментариев
- Когда программа короткая, забудьте о всех принципах
Парадигмы программирования
- Объектно-ориентированное программирование
- Функциональное программирование
Проектирование программных систем
- Модули и API и интерфейсы
- Связь и сцепление
- Другие соображения
- Абстрагируйте свои зависимости
Модуль 4: Основы терминала и суперпользователя
Предварительные модули:
- Модуль 2: Языки программирования (рекомендуется)
Этот модуль представляет терминал, основные понятия операционной системы и другую "суперпользовательскую" информацию.
Этот модуль должен превратить вас из "обычного пользователя", который взаимодействует с компьютером, перетаскивая и нажимая кнопки, в "суперпользователя", который чувствует себя уверенно при использовании терминалов и выполняет мультизагрузку.
Ниже перечислены конкретные темы.
Терминал и скриптовые оболочки
- Что такое терминал? Что такое оболочка? Что такое скрипт оболочки?
- Таксономия языков скриптовых оболочек: текстовые (bash) против данных (powershell и nushell)
- Основные отличия между скриптовыми языками и языками программирования
- Основы скриптовой оболочки
- Основные команды
- cd, pwd, pushd, popd, find и др.
- переменные и управление потоками и т.д.
- команды
- каналы и перенаправление
- переменные среды
- Разное
- &&, ;, $! и др.
- Хитрости и распространенные практики терминала
- Автодополнение, история и т.д.
- Файлы настроек оболочки
- Настройка приглашения и тематизация
- Плагины оболочки
- Распространенные инструменты и команды
- grep, cut, awk, tmux, ssh и т.д.
Управление пакетами
- Зависимости программного обеспечения
- Пакеты программного обеспечения
- Менеджеры пакетов
Разное
- Файлы конфигурации
- vim и emacs
- Виртуализация и docker
- Загрузка
- Разделы жесткого диска и (g)parted
- Загрузчики и GRUB
- БИОС и UEFI
- Двойная (мульти) загрузка
- Линукс и прочее
- модули ядра
Модуль 5: Разработка программного обеспечения
Предварительные модули:
- Модуль 2: Языки программирования
- Модуль 3: Кодирование правильно
Этот модуль объясняет общие концепции и инструменты, связанные с разработкой программного обеспечения.
После изучения этого модуля вы должны чувствовать себя уверенно, начиная большой проект, пиша его с командой и публикуя его для общественности.
Ниже перечислены конкретные темы.
Общие концепции в системах программного обеспечения
- Версии и зависимости
- Семантическое версионирование
- Интерфейсы и API и библиотеки
- Удаленный вызов процедур (RPC)
- Сериализация и десериализация
- Межпроцессное взаимодействие (IPC)
- Фреймворки
- Что такое фреймворк? Зачем фреймворк?
- Фреймворк против библиотеки
- Примеры: Flutter (UI), PyTorch (глубокое обучение) и Unity (разработка игр)
- Спецификация и стандарты (использовать примеры для иллюстрации концепции)
- Зачем нужны стандарты?
- Примеры
- Архитектуры наборов команд процессора (ИСК)
- Спецификации графического процессора (OpenGL и Vulkan)
- Стандарты представления данных (JSON, TOML, YAML, XML, HTML)
Тестирование
- Юнит-тестирование
Документация
- Docstrings
- API-документация
- Обучающие материалы
- Doctests
- Распространенные фреймворки и языки документации
- Sphinx и mkdocs (упомянуть)
- Markdown и RST
Сборка и развертывание (предварительно)
- Системы сборки
Версионное управление
- Версионное управление и git
Стандартизация и сотрудничество
- Необходимость стандартизации между участниками
- Кодекс поведения
CI/CD
Разное
- запросы на получение прав и задачи
- README, CONTRIBUTE, LICENSE
- TODO и FIXME
Модуль 6: Параллельное программирование
Предварительные модули:
- Модуль 2: Языки программирования
- Модуль 3: Кодирование правильно (рекомендуется)
Это модуль, который объясняет концепции, связанные с параллельным программированием.
Темы перечислены ниже.
Введение в параллелизм
Модель параллелизма
- Параллелизм против параллелизма
Проблемы параллелизма
- Гонки данных
Низкоуровневое параллельное программирование
Примитивы синхронизации
- Блокировки (мьютексы)
- Семафоры
- Чтение-запись блокировок
Параллельные программные парадигмы
Каналы
Производители и потребители
Асинхронное программирование
- Futures и опрос
- async и await
Модуль 7: Основы компьютерной архитектуры
Предварительные модули:
- Модуль 1: Абстрактный компьютер
- Модуль 2: Языки программирования (настоятельно рекомендуется)
Этот модуль представляет основы работы компьютеров на уровне аппаратного обеспечения.
После изучения этого модуля вы должны иметь более глубокое понимание работы компьютеров и уметь кодировать программы, использующие аппаратное обеспечение оптимальным образом.
Темы перечислены ниже.
ЦП
- Конвейеры
- Иерархия памяти
- Предсказание ветвления и спекулятивное выполнение
- Обработка вне очереди
- Векторные команды и SIMD
ГПУ и ускорители
Модуль 8: Различные темы в мире разработчика
Предварительные модули:
- Модуль 2: Языки программирования (настоятельно рекомендуется)
- Модуль 3: Кодирование правильно (рекомендуется)
В этом разделе обсуждаются различные области и распространенные инструменты в мире разработчика.
Темы перечислены ниже.
UI и разработка приложений
- Декларативный интерфейс против императивного интерфейса
Разработка игр
- Сущность-компонентная система (ECS)
Программирование графического процессора
- Высокоуровневое: OpenGL
- Низкоуровневое: Vulkan
Разное
- Stackoverflow
- GitHub
- IDE
- LSPs
- Группа Hugging Face
Модуль 9: Разработка при поддержке искусственного интеллекта и разработка программного обеспечения на базе искусственного интеллекта
Предварительные модули:
- Модуль 2: Языки программирования
- Модуль 3: Кодирование правильно (рекомендуется)
Этот модуль обсуждает, как использовать искусственный интеллект для разработки лучших приложений и как разрабатывать приложения, использующие преимущества искусственного интеллекта.
Темы перечислены ниже.
Основы искусственного интеллекта
- Фундаментальные принципы глубокого обучения
- Абстрагирование глубоких нейронных сетей и искусственного интеллекта для разработчиков
Разработка с поддержкой искусственного интеллекта
- Автозаполнение кода
- Генерация кода с помощью искусственного интеллекта (логический код, модульные тесты, документация и т.д.)
- Автоматическая интернационализация
- Искусственный интеллект как усовершенствованный Google
Разработка программного обеспечения на базе искусственного интеллекта
Изменение мышления: Чем это отличается от "традиционной разработки программного обеспечения"?
- Определенность -> Ненормативное поведение
- Структурированные данные -> Естественный язык
- С участием искусственного интеллекта управляющие потоки
- Короткая латентность -> длительные операции
- Обработка ошибок и Обеспечение надежности при наличии искусственного интеллекта
Парадигмы и общепринятые практики на данный момент
- Агенты искусственного интеллекта
- Поиск с возвращением
- Инженерия предложений и шаблоны предложений