Компания
1 116,11
рейтинг
15 марта 2015 в 15:42

Разработка → Лекции Технопарка. 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).

Автор: @Dmitry21

Комментарии (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
          Неее, не факт! Если книгу читаешь с получением знаний, то следует прокручивать в голове тот или иной кусок кода. Пытаться вспомнить те или иные конструкции, которые ранее писал и как можно их улучшить с помощью новых знаний и т.д. и т.п. так что книга не факт, что быстрее

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

Самое читаемое Разработка