company_banner

Лекции Технопарка. 1 семестр. С/С++

  • Tutorial
Мы продолжаем наши еженедельные публикации учебных материалов Технопарка. Предыдущие лекции были посвящены web-технологиям в целом, а также алгоритмам и структурам данных. В третьем блоке лекций рассказывается о языках С и С++.

Лекция 1. Язык С. Основы организации и использования оперативной и сверхоперативной памяти


Лекция начинается с введения в язык С: рассказывается об истории его появления, особенностях, преимуществах и недостатках, о сферах применения. Описываются основы препроцессорной обработки, рассматриваются вопросы управления памятью (модели управления памятью, области видимости объектов хранения) и производительность программ на языке С. Обсуждается связывание объектов хранения и их инициализация. Затем рассказывается о классах памяти в языке С. Следующая часть лекции посвящена проблематике указателей, а также работе с одномерными массивами. В заключение рассматривается стандарт POSIX и вопросы переносимости.



Лекция 2. Дополнительные вопросы организации и использования оперативной и сверхоперативной памяти


Лекция начинается с рассмотрения многомерных массивов. На примере двумерного массива показывается эффективный обход. Разбирается пример задачи об умножении матриц, обсуждаются векторы векторов. Далее рассматривается ряд вопросов, посвящённых указателям:
  • указатели и двумерные массивы;
  • совместимость указателей;
  • указатели на константы и константные указатели;
  • указатели и квалификатор restrict.

Затем рассказывается об использовании функций применительно к многомерным массивам, о массивах переменной длины. Далее обсуждается выравнивание и упаковка переменных составных типов, в том числе реорганизация структур данных. Рассматривается оптимизация загрузки кэш-памяти: асимметрия условий, встраивание функций. Заключительная часть лекции посвящена системным аспектам выделения и освобождения памяти. В частности, рассказывается о четырёх частях структуры памяти данных.



Лекция 3. Специальные вопросы инкапсуляции


Инкапсуляция — один из трёх базовых принципов объектно-ориентированного проектирования. В первую очередь описывается, что представляет собой инкапсуляция. Даётся определение класса, разбирается его состав, перечисляются существующие виды классов. Подробно рассматриваются объекты класса, в том числе константные, атрибуты и методы класса, битовые поля и вложенные классы. Далее описываются разные виды методов класса (статические и нестатические, встроенные, константные, неустойчивые), а также указатели на них. Затем рассматриваются так называемые дружественные классы и функции. Ближе к концу лекции рассказывается про классы-объединения, анонимные и безымянные объединения, битовые поля в определении классов. Финальная часть лекции посвящена конструкторам и деструкторам.



Лекция 4. Специальные вопросы наследования и полиморфизма. Множественное и виртуальное наследование. Динамическая идентификация типов (RTTI)


В начале лекции обсуждаются инициализация без конструктора, конструкторы по умолчанию, конструкторы с параметрами, закрытые и защищённые конструкторы. Далее рассказывается о механизмах почленной инициализации и присваивания, о конструкторах копирования, операциях преобразования, а также о деструкторах, в том числе виртуальных. Обсуждается идиома RAII (Resource acquisition is initialization), явный вызов деструкторов и список инициализации в конструкторе. Рассказывается о переносе в языке С++11, в том числе о семантике и конструкторе переноса. Далее обсуждаются такие базовые принципы ООП, как наследование (раннее и позднее связывание, базовые и производные классы) и полиморфизм (защищённые и закрытые члены класса, перегрузка и перекрытие членов класса). Затем говорится о вызове конструкторов и деструкторов производных классов, списке инициализации при наследовании, виртуальных функциях и абстрактных классах. Рассказывается о виртуальном и множественном наследовании. В завершение лекции обсуждаются такие вопросы, как динамическая идентификация типов времени выполнения (RTTI) и операции приведения типов, производительность и безопасность полиморфизма и средств поддержки RTTI.



Лекция 5. Шаблоны классов и методов. Обработка исключительных ситуаций. Обобщённое и безопасное программирование


В начале лекции даётся определение шаблонов классов и рассматриваются их параметры. Объясняется механизм конкретизации шаблонов классов. Рассказывается о методах шаблонов, о дружественных объектах в шаблонах, о статических членах, о специализации шаблонов, в том числе о полной и частичной. В качестве примера метапрограммирования рассматривается рекурсивное определение шаблонов. Объясняется суть новой идиомы, SFINAE (Substitution failure is not an error), в том числе применительно к интроспекции времени компиляции. Солидная часть лекции посвящена всевозможным характеристикам типов. Рассказывается о технологии обработки исключительных ситуаций. Следующий блок информации посвящён безопасному программированию: безопасности классов, методов, конструкторов и деструкторов, критериям безопасности и нейтральности кода. В конце лекции обсуждаются различные исключения в стандартной библиотеке.



Лекция 6. Практическое введение в STL. Функциональное программирование в С++


Сначала рассказывается об истории создания стандартной библиотеки шаблонов (STL): о предпосылках, о предназначении STL и гарантиях производительности. Далее подробно рассказывается обо всех компонентах, входящих в состав STL:
  • последовательных контейнерах (векторах, деках, списках);
  • упорядоченных ассоциативных контейнерах (множествах и мультимножествах, отображениях и мультиотображениях);
  • последовательных алгоритмах;
  • алгоритмах упорядочения;
  • алгоритмах на числах;
  • копирующих, предикатных алгоритмах;
  • алгоритмах, работающих на месте;
  • алгоритмах сортировки.

Рассматриваются отношения сравнения в алгоритмах, обратные отношения, операции над множествами и хипами. Затем говорится об итераторах STL, об их видах (в том числе об итераторах вставки и потоковых итераторах), о поддерживаемых итераторами диапазонах и операциях. Ближе к концу лекции обсуждаются стандартные функциональные объекты STL и их базовые классы. Даётся информация об адаптерах (контейнерных, функциональных). В конце затрагивается вопрос применения контейнеров в STL.



Лекция 7. Практическое введение в Boost


Лекция начинается с рассказа о лямбда-функциях, основных правилах их оформления, ключевых преимуществах и применении замыканий. Затем обсуждается Boost (набор из нескольких десятков автономных библиотек), его состав и назначение. Основная часть лекции посвящена рассмотрению примеров использования Boost: проверке времени компиляции, характеристикам типов, вариантным контейнерам, «умным» указателям. В заключение рассказывается об использовании средств Boost для повышения производительности и безопасности кода.



Лекция 8. Принципы и шаблоны объектно-ориентированного проектирования. Базовые шаблоны, шаблоны GoF


Лекция открывается длительным обсуждением целей, проблем и принципов объектно-ориентированного проектирования. Далее рассказывается о шаблонах проектирования: что это такое, какие бывают виды шаблонов, каковы их преимущества. Рассматриваются базовые шаблоны и их реализации:
  • наследование и композиция;
  • делегирование;
  • неизменяемые объекты;
  • интерфейс.

После этого разбираются три группы шаблонов GoF. Порождающие шаблоны:
  • абстрактная фабрика;
  • строитель;
  • фабричный метод;
  • прототип;
  • класс с единственным экземпляром.

Структурные шаблоны:
  • адаптер;
  • декоратор;
  • мост;
  • компоновщик;
  • фасад;
  • приспособленец;
  • заместитель.

Поведенческие шаблоны:
  • интерпретатор;
  • команда;
  • цепочка ответственности;
  • итератор;
  • хранитель;
  • состояние;
  • наблюдатель;
  • стратегия;
  • посредник;
  • посетитель;
  • шаблонный метод.

И в заключение рассказывается о принципах S.O.L.I.D.



Лекция 9. Идиоматика языка С++. Основы рефакторинга и качество исходного кода. Стандарты кодирования и методология разработки ПО


Завершающая лекция в рамках данного курса. Сначала даётся определение термина «идиома языка программирования». Рассказывается об идиомах процедурного программирования, об объектно-ориентированных идиомах. Обсуждаются методы управления памятью, относящиеся к идиомам повышенного уровня сложности:
  • контекстно-зависимая перегрузка индексирования;
  • «автоматическая» сборка мусора и подсчёт ссылок;
  • управление памятью заменой операций new и delete;
  • идиома «конверт/письмо» и делегированный полиморфизм.

Следующая часть лекции посвящена рефакторингу и статическому анализу исходного кода: даются определения, рассказывается о возможном применении, рассматриваются преимущества, недостатки и сопутствующие риски. Далее разбираются типовые анти-шаблоны, «грязные техники», логико-семантические ошибки. Обсуждаются вопросы оптимизации программ с точки зрения производительности, размера объектного кода и объёма памяти данных. Затем рассматривается понятие «качественного ПО», описываются функциональные и структурные показатели качества кода. Рассказывается о моделях и факторах качества ПО, в том числе о модели МакКола. Далее говорится о сложности кода как об атрибуте качества ПО, о способах управления сложностью и о влиянии на неё модульности. Затем рассматриваются понятие «технического долга», стандарты и стили кода, методологии промышленной разработки (правила организации и способы записи, комментирование и документирование, жизненный цикл разработки ПО, его модели). И в завершение курса даётся обзор SWEBoK (Software engineering body of knowledge).

Mail.Ru Group 744,10
Строим Интернет
Поделиться публикацией
Комментарии 83
    +3
    Круто!

    А не думали запустить свой курс на Coursera?
      0
      Не знал про такой замечательный ресурс как Coursera, спасибо огромное!
        +2
        думали делать он-лайн курс, а вот насчет именно курсеры не думали
          +3
          Серьезно, стоит задуматься. На курсеры катастрофическая нехватка русскоязычный курсов, а вновь появляющиеся просто жадно заглатываются студентами. Например, Высшая Школа Экономики запустила курс «Экономика для неэкономистов» — подключилось 20 тысяч студентов (сейчас уже может и больше).

          Разбить 9 лекции на 9 недель, а каждую лекцию раздробить на 10-12 секции по 10-15 минут. Слушаться будет намного проще.
            0
            Лично мне «Универсариум» больше нравится, но подумаем и о курсере, конечно )
              0
              Популярность несравнима, да и возможности платформ.
        +1
        Кармы на плюсик не хватает, так что напишу здесь — спасибо! Выглядит как отличное пособие для повторения тех вещей, которые в рутине начинают забываться.
        P.S. Лекции по два с половиной часа это все-таки хардкорно)
          +1
          Спасибо. 2,5 часа лекций и правда многовато. Мы в последнее время практикуем т.н. «смешанные занятия», когда вначале 2 ак. часа лекция, потом 2 ак. часа — семинар
          0
          Штатный вопрос: расшифровки лекций где?
          И желательно сабтитры.

          … за проделанную же работу спасибо :)
            +1
            увы. ни того, ни другого пока не делали
            –35
            Зачем учить мертвый язык?
              +7
              Зачем задавать глупые вопросы?
                +1
                Это тролль, у него в профиле написано, что он пишет в основном на С++.
                  –2
                  Я пишу на С++, но я считаю, что это отвратительный язык, тем более для обучения.
                  Сколько я намучился, сколько костылей, велосипедов пришлось сделать, пока С++ стал для меня более-менее юзабельным.
                  С++ ужасен, этот его препроцессор, скорость компиляции, отсутствие нормальных модулей, отсутствие менеджера зависимостей, шаблоны, в которых могут разобраться только извращенцы создатели Boost. Я уж не говорю о том, что переносимость С++ это всего лишь миф. Компиляторы, ни один из которых не соблюдает стандарт. Бинарная несовместимость разных компиляторов и разных версий одного компилятора.
                  Пусть люди учат нормальные языки вроде Руби, Питона или C#, а C++ закопают глубоко и надолго, как продукт больного мозга Страуструпа.
                    +3
                    Если для вас это сложно, то это вопрос задуматься о себе.
                      0
                      Ну-ка расскажите мне, как в С++ с использованием только стандартных библиотек открыть файл с юникодным именем. Кроссплатформенно.
                      На дворе 2015 год.
                      Юникод придумали в 1991 году.
                        +5
                        Никак. С++ вообще не предназначен для разработки без подключения сторонних библиотек для выполнения определённых задач. Берёте, например, Boost и открываете.

                        Вопрос был в том, зачем Вы пишете на языке, который не доставляет Вам удовольствия. Мне вот, например, удовольствия не доставляет разработка фронтэндов — ну так я их и не пишу!
                          –4
                          Определенных задач. Открыть файл. С юникодным именем. Программисты на C# и Java дружно посмеялись. Впрочем смеются уже не один десяток лет.
                          С++ вообще ни для чего не предназначен. Разве что для наступания на грабли и выстрелов себе в ногу.
                            +3
                            Прекратите выливать своё недовольство ващей личной жизнью, которую вы не хотите менять на окружающих.
                            Ваша личная неудовлетворённость — это ваша личная проблема.
                              0
                              Согласен со сложностью овладения С++. Но это всего-лишь ваша проблема. Вы еще смешиваете «все в одном» скриптовые языки, которые в стоке тоже не все умеют, и расширяют свои возможности посредством сторонних модулей, с фрагментарностью библиотек С++. Но с этим как может борются Boost, Qt.

                              И давайте не будем упоминать «высоконагруженные сервера youtube», а вспомним на чем написаны рантайм тех языков что вы указали? MRI — С, Rubinius — C++, Python — С, C#(coreclr) — C++. И многие из модулей этих языков используют врапперы над С/C++ библиотеками.

                              А еще немного из более близкого к пользователю. Знаете LibreOffice? Помните времена когда он еще был на Java? И где там сейчас она? Я даже не буду описывать причины почему в таких приложениях приходится писать на C++. Или вы думаете что команду джавистов выгнали и насильно притащили рабов-плюсовиков переписывать весь код на C++?

                              А теперь вопрос, кто будет через 10, 20 лет поддерживать и развивать эти библиотеки и программы? Потому необходимо учить молодых специалистов.

                              По поводу того же открытия файла с юникод именем.
                              Берем Boost::filesystem, которая предложена в стандарт www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf

                              boost::filesystem::wpath filePath = L«вася.txt»;
                              boost::filesystem::ofstream stream;
                              stream.open(filePath);

                              Qt:
                              QFile file(QString::fromWCharArray(L«D:/вася.txt»));
                              if (file.open(QIODevice::ReadOnly)) {

                              }
                                0
                                Дополню, что c++ уже тоже пишут на c++ ( начиная с gсс-4.8 )
                                  +1
                                  Ну раз предложена в стандарт, то хорошо. Значит где-то в году 2020-2025, пока они закончат ковырять в носу, обмусоливая стандарт, я таки смогу открыть свой файл.

                                  На самом деле, единственное, за что я люблю C++, так это за его илитность. Потому что осилить его на должном уровне среднестатистическому программисту не под силу. Я уж не говорю про молодежь, избалованную простотой современных языков, они вообще от слова «указатель» падают в обморок. У нас в университете С++ преподавали 2 или 3 семестра, как думаете, много человек его осилили, ну хотя бы вместе с STL? Где-то 3,5 человека, включая меня. Сколько человек из выпускников, работающих программистами, пишет на C++? 0,5 человека, опять же, включая меня.
                                    –1
                                    может не стоит обсмеивать других и язык, если у Вас есть какие-то личные неприязни к языку?
                                  +1
                                  Зато эти задачи (наступание на грабли и выстрелы себе в ногу) он осуществляет с максимальной эффективностью. Наличие специализированных библиотек позволяет делать это кроссплатформенно и мультизадачно.
                                    0
                                    С++ вообще ни для чего не предназначен

                                    Ну ок, пойдите напишите ядро Винды или Линукса на сишарпе. Или движок ААА-игры на джаве. Или драйвер на питоне. Или движок базы данных на руби. Или патч к Хрому на чём-то там ещё. Получилось? Нет, во всех этих вещах нужен С++. И всё это — очень живые и современные продукты.

                                    То, что Вас жизнь заставляет на С++ писать что-то, что на нём писать не надо (веб-сайты, например) — это лишь Ваша трагедия, меняйте место работы и не страдайте.
                                      –2
                                      Почти все, что вы назвали это C, а не C++. Хотя и лекции на 60% про C без плюсов.
                                        –5
                                        Шел 2015 год, а люди все еще пытаются доказать, что С хоть в чем-то лучше плюсов…
                                          0
                                          Это вам мерещится. C лучше плюсов только в одном — более предсказуемый низкоуровневый код, это важно для драйверов, ядер ОСей, БД. На этом преимущества заканчиваются.
                              0
                              Почитайте книгу Б.Страуструп. Дизайн и эволюция C++. Очень многое поясняет. Этот язык уникален и его выпилить с рынка ооочень не просто. Задачи которые он позволяет решать ни один из существующих языков не может решать их также как С++.

                              Вы вот говорите, долго изучал. А в жизни человека все не просто! Попробуйте за один день стать хорошим боксером или хорошим игроком на 6-струнной классической гитаре. Многое в жизни человека требует труда и упорства!
                                –2
                                Да не читайте вы советских газет по утрам. Уникальность C++ только в том, что на нем писали буквально все последние 15 лет. А писали на нем, потому что 15 лет до этого писали на C, альтернатив не было.

                                C++ как язык — говно полнейшее, только начиная с С++11 пытаются это исправить, и весьма успешно. Но врожденные недостатки сохранились во многом (основной из них — совместимость с C и указатели). Надеюсь что в C++17 или в этом районе введут strict-режим который просто уберет совместимость с C, ручную работу с памятью, указатели и прочие нездоровые вещи, это позволит языку расправить крылья.
                                  –3
                                  Ага, конечно! )))
                                  Сколько ж Вас таких убогих еще существует.

                                  Вы не понимает сути C++. Его дизайн и суть очень похожи на UNIX-принцип. Напомню: «Система не должна думать и решать за пользователя, если пользователь решил набрать и выполнить команду <rm /> значит он понимает, что делает». C++ следует такому же принципу: «Нет никаких библиотек, вот тебе язык, а все что нужно сам напишешь».

                                  У Вас просто руки в неправильном месте растут.
                                    –2
                                    Ты путаешь C и C++. В C++ столько всего неявно происходит, что сравнивать с UNIX-принципом язык не повернётся.
                                      –3
                                      1. Не «Ты», а «Вы»!
                                      2. Если для Вас что-то не явно в C++, это значит Вы не знаете языка и не хотите знать.
                                        –3
                                        1) можешь обращаться ко мне на вы, если тебе от этого спокойнее
                                        2) то есть ты хочешь сказать, что деструкторы, автогенерируемые конструкторы, сложные правила вызова конструкторов, инстанцирование шаблонов, rvalue-ссылки это явные и очевидные вещи, когда программист всегда прав?
                                        Если ты действительно так считаешь, то могу только посочувствовать тебе, ты не видел никогда нормальных языков.
                                    +1
                                    Зачем будет нужен C++ без указателей и ручной работы с памятью? Чем он будет от сишарпа/джавы отличаться?
                                      –5
                                      Вы действительно не знаете или прикалываетесь?
                                      Оператор new и вообще динамическое выделение памяти — страшный тормоз. Языки C и C++ выигрывают по скорости у сишарпа\Джавы именно за счет размещения объектов на стеке. В c++11 еще прикрутили move semantics, которая позволяет еще меньше вызывать new, даже в тех местах, где раньше требовалось выделение памяти.

                                      Поэтому для скорости вовсе не нужны ручные операции с выделением памяти, а по факту, врукопашную написанный код с указателями, операторами new и delete оказывается более ресурсоёмким, чем использование STL. Про надёжность такого C-кода в C++ вообще молчу.
                                        +1
                                        Что по вашему использует сам STL? Как быть с тем, чего нет в STL?
                                          –2
                                          Какая разница что использует STL? Цель курса написать STL? В этом нет смылса, другая подготовка нужна.
                                          Важно что будут разработчики в своей программе использовать. А после такого курса они будут использовать new и указатели, что приведет и к тормозам, и к низкой надежности.
                                          +1
                                          Боюсь Вас расстроить, но в своих проектах я не вижу никакой другой возможности реализации сложно-связанных структур без указателей, потому как эти самые структуры никаким стандартам не известны. А уж с надежностью Вы совсем палку перегнули, и если у Вас, конкретно, дружба с забывчивостью, то это никаким образом не говорит о том, что у большинства программистов такие же патологии. которые в конечном итоге отражаются на качестве ПО.
                                          А по-факту: следуя Вашей логике, Ассемблер — тем более нужно искоренить как «адское зло», потому что на нем очень трудно писать, ввиду сложности работы с адресами, и прочей «сатанинской сути».
                                          Что уж говорить про машинный код, на котором, смею Вас заверить, тоже пишут, тоже люди, как бы странно Вам это не показалось.
                                            –2
                                            Про какие структуры вы говорите?

                                            А на ассемблера пишут и так единицы, ровно те для кого другие средства не подходят. И дело вовсе не в производительности.
                                        0
                                        чем Вам всем не угодили указатели? что в них такого страшного?
                                          –2
                                          То что именно указатели и ручное управление памятью создают 99% всех проблем языка. Утечки, не инициализированные указатели, обращения к объектам после разрушения, реинтерпретациия и расстрелы памяти — это все следствие наличия указателей и ручного управления. В C без этого никуда, а в C++ полно средств, с которыми можно написать львиную долю кода вообще без указателей.
                                            +1
                                            А немалую часть кода без указателей нельзя написать, и? Как по вашему реализованы эти ваши современные умные указатели?
                                              –1
                                              Они могут быть хоть магией реализованы. Более того, если полностью отказаться от неуправляемых указателей, то появится гораздо больший простор для более эффективной реализации умных указателей.
                                              +1
                                              Откройте для себя динамическую инструментацию кода. Ну, valgrind там, Dr. Memory.
                                                –1
                                                Это не помогает не ошибаться, а помотает лишь быстрее искать ошибки.
                                            0
                                            Нездоровые вещи по вашему мнению — это видимо те, что позволяют в C++ писать фрагменты кода, которые работают на порядок быстрее стандартных конструкций именно благодаря прямой работе с памятью и позволяют использовать в программах низкоуровневый код.

                                            Ну, наверное, для программиста, который не в состоянии написать этот самый низкоуровневый код без утечек памяти, битых указателей и т.п., это действительно нездоровые вещи…
                                              –1
                                              Можете привести такие фрагменты кода, которые работают на порядок (то есть в 10 раз) быстрее стандартных из-за ручных игр с указателями?

                                              Я много фрагментов кода видел, усиленное увлечение указателями в C++ всегда (в 99% случаев) приводило к более медленному, менее надежному и менее переносимому коду.
                                    +14
                                    Уверяю Вас, как только перед Вами встанет написать максимально эффективно и Вам за это готовы заплатить и заплатить прилично, то Вы не только про «мертвый язык» вспомните, но и про ассемблер и возможно про машинные инструкции!
                                      –20
                                      C++ в наши дни это удел маргиналов и узкоспециализированных специалистов, но таким людям не нужны видеолекции, они просто открывают страуструпа и начинают писать.
                                        +6
                                        Да, действительно! Зачем учить язык и тренироваться? Можно взять справочник и сразу написать. Да и со специалистами тоже все просто, они неожиданно для себя проснувшись утром в один из обычных дней и вдруг осознают они же «узкоспециализированные»!!!
                                          +1
                                          На C и C++ написано 90% программ на вашем пк, в т.ч. браузер с которого вы отправили это сообщение. Обработал запрос сервер, написанный на C, после чего оно было сохранено СУБД, написанной на C++. Все это работало под управлением написаной на C ОС Узкоспециализировано, да.
                                          +3
                                          Путь к ассемблеру лежит не только через С++.
                                        –21
                                        Получился учебный курс для будущих задротов. Имхо слишком много внимания низкоуровневым деталям и непрактичным навыкам вместо того, что нужно в реальных приложениях.

                                        Я посмотрел по 10 минут с нескольких частей, возник вопрос: после этих лекций реально работающее приложение создать? Что-то я не уверен.
                                          +7
                                          Интересно. Вот ютуб. Написан на сях и плюсах. Вы его смотрите и любуетесь. И заяляете, что непрактично и никому не надо. Куда девались мозги у читателей хабра?
                                            0
                                            походу на мегамозг ушли…
                                              –2
                                              А при чем тут ютуб? Слушатель этого курса смогут ютуб сделать? Я же не говорю что c++ не нужен. Но большие сомнения что нужно такое обучение.
                                              +1
                                              Дайте определение «реального приложения».
                                                –3
                                                Которое решает реальные (существующие объективно) проблемы реальных пользователей (живых людей).
                                                  0
                                                  LLVM, GCC, XNU достаточно «реальные приложения»?
                                                    –3
                                                    А после этого курса ктонить сможет повторить одно из них????
                                                      +2
                                                      Это точно хабр? Может это d3, где такие вопросы еще простительны? Вы что вообще не понимаете что пишете? O_o
                                                      Просто нет слов. Или троль.
                                                        –3
                                                        Я-то понимаю, а вы похоже нет. Я спросил чему учит этот курс, можно ли после него сделать полезное приложение. Я вижу что нет, слишком много внимания уделено малозначимым деталям.
                                                          0
                                                          малозначимые детали нужны для того, чтобы оптимизировать Ваше приложение, чтобы потом оно не загнулось, не требовала всё больших вычислительных мощностей
                                                            –1
                                                            Для начала надо сделать корректное приложение, а потом его оптимизировать. При этом в реальном мире жонглирование такими малыми величинами, связанными с выделением памяти даст бесконечно малый эффект.
                                                              0
                                                              Выделение/освобождение памяти — второе узкое место после работы с дисковой памятью. Оптимизация этого дает очень даже большой эффект.
                                                                –1
                                                                Разница примерно на 3-4 порядка между диском и памятью, но что-то я в курсе не увидел темы как оптимизировать дисковые операции. А в реальном приложении вообще 90% времени проходит в ожидании, и становится важная такая вещь, как отзывчиваость, а не пропускная способность и способы увеличить отзывчивость совершенно другие.
                                                                  +1
                                                                  У сферического реального приложения в пользовательском вакууме.
                                              +2
                                              Одна лекция идет минимум два с половиной часа! Честно, через 40 минут устал просто сидеть и слушать, так что, ИМХО, курс не для онлайн-просмотра совсем.
                                              Хотя есть моменты, которые реально интересно послушать.
                                              И все же, если давать такому(или подобному) курсу жизнь «в массы» в виде online, то на мой взгляд стоит разбить каждую лекцию на куски и из них сделать, к примеру, одну учебную неделю курсов.

                                              А вообще, я лишь только «за», что бы было хотя бы несколько действительно хороших курсов по С++! (а то всяких питонов там уже куча несусветная, не в обиду питону, конечно)
                                                +12
                                                Для тех кому неудобен youtube, кому на работе нельзя слишком много трафика есть, у кого есть время смотреть видео по дороге на работу — залил на rutracker. Видео самого лучшего качества что было доступно в YouTube:

                                                rutracker.org/forum/viewtopic.php?t=4963072
                                                Просидирую сегодня до 01 часа где-то, кому не лень — поставьте на закачку все лекции и пораздавайте завтра днем, на работе нет возможности этого сделать.

                                                Позже возьмусь за другие темы технопарка. Ну и спасибо огромное за лекции!
                                                  –5
                                                  Лихо… а Технопарк Вы спросили?
                                                    +6
                                                    Нет, но думаю они не против, так как они сами выложили в открытый доступ видео лекций на ютуб, притом что на сайте ограничений по распространению данного видео не нашел. А на рутрекере указал сайт-источник(технопарк) и имя лектора.
                                                      +5
                                                      Смотрите на здоровье )
                                                        +1
                                                        Тогда продолжу. Все-таки в оффлайне удобнее просматривать видео, особенно в дороге.
                                                        «Лекции Технопарка. 1 семестр. Алгоритмы и структуры данных»
                                                        rutracker.org/forum/viewtopic.php?t=4963811

                                                        И еще раз спасибо вам за прекрасные лекции. Завтра залью веб, скорее всего.
                                                  0
                                                  Спасибо!
                                                    0
                                                    Глубоко и с любовью рассказано. Одно только напугало: примерно через полчаса заметил что на слайде логотип технопарка движется, сначала подумал что гипноз или обман зрения)))
                                                      0
                                                      Да это же «Изучаем C за 24 часа»!!!
                                                        –3
                                                        Галопом по европам, IMHO. За 9 лекций нельзя изучить C++, и особенно в таком объёме с паттернами, Boost-ом и template metaprogramming. Поэтому практическая полезность этих лекций вызывает у меня сомнение.
                                                          0
                                                          Там далеко не с нуля рассказывают, скорее поясняют нюансы для тех, кто уже умеет программировать на плюсах. За 9 лекций по 3 часа (это как бы 18 пар) рассказывается довольно многое и достаточно подробно.
                                                          +1
                                                          Всем, кто устал смотреть по 2,5 часа довольно медленного изложения: включаем HTML5-плеер в Youtube и увеличиваем скорость до 2x.
                                                            –1
                                                            вы книгу также читаете?
                                                              0
                                                              Книга получается обычно в 3-5 раз быстрее, чем 3-5x изложение лекций.
                                                                0
                                                                Неее, не факт! Если книгу читаешь с получением знаний, то следует прокручивать в голове тот или иной кусок кода. Пытаться вспомнить те или иные конструкции, которые ранее писал и как можно их улучшить с помощью новых знаний и т.д. и т.п. так что книга не факт, что быстрее

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое