-
Вводные понятия
-
Система контроля версий
-
Система сборки и отладки
-
Тестирование
-
Обзор STL
-
Обзор Boost
-
Паттерны проектирования (GoF)
-
Современный C++
-
Разработка в команде
-
Домашняя лабораторная работа
-
Планировщик задач
-
Распределение памяти
-
Изоляция (страничная адресация)
-
Ресурсы
-
Процессы, потоки
-
Файлы, каналы (pipes)
-
Семафоры, мьютексы
-
Проекции в память (mmap)
-
Основан на Unix
-
Только ядро и компилятор
-
Linux ≠ Unix
-
Virtual File System (VFS) — представление всех объектов в виде файлов
$ ls / bin boot dev etc home include lib lib64 proc root run sys tmp usr var
-
GNU Coreutils
-
текстовые утилиты: sort, tr, tail, cat, wc, uniq, …
-
файловые утилиты: ls, cp, dd, chmod, ln, mv, rm, …
-
скриптовые утилиты: basename, echo, pwd, tee, …
-
-
GNU Binutils
-
as, ld, ar, objcopy, strip, gprof, …
-
nm, objdump, readelf, strings, addr2line, c++filt, …
-
-
GNU Debugger
-
Базовые утилиты: grep, sed (1974 г.), awk (1977 г.), bash, perl, python
-
ed (1971 г.)
-
sed, vi, vim, neovim
-
emacs
-
sublime
-
notepad++
-
gedit
-
IDE ≠ Editor
-
Перемещение по тексту, поиск, скроллинг (view-mode)
-
Разделение области просмотра/редактирования
-
Подсветка синтаксиса
-
Редактирование, замена, удаление, вставка
-
Поиск-замена
-
Поддержка пользовательских плагинов
-
Использование уже готового функционала сторонних программ
-
3 режима: normal, insert (replace), visual
-
Программируемая панель
-
Буферы, табы, окна
-
Большое многообразие плагинов (VimL)
-
Подсветка синтаксиса, цветовая схема — тоже плагин
-
Орфография
-
Использование ctag для перехода по функциям (любого языка, даже LaTeX)
-
Отображение дерева функций
-
-
Автодополнение (несколько видов)
-
Запуск интерактивной оболочки вместо буфера
-
Встраиваемое GUI
-
Возможность использования без GUI
-
Холивары: neovim
SRC := $(wildcard src/*.cpp)
HDR := $(wildcard include/*.h)
OBJ := $(patsubst src/%.cpp,build/%.o,$(SRC))
%.o: %.cpp
»»»»@g++ -c $< -o $@
lib.a: $(OBJ)
»»»»@ar -c $@ $^
app: main.cpp lib.a
»»»»g++ $^ -o $@
all: app
clean:
»»»»@rm -f $(OBJ) app *.a
-
TDD, BDD — способы написания программы
-
Юнит-тестирование → интеграционное тестирование → продакшен-тестирование
-
Статистика, бенчмарки
-
Fixture, test suite, mock, stub, …
-
Тестовые данные: генерация на месте, хранение в репозитории или брать удалённо с сервера?
-
Границы между разными формами тестирования
-
Version Control System (VCS)
-
cvs
-
subversion (svn)
-
git
-
mercurial (hg)
-
лучше я в архивах, по старинке НЕТ!
-
необходимо учитывать версионность продукта
-
Новый стандарт лучше старого?
-
Лучше на C писать: понятнее и проще
-
Соблюдение стиля кода
-
Исключения — это зло! Но надо быть аккуратнее
-
Концепции стабильного кода vs. понятный код
-
Разработка по спирали
-
Зачем нужна документация, если её никто не читает?
-
Пример документации — http://libfuse.github.io/doxygen
-
doxygen
-
Написание презентаций, статей и книг
-
LATEX, groff, docx, reStructuredText, HTML, AsciiDoc, DocBook, markdown — в чём писать документацию?
-
Генерация linux-документации
man
-
Свой велосипед?
-
Что такое команда и зачем она нужна?
-
Распределение ролей в команде?
-
Зачем нужен тот чувак, который ничего не делает?
-
Стендапы, планнинги, грумминги, ретроспективы — зачем они нужны?
-
Deadline, sprint, milestone, release, post-mortem — а это зачем?
-
CTO, CEO, IPO, PM, PO — кто это такие?
-
Agile — выход из всех проблем
-
Психология разработки
Бесплатные книжки про программирование в целом:
-
Заводим аккаунт на github
-
Возвращаемся на главную страницу проекта и переходим по ссылке с заданиями
-
Задания можно делать в любом порядке