Прочитал недавно рецензию на учебник Столярова, где тот обозвали «плохой методичкой«. Ну да, я и сам согласен с тем, что оставлять студентов наедине с книгами Столярова нельзя — но при всех недостатках книжка по C++ (полностью вошедшая в четвертый том многотомника) более-менее подходит для того, чтобы понять основные принципы языка (всякие там rule of three, RAII и так далее). И кстати, не могу согласиться с тезисом о том, что автор не «сделал хоть что-нибудь положительно отличающее текст от бесконечного числа вузовских методичек, призванных помочь студенту сдать экзамен автору методички» — особенно когда перед этим в трех пунктах утверждается, что автор — ебанутый фанатик (в хорошем смысле). В конце концов, большая часть софта, которым мы все пользуемся, была сделана как раз ебанутыми.
А если говорить о dark side образования — ознакомился на днях с конспектом курса «С++ для математиков», который в TU D-stadt читают Dr. Alf Gerisch и Dr. Adrien Semin. Курс представляет собой какую-то смесь из странным образом подобранных элементов C++ и взятых из численных методов примеров.
Из положительного хочется отметить разве что довольно подробную лекцию о IEEE 754 с некоторыми примерами правильных вычислений с плавающей запятой (например, с решением «плохих» квадратных уравнений). А вот отрицательного, к сожалению, гораздо больше. Во-первых — разбираемое в лекциях подмножество C++, как бы это сказать… совершенно недостаточно для нормальной продуктивной работы. Это такой поверхностный обзор в стиле введения в «Язык программирования C++» Страуструпа — вот у нас есть классы, вот как выглядит наследование и полиморфизм (множественное наследование не разбирается), вот есть шаблоны (делаем класс Polynom
Во-вторых — вот за такое можно поймать лектора в темной подворотне и отпиздить, желательно ногами по голове (классы все здесь по размеру маленькие, максимум два числа и ссылка на функцию):
int main(void) { // list of two base class pointers numInt1D** integrator = new numInt1D*[2]; // fill with two pointers to derived class objects integrator[0] = new numInt1D_rectangleLeft(0.0, 1.0, &f); integrator[1] = new numInt1D_trapezoidal(0.0, 1.0, &f); // output numerical integral approximations std::cout << "Integral approximation using rectangle rule = " << integrator[0]->integrate() << std::endl; std::cout << "Integral approximation using trapezoidal rule = " << integrator[1]->integrate() << std::endl; // clean up delete integrator[0]; delete integrator[1]; delete [] integrator; return 0; }
Вообще, не раз наблюдал вот такую ничем не объяснимую любовь к new в C++ у быстро переученных на него джавистов.
Есть, конечно, одно обоснованное возражение - а зачем студентам-математикам учить C++ в каком-то приближенном к реальной жизни объеме, тем более, что для численных методов этого достаточно? Вот возьмем для примера мехмат МГУ - который, в отличие от факультета математики провинциального немецкого ВУЗа, все-таки пытается готовить профессиональных математиков (а пошедшие в программисты выпускники для факультета - третий сорт, после преподавателей этой самой математики). Что входит в "Практикум на ЭВМ" на втором курсе? Отнюдь не только численные методы, но еще и "тонкости" вроде "Десять способов неправильного описания прототипов методов сложения (operator+) и "увеличить на" (operator+=) и единственный правильный способ", да и совершенно "практические" вещи типа библиотеки Qt стороной не обошли. В курсе есть достаточно мест, где можно наступить на стандартные C++-ные грабли и навсегда их запомнить (а нормальное обучение C++ и должно строиться на том, что все эти многочисленные "грабли" надо собрать в процессе обучения самостоятельно и больше их не забывать).
У немецких же товарищей - все наоборот, грабли старательно обходятся, и успешно сдавший экзамен студент знает C++ в том объеме, который позволит ему разве что наделать кучу опасных ошибок.
PS PDFку с лекциями очень просили не распространять, если будут какие-то вопросы - пишите.
Проблема в том, что снаружи университета про этого Борисенко не знает никто, книжек на первый взгляд, соответствующих содержанию его курса и за его авторством я никаких не обнаружил. Ну да, как бы, есть он — только толку то с этого? Устранить проблему доступности материалов — было бы хорошо.
А пофигу. Курс Борисенко содержательно — почти точно такой же, как в тысячах других достаточно приличных мест.
Ну, я бы не сказал, что таких мест — шибко много.
Например, что думаешь про этот курс? Его Физтех недавно выпустил:
https://www.coursera.org/learn/c-plus-plus-white
https://www.coursera.org/learn/c-plus-plus-yellow
А что про него думать? Обычный курс по C++, слегка приправленный рекламой в виде «брендов» физтеха и яндекса.