Оглавление курса по C++
Обсуждаем содержимое курса по C++. Проекты для практики будут добавлены после устаканивания порядка глав.
Каждая глава начинается с небольшого введения и заканчивается резюме - краткой выжимкой главы в формате списка.
Скопипащу сюда обсуждение про спиральную и слоистую структуру подачи материала. Оно велось в нашей группе. Оно важное и я не хочу, чтобы оно затерялось.
Фичи плюсовые давать исходя из практики с одной стороны (в начале научиться пользоваться алгоритмами и контейнерами например), с другой стороны по спирали, то есть в начале можно дать на самом поверхностном уровне, потом погружение глубже.
@BeardedBeaver
Я согласен с замечанием про спиральную структуру. сейчас почти вся информация по одной теме собрана в один блок, от базовой до продвинутой, это может быть сложно для понимания. Возможно лучше давать информацию слоями. Например gdb я бы показал близко к началу, а вот вальгринды и асаны уже в конце. int и char это база, а decltype можно отложить на потом
Можно попробовать выделить в текущем оглавлении "продвинутые" пункты и убрать их все кучей вниз во второй круг ада. Дальше подтюнить порядок глав на переходе от простого блока к сложному чтобы логика выдерживалась. Дальше помедитировать на результат и по необходимости выдернуть набор тем в блок средней сложности
@Reavolt кажется, это ты говорил:
Я думаю блочная структура в том виде, в котором она расписана сейчас, больше похожа на документацию нежели на курс по языку. Я бы постарался плавно вводить в темы и делать их зависимыми друг от друга.
@khva
Мне идея спирали не очень нравится. И вот почему:
- Сложно реализовать. Сложно разделить большинство тем на несколько уровней. (Можно внимательней посмотреть продвинутый курс лекций Владимирова, он использует слоенный подход в рамках одной лекции. И попытаться подчерпнуть принцип.)
- Спиральный курс нельзя использовать в качестве справочника.
- Не надоест ли изучающему читать про лямбды (к примеру) в третий раз?
Мне больше по душе 2-х уровневый подход:
- Поверхностное освещение самых необходимых элементов языка, чтобы изучающий мог быстро начать программировать на языке.
- Детальное изучение каждой темы. (Хотя в случае плюсов детальное рассмотрение любой темы легко превращается в небольшую книгу, а иногда и большую :D)
В частности на основе 4-ой главы можно сделать небольшую выжимку, в которой рассказать про построение проекта, используя gcc и CMake. А 4-ую главу передвинуть в конец.
@umedjankabiri @Nomlsbad @mrmomenticus @Reavolt @khva @leha-bot @Intey
Гайз, содержание курса отрефакторено для спиральной подачи материала. Между некоторыми главами добавлены проекты для практики. Гляньте пожалуйста и покритикуйте.
"Инфраструктура вокруг языка" — я думаю этот блок лучше отложить до конца базового уровня, чтобы не перегружать новичков на старте.
Упоминание ссылок и указателей можно отложить до обсуждения "RAII и управления памятью".
Стандартные контейнеры и алгоритмы Я бы этот блок переместил ближе к разделу "Типы данных", чтобы дать больше инструментов для работы с данными до перехода к более сложным концепциям. Контейнеры могут быть структурированы по сложности: начать с вектор, массивы, потом переходить к ассоциативным контейнерам.
@Reavolt
"Инфраструктура вокруг языка" — я думаю этот блок лучше отложить до конца базового уровня, чтобы не перегружать новичков на старте.
Этот пункт главы будет совсем маленьким. Он сводится к перечислению баззвордов с кратким описанием. Это важно, потому что пользователь так или иначе будет что-то дополнительно искать и читать. Его жизнь будет проще, если он к тому моменту ухватит основные баззворды и будет в теме, что такое stl, boost, gtest и т.д.
Упоминание ссылок и указателей можно отложить до обсуждения "RAII и управления памятью".
В задачах часто придется передавать в функцию объекты по константным ссылкам. Чтобы для пользователя это не было черной магией, кажется, про ссылки нужно поговорить пораньше. Полноценная глава про указатели будет сильно дальше. А до нее - просто краткое упоминание.
Стандартные контейнеры и алгоритмы Я бы этот блок переместил ближе к разделу "Типы данных", чтобы дать больше инструментов для работы с данными до перехода к более сложным концепциям.
Можешь пожалуйста предложить конкретный вариант разбиения на главы этого куска курса? Попробовала сделать что-то такое, но получилась дичь из чередования ифов, строк, циклов, векторов и тд. С какой-то стороны это хорошо. Потому что несколько глав подряд учить контейнеры - скучно. Но выглядит такое оглавление как поток сознания. В общем, покажи, как ты это видишь)
Контейнеры могут быть структурированы по сложности: начать с вектор, массивы, потом переходить к ассоциативным контейнерам.
На данный момент же так и есть? Сначала массивы, потом списки, мапы и тд.