Разделы третьего уровня написал (или скопировал из планов) FrBrGeorge, разделы второго уровня получены от докладчиков.
Внимание: объём вопросов по разным темам неравномерен, просьба глубоко не зарываться.
Общие принципы программирования для Linux в свободном сообществе
- Постановка задачи: детализация, разделение на фронтенд/бэкенд
- Изолированная разработка / совместное участие в существующем проекте / ветвление существующего проекта: достоинства и недостатки
- Значение стандартов. POSIX, RFC, …
- Принцип KISS и его значение при работе в сообществе
- Выбор языка разработки
- Особенности Linux как среды разработки и эксплуатации
Соглашения о стиле программирования
- Понятие «coding style»
- Цели введения coding style в свободном сообществе
- Дисциплина разработки и её влияние на сообщество
- Предотвращение распространённых ошибок и заблуждений
- Увеличение повторного использования кода
- Популяризация определённых «правильных» методов разработки
- Особенности рекомендованного стиля программирования в зависимости от задач, решаемых сообществом
- Linux kernel coding style как пример подобного соглашения:
- Мотивация
- Пробелы и табуляции
- Именование и typedef
- Функции и goto
- Комментарии; комментирование функций, данных и кода
- Особенности LKCS: Magic numbers, #ifdefs, labaled identifiers
- Другие CSP: NetBSD, Google, Mozilla, …
Make
- Makefile: Workflow сборки.
- Понятие зависимости и правила.
- Недостатки простого понятия правил.
- Встроенные правила и встроенные переменные.
- Правила-шаблоны.
- Автоматические переменные.
- Автоматическая генерация зависимостей.
- Расширения GNU make (для подстановок, правил-шаблонов, условий).
CMake
- Задачи, решаемые с помощью CMake
- Кроссплатформенность CMake
- Возможности CMake:
- изолированный каталог сборки
- порождение исполняемых файлов и библиотек
Порождение config.h
- установка собранного проекта
- поиск требуемых по зависимости библиотек и функций
- специальные модули для распространённых библиотек
- Другие инструменты автоматической сборки: SCons, ant, qmake, …
Git
- Системы управления версиями: понятие (расплывчатое).
- Системы управления версиями: основные задачи.
- Системы управления версиями: основные операции.
- Централизованные системы управления версиями.
- Распределённые системы управления версиями: основные понятия, концепции.
- Распределённые системы управления версиями: сравнение с централизованными.
- Git: основные принципы и отличительные черты.
- Git: ветви и удалённые репозитории.
- Git: методы синхронизации репозиториев.
- Распределённые системы управления версиями: модели совместной разработки.
Valgrind
- Типичные ошибки при использовании памяти: утечки, выход за границу массива, использование неинициализированных значений. Их возможные последствия.
- Ошибки в многопоточных приложениях: "состояние гонки" (data races), "тупики" (deadlocks). Их возможные последствия.
- Инструменты для поиска ошибок при использовании памяти и многопоточных ошибок.
buildbot
- Сборочные системы: понятие, основные задачи, примеры реализаций.
- Buildbot: схема работы, основные компоненты.
- Buildbot: интерфейсы уведомлений.
Doxygen
- Документирование кода: цели, классификация по Макконнеллу, способы.
- Генерация документации к проекту на основе комментариев к коду: цели, ограничения.
- Doxygen: сфера применения, принципы работы, функциональность. Отличия от javadoc.
GDB
- Интерактивная runtime-отладка приложений: цели, функциональность.
- Инструмент GDB: функциональность, примеры команд, фронтэнды.
Strace/Ltrace
- Системные вызовы в Си и UNIX: классификация функций Glibc по отношению к вводу-выводу, принципы работы механизма системных вызовов.
- Инструмент strace: цели, функциональность, ограничения.
- Инструмент ltrace: цели, отличия от strace, ограничения.
- Принципы динамического связывания в GNU/Linux. Переменные окружения. Механизм отладки специфических внешних вызовов.
Qt
- Объектная модель Qt
- Графические возможности Qt
- Метаобъекты, сборка Qt-проекта
- Что разработчики Qt причисляют к достоинствам этого инструментария?
Инструментальные библиотеки
- Зачем нужны библиотеки, что такое "разделяемые библиотеки"
- Кроссплатформенность
- Задачи, решаемые библиотекой "общего назначения"
- унификация окружения
- решения популярных подзадач
- обеспечение пользовательского интерфейса
- POSIX
- Недостаточность POSIX как библиотекой "общего назначения"
- GLib как пример инструментальной библиотеки
- Ориентация на GUI
- Кроссплатформенность
- Повышение уровня работы с программными примитивами (напр., StreamingIO)
- "Новые" программные примитивы (списки, исключения, кодировки, IPC, сеть и т. п.)
QtCore и wxBase, их особенности
- Что не входит в библиотеку "общего назначения"?
- Особенности "ориентации на GUI"