This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
start:prog2:lectures [2022/12/10 09:08] 127.0.0.1 external edit |
start:prog2:lectures [2023/06/01 10:36] yaroslav.gosudarkin |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | === Программирование (Весна) === | + | === Программирование (Весна 2023) === |
+ | |||
+ | План-проспект лекций: | ||
+ | |||
+ | == Выборочный обзор libc (09.02) == | ||
+ | |||
+ | - Вспоминаем организационные моменты (лабораторные, курсы, рейтинговая система, экзамен) | ||
+ | - Подробное рассмотрение assert, errno, signal, stddef, stdlib, time, wchar с приближенными к реальности примерами | ||
+ | - Поверхностное рассмотрение остальных библиотек | ||
+ | - Повторение пройденного материала, вопросы по задачам 1 семестра. | ||
+ | |||
+ | == Структуры данных + остаточный обзор libc (02.03) == | ||
+ | |||
+ | - Рассмотрение оставшихся после string.h библиотек | ||
+ | - Введение в структуры данных -- массивы, списки, деревья, графы, примеры работы со списком | ||
+ | |||
+ | == Списки (09.03) == | ||
+ | |||
+ | - Разбор списков -- написать вместе со студентами за лекцию готовый код линейного списка (insert, remove, find, create, printList). | ||
+ | |||
+ | == Разбор стека и очереди (16.03) == | ||
+ | |||
+ | - Разбор реализации стека и очереди на списке и на массиве, сравнение реализаций | ||
+ | |||
+ | == Введение в С++ (23.03) == | ||
+ | |||
+ | - Что такое язык С++, его назначение | ||
+ | - Пространства имен, подключение библиотек | ||
+ | - Инкапсуляция на примере структур данных из прошлых занятий (список, стек) | ||
+ | - Классы, методы (конструктор, деструктор), спецификаторы доступа | ||
+ | |||
+ | == Рекурсия, работа с файлами, обход файлового дерева (30.03) == | ||
+ | |||
+ | - Рекурсия, глубина рекурсии | ||
+ | - Файловый дескриптор -- что это такое, и зачем нужно. Сценарии: tail и ls -l /proc/.....; lsof и несколько tail-ов; fprintf и IO потоки; | ||
+ | - Базовые функции работы с файлами fopen, fclose, fread, fwrite, fseek, ftell и тп. Дескриптор в директории | ||
+ | - Рекурсивный обход файловой системы | ||
+ | - (optional) Getopt и аргументы командной строки | ||
+ | |||
+ | == Getopt, отладка в виртуальных машинах, С++ (06.04) == | ||
+ | |||
+ | - Пара слов по контрольной -- какие задачи, какое выбрать время | ||
+ | - Разработка программ -- почему важно запускать и тестировать свои программы в виртуальных машинах | ||
+ | - С++ -- исключения, new/delete | ||
+ | - Getopt и аргументы командной строки | ||
+ | - Отладка программ в виртуальных машинах через IDE | ||
+ | - (optional) Системы сборки -- Makefile (вспомнить), Autotools | ||
+ | |||
+ | |||
+ | == Autotools, словари, инкапсуляция (как сломать, сделать в Си) (13.04) == | ||
+ | |||
+ | - Системы сборки -- Makefile (вспомнить), Autotools | ||
+ | - Темы для контрольной + словари (от простой реализации до хэш-таблиц) | ||
+ | - Как сломать инкапсуляцию в С++ | ||
+ | - Как сделать инкапсуляцию в Си | ||
+ | |||
+ | |||
+ | == Разбор контрольной (20.04) == | ||
+ | |||
+ | - Примеры работ | ||
+ | - Разбор сложных задач | ||
+ | |||
+ | == Курсовая, BMP (27.04) == | ||
+ | |||
+ | - Базовая задача курсовой -- как может выглядеть решение | ||
+ | - Поверхностный разбор структуры BMP (особое внимание на сложные поля, таблицу цветов) | ||
+ | - Sizeof struct, директива pragma | ||
+ | - Как создать BMP с нуля | ||
+ | - Пример, как считать, изменить и сохранить BMP файл. Как учесть все версии заголовков. | ||
+ | |||
+ | == Курсовая, libpng (03.05) == | ||
+ | |||
+ | - Структура формата PNG -- сигнатура и чанки (критические/необязательные/пользовательские) | ||
+ | - Разбора примера READ/WRITE, как обработать пиксельные данные | ||
+ | |||
+ | == Курсовая, libpng (18.05) == | ||
+ | |||
+ | - Shared-библиотеки -- как создать, как использовать | ||
+ | - Системы сборки -- Autotools, CMake | ||
+ | - C++ ссылки (объявления, копии, присваивание) | ||
+ | |||
+ | |||
+ | == Регулярные выражения (25.05) == | ||
+ | |||
+ | - Как работать с libc и другими .so библиотеками в Python | ||
+ | - Doxygen, пример на стеке | ||
+ | - Регулярные выражения -- как использовать, примеры | ||
+ | |||
+ | == Регулярные выражения (01.06) == | ||
+ | |||
+ | - Регулярные выражения -- Libc | ||
+ | - Полезные утилиты, которые стоит помнить: find, grep, ssh, gpg | ||
+ | - История терминала (history) -- как увеличить хранилище, где посмотреть (разные пользователи), reverse-search | ||
+ | - Valgrind (+ callgrind) -- анализ программы | ||
+ | - Программные каналы -- mkfifo | ||
+ | |||
+ | === [АРХИВ] Программирование (Весна) === | ||
<note>[[https://docs.google.com/document/d/e/2PACX-1vREUCMXjSkfCWTX92KUpUsrcjpnuiEifOgge-vGberr3OOVYM8EduVJWnRDEkzkzzEDL9R8nJoFqziU/pub|Список тем лекций]]</note> | <note>[[https://docs.google.com/document/d/e/2PACX-1vREUCMXjSkfCWTX92KUpUsrcjpnuiEifOgge-vGberr3OOVYM8EduVJWnRDEkzkzzEDL9R8nJoFqziU/pub|Список тем лекций]]</note> | ||
Line 19: | Line 115: | ||
== Обзор стандартной библиотеки Си. Различие базового синтаксиса Си и Си++ == | == Обзор стандартной библиотеки Си. Различие базового синтаксиса Си и Си++ == | ||
- | |||
- | Повторение пройденного материала. Представление готовых решений для большого количества типовых задач с которыми ученики столкнулись в реальности в течение первого семестра. Основная задача -- "отучить студентов" изобретать велосипед без необходимости, побудить активно изучать инструментарий с которым они работают. | ||
== Структуры. Объединения. Списки. Динамическая и статическая реализация == | == Структуры. Объединения. Списки. Динамическая и статическая реализация == | ||
- | Повторение. Обзор основных структур данных: односвязные/двусвязные списки, однонаправленные/двунаправленные, циклические; деревья, графы, стек, очередь. На примере различных реализаций обратить внимание на то, что динамические структуры данных могут использоваться как контейнеры для данных и как контейнеры для мета-информации (например, индексы). Использование указателей на функции внутри структур, идея хранения данных вместе с функциями по их обработке. | ||
[[.:lectures:code2]] | [[.:lectures:code2]] | ||
== Практики проектирования, разработки, отладки, сопровождения. Стили кодирования == | == Практики проектирования, разработки, отладки, сопровождения. Стили кодирования == | ||
- | |||
- | Основные приемы "инжиниринга" программного обеспечения. Описание и объяснение смысла проектирования (данные, функции, интерфейсы,...) Подходы к тестированию. Проверка инвариантов, пост- пред- условий. Логгирование. Точки отладки. Комментарии и документирование. Тесты. Соглашения об именовании, стили кодирования. Примеры и объяснения. | ||
== Работа со строками. Алгоритмы на строках. Обработка текстов == | == Работа со строками. Алгоритмы на строках. Обработка текстов == | ||
- | |||
- | Обзор алгоритмов на строках. Применение (Интернет. Биоинформатика) Алгоритмы поиска подстроки. Вычисление расстояний. Замена. Потоковая обработка строк. | ||
== Регулярные выражения == | == Регулярные выражения == | ||
- | Применение. Из чего может состоять регулярное выражение, метасимволы. Find, grep демо. regex.h демо | ||
== Рекурсия и циклы == | == Рекурсия и циклы == | ||
- | |||
- | Эффективная замена рекурсии на цикл. Обзор примеров, когда предпочтительнее использовать рекурсию или циклы. Контроль стека, оценка глубины рекурсии и размера стека. | ||
== Ввод вывод. Файлы == | == Ввод вывод. Файлы == | ||
- | Рекурсивный обход дерева файловой системы. Поиск файлов по атрибутам. [[.:lectures:code3| Пример.]] | + | [[.:lectures:code3| Пример.]] |
== Разработка Command Line Interface (CLI) == | == Разработка Command Line Interface (CLI) == | ||
- | |||
- | Что такое и зачем. Длинные/короткие флаги. Доступ к аргументам командной строки в программе на языке С (argc, argv). getopt(), getopt_long() демо. | ||
== Хэширование и хэш-таблицы == | == Хэширование и хэш-таблицы == | ||
- | |||
- | Хэш-функция, её св-ва, идеальная хэш-ф-я, коллизии, парадокс дней рождений. Ассоциативный массив. Хэш-таблицы, с цепочками/открытой адресацией. Перехэширование. | ||
== Алгоритмы обхода, концепция итератора. Использование текстовых форматов == | == Алгоритмы обхода, концепция итератора. Использование текстовых форматов == | ||
Line 68: | Line 150: | ||
== Отладка. Обработка исключительных ситуаций и ошибок == | == Отладка. Обработка исключительных ситуаций и ошибок == | ||
- | GDB, backtrace, поиск ошибки. Способы сообщения об исключительных ситуациях: возвращаемое значение, аргумент, errno, exception. Иерархия исключений. | ||
- | |||
- | === Дополнительные материалы и темы === | ||
- | |||
- | |||
- | == Форматы файлов. Использование текстовых форматов == | ||
- | |||
- | TBD | ||
- | |||
- | |||
- | == Динамические библиотеки. Использование сторонних библиотек == | ||
- | |||
- | TBD | ||
- | |||
- | == Безопасное программирование == | ||
- | |||
- | TBD | ||
- | |||
- | == Программные интерфейсы. Взаимодействие языков программирования. Соглашения о вызовах. ABI == | ||
- | |||
- | TBD | ||
- |