Как научить краш-курс на С++?
Через несколько недель мы будем преподавать курс крушения на С++ для Java-программистов прямо из колледжа. У них мало или вообще нет опыта с C или С++.
Предыдущие выпуски этого курса были всего лишь 1 или 2 полдня и охватывали темы, включая:
- новые функции языка, например.
- Заголовок и реализация
- указатели и ссылки
- Управление памятью
- перегрузка оператора
- Шаблоны
- стандартные библиотеки, например.
- заголовки библиотеки C
- базовые iostreams
- базовый STL
- использование библиотек (заголовки, ссылки)
- они будут использовать Linux, поэтому
- основные команды консоли Linux
- gcc и как интерпретировать сообщения об ошибках
- Makefiles и autotools
- основные команды отладчика
- любая тема, которую они задают о
В ходе курса каждый человек индивидуально пишет, компилирует, запускает и отлаживает простые программы, используя недавно введенные функции. Это лучший способ узнать?
Какие темы вы считаете наиболее важными?
Какие темы следует добавить или удалить?
Какие темы не могут быть адекватно покрыты за короткое время?
Ответы
Ответ 1
Я могу еще раз указать на Stroustrup и проповедовать: не преподавайте подмножество C! Это важно, но не для новичков! С++ достаточно сложна, так как стандартные классы библиотек, особенно STL, гораздо важнее и (по крайней мере поверхностно) легче понять, чем подмножество C на С++.
То же самое касается выделения указателей и памяти кучи, кстати. Конечно, они важны, но только после обучения контейнерам STL.
Еще одна важная концепция, с которой должны сталкиваться новые ученики, - это концепция разных единиц компиляции, правило определения (потому что, если вы этого не знаете, вы не сможете дешифровать сообщения об ошибках) и заголовки. Это на самом деле довольно барьер и тот, который нужно нарушить на ранней стадии.
Помимо особенностей языка, самое главное, чему следует научиться, - это понять компилятор С++ и как получить помощь. Получение помощи (то есть знание того, как искать нужную информацию) в моем опыте - это самая важная вещь, которую нужно учить о С++.
У меня был довольно хороший опыт в этом порядке обучения в прошлом.
/EDIT: Если вы знаете любого немецкого, посмотрите http://madrat.net/coding/cpp/skript, часть очень короткого введения, используемого в один из моих курсов.
Ответ 2
Если они происходят из Java-мира, они используются для сбора мусора. Таким образом, я бы, вероятно, потратил немного времени на разговоры о умных (ссылающихся подсчетах) указателях и о том, как они сравниваются с сборкой мусора.
Ответ 3
Если вы собираетесь выложить много программистов на Java из колледжа, чтобы написать производственный код, я бы сказал, что первое, что вам нужно, это указатели и управление памятью.
Действительно, те, кто приходит непосредственно из управляемого кода, редко обладают навыками отладки исключения, связанного с указателем, не говоря уже о его правильном использовании или даже понимают, как их язык/инструменты используют его.
Указатели - это то, как вы думаете не просто писать код.
Основы и методы кодирования можно преподавать в виде советов и заметок на этом пути.
Но неспособность понять указатели при написании кода C просто ждет, чтобы застрелить себя в ноге, если не голова.
Ответ 4
Я хотел бы добавить, что вы должны обязательно указать, где они могут найти ссылки на язык и API. В java API и спецификация языка находятся под рукой на сайте java.sun.com... с помощью C или С++, это не так просто и легко найти справочную документацию.
Всякий раз, когда я делаю что-то на C или С++, это моя самая большая проблема... пытаясь найти то, что мне нужно. Обычно я обращаюсь к cplusplus.com, который обычно имеет то, что мне нужно, в противном случае я буду использовать Google. Если у вас есть набор ссылок, которые вы используете (онлайн или в виде книг), перечислите их и сообщите им, для чего вы используете каждую ссылку.
Ответ 5
Управление памятью (указатели, выделение и т.д.), основы STL и шаблонов (поскольку STL использует шаблоны). Я думаю, что STL важен, поскольку в С++ отсутствует библиотека классов Java SE.
Ответ 6
Я бы потратил целый день на обсуждение того, как написать хороший класс на С++. Deitel и Deitel могут помочь в качестве ссылки.
- Когда вызываются конструкторы?
- Когда присваиваются операторы присваивания?
- Когда вызываются деструкторы?
- Какая точка для const Foo и a_foo?
Ответ 7
Вы должны потратить некоторое время на управление памятью, и особенно на RAII.