В Яндексе C++ — один из основных языков, на нём написан наш поиск. Его развитие нам настолько важно, что больше года назад по инициативе Яндекса была создана российская рабочая группа по стандартизации «плюсов». Через неё у всех разработчиков русскоязычного пространства есть возможность влиять на развитие языка.



Недавно Физтех, Яндекс и ШАД запустили ещё один курс на платформе Coursera — «Основы разработки на C++: белый пояс». Он посвящён знакомству с С++. Я расскажу, для кого этот курс, как мы его готовили, что получилось в итоге и каковы наши дальнейшие планы.

Как всё началось, было выброшено и началось снова


Онлайн-специализацию из пяти курсов по С++ мы задумали прошлым летом. Сначала сочиняли программу потихоньку, потом активнее, и в октябре начали снимать видео.

Мы успели снять почти половину первого курса, но тут я посмотрел доклад Кейт Грегори о типичных ошибках обучения C++ и понял, что мы допустили большинство из них. 30 ноября я написал в общий чатик:
Ребята! У меня плохие новости. Я осознал, что наш первый курс — ***** :(

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

И всё-таки академическая привычка и склонность к дотошности оказались слишком сильны. В первоначальном варианте программы темы шли друг за другом, подчиняясь строгой логике. Все зависимости между ними были соблюдены, возможности С++ рассматривались глубоко и подробно. К сожалению, в результате стандартные контейнеры и алгоритмы впервые упоминались не раньше второго курса, потому что являются шаблонными конструкциями — а до середины второго курса, думали мы, слушатели ещё не будут знать шаблоны.

Наверное, всем понятно, в чём тут проблема. Чтобы пользоваться std::vector, совершенно не обязательно знать, как устроены шаблоны и даже что это такое.

Момент осознания был оглушительным: мы с самого начала знали, что курс должен быть практическим и давать скилл, а не справку — и всё равно совершили ошибку. Мы пали жертвой собственной экспертизы и стали углубляться во внутреннее устройство С++, вместо того чтобы рассказывать, как легко с его помощью можно решать практические задачи.

Стало понятно, что программу надо переписывать, а бoльшую часть отснятых видео выбросить и снять заново. Это добавило команде преподавателей много работы и привычку всё время думать о практичности курса.

Что получилось


Пока получился первый курс. Предполагается, что в начале курса слушатель может увидеть язык С++ впервые в жизни (но при этом стоит представлять, что такое программирование в целом, и не бояться слов «переменная», «цикл», «список»), а в конце будет способен написать небольшое key-value хранилище с возможностью добавлять туда записи и запрашивать все значения по какому-нибудь известному ключу.

Чтобы человеку было комфортно решать такую задачу, надо рассказать ему про базовые конструкции языка, функции, несколько стандартных контейнеров и алгоритмов, структуры и классы, потоки ввода и вывода, исключения. Рассказывать стоит не слишком глубоко, но так, чтобы всем этим можно было воспользоваться. Ну и конечно, надо выдать побольше задач, чтобы после просмотра видео можно было сразу «потрогать» материал собственными руками.

Отзывы бета-тестеров и слушателей внушают оптимизм. Мы надеемся, что у нас получился хороший вводный курс, к тому же на русском языке, что должно серьёзно облегчить восприятие материала многими людьми.

Остальные плюсы описаны выше: ориентированность на практику, много задач, использование современных возможностей языка. Авторы курса — старшие разработчики Яндекса, которые знают С++ на глубоком уровне и готовы поделиться богатым опытом применения языка в боевых проектах. Поэтому и лекции, и задания учат наиболее эффективному, безопасному и простому программированию на С++.

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

Что именно рассказываем


Курс длится пять недель. На каждой неделе с первой по четвёртую слушателю предстоит посмотреть 10-20 коротких видео и решить несколько задач. Фрагмент курса для каждой недели содержит как задачи и тесты, необходимые для получения сертификата, так и дополнительные необязательные задачи — для тех, кто хочет потренироваться побольше. Последняя неделя полностью посвящена решению финальной задачи.

Доступ к обязательным заданиям стоит около 1600 рублей, но студенты могут подать в Coursera заявку на финансовую помощь и получить доступ бесплатно. Все видео и необязательные задания — бесплатные по умолчанию.

Программа курса выглядит так:

Неделя 1

Обзор возможностей С++
Hello, world
Обзор типов
Операции с простыми типами
Операции с контейнерами
Языковые конструкции
Компиляция, запуск, отладка
Установка Eclipse
Создание проекта в Eclipse
Отладка в Eclipse
Операции
Присваивание
Арифметические
Логические
Условные операторы и циклы

Неделя 2

Функции
Синтаксис
Передача параметров по значению
ссылки как способ изменить переданный объект
const-ссылки как способ сэкономить на копировании
const защищает от случайного изменения переменной
Контейнеры
std::vector
Std::map
Std::set
Взгляд в будущее: обход словаря с помощью structured bindings

Неделя 3

Алгоритмы и лямбды
min, max, sort
count, count_if, лямбды
современный аналог std::transform — for (auto& x: container)
Видимость и инициализация переменных
ООП
Введение в структуры и классы

Неделя 4

ООП: примеры
Работа с текстовыми файлами и потоками
Перегрузка операторов
Встраивание пользовательских типов в контейнеры
Исключения

Неделя 5 — курсовой проект

antoshkka, который участвует в работе группы по стандартизации, помогал нам и с курсом: «Язык C++ красив, быстр, используется большинством крупных IT компаний, а специалисты по этому языку ценятся во всём мире. К несчастью, многие курсы и учебники по C++ на самом деле учебники по «С», а с такими знаниями вам придётся несладко. Поэтому мы подготовили курс по правильному C++, с классами и без утечек памяти. Если ты знаешь любой другой язык программирования и хочешь открыть для себя мир правильного C++, то наш курс для тебя».
Поделиться с друзьями
-->

Комментарии (131)


  1. sav6622
    06.07.2017 16:35
    +3

    Когда будут выложены следующие части курса?


    1. ishfb
      06.07.2017 17:30
      +1

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


      1. sav6622
        06.07.2017 17:36
        +1

        Сообщите ориентировочные — в рамках квартала и года ориентировочно. А то может еще пару лет ждать.


        1. ishfb
          07.07.2017 09:41

          Ну не пару лет точно. Есть надежда, что осенью будут второй и третий курсы. Ну а вся специализация — конец зимы-начало весны 2018. Но это предварительный план.


          1. Orient
            07.07.2017 22:24

            Что такое "специализация"?


            1. ishfb
              08.07.2017 11:19

              Специализация — это термин Курсеры. Это набор курсов. В нашем случае — это пять курсов: белый, жёлтый, красный, коричневый и чёрный пояса по С++.


    1. oleg-x2001
      07.07.2017 08:58
      +14

      Курс высшей математики за 4 недели:

      Неделя 1

      Таблица умножения
      Элементарные арфметические операции
      Возведение в степень и логарифмы
      Тригонометрические функции

      Неделя 2

      Производная функции
      Интегрирование

      Неделя 3

      Вычисление определенных интегралов с помощью вычетов
      Формула Гаусса-Бонне

      Неделя 4

      Применение дифференциальной геометрии в общей теории относительности

      Неделя 5

      Доклад на международной математической конференции


  1. Mishok2000
    06.07.2017 16:49
    +1

    Почему в качестве среды разработки был выбран Eclipse, а не Visual Studio?


    1. gudvinr
      06.07.2017 16:50

      Не все пользуются Windows.


    1. adalink
      06.07.2017 17:07
      +1

      Из курса:

      Для программирования на С++ мы рекомендуем использовать интегрированную среду разработки (IDE) Eclipse. Мы применяем её в наших лекциях. Мы выбрали Eclipse, потому что это бесплатная кросс-платформенная среда, одинаково доступная для всех участников курса. С помощью неё вы сможете полностью повторять примеры из лекций независимо от того, в какой операционной системе вы работаете.

      Руководство по установке и настройке Eclipse под Windows, Linux и MacOS вы найдёте во в


      1. tangro
        06.07.2017 21:51
        +11

        Кто скажет, что Eclipse лучше QtCreator — пусть первый бросит в меня камень. Доступность по платформам та же. Плюс у QtCreator куда большая направленность на получение практически полезного результата.


        1. vya
          08.07.2017 11:23

          А можно бросить в Вас лайк? =)


        1. rkfg
          09.07.2017 02:39

          Пользовался обоими, эклипс лучше. У него совершенно офигенная поддержка Git, вообще лучший гуй для гита из всех свободных, намного лучше вывод типов, есть go to declaration для перегруженных операторов и намного удобнее управление проектами и конфигурациями запуска (лично для меня), ещё на 100% не уверен, но понимание шаблонов у QtC, кажется, хромало. Использую QtCreator для рисования формочек, для этого он хорош. Эклипсу не хватает только создания болванок переопределяемых виртуальных функций из родительского класса, ну и по возможности рефакторинга поумнее, как для джавы (переименование есть, но и только). В CDT 9.3 много старых досадных багов поправили, кстати.


      1. DesolatoR
        06.07.2017 22:49

        CLion? Или им никто не пользуется?


        1. Jamdaze
          07.07.2017 07:15

          Он платный.


        1. Mixaill
          07.07.2017 08:58
          +1

          $199/год


        1. eugenebabichenko
          07.07.2017 13:05

          CLion бесплатен только для студентов и преподавателей, и если у вас не ISIC, от которого достаточно просто вбить номер — проходит время, пока они посмотрят на скан студенческого билета и проверят. Хотя тут надо отдать им должное, происходит это довольно быстро, и вас подписывают на год на все продукты, потом можно продлевать.


          1. RdSpclL
            08.07.2017 11:23

            Скан или фото студенсческого проверяют действительно быстро, мне и знакомому ответили на следующий день после заявки.


      1. DFooz
        06.07.2017 23:44
        +1

        эм, какая разница?! Курс разве для 3-классников? Любую устанавливаешь (ну если вдруг понадобится, компилятор ещё установить) и прогаешь.


        1. eugenebabichenko
          07.07.2017 13:07

          Для третьеклассников, как по мне, лучше всего подходит CodeBlocks или Dev-C++. Eclipse очень уж большой и тяжёлый.


    1. JoeyBlack
      08.07.2017 11:20

      почему не Geany?


  1. Randl
    06.07.2017 16:53

    Хотелось бы увидеть "черный пояс")


    1. binstream
      13.07.2017 09:31

      Тогда возможно вас заинтересует UNIGINE C++ школа для продвинутых (курс бесплатный, если что).


      1. binstream
        13.07.2017 09:39

        На Хабре тоже писали про эту школу:
        UNIGINE С++ School: бесплатный онлайн-курс для продвинутых


  1. Arastas
    06.07.2017 17:09

    Это, наверное, где-то написано, но я не нашёл — а на сколько часов в неделю рассчитан курс?


    1. lexnekr
      06.07.2017 17:25

      Курсера автоматически рассчитывает от 3 до 13 часов (в зависимости от недели).
      Но следует учитывать, что это при условии что вы уложитесь в рассчётные лимиты, например в 45 минут на задание по программирование для задачи по работе с файлами.
      Опыт других курсов показывает, что эти задания имеют очень большой разброс — кто-то делает за 10 минут, а кто-то за неделю (я сам элементарное задание 2 недели 1 курса по машинному обучению про кошек делал 3 суток).


  1. antoshkka
    06.07.2017 17:21
    +7

    Ребята очень большие молодцы!

    Бьярн Страуструп как-то рассказывал: «Открыл какой-то учебник по С++, а там на первой неделе указатели, printf, new, delete, void*… И я понял, что не хочу пользоваться таким С++».

    Так вот, в начальных курсах всего этого безобразия вы не найдёте. И это заслуга создателей курса


    1. RomanArzumanyan
      07.07.2017 12:42
      -3

      Чем new / delete не угодили?


      1. khim
        07.07.2017 12:59
        +3

        Тем что вас «с места в карьер» тыкают в очень сложное понятие: «ручное управление памятью». А использует высокоуровневые структуры данных (std::vector, std::map и прочие) вы можете писать довольно-таки сложные программы об этом не думая вообще.

        А про new/delete вы узнаете когда настанет пора разобраться в том, как std::vector и std::map устроены «внутри».

        В современном курсе я бы не стал вдаваться даже в то, что "строка" — это не std::string. Хватит того, что "строка"s — это std::string, а о всём остальном вы узнаеете потом!


        1. RomanArzumanyan
          07.07.2017 13:04
          -5

          Бьярн Страуструп, создатель С++ открывает книгу, видит там (помимо прочего) конструкцию new/delete из языка С++ и говорит, что он не хочет пользоваться таким языком.

          Это звучит как нонсенс. Господа минусующие, вот об этом мой комментарий сверху!


          1. khim
            07.07.2017 13:43
            +4

            Он видит их на первой неделе — в этом проблема. Это как если бы вы открыли книгу по Windows и обнаружили не описания того, как тыкать мышкой, а рассказ про защищённый режим и написание драйверов. Они-то основа, весь Windows «надстроен» сверху, но… как часто вы правите что-то в ядре Windows?


            1. RomanArzumanyan
              07.07.2017 13:58
              -6

              Бьярн Страуструп их на первой неделе видит? Разговор о нём.


              1. Neikist
                07.07.2017 14:39
                +1

                Вы слышали что нибудь об эмпатии? Я думаю Страуструп также как и почти любой человек ей не обделен.


          1. Free_ze
            07.07.2017 14:33

            Он предпочел бы посмотреть на шаблонный std::shared_ptr<T>?


            1. mayorovp
              07.07.2017 14:34

              Вполне возможно.


            1. RomanArzumanyan
              07.07.2017 14:36

              Не знаю, но полагаю странной его (предполагаемую) неприязнь к core feature языка, который он сам создал.


              1. Neikist
                07.07.2017 14:45

                Из принципа «Не платить за то, что не используется» отнюдь не вытекает необходимость не использовать то за что нужно больше платить с т.з. производительности. С другой стороны как раз в случае использования ручного управления памятью — приходится платить увеличенной сложностью.


                1. Free_ze
                  07.07.2017 15:16
                  -2

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


      1. OYTIS
        07.07.2017 13:00
        +3

        Ручной memory management — источник бесчисленных ошибок. Страуструп рекомендует везде, где возможно, создавать объекты на стеке, где нужна куча — оборачивать в умные указатели.


      1. x67
        07.07.2017 13:39

        Чем указатели не угодили?


        1. RomanArzumanyan
          07.07.2017 14:01
          +1

          По идее, указатели — это наследие С. Их можно заменить ссылками. New / delete связаны с core features языка и замене не подлежат.

          В этой связи выглядит странным (предположительное) негодование г-на Страуструпа по поводу new / delete, описанное в коментарии antoshka.


          1. khim
            07.07.2017 14:14
            +2

            По идее, указатели — это наследие С. Их можно заменить ссылками. New / delete связаны с core features языка и замене не подлежат.
            Ассемблерная инструкция add тоже замене не подлежит, но про неё и разработчики со стажем могут сходу не вспомнить.

            В современном C++ считается «дурным тоном» использовать new/delete. При использовании «умных» указателей явно delete вызывать не нужно, а вместо new — используются аллокаторы.


    1. matabili1973
      08.07.2017 11:22

      При всем уважении к основателю Страуструпу, лучший практик далеко не всегда является лучшим преподавателем. Я как-то пробовал изучать язык по его собственной книге. Вот не пошло, и все тут. И единственная книга, по которой я дошел до некоторого прогресса — это был «Базовый курс C++» Шилдса.
      Хотя, конечно, указатели на первой неделе — это и правда жестоко.


  1. JIghtuse
    06.07.2017 17:23
    +3

    Илья, спасибо вашей команде за курс, мне очень понравился. Для совсем новичков будет сложноват (хотя на форумах пытаемся и таким помогать), но в остальном отличный. Много задач (с последующими эталонными решениями), последние стандарты, неплохой темп.
    Жду следущих курсов. Как понимаю, они тоже сначала через бета-версию должны пройти? Записался в бета-тестеры на Coursera, до текущей недели так и нету следущих частей.
    Насчёт цены в 1600 — кажется, Coursera снова решила всё переломать ради монетизации и теперь остались только подписки на месяц, ~3000. Надеюсь, все ещё можно как-то взять только один курс. Сам не видел, брал по старой цене.


    1. lexnekr
      06.07.2017 17:29

      Нет, 1 курс нельзя взять.
      Эта опция осталась только для одиночных курсов (не входящих в специализации) и для тех специализаций, где вы успели купить одиночный курс по старым правилам.
      99% Новых курсов выходят по модели подписки.

      P.S. Но зато в рамках месячной подписки можно пройти все курсы разом. Знаю прецедент когда спеку по маш обучению прошли за 2 недели.

      P.P.S. цен в 1600 для большинства курсов уже давно не было. Пару лет назад (сами знаете из-за чего) все цены быстро выросли с 1600 как раз до 3000.


  1. kronos
    06.07.2017 18:07

    Прошел курс исключительно из спортивного интереса (профессионально пишу на языках с динамической типизацией).

    Я и узнал кое-что новое (банально понял зачем нужен explicit) и попрактиковался на более/менее реальных задачах.
    Некоторые задания выглядят нудновато, думать не надо, а вот кодить надо много. Ну может так оно и надо — не знаю.
    Некоторые моменты я не уловил: хорошо объяснено зачем передавать, скажем вектор, по константной ссылке. А почему возвращаем не по константной ссылке? Может это было в видео и я пропустил?
    Последняя задача достаточно простая, но ты тратишь мильон времени чтобы научится обнаруживать неправильную дату или неправильный формат даты. Зачем? Какие навыки в плане разработки на плюсах я улучшу если потрачу кучу времени на придумывание всех edge case-ов? Это не понравилось. В соседних постах задача для поступления в школу unigine была, по моему мнению, интереснее.

    Осталась куча не раскрытых тем, точно буду проходить новые курсы. Удачи вам.


    1. khim
      06.07.2017 18:30
      +2

      А почему возвращаем не по константной ссылке?
      На что эта константная ссылка будет указывать, извините? На обьект, созданный внутри функции, который исчезнет, когда мы из неё выйдем?

      Я боюсь тут сказывается привычка работать не с «языками с динамической типизацией», а «с языками со сборщиком мусора». В C++ каждым обьектом должен кто-то владеть (не так всё строго как в Rust'е, но концептуально — идея та же), просто так «висеть в воздухе» обьект не может…


      1. mistiman
        07.07.2017 08:59

        Догадываюсь, что руководствуясь известными вам аксиомами вы дали верный ответ. Но не совсем понятно почему, ведь в курсе нет лайфцикла объектов. Почему владение ссылкой недостаточно, чтобы объект жил? Владение ссылкой != владению объекта? :-)


        1. Free_ze
          07.07.2017 09:56

          Но не совсем понятно почему, ведь в курсе нет лайфцикла объектов… Почему владение ссылкой недостаточно, чтобы объект жил?

          Если там говорили о локальных переменных, то считайте, что он был (деструкторы нас пока не интересуют). Локальные нестатические переменные умирают при выходе из скоупа.

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


        1. khim
          07.07.2017 13:07
          +1

          Но не совсем понятно почему, ведь в курсе нет лайфцикла объектов.
          Но в языке-то он есть!

          Владение ссылкой != владению объекта? :-)
          Нет, конечно. Зачем вам нужна ссылка если у вас есть аж целый обьект на руках?

          Это вообще самая большая проблема обучения C++: чтобы полностью понять как в нём работает простейшая Hello, world! программа вам нужно знать о работе с шаблонами, о перегрузке операторов, множественном и виртуальном наследовани и о тысяче других вещей.

          Потому, разумеется, прослушав вводный курс, вы не будете владеть «маленьким кусочком C++», к которому потом добавятся сложные вещи, нет, вместо этого вы сможете используя всю хитромудрую машинерую C++ (которая, напомнию, сидит «под капотом» уже в Hello, world!) для того, чтобы решать простые задачи…


          1. mistiman
            07.07.2017 13:23
            +1

            Но в языке-то он есть!

            Я это понимаю :-) Мой комментарий лишь о том, что среднестатистический новичок, проходящий этот курс, вполне справедливо испытывает дискомфорт из-за недопонимания. Большинство привыкли к GC и к тому, что владение ссылкой ~= владению объектом, что объект висит в куче и будет там пока есть хоть один живой объект, который знает о нем. А некоторые и вовсе не заботятся о том, где объект и как он выделен
            Кажется не хватает как раз кратенькой вводной как выделяется память в с++ и что на самом деле такое указатель


            1. khim
              07.07.2017 13:51

              Кажется не хватает как раз кратенькой вводной как выделяется память в с++ и что на самом деле такое указатель
              Вы сейчас выступаете как изучающий C++ или как знаток C++, критикующий курс?

              Если последнее — то вспомните про разные краевые случаи типа ссылок на временные объекты и «семантику перемещения». А если первое — то поверьте на слово: «кратенькая вводная про то, как выделяется память в C++» по объёму будет либо примерно сравнима со всем курсом Яндекса, либо бесполезна.

              Вы действительно хотите его прослушать перед написанием Hello, World!?


              1. mistiman
                07.07.2017 14:03
                +1

                Я сейчас как новичок в мире c++, который пришел из мира с GC. И не критикую, а акцентирую ваше внимание на тех моментах, которые лично мне доставили некоторый дискомфорт. В процессе прохождения курса это единственное место, которое вызвало вопрос «почему?» и отправило меня на поиски информации вне курса. Причем не считаю, что это плохо :-) Но возможно как профессионалы, вы можете дать достаточную вводную, чтобы избавить от этого дискомфорта. Ведь далеко не всегда профессионал знает о существовании недопонимания в определенном месте курса, потому, что многие вещи воспринимаются как аксиомы и не требуют никакого объяснения.
                Курс же в целом прекрасен, хоть я его еще не прошел до конца, жду следующий. Спасибо!


                1. khim
                  07.07.2017 23:19

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

                  Потому в курсе выбран подход: использовать простые варианты, которые должны работать без проблем — а сложные вещи оставить «на потом».

                  Так-то, в принципе, всё просто: есть локальные переменные и статические, которыми управляет компилятор и динамические.

                  Вот только в статических переменных есть такой подвид как «временные» переменные — которые сходу создают кучу сложностей.

                  А работать с динамическими переменными можно 100500 разными способами (в том числе можно и с GC столкнуться ненароком… а то и с двумя одновременно — скажем когда у вас программа на Unity под Android). А если к этому добавить потоки и исеключения?

                  Так что… сложно это всё. Одна из самых сложных и запутанных тем в C++, на самом деле.


              1. vanxant
                07.07.2017 21:32

                Ну хз, что там рассусоливать с выделением памяти для helloworld?
                Рассказать про локальные и статические переменные, которыми управляет компилятор и «ничего делать не надо».
                Рассказать про new/new[] и delete/delete[] и про пару типичных ошибок/утечек.
                Всё.


                1. khim
                  07.07.2017 23:05
                  +1

                  Рассказать про локальные и статические переменные, которыми управляет компилятор и «ничего делать не надо».
                  Рассказать про new/new[] и delete/delete[] и про пару типичных ошибок/утечек.
                  Всё.
                  Угу. Вот только уже на это одно потребуется уроков 5.

                  Ну просто потому что массивы, как бы, хочется и обнулять тоже, а что для этого нужно написать что-то типа
                    int* array = new int[100]();
                  

                  ни разу не очевижно. В том числе я встречал людей с неплохим стажем, которые не понимали что строчка вверху вовсе не эквивалентна следующему:
                    int* array = new int[100];
                  


                  Вы очень сильно переоцениваете способность новичков к усвоению новых для них понятий. Очень.

                  Или ещё такое:
                  std::string hello_world_string() {
                    return "Hello, beautiful world";
                  }
                  
                  int main() {
                    const std::string& a = foo();
                    const std::string* b = &foo();
                  
                    std::cout << a << std::endl;
                    std::cout << *b << std::endl;
                  }
                  
                  Почему первая строка печатается нормально, а вторая — нет? Ссылка же — это просто указатель, не так ли?

                  К сожалению в случае с C++ и с локальными и со статическими переменными таки «чего делать надо». Про динамические переменные я вообще молчу…


                  1. akzhan
                    16.07.2017 00:48

                    У меня ваш пример падает с ошибкой при компиляции. Но вообще красивый пример :)


                     error: taking the address of a temporary object of type
                          'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char>
                          >') [-Waddress-of-temporary]
                      const std::string* b = &foo();


                    1. vt4a2h
                      16.07.2017 01:01

                      Всё правильно, эта строчка слегка противоречит стандарту. Вы вероятно компилировали чем-то нормальным, а не MSVC :) Хотя и MSVC может ошибку выдать, если все нестандартные расширения языка отключить.


                      1. khim
                        16.07.2017 02:05

                        Эта строка не противоречит стандарту. Если вы обратите внимание, то у человека выше сдиагностировалась не ошибка, а всего лишь предупреждение — которое можно и отключить. А вот работать такой код не должен — это уже по стандарту…


                        1. akzhan
                          16.07.2017 02:36

                          Это предупреждение из серии фатальных. По крайней мере для Clang.


                           1 error generated.

                          Результирующего бинарника, естественно, тоже нет.


                        1. vt4a2h
                          16.07.2017 15:41

                          §5.3.1, третий абзац (посмотрел в черновиках 14-го стандарта, свежее нет под рукой):

                          The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue or a qualified-id.

                          Т.ч. даже компилироваться не должно, если это не MSVC с его нестандартными расширениями. Выше была именно ошибка, там даже есть слово error.


  1. vt4a2h
    06.07.2017 22:32
    +3

    Программа курса вроде неплохая, но у меня сразу же возник вопрос: почему Eclipse? Это же одна из самых ужасных IDE, которую можно пердставить, в первую очередь по потреблению памяти, скорости работы и индексации на больших проектах… Эклипс, которому мало 16Гб это не редкость. А потом люди будут доказывать что Эклипс — это круто, ведь в курсе по C++ от самого Яндекса рекомендуется эта IDE.
    Конечно же в рамках данного курса всё равно какая среда разработки используется, т.к. он про основы языка, а не о промышленной разработке, но лучше не привыкать к плохому с первых дней разработки.

    PS
    Не холивара ради.


    1. CoolMind
      07.07.2017 12:11
      +1

      Согласен. Выше тоже задали этот вопрос и сравнили с VS, Qt.
      Сам программирую на Java, пробовал Idea, NetBeans, Android Studio. С ужасом вспоминаю, как когда-то открывал Eclipse.


  1. MaM
    07.07.2017 03:29
    -5

    Посмотрел программу, у меня плохие новости для вас, но и ваш второй курс — *****. Крч, ничего не поменялось, кто хочет знать кресты Страус, Мейерс, Александреску и тонна кода, вот твои друзья.


  1. speller
    07.07.2017 07:01

    Можно ли рассчитывать на появление учебного курса «с нуля»? Например, чтобы школьник начал изучать программирование, ничего об этом заранее не зная, и поступательно пришел к описанному в статье курсу?


    1. Zalina
      07.07.2017 16:24
      +1

      Думаю, для такого подойдёт курс Яндекса по С++ на Stepik. Там как раз школьной математики достаточно.


  1. Mordress
    07.07.2017 08:59

    а по другим языкам есть/планируются курсы?


    1. lexnekr
      07.07.2017 09:26
      -1

      • Есть по машинному обучению (там поверхностно затрагивается python)
      • На уровне бета-теста фронт-энд (html+css+js), готово уже 3 курса (впрочем, моё личное мнение как бета тестера не в пользу этой специализации)
      • Ходят слухи про python
      • Есть python от Яндекса и ВШЭ, но мне он показался довольно сумбурным


  1. DimaKurb
    07.07.2017 08:59
    +5

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


    1. lexnekr
      07.07.2017 09:29
      +1

      Финансовая помощь спасёт отцов русской демократии (но придётся написать небольшое обоснование почему вам её должны и подождать 2 недели).
      А если объективно, то разве вам не кажется, что разработка курса это в первую очередь история про то как попиариться для Яндекса и как заработать для авторов и МФТИ?

      P.S. если что, я не автор. =)


  1. Yittton
    07.07.2017 08:59
    +1

    Огромное спасибо! Очень жду следующих курсов (честно, в душе надеялся увидеть уже доступными «пояса» по-сложнее).
    Кстати, а если серьезно стоит конкретная задача за 21 день хоть как-то подтянуться до не джуна, но смахивающего на него, то как быть? Вот этот курс — основы (остальные его части, к сожалению, еще не доступны). А что почитать (по-практиковать) дальше? Чтобы не опасаться, что там «С с классами» и не потратить драгоценное время, а просто взять и «ботать». Еще раз спасибо!


    1. vanxant
      07.07.2017 10:45
      +1

      Покурить «Эффективное использование С++» Мейерса, обе части. Там нет всяких новомодных свистоперделок, но смысл не в этом. Эти книги отлично вкрячивают мозги в правильную сторону — вы начнете понимать, ПОЧЕМУ язык и его библиотека сделаны так, а не иначе. И на порядки снизите количество ошибок.


      1. WinPooh73
        07.07.2017 13:07

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


  1. become_iron
    07.07.2017 08:59
    +1

    А почему не на Stepik'е? Там уже есть более старый Яндекс-курс по C++ — можно было бы и этот


  1. LongNowhere
    07.07.2017 08:59
    -4

    Не холивара ради, но зачем вообще добавили в курс работу с IDE Eclipse?
    Новичкам лучше начинать писать код в продвинутом редактора или полностью работать с компилятором из командной строки.


    1. ishfb
      07.07.2017 09:07
      +3

      Мы решили, что новичкам как раз лучше использовать IDE, чтобы сконцентрироваться на изучении языка, а вопросы, связанные с компиляцией, отладкой и запуском кода предоставить IDE, чтобы это просто работало из коробки.

      В нашем первом подходе, который мы выкинули, мы предлагали собирать из командной строк, но потом поняли, что это создаст слишком большую нагрузку на слушателей. Многие из них могли консоли до этого и не видеть ни разу, а мы их заставляем не только язык учить, но ещё и работать с непонятным чёрным экраном.

      Насколько я понимаю, основная аудитория MOOC-курсов — это работающие люди. То есть у них есть 5-6 часов в неделю на изучение курсов. Чтобы они не бросили обучение, нагрузку им надо давать очень дозированно. Поэтому мы стараемся во всех лекциях и заданиях концентрироваться на какой-то одной проблеме. Чтобы слушателей не придавило объёмом информации.


  1. Milawarlock
    07.07.2017 08:59
    +1

    Если с нуля, то я не за какие-либо курсы, я за книги… Книга «C++. Базовый курс» Герберт Шилдт — все понятно, поэтапно, простым языком, но о самом важном, дает понятие ООП, типах, циклах, конструкторах, списках и прочее.


    1. Hokum
      07.07.2017 10:28
      +1

      Я ради развлечения начал проходить этот курс. На мой взгляд, человек который ничего и никогда не слышал о программировании с ним не справится. И вот тут как раз может пригодится книга. Мне только книги мало (говорю не в контексте этого курса, а в целом про изучение нового языка), хочется какого-нибудь интерактива — заданий с автоматической проверкой, а этого книга дать не может.


      1. Free_ze
        07.07.2017 10:42

        хочется какого-нибудь интерактива — заданий с автоматической проверкой, а этого книга дать не может.

        Большинство книг по программированию, которые я встречал, содержали в себе примеры вида: «Вот такой-то код (… описание...) дает нам такой результат (… объяснение...)». Это уже огромное поле для экспериментов, начиная от «воспроизведи пример по памяти», до попыток сделать предположения о материале, который раскрывается далее с последующей проверкой. В помощь та же книга, автокомплит IDE и ошибки компиляции/собственные тесты. Плюс этого банального подхода в том, что полет фантазии не ограчичивается потоком жестко скриптованных заданий и работа идет в самделешном окружении, где удобно писать и дебажить, а не в браузере.


        1. Hokum
          07.07.2017 12:48

          Так и тут работа идет в обычном окружении, просто потом нужно отправить файл с решением. Я, наверно, не правильно слово "интерактив" использовал. Я имел ввиду не тестовые задания которые встроены в лекции, а задания с написанием кода. Когда пишешь код в своем любимом редакторе/IDE, пишешь тесты, отлаживаешь и потом отправляешь исходный код в систему для проверки.


          Безусловно, интересно и нужно эксперементировать с приведенными в книгах примерами, иначе их не понять полностью, но хочется еще иметь какую-то конкретную задачу без готового решения. Да, и просто приятно получить "звездочку" за решенное задание :) — RPG в реальности :) В этом плане, мне нравится codingame.com.


    1. OYTIS
      07.07.2017 15:12

      Книги Герберта Шилдта много и заслуженно критиковали профессионалы за многочисленные ошибки. Сам, помню, тоже школьником учил язык по его книге без особого успеха (темплейты он объяснял как-то странно).
      ИМХО, если с нуля учить ООП, то лучше не С++, а что-нибудь более защищенное, например, Java или C#, а когда человек готов к C++, то читать сразу Страуструпа. Имхо, это едва ли не лучшая книга по программированию вообще, а не только по C++.


      1. Free_ze
        07.07.2017 15:21
        +1

        Страуструпа за сбивчивость изложения тоже не критиковал только ленивый. Образцовые технические книги, кмк, у Рихтера.


        1. OYTIS
          07.07.2017 16:02
          -1

          Кто, например? Шилдт просто притча во языцех, отзывы о нем даже в википедию вошли =)
          Рихтера не читал, увы. Страуструп просто уровнем выше, его не стоит читать как самоучитель по C++ за X дней, иначе действительно можно заблудиться, наверное.


          1. Free_ze
            07.07.2017 17:44

            Как вы говорите: «Притча во языцех».
            Вот, выходит, учебники он не пишет. Однако, итеративность изложения (это очевидно даже из оглавления) в том же «Язык программирования C++» показывает, что и справочник из нее не самый лучший.


            1. OYTIS
              07.07.2017 18:33

              Да, наверное, как справочник тоже не пробовал. Зато точно замечательный источник вдохновения и того, что Хэмминг называл обучением стилю.


              1. Free_ze
                07.07.2017 19:31

                С этим согласен, для C++ разработчика эта книжка — мастрид, хотя новичков отгонять — тоже хорошо подойдет (=
                Как раз отлично «латает дыры» после Шилдта, который в то же время чуть более «пологий», кмк. (по крайней мере могу говорить по поводу его «справочника», который мне отлично зашел как учебник в свое время)

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


                1. JIghtuse
                  07.07.2017 20:04

                  Не пойму, о чём спор. Есть у Бьярне книжка для начинающих — Programming: Principles and Practice Using C++. Разжёвывается всё довольно подробно и последовательно, при этом указатели и управление памятью вводятся в третьей части. Последнее издание использует C++11/C++14.


        1. alekciy
          13.07.2017 16:42

          Ещё один отличный автор — Стивенс. Имхо, на столько хорош, что даже перевод его не испортил.


  1. neoxack
    07.07.2017 09:08
    -3

    Лучше бы по Rust-у сделали курс


    1. mayorovp
      07.07.2017 09:11
      +1

      А смысл? Он устареет через полгода.


      1. neoxack
        07.07.2017 09:13
        -3

        А С++ устарел уже 10 лет назад так то.


        1. mayorovp
          07.07.2017 09:15
          +2

          Язык, может быть, и немного устарел — а вот курс по языку не устареет еще долго. В отличии от Rust, где ситуация прямо противоположная.


        1. khim
          07.07.2017 13:13

          И именно поэтому курсы для него не устаревают. У меня есть знакомый, которому курс Яндекса не подойдёт ни разу (он Индус), но он записался на курсы по C++ и сейчас их усилиенно грызёт. Показывал мне учебник, в котором я нифига не понял (у меня с Хинди… никак), но по примерам стало понятно, что 90% там описанного он сможет применить в практической работе, несмотря на то, что курс использует Turbo C++ 2.0, которому больше четверти века.

          А кому будет нужен через десять лет курс по современному Rust'у?


        1. 0xd34df00d
          07.07.2017 23:01
          +1

          С 2007-го года аж три новых стандарта вышло, поглядите при случае.


          1. khim
            07.07.2017 23:10

            С 2007-го года аж три новых стандарта вышло, поглядите при случае.
            Вы не поверите — но они все базируются на том, что в Turbo C++ 2.0 уже было. Да, появилось много нового, многие вещи стало делать проще и легче, но навыки, которые вы получите, пройдя курс на Turbo C++ 2.0 — вы сможете применить «с пользой» почти все.

            Про Rust у меня такой уверенности нет.


            1. 0xd34df00d
              07.07.2017 23:14
              +3

              О, нет, это очень опасное заблуждение. C++03 и C++11 — лучше считать, что это два разных языка, с разными разными идиомами и разным подходом к решению задач.


              Что, конечно, не отменяет ваше утверждение: язык действительно старается сохранять обратную совместимость, поэтому навыки, полученные в Turbo C++ 2.0, применимы и сейчас, да.


    1. 0xd34df00d
      07.07.2017 23:15
      +1

      По хаскелю и как на нём писать эффективный код.


      Я уже лет 7 пишу, а рассуждать о производительности до сих пор не умею. Из людей хреновые эмуляторы graph reducer'ов получаются.


  1. beavis88
    07.07.2017 09:45
    -5

    Зачем всё это нужно когда есть Страуструп? А делать выводы по словам бездарной старухи которая писать не умеет от слова совсем, это конечно круто.


  1. evocatus
    07.07.2017 10:36

    Я знаю чистый C хорошо. И хочу познакомиться с современным C++. Что лучше почитать?


    1. JIghtuse
      07.07.2017 11:14

      A Tour of C++, наверное. Краткий обзор языка и стандартной библиотеки.
      C++ Programming Language более подробно всё рассматривает.


  1. Mugik
    07.07.2017 11:01
    -1

    У каждого своя мощность мозгов.

    Но я пишу на питоне почти 6 лет. И я до сих пор считаю, что я нифига не знаю. Чем больше проектов написано, ревью кода пройдено, тем сильнее понимаешь, что до прошаренности очень далеко.

    Плюсы за 21 день по видосам и заданиям? Что-то у меня смутные сомнения на этот счёт.


    1. JIghtuse
      07.07.2017 11:17

      Кто вам сказал, что за 21 день всё объяснят? Это только самые основы, перечисленные в программе. Ещё 4 курса планируется. Понятное дело, даже этого недостаточно для "прошаренности", но тут уже слушателям решать, как дальше развиваться.


  1. ArthurKushman
    07.07.2017 11:48
    -6

    Да просто програйте в Atom под любой OS, у меня под MacOS и Ubuntu поддержка синтаксиса C/C++ type-hint, после просто g++ -std=c++11 -o hello hello.cpp. Для курсов достаточно, даже для мелких проектов на GitHub с Makefile вполне.
    PS Страуструп есть его не может не есть
    PSS Rust, Python, Go etc — temporary trendy things for fun boys, with fun clubs sometimes.


    1. eugenebabichenko
      07.07.2017 13:16
      +3

      А зачем? Atom нужно для всего этого настроить, новичку надо объяснить, что такое g++ -std=c++11 -o hello hello.cpp, хотя он хочет просто написать код, нажать кнопку и посмотреть на результат. Это же касается любых развлечений с текстовыми редакторами. Для новичка, ИМХО, идеальный вариант: какая-то облегчённая IDE типа CodeBlocks. Быстро, работает, не перегружено непонятными фичами. Может быть Qt Creator, хотя это уже другой уровень.


      P.S. а почему Atom? Может, я как-то не так его готовил, но с нужными мне настройками и плагинами он ужасно тормозит вообще везде, за VS Code такого не замечено, хотя оба крутятся на Electron.


  1. n0sfer666
    07.07.2017 12:13

    Не читал все комментарии, так что извиняюсь, если уже было. «Сначала настраиваем рабочее место, а потом объясняем что да как»… Это я к тому, что логичней сначала настроить среду Eclipse, а потом знакомить с hello world и возможностями плюсов


    1. ishfb
      07.07.2017 12:24
      +5

      На эту тему было много дискуссий во время бета-теста курса. И здесь я глубоко убеждён, что неправильно начинать с установки компилятора, Java и Eclipse, ещё не объяснив людям, зачем всё это нужно. Они язык пришли учить, а ты им — сначала добейся софт поставь, а потом мы тебе что-нибудь расскажем.

      Поэтому мы сначала показываем им «Hello, world», показываем основные конструкции языка, а непосредственно перед первым заданием по программированию объясняем, как настроить окружение. В этот момент люди уже знакомы с интерфейсом Eclipse, потому что они видели в видео, как мы с ним работаем.Он выглядит для них знакомым, а значит, у них возникнет меньше проблем при настройке.


  1. saboteur_kiev
    07.07.2017 15:03

    Пишу некоторые курсы, и тоже пришел к этой очевидной мысли, что не нужно учеников считать тупыми, и совершенно не обязательно изучить все операторы досконально, прежде чем из них сделать хелло ворлд.

    Наоборот, оказывается полезно, чтобы ученики сразу могли приступить к практике, посмотреть/написать простые программы, а уже потом узнавали как это все работает под капотом.

    Утрировано:
    Сперва показываем, как машина ездит
    Показываем руль, педали, корпус, салон, четыре колеса и багажник с запаской.
    Рассказываем нюансы о каждой подсистеме.

    Но при этом уже ученик знает, что пятого колеса тут нет и быть не может, потому что он видит как она ездит.


    1. Free_ze
      07.07.2017 15:19
      +1

      Показываем руль, педали, корпус, салон, четыре колеса и багажник с запаской.

      Запаску-то зачем? Это ж и есть пятое колесо, о котором лучше не знать новичку.


      1. saboteur_kiev
        07.07.2017 17:51

        то, что оно пятое, но не используется, а лежит про запас — это важно.
        Чтобы понимали, почему 2 сервера могут быть дешевле чем 1, и почему 3 сервера могут быть дешевле, чем 2.


    1. Neikist
      07.07.2017 18:12

      Эх, а я долго боялся браться за программирование как раз из за того что многие учебники не объясняют азов, а сразу вводят магию типа std::cout, и ожидаешь что дальше тоже придется учить кучу магических слов и символов. Только после прочтения педзольдца что то в голове стукнуло и я понял что магия то оно магия, но вполне понятная и довольно простая, под которой понятно что лежит, а если и непонятно, то разобраться вполне по силам, если конечно прям в детали реализации не вдаваться.


    1. ishfb
      08.07.2017 11:34

      Аналогия с обучением вождению автомобиля очень хорошая. Мы тоже прибегали к ней, когда переделывали курс.


  1. arcman
    08.07.2017 23:58
    -1

    Вопросы для тестирования можно улучшить, например этот:

    int x = 0;
    if (x = 0) {
        cout << "x is zero" << endl;
    }
    

    Указывается, что в коде ошибка и спрашивается что нужно исправить что бы он выводил «x is zero».
    Но очевидно, что он и так это выводит.


    1. arcman
      09.07.2017 00:07
      -2

      Ой, напутал. Результат присваивания трактуется как false, потому что 0. Для любого другого значения ошибка будет приводить к срабатыванию условия.
      Но пример все равно спорный и запутывающий.


    1. arcman
      09.07.2017 15:59
      -1

      Или вот такой:
      «Выберите корректные объявления переменных»:
      — integer x;
      — map<string, double> x;
      — boolean x;
      — vector x;
      — dict<string, int> x;
      — char x;

      С первого взгляда, map и vector вроде бы заданы правильно и в уроках непосредственно перед этим они применялись преподавателем, но без указания заголовочных файлов компилятор их не распознает:

      error: ‘vector’ was not declared in this scope

      Получается, что корректным остается только встроенные тип «char», но похоже это не тот ответ, что ожидали авторы.


  1. ivanych
    10.07.2017 14:52
    +1

    Смотрю второе видео «Обзор типов», пробую использовать vector и получаю ошибку.

    Код:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main() {
    
    	vector<int> nums = {1, 3, 5, 7};
    
    	return 0;
    }
    
    


    Ошибка:

    Building file: ../test1.cpp
    Invoking: GCC C++ Compiler
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"test1.d" -MT"test1.o" -o "test1.o" "../test1.cpp"
    ../test1.cpp: In function ‘int main()’:
    ../test1.cpp:9:32: error: in C++98 ‘nums’ must be initialized by constructor, not by ‘{...}’
      vector<int> nums = {1, 3, 5, 7};
    


    Линукс, Эклипс. Такое ощущение, что у меня используется не тот компилятор, какой-то старый, что ли? Посмотрел видео об установке Eclipse — вроде там ничего не сказано о каких-то настройках компилятора.

    Как быть?


    1. JIghtuse
      10.07.2017 15:18

      Да, с настройкой среды неконсистентны видео. Посмотрите видео про Mac, там девушка показывает, как диалект языка настроить. Просто нужные флаги компилятору не передаются.


      1. ivanych
        10.07.2017 16:04

        Да, теперь заработало, спасибо.


  1. 31415
    10.07.2017 23:05
    -2

    Немножко замечаний. Не по фактическому содержанию курса (я его не смотрел пока), а по подходу.

    Не могу согласиться с тем, что новичкам обучение изначально даётся через IDE. И, к слову, раз уж взяли IDE, то надо было брать написанный на C++ же QT Creator, о чём, прочем, выше написали. Так вот, совершенно странно считать, что обучающийся не справится с командной строкой.
    C++ — это не Javascript и HTML. С++ предполагает ознакомление со сложной системой, напрямую связанной с ОС. Если предполагаемый ученик не справился с командной строкой — зачем ему вообще дальше продвигаться? Более того, на то, чтобы объяснить концепцию командной строки даже тому, кто её до этого видел только в фильмах про хакеров нужно, я думаю, максимум час. Объяснить, что им придётся всё равно с командной строкой работать, что запускается она вот так, туда можно что-то печатать, жать Enter и что-то появится в ответ. Показать, как из проводника ссылку на папку можно перетащить в окно с «терминалом». Всё.
    Концептуально, для новичков, командная строка это маленький чёрный ящик, который «понятно» как работает. А IDE — это приборная панель межгалактического лайнера с тысячей переключателей, которые только отвлекают и создают неуверенность типа «что я нажал, куда всё делось, аа-а-а!». Более того, я считаю, что новичкам первое время полезно набивать весь код руками, без автодополнений, чтобы на уровне рефлекса запомнить базовые конструкции языка.

    В общем — я против IDE, против Eclipse, за командную строку и олдскул.


    1. Free_ze
      10.07.2017 23:24

      надо было брать написанный на C++ же QT Creator

      Какой в этом смысл? Qt настолько же ненативен, насколько и Swing (сами себя рисуют). Qt в курсе не изучают (чтобы брать его интерфейс за образец), а знать, каким именно кодом дёрнули системное API не особо поможет в изучении языка в отрыве от ОС.

      Если предполагаемый ученик не справился с командной строкой — зачем ему вообще дальше продвигаться?

      Если предполагаемый ученик не осиливает самостоятельно Страуструпа, зачем ему вообще C++ изучать на всяких курсах?

      Деньги, знаете ли, сами себя не заработают (=


      1. 31415
        10.07.2017 23:54

        Думаю, что новичку нет никакого дела до того, нативен UI-тулкит или нет. Тем более, что QT-виджеты копируют достаточно близко нативный UI. И вообще я не понял, при чём тут «образец UI»? QT Creator банально быстрее работает, потребляет меньше памяти и обеспечивает 146% потребностей новичка. К тому же вы пропустили главное — я против IDE для начинающих вообще.

        Сравнивать по сложности концепцию командной строки и самостоятельное изучение С++ по Страуструпу — это или странное заблуждение, или неуместный троллинг.


        1. khim
          11.07.2017 01:03
          +2

          Сравнивать по сложности концепцию командной строки и самостоятельное изучение С++ по Страуструпу — это или странное заблуждение, или неуместный троллинг.
          Я боюсь вы не сталкивались в людьми, которые никогда в жизни не работали с командной строкой. Они её боятся панически. И дело тут даже не в том, что это как-то особо сложно или хитро.

          Проблема в том, что человек ожидает, что в ответ на любое его действие от компьютера поступит видимая реакция. Даже если он использует Гугл (почти командная строка) — то на любое его действие следует видимая реакция. Даже если он пишет программу на C++ и запускает её из IDE — он тут же и всегда видит результат.

          А вы предлагаете ему перейти в другой, совершенно альтернативный мир, где ты что-то делаешь, а компьютер — молчит. Ты делаешь ошибку (скажем стираешь не тот файл) — а этого не видно. Страаашно. Безуууумно страшно.

          Концептуально, для новичков, командная строка это маленький чёрный ящик, который «понятно» как работает. А IDE — это приборная панель межгалактического лайнера с тысячей переключателей, которые только отвлекают и создают неуверенность типа «что я нажал, куда всё делось, аа-а-а!».
          Так в прошлом веке было. А в нынешнем — люди могут не иметь никакого опыта работы с компьютером, но смартфон у них в кармане почти наверняка есть. А IDE — это такая же хрень, только побольше. А вот командная строка… нет, это только для истинных «гуру». Отличается сама концепция.


          1. 31415
            11.07.2017 02:07

            Всё может быть, я не педагог ни разу, но…

            Программируя на языке уровня C\C++ невозможно не использовать командную строку. При этом, т.к. основная проблема с ней для «нулей» не понимание (как я написал, понимание можно дать максимум за час), а принятие, это надо сделать как можно раньше. Всё равно ведь придётся. А от того, что через n месяцев вы освоите какие-то конструкции C++, вам принятие легче не дастся. Так что как можно раньше. Никто ведь не говорит, что надо там писать то, что непонятно. Пиши то, что тебе говорят. И будет тебе правильная реакция.

            Я вообще против «сахара» для новичков, как интерфейсного, так и языкового. Чем больше скрыто «за ширмой», тем больший будет шок, когда внезапно, из-за шага влево, всё развалится.

            Если совсем невмоготу, и никак не идёт — возьми JS. Открываешь браузер, жмёшь F12 и программируешь до посинения. Никаких тебе ужасов с указателями, освобождением памяти и командной строкой.


            1. khim
              11.07.2017 03:09
              +1

              Программируя на языке уровня C\C++ невозможно не использовать командную строку.
              Кто вам сказал? Я вполне встречал людей, которые писали на C++ не используя командную строку в принципе. Никогда и ни для чего. Да что там далеко ходить — используя Code Warrior для MacOS (ныне переименованную в MacOS Classic) под другом было просто нельзя!

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

              Обучение работе с командной строкой — это отдельный и, в общем, далеко не всегда необходимый курс.

              Я вообще против «сахара» для новичков, как интерфейсного, так и языкового. Чем больше скрыто «за ширмой», тем больший будет шок, когда внезапно, из-за шага влево, всё развалится.
              Ага. Давайте начнём обучение с машинных кодов. А что? Для ARM'а — они просты и достаточно понятны. И прямо можно загрузчик в них писать. А когда научитесь плавать — в бассейн нальют воды.

              Ну не работает это. Если ваша цель — «отшить» 99% потенциальных кандидатов и оставить только самых «стойких духом» — то да, этот метод годится. Вот только не факт, что останутся самые способные, а не самые упорные…


              1. 31415
                11.07.2017 03:23

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


        1. Free_ze
          11.07.2017 07:46

          Все к тому, что ваше «надо было брать Qt Creator» — это навязывание вкусовщины, объективной, практической пользы в этом нет. Аналогично и про IDE, как тут уже неоднократно писали, что в этом есть идея — не пугать новичка, но, видимо, остальные комментарии вы не читали.

          И, да, QT — это QuickTime.


          1. 31415
            11.07.2017 12:54

            Да тут всё — вкусовщина, я всего лишь высказываю своё мнение. В вопросах обучения людей не может быть без вкусовщины, мы же недетерминированы. Но я вам ещё раз пишу (вы, такое ощущение, пропускаете эти слова мимо ушей): Qt Creator быстрее запускается, быстрее работает и потребляет меньше памяти. Это совершенно объективно. Eclipse вообще, из большой тройки Java-based IDE, самый тормозной.

            Про IDE спорить не буду, наспорился. Считаю что наоборот — IDE будет больше пугать, чем не-IDE. Ваше право считать как хотите.

            За Qt спасибо, всё время путаю.


            1. khim
              11.07.2017 13:44
              +1

              В вопросах обучения людей не может быть без вкусовщины, мы же недетерминированы.
              Один конкретный человек — недетерменирован. Возьмите десяток — и появятся тендендции. Возьмите тысячу — и случайностей будет очень мало.

              Про IDE спорить не буду, наспорился. Считаю что наоборот — IDE будет больше пугать, чем не-IDE. Ваше право считать как хотите.
              Причём тут моё или ваше право? Я застал времена, когда выбор «преподавать с IDE или без» был определён не хотелками авторов курса, а возможностями железа. Ну не было IDE на древних HP-UX'ах! А на PC — была. И на этих самых HP-UX'ах хорошо если к третьему занятию все студенты умудрялись запустить «Hello, World» (а на PC к этому времени уже довольно сложные программы писали). Просто потому что преподаватель был один и он не мог всю пару стоять «за душой» у каждого студента и обяснять — где тот накосячил. А без помощи преподавателя половина группы не могла сделать вообще ничего.

              Да что там говорить — когда Turbo Pascal с приличной IDE вышел продажи Microsoft Pascal упали настолько что Microsoft наплевал на совместимость и выпустил Quick Pascal. И Microsoft C мало кто пользовался во времена, когда Turbo C (а позже Turbo C++) имела приличную IDE, а Microsoft C — исповедовал «old school» с командной строкой.

              Это всё — обьективные вещи. Не знаю уж какая выборка вам нужна, но поверьте мне — в 80е годы все ВУЗы перешли на IDE при первой возможность (вплоть до того, что под СМки были специальные обучающие IDE написаны с несколько упрощённым C) не оттого, что освоение командной строки — было мелкой проблемой, через которую все студенты легко переступали.

              Командная строка всегда была проблемой для «непосвящённых».


  1. nefone
    10.07.2017 23:05

    Вот бы такой курс по PHP или C# я бы с удовольствием освоил бы.


  1. mammuthus
    13.07.2017 12:21

    Выбор одной из худших площадок (coursera) обоснован лишь размером ее аудитории?


  1. antoshkka
    14.07.2017 16:52

    Приятно видеть рост популярности C++ в России. Сначала РГ21, теперь еще и курсы!


  1. Hokum
    14.07.2017 19:11

    Спасибо за курс! Мне понравилось, но в финальном задании все таки дайте указания относительно поведения при отсутсвии ожидаемых аругментов у команд на входе. Это немного подпортило впечатление от курса.