senjun-courses icon indicating copy to clipboard operation
senjun-courses copied to clipboard

Оглавление курса по C++

Open Microvenator opened this issue 1 year ago • 4 comments

Обсуждаем содержимое курса по C++. Проекты для практики будут добавлены после устаканивания порядка глав.

Каждая глава начинается с небольшого введения и заканчивается резюме - краткой выжимкой главы в формате списка.

Microvenator avatar Nov 26 '24 09:11 Microvenator

Скопипащу сюда обсуждение про спиральную и слоистую структуру подачи материала. Оно велось в нашей группе. Оно важное и я не хочу, чтобы оно затерялось.

Фичи плюсовые давать исходя из практики с одной стороны (в начале научиться пользоваться алгоритмами и контейнерами например), с другой стороны по спирали, то есть в начале можно дать на самом поверхностном уровне, потом погружение глубже.

@BeardedBeaver

Я согласен с замечанием про спиральную структуру. сейчас почти вся информация по одной теме собрана в один блок, от базовой до продвинутой, это может быть сложно для понимания. Возможно лучше давать информацию слоями. Например gdb я бы показал близко к началу, а вот вальгринды и асаны уже в конце. int и char это база, а decltype можно отложить на потом

Можно попробовать выделить в текущем оглавлении "продвинутые" пункты и убрать их все кучей вниз во второй круг ада. Дальше подтюнить порядок глав на переходе от простого блока к сложному чтобы логика выдерживалась. Дальше помедитировать на результат и по необходимости выдернуть набор тем в блок средней сложности

@Reavolt кажется, это ты говорил:

Я думаю блочная структура в том виде, в котором она расписана сейчас, больше похожа на документацию нежели на курс по языку. Я бы постарался плавно вводить в темы и делать их зависимыми друг от друга.

@khva

Мне идея спирали не очень нравится. И вот почему:

  1. Сложно реализовать. Сложно разделить большинство тем на несколько уровней. (Можно внимательней посмотреть продвинутый курс лекций Владимирова, он использует слоенный подход в рамках одной лекции. И попытаться подчерпнуть принцип.)
  2. Спиральный курс нельзя использовать в качестве справочника.
  3. Не надоест ли изучающему читать про лямбды (к примеру) в третий раз?

Мне больше по душе 2-х уровневый подход:

  1. Поверхностное освещение самых необходимых элементов языка, чтобы изучающий мог быстро начать программировать на языке.
  2. Детальное изучение каждой темы. (Хотя в случае плюсов детальное рассмотрение любой темы легко превращается в небольшую книгу, а иногда и большую :D)

В частности на основе 4-ой главы можно сделать небольшую выжимку, в которой рассказать про построение проекта, используя gcc и CMake. А 4-ую главу передвинуть в конец.

Microvenator avatar Nov 29 '24 10:11 Microvenator

@umedjankabiri @Nomlsbad @mrmomenticus @Reavolt @khva @leha-bot @Intey

Гайз, содержание курса отрефакторено для спиральной подачи материала. Между некоторыми главами добавлены проекты для практики. Гляньте пожалуйста и покритикуйте.

Microvenator avatar Dec 03 '24 12:12 Microvenator

"Инфраструктура вокруг языка" — я думаю этот блок лучше отложить до конца базового уровня, чтобы не перегружать новичков на старте.

Упоминание ссылок и указателей можно отложить до обсуждения "RAII и управления памятью".

Стандартные контейнеры и алгоритмы Я бы этот блок переместил ближе к разделу "Типы данных", чтобы дать больше инструментов для работы с данными до перехода к более сложным концепциям. Контейнеры могут быть структурированы по сложности: начать с вектор, массивы, потом переходить к ассоциативным контейнерам.

Reavolt avatar Dec 04 '24 13:12 Reavolt

@Reavolt

"Инфраструктура вокруг языка" — я думаю этот блок лучше отложить до конца базового уровня, чтобы не перегружать новичков на старте.

Этот пункт главы будет совсем маленьким. Он сводится к перечислению баззвордов с кратким описанием. Это важно, потому что пользователь так или иначе будет что-то дополнительно искать и читать. Его жизнь будет проще, если он к тому моменту ухватит основные баззворды и будет в теме, что такое stl, boost, gtest и т.д.

Упоминание ссылок и указателей можно отложить до обсуждения "RAII и управления памятью".

В задачах часто придется передавать в функцию объекты по константным ссылкам. Чтобы для пользователя это не было черной магией, кажется, про ссылки нужно поговорить пораньше. Полноценная глава про указатели будет сильно дальше. А до нее - просто краткое упоминание.

Стандартные контейнеры и алгоритмы Я бы этот блок переместил ближе к разделу "Типы данных", чтобы дать больше инструментов для работы с данными до перехода к более сложным концепциям.

Можешь пожалуйста предложить конкретный вариант разбиения на главы этого куска курса? Попробовала сделать что-то такое, но получилась дичь из чередования ифов, строк, циклов, векторов и тд. С какой-то стороны это хорошо. Потому что несколько глав подряд учить контейнеры - скучно. Но выглядит такое оглавление как поток сознания. В общем, покажи, как ты это видишь)

Контейнеры могут быть структурированы по сложности: начать с вектор, массивы, потом переходить к ассоциативным контейнерам.

На данный момент же так и есть? Сначала массивы, потом списки, мапы и тд.

Microvenator avatar Dec 11 '24 13:12 Microvenator