Обучение на курсе CS50x

    Добрый день.

    Прежде чем записаться на курс Harvard CS50x я сначала пролистал поиск, выискивая отзывы о нём. С удивлением обнаружил, что результатов не так уж и много. Надеюсь эта краткая информация поможет другим страждущим понять, надо ли им это.

    Итак, что же нам говорит сайт edX об этом курсе:
    CS50x is Harvard College's introduction to the intellectual enterprises of computer science and the art of programming for majors and non-majors alike, with or without prior programming experience. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. As of Fall 2012, the on-campus version of CS50x is Harvard's largest course.

    В переводе на русский это значит следующее: на курс можно записаться всем желающим, даже если у вас за спиной 3 класса церковно-приходской школы. В процессе изучения будут использованы C, PHP, JS, SQL, CSS и HTML. В отличие от курса MIT 6.00X, где требуется High School algebra, при поступлении на CS50x никаких требований к математике не выдвигается, что порадовало, так как с высшим образованием у меня отношения не сложились.

    Пара слов о преподавателе курса, Дэвиде Малане


    Поскольку, как уже писал выше, в институт я ходил 3 раза в жизни, записавшись на курс я ожидал что курс будет вести потрёпаный жизнью мужчина с залысиной, который будет долго объяснять оператор printf(), а потом сразу — как построить матрицу третьего порядка. Как бы не так. Дэвид — достаточно молодой лектор, при этом энергии с которой он ведёт курс хватит чтобы зарядить севший ноутбук. В качестве примера — прямо на первой лекции он показал разницу между линейным и логарифмическим временем выполнения функции, сначала посчитав 10 студентов по головам, сказав, «нет, это скучно», а потом попросил студентов в зале встать, разбиться на пары, и садиться каждому второму называя соседу своё число, пока не остался один с итоговой суммой всех студентов в аудитории. Я достаточно сумбурно объяснил, поэтому на 17 минуте видео можно увидеть, как это выглядело. Ну и алгоритм поиска носков прямо в аудитории, конечно, тоже заставил посмеяться.
    Аналогичным образом ведутся остальные лекции. Скучно? Нет. Интересно? Да!

    Типичная неделя в CS50


    Обычно неделя состоит из 4 частей:
    1. Видеолекция. Она разбита на 2 части (понедельник и среда, как её ведут в Гарварде), но нам она достаётся в рамках одной недели. Каждую лекцию можно скачать в 4-х разрешениях(вплоть до 1080p), есть субтитры на английском и русском(машинный перевод из google translate). Так же для каждой лекции выложены использующиеся исходники, слайды, и дополнительные файлы.
    2. Problem Set (так же называемый p-set). Это и есть наше задание на неделю. Оно делится на 2 части — Standard edition и Hacker edition. Standard edition вы должны решить в обязательном порядке, и отправить на сервер cs50 для получения оценки. Hacker edition решается для собственного удовольствия, и отправлять его не надо.
    3. Sections. Это видеозапись из комнаты, где собираются студенты чтобы понять какие-то тонкости, или, если у них возникли проблемы, помощники Дэвида объясняют алгоритм решения проблемы.
    4. Shorts. Короткие видеоролики объясняющие одну конкретную тему. Например, что такое массивы, как работает шифр Цезаря, пузырьковая сортировка, и т.д. При возникновении проблем с алгоритмами советую смотреть именно эту часть.

    P-sets


    Поскольку курс начался только в октябре, в эфир выпущено всего 4 недели, хотя остальные есть на торрентах, и их можно спокойно скачать. Однако задания будут доступны только в момент выкладывания видео на сайте edX.
    Ниже я напишу какие задания вы решите своими собственными головой и руками:

    Неделя 0 (Темы — биты, двоичное исчисление, ASCII, алгоритмы, бинарные выражения, условия, циклы, переменные):
    • SE: Написать приложение с помощью Scratch
    • HE: То же самое, но с помощью BYOB
    (Честно говоря, это задание самое нелепое, т.к. Scratch и BYOB сильно ограничены в функционале, и ничего хорошего из этого не выходит).

    Неделя 1 (Темы — C, исходный код, компиляторы, объектный код, функции, комментарии, стандартный вывод, арифметические операции, переменные, типы, приведение типов, библиотеки, условия, циклы):
    • SE: Написать Hello World.
      Написать конвертацию температуры из градусов по Цельсию в градусы по Фаренгейту
      Написать программу, которая строит лесенку марио с выравниванием по правой части
      Написать минимальное количество монет, с помощью которых можно дать сдачу (69 центов — это 25+25+10+5+1+1+1+1 = 8 монет)
    • HE: Подсчёт контрольной суммы пластиковых карт.(проверил на своих картах — работает, блин!)
      Лесенка из Марио, но в обе стороны


    Неделя 2 (Темы — функции, глобальные переменные, параметры, возвращаемые значения, стэк, массивы, строки, аргументы командной строки, криптография):
    • SE: Реализовать шифр Цезаря
      Реализовать шифр Виженера
    • HE: Написать взломщик DES-паролей (по словарю и перебором)


    Неделя 3 (Темы — линейный поиск, бинарный поиск, пузырьковая сортировка, сортировка выбором, сортировка слиянием, асимптотическая нотация):
    • SE: Доделать реализацию игры «Балда», которую ленивые CS50-вцы не доделали до конца. А именно, отображение символов на экране, поиск слова в словаре, переворачивание матрицы букв на 90 градусов
    • HE: то же что и SE, но дополнительно надо реализовать подсказки, и подсчёт очков ведётся на основе «стоимости» букв


    Неделя 4 (Темы — рекурсия, отладка, ввод/вывод в файлы, структуры, указатели, выделение памяти, «куча»(heap)):
    • Заданий нет


    Остальное


    Текущий курс идёт с 15 октября по 15 апреля. Всего будет 8 pset'ов, 2 экзамена, и 1 проект, который вы должны будете сделать самостоятельно, или с кем-нибудь вместе. Записаться на курс нужно прямо сейчас можно в любое время, главное выполнить все задания до 15 апреля. В среднем на одну неделю уходит от 4 до 12 часов, включая просмотр видео. Конечно, если вы, как и я, не любите пользоваться gdb, и вместо этого используете printf() — время может значительно вырасти.

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

    Comments 26

      0
      Скажите, а русские субтитры качества машинного перевода или же ими занимался переводчик?
        0
        К сожалению, машинный, сейчас укажу это в топике.
        Но в целом, технического знания английского будет достаточно чтобы понять о чём идёт речь, благо, большинство текста сопровождается слайдами или чем-то подобным.
        Я первые 2 недели смотрел на скорости 0.75, и с переводчиком в соседнем окне. Сейчас втянулся, и перевожу только особо заковыристые места, остальное само собой понятно становится.
          +1
          Да, я вас прекрасно понимаю, сам прохожу параллельный MITx: 6.00x Introduction to Computer Science and Programming, в середине курса понял, что нормально воспринимаю на слух, отключил субтитры и увеличил немного скорость воспроизведения. Подобные курсы очень хорошо прокачивают восприятие иностранной речи.
            0
            О! И как вам MIT? Много матана? Какие примерно задачи решаете? Как лектор?
            Просто я видел отзывы, что, мол, CS50 — в основном на практику упор, а 6.00x — на теорию. Думаю, стоит ли проходить его после завершения CS50.
              +1
              Лично я засыпал от Эрика Гримсона
                +1
                Лекторов оказалось несколько, матана совсем немного, т.к. в условиях была разве что школьная алгебра.
                На третьей неделе появились рекурсии
                На четвертой прошли сложность алгоритмов
                На пятой виды сортировок
                На шестой ООП.
                На седьмой вывод графиков и описание вероятностей

                В целом нравится, мало воды, хорошая подача. Т.к. для меня в основном это все новые знания, то мне не с чем сравнить.
                  0
                  Сам прохожу курс 6.00x. Если честно, в начале матана вообще нет или немного. Но вот сейчас была тема связанная с вероятностями, так там вообще с точки зрения программирования мало. Задачки все были на подсчёт вероятностей. Но на самом деле, я хоть и забыл много, но быстро вспомнил, благо по тем же самым вероятностям, на khanacademy изумительные лекции. Параллельно слушаю их и всё ок. Вообще курс 6.00x очень такой обширный, но несильно глубокий, хотя я сам стараюсь что-то поглубже посмотреть. А прочитав Ваш пост захотелось и CS50x попробовать. Практика тоже интересно.
                    +1
                    Вот меня больше всего практика и подкупила ) Задачи реально интересные, один брутфорсер чего стоил )
                    Ну и лектор скучать не даёт.
                      0
                      Единственное, что мне не нравится в edX то, что курс начался и всё… позже уже в него зайти можно только, как я понимаю, проходить, но оцениваться не будет или будет, но сертификат не получить. Так бы я бы может сейчас и Ваш бы курс начал. Хотя думаю что в след.раз взять: CS188.1x: Artificial Intelligence или CS169.1x: Software as a Service
                        +1
                        Почему? Всё будет оцениваться как обычно. Вот цитата с edX:
                        Students who earn a passing grade on 8 problem sets (programming assignments — 15-20 hours each), 2 quizzes, and a final project will get an honor code certificate from HarvardX. Students may take CS50x at their own pace, starting anytime after October 15, 2012 and finishing anytime before April 15, 2013.

                        А вообще да, оказалось что онлайн-курсы отличная вещь, уже присматриваю себе на весну что-нибудь. Пока склоняюсь к www.coursera.org/course/interactivepython
                          0
                          хм… спасибо Вам. Я посмотрю. Просто в 6.00x у меня для каждого Problem Set, Midterm and Final exam есть конкретная Due to дата. Видимо я неправильно что-то прочитал. Посмотрю вечером правила еще раз.
              0
              Уже сам нашел, перевод машинный. Так что лучше смотреть в оригинале.
              32
              00:01:35,970 --> 00:01:38,730
              А так я вроде голубя в один уик-энд, налил через

              33
              00:01:38,730 --> 00:01:41,460
              печатной графике, и перенес его в компьютерной программе.

              34
              00:01:41,460 --> 00:01:43,790
              В то время, компьютерная программа случилось быть написано

              35
              00:01:43,790 --> 00:01:47,110
              в C. И вы на самом деле бежал, введя Shuttle Мальчик на

              36
              00:01:47,110 --> 00:01:48,600
              мигать подскажут, как мы делали до сих пор.
                +1
                Угу. Хотя Дэвид и просил студентов, которые знают несколько языков, переводить субтитры, видимо никто не откликнулся.
                Английский там не очень сложный, так что проблем не должно быть.
              0
              а расскажите пожалуйста подробнее про задания,
              в каком виде должно быть решение? как проверяется и куда и по каким протоколам отправляется? какие языки и компиляторы необходимо использовать? какие общие требования?
              на примере первой недели — написать «привет мир»?
                +2
                Пока что идут лекции по C, соответственно, использовать надо его. У курса есть виртуальная машина(образ VirtualBox), которую вы скачиваете и запускаете. Внутри виртуалки — обычный CentOS с подключенным дополнительным репозитарием. Кстати, основы линукса (ls, rm и т.д.) объясняют прямо в курсе, на второй неделе (week 1, точнее, поскольку считают с нуля).
                Вы пишете код, к примеру,
                #include <stdio.h>
                 
                int main(void){
                    printf("Hello, bastards!n");
                 
                   return 0;
                }


                и перед отправкой проверяете его командой check50 (для этого и нужен подключенный репозитарий)
                Т.е. проверка выглядит как: check50 2012/pset1/hello hello.c
                код hello.c отправляется на сервера гарварда, и возвращается с ошибкой, т.к. ожидалось что вы напишете «Hello World» а не «Hello, bastards».
                Вы исправляете ошибки, отправляете ещё раз (количество отправок не ограничивается), и когда робот скажет что всё в порядке, начинаете делать следующее задание. Все задания проверяются по своим критериям, они для каждого кода разные. Как только выполнили все задания, делаете submit50 /2012/pset1 /path/to/pset1 где лежат ваши исходники для pset1.
                Вот то, что вы отправили через submit50 и оценивается живыми людьми. После отправки вам дадут ссылку, где вы сможете комментировать код, или объяснить спорные строки и т.д.
                Компилятор используется clang, хотя в общем то, с gcc всё это тоже прекрасно собирается, благо код там не мегабайтами исчисляется.
                Конечно, если вы будете мухлевать и просто будете возвращать ожидаемую строку, вместо реальной работы(к примеру, не будете по настоящему шифровать, а просто сделаете что-то типа if input_string=«Hello» then return «crypted» — вас пожурят.
                И ещё — почти каждую лекцию упоминается о т.н. честном программировании. некоторые умудряются на odesk скидывать задания, чтобы за них решили, и вылетают с курса. Правда, может это только к очникам относится, но проверять желания нет :)
                  +1
                  Уточню, check50 не анализирует исходный код — он его просто компилирует, и проверяет на входных значениях, работает или нет. Внутри кода можете делать всё что угодно
                    +1
                    Привет собрату по cs50x.

                    Вот то, что вы отправили через submit50 и оценивается живыми людьми.

                    Если честно, то есть сомнения, что работы виртуальных студентов оценивают люди.
                      0
                      Почему? Ну, может, код не анализируют на предмет оптимальности, но хотя бы смотрят, чтобы вы printf() не воткнули вместо нормальной работы кода.
                      Баллы точно выставляются людьми, я пока не пнул, pset1 так и висел непроверенным.
                        0
                        я вот тоже записался и начал проходить, решил 3 pset'a, и отсюда вопрос, как долго они анализируют и выставляют баллы после сабмита? и в догонку: где посмотреть сколько максимально баллов за каждое задание?
                          0
                          Косвенно узнать максимальное количество баллов можно во вкладке Gradebook (http://apps.cs50.edx.org/gradebook) каждая строка из задания — это 1 балл.

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

                            То есть если в единственной строке pset0 стоит один балл — значит зачтено?
                              0
                              Да, всё верно.
                                0
                                Спасибо.
                                Быстро они как-то проверили, за сутки.
                                  0
                                  Везёт ) У меня pset3 до сих пор не проверен
                                0
                                насколько я понял, pset-0 считается формальным и этот балл появляется сразуже после заполнения анкеты.
                                а вот следующие псеты проверяют действительно достаточно долго. я решил за пару-тройку дней сразу pset-1 и pset-2, у меня проверяли их чуть больше недели, и оценки за оба появились одновременно.
                                похоже действительно люди проверяют а не машины, хотя никаких комментариев и вопросов не возникло и не появилось.
                    0
                    Этот курс выходит на русском: Легендарный Гарвардский курс CS50 на русском!

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