LINUX.ORG.RU

Материалы для экспресс-курса по C++

 , , ,


1

6

Товарищи, братья, друзья, господа!

Нужны какие-нибудь материалы для экспресс-подготовки студентов по программированию на C++ (специальность студентов имеет довольно малое отношение к тому, что обычно называют IT). Кнута и прочих «корифеев» не предлагать, нужен курс по современному стандарту (C++14 и позже), минимум «глубины», максимум полезных практических знаний и best practices. Если это важно, то направленность — численное моделирование физических задач.

★★★★★

Ответ на: комментарий от RazrFalcon

Я как-то такую книгу съел за неделю, очень интересно тогда было. Основные возможности языка и ООП были раскрыты достаточно, так что хватило на годы. А всего неделю потратил.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от Sahas

Если вас не смущают нелицензионные копии, то они гуглятся. Раньше, по крайней мере, легко гуглились.

С++14 отличается от C++11 всего в нескольких вещах, о которых легко узнать в Wikipedia.

С++17 еще только-только приняли, тот же MSVC++ его еще не поддерживает в должной мере. Принципиально C++17 от C++11 не отличается. Опять же, списки важных нововведений C++17 в наличии в Интернете. И, зная C++11, разобраться с C++17 не составляет труда.

eao197 ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Я сомневаюсь, что студенту за неделю можно втолковать отличие копирования от перемещения. Учитывая что в C++ за перемещением следит автор, а не компилятор.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

А что это такое? ))) Знаю копирование аргумента, inline, аргументы в регистрах, просто ссылки, COW, указатель, прочие штуки. Но что такое перемещение - не вкурил, впервые слышу. Да, я балбес. У меня кутэ головных опилков :)

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

COW чисто к C++ отношения не имеет. А перемещение - это std::move.

По-хорошему, студенту первый год нужно объяснять почему 0.1 + 0.2 != 0.3. И за одно, почему «привет мир» может быть не равен «привет мир» (начиная от кодировок и заканчивая zero width character). Но я не препод - я хз.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Я сомневаюсь, что студенту за неделю можно втолковать отличие копирования от перемещения.

Я концепцию перемещения понял за пол часа, какая неделя?

Dudraug ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Но что такое перемещение - не вкурил

Одна из основных базовых фич с++11(то есть именно в ядре и логике языка, а не стандартной либы). с++11 внес не так много крупных изменений в ядро языка. И не знать о нем, но говорить, что пишешь на с+++ - это тоже самое, что говорить, что ты крутой админ, если можешь заменить видяху в системнике.

Dudraug ★★★★★ ()
Ответ на: комментарий от Dudraug

Я концепцию перемещения понял за пол часа, какая неделя?

А у тебя профильная специальность или ты студент?

И не знать о нем, но говорить, что пишешь на с+++ [...]

У Qt-программистов своя атмосфера.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А у тебя профильная специальность или ты студент?

Не студент, но сутденту в теории объяснить еще проще. Для начала надо объяснить разницу между «быстрым копированием» и «глубоким копированием», после этого объяснить что такое «перемещение» проще простого. Студенты и с++ поймут, и с другими языками будет проще, и порядок в голове будет. А объяснять что такое перемещение людям которые не понимают, что такое копирование возможно бдудет и затруднительно, да, согласен.

Dudraug ★★★★★ ()
Последнее исправление: Dudraug (всего исправлений: 1)
Ответ на: комментарий от Silerus

Ну дык поэтому джава. Тем более там можно в плане лэйтенси всего на порядок отставать от плюсов, а на некоторых задачах и вообще не отставать. А для железа-железа есть си.

По настоящему плюсы нужны крайне редко. Ну ещё если бабла много - можно на вырост их брать.

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

pon4ik ★★★★★ ()
Ответ на: комментарий от Dudraug

но сутденту в теории объяснить еще проще.

По моему опыту это не так.

Для начала надо объяснить разницу между «быстрым копированием» и «глубоким копированием», после этого объяснить что такое «перемещение» проще простого.

Не понял, зачем знать виды копирования при перемещении, но ладно.

tailgunner ★★★★★ ()
Ответ на: комментарий от fluorite

Твои студенты знакомы с программированием (java, фортран)?

Фортран, MatLab на достаточно примитивном уровне, как я понял

Sahas ★★★★★ ()
Ответ на: комментарий от Deathstalker

В. Лаптев, «C++. Экспресс курс», БХВ-Петербург, 2004 год, 512 стр.

2004 год и 512 страниц... Даже искать уже страшно :)

Sahas ★★★★★ ()
Ответ на: комментарий от Silerus

Стандартная библиотека с++ справочное руководство Николаи М. Джонсаттис - пойдет?

возможно, если я найду это самое справочное руководство...

Надо всё-таки и некоторые основы: типы, циклы, функции, передача по ссылке и по значению, namespace'ы, классы, объекты...

Sahas ★★★★★ ()
Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от Sahas

А в чём проблема его найти? Либген зачем, по-твоему, существует?

anonymous ()
Ответ на: комментарий от Silerus

если не затруднит, высылай :)

smirta at mail dot ru

Sahas ★★★★★ ()
Ответ на: комментарий от Sahas

08.1 - C++. Стандарты C++11 и C++14 https://www.youtube.com/watch?v=GFqP5zh5qy4 08.2 - C++. Семантика перемещения https://www.youtube.com/watch?v=GRjMnBK30iA 08.3 - C++. Ещё о нововведениях C++11 и C++14 https://www.youtube.com/watch?v=ieisGsolf2w 08.4 - C++. Как работают rvalue-ссылки https://www.youtube.com/watch?v=dikUue-QqtQ

anonymous ()

Читал «Accelerated C++ Practical Programming by Example by Andrew Koenig and Barbara E. Moo», осилил за неделю, вроде неплохо так зашло.

Fof ()

для экспресс-подготовки студентов по программированию на C++

А плюсы, особенно современные плюсы, где добавили много функциональщины (привет лямбды, template-магия, foreach и.т.д.) обязательный выбор? Так как язык очень обширный и экспресс подготовка только навредит студенту (в моем ВУЗе именно так и произошло, давая c/c++ (не разделяя) и Qt в одном семестре. В итоге: кто и так его знал - ничего нового не узнали, кто не знал - ничего не поняли). Не говоря уже про best practices, где можно философские трактаты писать не хуже Кантовских. Логичным выбором был бы python + заточка под вычислительные задачи (numpy, scipy). Говорю как яростный плюсовик, что это ничем хорошим не закончится.

maxis11 ()

Книги:

  • Скотт Мейерс. Эффективный и современный С++: 42 рекомендации по использованию С++ 11 и С++ 14
  • Джефф Элджер. C++

Но их содержимое надо понять, и это не уложить в краткий курс. Надо очень много шишек набить на «старом» Си и С++.

Вообще говоря, от «экспресс-подготовки» до «численное моделирование физических задач» в плюсах пропасть. В которую упадёт 95% процентов слушателей.

Одна из основных проблем для моделирования чего-либо на плюсах это отсутствие матриц. Их тупо нет. Есть конечно Eigen, Armadillo, ..., но поверх них не так и много выстроено. Сравнить с тем же np.array в Python.

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

Если уж так принципиален С++, но нужно «численное моделирование физических задач», то посмотри в сторону ROOT@CERN. Может там есть, то что надо. По крайней мере будут у вас графики без проблем. Но курса по этому всему нет.

Если есть возможность сменить С++ на Python в Jupyter, смело это делай. Что бы убедить посмотри 15-минутное видео, которое может и сооооовсем далеко от того что тебе надо, но зато наглядно показывает преимущества питона с его разношерстными, но склееными в один клубок пакетами.

З.Ы.:

В своё время мне понравился подход курса Иллинойсского университета «CS 241. System Programming», где студентам дают куски кода размещённые в репозиториях, которые они должны дополнить (например, реализовать заданные функции). Возьми на заметку, так можно показать и красивый код и научить пользоваться Git/Mercurial, CMake, Valgrind, ...

AlexVR ★★★★★ ()
Ответ на: комментарий от RazrFalcon

ХЗ, мне это за 5 минут втолковали (хотя я пожалуй знал это со школы), правда у меня специальность вся с компами и матаном связана, да и преподы были шикарные, + я сам неплохо учился. А те кому не удалось втолковать за неделю были выгнаны на улицу, да закончило в 2 раза меньше, чем поступило, но это хорошо.

УПС, посмотрел тред ниже, std::move надо действительно втолковывать не неделю конечно, но лекцию.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от AlexVR

Вообще говоря, от «экспресс-подготовки» до «численное моделирование физических задач» в плюсах пропасть. В которую упадёт 95% процентов слушателей.

Глупости, ВУЗ-овское математическое моделирование можно писать на C с классами, это проще чем C++11 и выше. Хотя взять для этих же целей C# или python - проще.

peregrine ★★★★★ ()
Ответ на: комментарий от AlexVR

Одна из основных проблем для моделирования чего-либо на плюсах это отсутствие матриц. Их тупо нет. Есть конечно Eigen, Armadillo, ..., но поверх них не так и много выстроено. Сравнить с тем же np.array в Python.

Массивы есть? С индексами работать умеешь? Да, можно эффективнее, но простые задачки в лоб решаются довольно легко.

peregrine ★★★★★ ()
Ответ на: комментарий от maxis11

Да, именно плюсы. Здесь два фактора: 1) собственно, изучение этих «плюсов» нужно студентам, чтобы использовать (для целей последующего курса) определённую библиотеку, написанную на плюсах; 2) в нашей области (вычислительная физика) это практически единственный вариант из языков высокого уровня, дающий быстрый код.

И да, я делаю акцент именно на изучении C++, ни в коем случае не C (да простит меня Eddy_Em)! Никаких там raw pointer, неявного преобразования типов и подобной хрени... А на «высоком уровне» отличия от того же Питона уже не такие принципиальные... (для прикладников, естественно). Собственно, я сам пишу параллельно на Питоне и C++, на обоих примерно одинаково (плохо :)в концептуальном плане

Sahas ★★★★★ ()
Ответ на: комментарий от AlexVR

За книги спасибо!

Надо очень много шишек набить на «старом» Си

Вот от этого увольте! Я придерживаюсь концепции, что из C надо тащить по минимуму (и то, когда уже совсем «низя»). Никаких printf, raw pointer и т.п. Мозги студентам как раз и портят этой вознёй на «переносимом ассемблере». Я бы вообще давал Питон, но надо C++ (см. Материалы для экспресс-курса по C++ (комментарий))

В своё время мне понравился подход курса Иллинойсского университета «CS 241. System Programming», где студентам дают куски кода размещённые в репозиториях, которые они должны дополнить (например, реализовать заданные функции). Возьми на заметку, так можно показать и красивый код и научить пользоваться Git/Mercurial, CMake, Valgrind, ...

Спасибо, очень дельный совет!

Насчёт графики — нам не надо :) У нас есть другие программы для рисовалки (тот же gnuplot). Голая тру-консоль — наше фсио!.. :)

Sahas ★★★★★ ()
Последнее исправление: Sahas (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.