Перейти к содержанию

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

Разработка программного обеспечения на базе искусственного интеллекта

Изменение мышления: Чем это отличается от "традиционной разработки программного обеспечения"?

  • Определенность -> Ненормативное поведение
  • Структурированные данные -> Естественный язык
  • С участием искусственного интеллекта управляющие потоки
  • Короткая латентность -> длительные операции
  • Обработка ошибок и Обеспечение надежности при наличии искусственного интеллекта

Парадигмы и общепринятые практики на данный момент

  • Агенты искусственного интеллекта
  • Поиск с возвращением
  • Инженерия предложений и шаблоны предложений