company_banner

Как Яндекс создавал курс по C++, или Почему нам всё пришлось переписать

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



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

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


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

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

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

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

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

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

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

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


    Пока получился первый курс. Предполагается, что в начале курса слушатель может увидеть язык С++ впервые в жизни (но при этом стоит представлять, что такое программирование в целом, и не бояться слов «переменная», «цикл», «список»), а в конце будет способен написать небольшое 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++, то наш курс для тебя».
    Яндекс
    436.21
    Как мы делаем Яндекс
    Share post

    Similar posts

    Comments 145

      +3
      Когда будут выложены следующие части курса?
        +1
        Точные сроки назвать сложно, мы прямо сейчас работаем над созданием более старших курсов.
          +1
          Сообщите ориентировочные — в рамках квартала и года ориентировочно. А то может еще пару лет ждать.
            0
            Ну не пару лет точно. Есть надежда, что осенью будут второй и третий курсы. Ну а вся специализация — конец зимы-начало весны 2018. Но это предварительный план.
              0

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

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

                Прошёл почти год, но специализации нет пока на курсере… Только два первых курса, заглохло (надеюсь, нет)?
                  0
                  Нет, не заглохло. Работа ведётся во всю. Просто занимает больше времени, чем нам хотелось бы. Сейчас мы готовим к бета-тесту третий курс.
                    0
                    Рад слышать
                      0
                      Привет! А есть какой-нибудь прогресс по третьему курсу? А то самое интересное и нужное там :)
                        0
                        Он готов на 99,99% :)
                          0
                          Отлично! То есть, есть шанс, что через недельку-две, все будет доступно?
              +14
              Курс высшей математики за 4 недели:

              Неделя 1

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

              Неделя 2

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

              Неделя 3

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

              Неделя 4

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

              Неделя 5

              Доклад на международной математической конференции
              +1
              Почему в качестве среды разработки был выбран Eclipse, а не Visual Studio?
                0

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

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

                  Руководство по установке и настройке Eclipse под Windows, Linux и MacOS вы найдёте во в
                    +11
                    Кто скажет, что Eclipse лучше QtCreator — пусть первый бросит в меня камень. Доступность по платформам та же. Плюс у QtCreator куда большая направленность на получение практически полезного результата.
                      0
                      А можно бросить в Вас лайк? =)
                        0

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

                        0
                        CLion? Или им никто не пользуется?
                          0
                          Он платный.
                            +1
                            $199/год
                              0

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

                                0
                                Скан или фото студенсческого проверяют действительно быстро, мне и знакомому ответили на следующий день после заявки.
                                  0
                                  И для Степиковцев, для учебных целей. Приятно удивился, когда прилетел ключ от IDE JetBrains со словами: «Мы заметили, что вы решили сложную задачу...», при необходимости лицензия продлевается.
                                    0

                                    Да, Stepik просто молодцы, что взаимодействуют с JetBrains. Этот ключ ещё и не ограничен по количеству IDE и компьютеров.

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

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

                                0
                                почему не Geany?
                                0

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

                                0

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

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

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

                                  Так вот, в начальных курсах всего этого безобразия вы не найдёте. И это заслуга создателей курса
                                    –3
                                    Чем new / delete не угодили?
                                      +3
                                      Тем что вас «с места в карьер» тыкают в очень сложное понятие: «ручное управление памятью». А использует высокоуровневые структуры данных (std::vector, std::map и прочие) вы можете писать довольно-таки сложные программы об этом не думая вообще.

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

                                      В современном курсе я бы не стал вдаваться даже в то, что "строка" — это не std::string. Хватит того, что "строка"s — это std::string, а о всём остальном вы узнаеете потом!
                                        –5
                                        Бьярн Страуструп, создатель С++ открывает книгу, видит там (помимо прочего) конструкцию new/delete из языка С++ и говорит, что он не хочет пользоваться таким языком.

                                        Это звучит как нонсенс. Господа минусующие, вот об этом мой комментарий сверху!
                                          +4
                                          Он видит их на первой неделе — в этом проблема. Это как если бы вы открыли книгу по Windows и обнаружили не описания того, как тыкать мышкой, а рассказ про защищённый режим и написание драйверов. Они-то основа, весь Windows «надстроен» сверху, но… как часто вы правите что-то в ядре Windows?
                                            –6
                                            Бьярн Страуструп их на первой неделе видит? Разговор о нём.
                                              +1
                                              Вы слышали что нибудь об эмпатии? Я думаю Страуструп также как и почти любой человек ей не обделен.
                                            0
                                            Он предпочел бы посмотреть на шаблонный std::shared_ptr<T>?
                                              0

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

                                                0
                                                Не знаю, но полагаю странной его (предполагаемую) неприязнь к core feature языка, который он сам создал.
                                                  0
                                                  Из принципа «Не платить за то, что не используется» отнюдь не вытекает необходимость не использовать то за что нужно больше платить с т.з. производительности. С другой стороны как раз в случае использования ручного управления памятью — приходится платить увеличенной сложностью.
                                                    –2
                                                    Сложность для изучения или использования в крупном развесистом проекте с исключениями? Сырые указатели в изучении проще, очевидно.
                                            +3
                                            Ручной memory management — источник бесчисленных ошибок. Страуструп рекомендует везде, где возможно, создавать объекты на стеке, где нужна куча — оборачивать в умные указатели.
                                              0
                                              Чем указатели не угодили?
                                                +1
                                                По идее, указатели — это наследие С. Их можно заменить ссылками. New / delete связаны с core features языка и замене не подлежат.

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

                                                  В современном C++ считается «дурным тоном» использовать new/delete. При использовании «умных» указателей явно delete вызывать не нужно, а вместо new — используются аллокаторы.
                                              0
                                              При всем уважении к основателю Страуструпу, лучший практик далеко не всегда является лучшим преподавателем. Я как-то пробовал изучать язык по его собственной книге. Вот не пошло, и все тут. И единственная книга, по которой я дошел до некоторого прогресса — это был «Базовый курс C++» Шилдса.
                                              Хотя, конечно, указатели на первой неделе — это и правда жестоко.
                                              +3
                                              Илья, спасибо вашей команде за курс, мне очень понравился. Для совсем новичков будет сложноват (хотя на форумах пытаемся и таким помогать), но в остальном отличный. Много задач (с последующими эталонными решениями), последние стандарты, неплохой темп.
                                              Жду следущих курсов. Как понимаю, они тоже сначала через бета-версию должны пройти? Записался в бета-тестеры на Coursera, до текущей недели так и нету следущих частей.
                                              Насчёт цены в 1600 — кажется, Coursera снова решила всё переломать ради монетизации и теперь остались только подписки на месяц, ~3000. Надеюсь, все ещё можно как-то взять только один курс. Сам не видел, брал по старой цене.
                                                0
                                                Нет, 1 курс нельзя взять.
                                                Эта опция осталась только для одиночных курсов (не входящих в специализации) и для тех специализаций, где вы успели купить одиночный курс по старым правилам.
                                                99% Новых курсов выходят по модели подписки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                Так что… сложно это всё. Одна из самых сложных и запутанных тем в C++, на самом деле.
                                                                0
                                                                Ну хз, что там рассусоливать с выделением памяти для helloworld?
                                                                Рассказать про локальные и статические переменные, которыми управляет компилятор и «ничего делать не надо».
                                                                Рассказать про new/new[] и delete/delete[] и про пару типичных ошибок/утечек.
                                                                Всё.
                                                                  +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++ и с локальными и со статическими переменными таки «чего делать надо». Про динамические переменные я вообще молчу…
                                                                    0

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


                                                                     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();
                                                                      0
                                                                      Всё правильно, эта строчка слегка противоречит стандарту. Вы вероятно компилировали чем-то нормальным, а не MSVC :) Хотя и MSVC может ошибку выдать, если все нестандартные расширения языка отключить.
                                                                        0
                                                                        Эта строка не противоречит стандарту. Если вы обратите внимание, то у человека выше сдиагностировалась не ошибка, а всего лишь предупреждение — которое можно и отключить. А вот работать такой код не должен — это уже по стандарту…
                                                                          0

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


                                                                           1 error generated.

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

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

                                                        PS
                                                        Не холивара ради.
                                                          +1
                                                          Согласен. Выше тоже задали этот вопрос и сравнили с VS, Qt.
                                                          Сам программирую на Java, пробовал Idea, NetBeans, Android Studio. С ужасом вспоминаю, как когда-то открывал Eclipse.
                                                          –5
                                                          Посмотрел программу, у меня плохие новости для вас, но и ваш второй курс — *****. Крч, ничего не поменялось, кто хочет знать кресты Страус, Мейерс, Александреску и тонна кода, вот твои друзья.
                                                            0
                                                            Можно ли рассчитывать на появление учебного курса «с нуля»? Например, чтобы школьник начал изучать программирование, ничего об этом заранее не зная, и поступательно пришел к описанному в статье курсу?
                                                            0

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

                                                              –1
                                                              • Есть по машинному обучению (там поверхностно затрагивается python)
                                                              • На уровне бета-теста фронт-энд (html+css+js), готово уже 3 курса (впрочем, моё личное мнение как бета тестера не в пользу этой специализации)
                                                              • Ходят слухи про python
                                                              • Есть python от Яндекса и ВШЭ, но мне он показался довольно сумбурным
                                                            • UFO just landed and posted this here
                                                                +1
                                                                Финансовая помощь спасёт отцов русской демократии (но придётся написать небольшое обоснование почему вам её должны и подождать 2 недели).
                                                                А если объективно, то разве вам не кажется, что разработка курса это в первую очередь история про то как попиариться для Яндекса и как заработать для авторов и МФТИ?

                                                                P.S. если что, я не автор. =)
                                                                +1
                                                                Огромное спасибо! Очень жду следующих курсов (честно, в душе надеялся увидеть уже доступными «пояса» по-сложнее).
                                                                Кстати, а если серьезно стоит конкретная задача за 21 день хоть как-то подтянуться до не джуна, но смахивающего на него, то как быть? Вот этот курс — основы (остальные его части, к сожалению, еще не доступны). А что почитать (по-практиковать) дальше? Чтобы не опасаться, что там «С с классами» и не потратить драгоценное время, а просто взять и «ботать». Еще раз спасибо!
                                                                  +1
                                                                  Покурить «Эффективное использование С++» Мейерса, обе части. Там нет всяких новомодных свистоперделок, но смысл не в этом. Эти книги отлично вкрячивают мозги в правильную сторону — вы начнете понимать, ПОЧЕМУ язык и его библиотека сделаны так, а не иначе. И на порядки снизите количество ошибок.
                                                                    0
                                                                    Для понимания, почему язык был спроектирован так, а не иначе, ещё один очень полезный источник — «Дизайн и эволюция C++» Страуструпа.
                                                                  +1
                                                                  А почему не на Stepik'е? Там уже есть более старый Яндекс-курс по C++ — можно было бы и этот
                                                                    –4
                                                                    Не холивара ради, но зачем вообще добавили в курс работу с IDE Eclipse?
                                                                    Новичкам лучше начинать писать код в продвинутом редактора или полностью работать с компилятором из командной строки.
                                                                      +3
                                                                      Мы решили, что новичкам как раз лучше использовать IDE, чтобы сконцентрироваться на изучении языка, а вопросы, связанные с компиляцией, отладкой и запуском кода предоставить IDE, чтобы это просто работало из коробки.

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

                                                                      Насколько я понимаю, основная аудитория MOOC-курсов — это работающие люди. То есть у них есть 5-6 часов в неделю на изучение курсов. Чтобы они не бросили обучение, нагрузку им надо давать очень дозированно. Поэтому мы стараемся во всех лекциях и заданиях концентрироваться на какой-то одной проблеме. Чтобы слушателей не придавило объёмом информации.
                                                                      +1
                                                                      Если с нуля, то я не за какие-либо курсы, я за книги… Книга «C++. Базовый курс» Герберт Шилдт — все понятно, поэтапно, простым языком, но о самом важном, дает понятие ООП, типах, циклах, конструкторах, списках и прочее.
                                                                        +1

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

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

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

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


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

                                                                          0
                                                                          Книги Герберта Шилдта много и заслуженно критиковали профессионалы за многочисленные ошибки. Сам, помню, тоже школьником учил язык по его книге без особого успеха (темплейты он объяснял как-то странно).
                                                                          ИМХО, если с нуля учить ООП, то лучше не С++, а что-нибудь более защищенное, например, Java или C#, а когда человек готов к C++, то читать сразу Страуструпа. Имхо, это едва ли не лучшая книга по программированию вообще, а не только по C++.
                                                                            +1
                                                                            Страуструпа за сбивчивость изложения тоже не критиковал только ленивый. Образцовые технические книги, кмк, у Рихтера.
                                                                              –1
                                                                              Кто, например? Шилдт просто притча во языцех, отзывы о нем даже в википедию вошли =)
                                                                              Рихтера не читал, увы. Страуструп просто уровнем выше, его не стоит читать как самоучитель по C++ за X дней, иначе действительно можно заблудиться, наверное.
                                                                                0
                                                                                Как вы говорите: «Притча во языцех».
                                                                                Вот, выходит, учебники он не пишет. Однако, итеративность изложения (это очевидно даже из оглавления) в том же «Язык программирования C++» показывает, что и справочник из нее не самый лучший.
                                                                                  0
                                                                                  Да, наверное, как справочник тоже не пробовал. Зато точно замечательный источник вдохновения и того, что Хэмминг называл обучением стилю.
                                                                                    0
                                                                                    С этим согласен, для C++ разработчика эта книжка — мастрид, хотя новичков отгонять — тоже хорошо подойдет (=
                                                                                    Как раз отлично «латает дыры» после Шилдта, который в то же время чуть более «пологий», кмк. (по крайней мере могу говорить по поводу его «справочника», который мне отлично зашел как учебник в свое время)

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

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

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

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

                                                                              +1

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

                                                                                –3

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

                                                                                  +2

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

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

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

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

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

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

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


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

                                                                                    +1

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


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

                                                                                    –5
                                                                                    Зачем всё это нужно когда есть Страуструп? А делать выводы по словам бездарной старухи которая писать не умеет от слова совсем, это конечно круто.
                                                                                      0
                                                                                      Я знаю чистый C хорошо. И хочу познакомиться с современным C++. Что лучше почитать?
                                                                                        0

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

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

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

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

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

                                                                                          –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.
                                                                                            +3

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


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

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

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

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

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

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

                                                                                                Запаску-то зачем? Это ж и есть пятое колесо, о котором лучше не знать новичку.
                                                                                                  0
                                                                                                  то, что оно пятое, но не используется, а лежит про запас — это важно.
                                                                                                  Чтобы понимали, почему 2 сервера могут быть дешевле чем 1, и почему 3 сервера могут быть дешевле, чем 2.
                                                                                                  0
                                                                                                  Эх, а я долго боялся браться за программирование как раз из за того что многие учебники не объясняют азов, а сразу вводят магию типа std::cout, и ожидаешь что дальше тоже придется учить кучу магических слов и символов. Только после прочтения педзольдца что то в голове стукнуло и я понял что магия то оно магия, но вполне понятная и довольно простая, под которой понятно что лежит, а если и непонятно, то разобраться вполне по силам, если конечно прям в детали реализации не вдаваться.
                                                                                                    0
                                                                                                    Аналогия с обучением вождению автомобиля очень хорошая. Мы тоже прибегали к ней, когда переделывали курс.
                                                                                                    –1
                                                                                                    Вопросы для тестирования можно улучшить, например этот:
                                                                                                    int x = 0;
                                                                                                    if (x = 0) {
                                                                                                        cout << "x is zero" << endl;
                                                                                                    }
                                                                                                    

                                                                                                    Указывается, что в коде ошибка и спрашивается что нужно исправить что бы он выводил «x is zero».
                                                                                                    Но очевидно, что он и так это выводит.
                                                                                                      –2
                                                                                                      Ой, напутал. Результат присваивания трактуется как false, потому что 0. Для любого другого значения ошибка будет приводить к срабатыванию условия.
                                                                                                      Но пример все равно спорный и запутывающий.
                                                                                                        –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
                                                                                                        Смотрю второе видео «Обзор типов», пробую использовать 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 — вроде там ничего не сказано о каких-то настройках компилятора.

                                                                                                        Как быть?
                                                                                                          0

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

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

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

                                                                                                          В общем — я против IDE, против Eclipse, за командную строку и олдскул.
                                                                                                            0
                                                                                                            надо было брать написанный на C++ же QT Creator

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                                                                                                    Ну не работает это. Если ваша цель — «отшить» 99% потенциальных кандидатов и оставить только самых «стойких духом» — то да, этот метод годится. Вот только не факт, что останутся самые способные, а не самые упорные…
                                                                                                                      0
                                                                                                                      Ну ОК. Признаю, что я, возможно, слишком высокого мнения о среднем ученике. Надо будет на кошках потренироваться, посмотреть — неужели это так сложно? При этом, чтобы делать какие-то выводы, нужна большая выборка и сложный тест. В общем, я останусь при своём, хотя допускаю, что, возможно, не прав. Посмотрим.
                                                                                                                  0
                                                                                                                  Все к тому, что ваше «надо было брать Qt Creator» — это навязывание вкусовщины, объективной, практической пользы в этом нет. Аналогично и про IDE, как тут уже неоднократно писали, что в этом есть идея — не пугать новичка, но, видимо, остальные комментарии вы не читали.

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

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

                                                                                                                    За Qt спасибо, всё время путаю.
                                                                                                                      +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) не оттого, что освоение командной строки — было мелкой проблемой, через которую все студенты легко переступали.

                                                                                                                      Командная строка всегда была проблемой для «непосвящённых».
                                                                                                              0
                                                                                                              Вот бы такой курс по PHP или C# я бы с удовольствием освоил бы.
                                                                                                                0
                                                                                                                Выбор одной из худших площадок (coursera) обоснован лишь размером ее аудитории?
                                                                                                                  0
                                                                                                                  Приятно видеть рост популярности C++ в России. Сначала РГ21, теперь еще и курсы!
                                                                                                                    0

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

                                                                                                                      0
                                                                                                                      Возник такой вопрос. Написано, что курс стоит 2 773 рублей в месяц. Но вначале дается бесплатный период в 7 дней. Я закончил курс меньше, чем за 7 дней и пробный период еще идет. Сертификат на coursera получен. Но в «Моих покупках» подписка со словами, что по прошествию 7 дней начнут снимать деньги остается. Мне её нужно отменить? Тогда не пропадет ли сертификат?

                                                                                                                      И был в опросах вопрос, что можно как-то получить бумажную версию версию сертификата гос. образца за дополнительные деньги. Но на самом сайте нигде информацию не нашел. Или это касается только того, времени, когда курс будет расширен lj специализации?
                                                                                                                        +1

                                                                                                                        Я отменил подписку и у меня сертификат остался. О бумажной версии ничего не знаю.

                                                                                                                        0
                                                                                                                        ishfb, скажите, пожалуйста, известно ли когда выйдет «чёрный пояс»?
                                                                                                                          0
                                                                                                                          Известно. В понедельник, 1 июля :)
                                                                                                                            0

                                                                                                                            Невозможно передать словами насколько это замечательная новость :-) Спасибо!

                                                                                                                        Only users with full accounts can post comments. Log in, please.