Как работать в cs50 ide

Обновлено: 03.07.2024

CS50 (Computer Science 50) — вводный онлайн курс по компьютерным технологиям из Гарварда и, начиная с 2015 года, Йельского университета. Основным лектором является Дэвид Малан — один из известнейших преподавателей CS.

Содержание курса CS50:

  • Основы компьютерных наук и программирования. Системы счисления, работа с командной строкой в Linux, циклы, условные переходы и пр.;
  • Концепции алгоритмов и алгоритмичности мышления. Вы узнаете о том, какие задачи можно решать с помощью программирования и каким образом;
  • Концепции абстракции, структуры данных, инкапсуляции, управления памятью. Основы компьютерной безопасности. Процесс разработки ПО и веб-разработка;
  • Основы языка программирования C и визуального языка Scratch. Основные примеры и задания выполняются на языке C;
  • Основы баз данных и SQL;
  • Веб-разработка: основы CSS, HTML, JavaScript и PHP;
  • Основы подготовки презентации проектов по программированию.

CS50 завоевал статус самого популярного курса Гарварда, надеемся, он понравится и Вам. Ниже приведен список всех лекций и их краткое описание.
Ниже представлены все 23 серии Гарвардского курса по основам программирования, который был прочитан осенью 2015 года. Курс переведён на русский язык и озвучен студией Vert Dider по заказу JavaRush.
.
Здесь Вы можете скачать видео и дополнительные материалы по курсу CS50 (на русском языке):

Лекция №1

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

Лекция №2

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

Лекция №3

Теперь у вас появится новый инструмент — язык программирования C. Знакомство с ним будет проходить легче благодаря уже знакомому Scratch. После лекции вы сумеете работать со своим кодом с помощью командной строки и узнаете некоторые интересные факты.

Лекция №4

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

Лекция №5

В пятой лекции вы узнаете о том, как устранять баги. Также узнаете про бесконечные циклы и что такое функциональная декомпозиция. Познакомитесь со строками и с понятием «ошибка сегментации».

Лекция №6

Шестое занятие будет проведено лектором Робом Боуденом, но Дэвид также будет на месте. Вы поймете, что такое массивы и какими они бывают. А также познакомитесь с криптографией.

Лекция №7

Седьмая лекция курса знакомит с основными методами сортировки данных. Дэвид Мэйлен рассказывает о пузырьковой сортировке, сортировках выбором, вставкой и слиянием, а зрители проверяют их на практике.

Лекция №8

Рекурсия, сортировка слиянием, компилятор Clang: все это станет понятно вам после восьмой лекции этого курса. Вы узнаете, как применять побитовые операторы, и вообще поймете цель их использования.

Лекция №9

Продолжение знакомства с оператором условия — if, введение понятие рекурсии, а также обсуждение скандала концерна Volkswagen и проблемы компьютерной безопасности. Лектор детально рассматривает функцию перестановки — swap, демонстрирует приёмы работы с отладчиком программ и раскрывает структуру и механику оперативной памяти.

Лекция №10

Десятая лекция о разных методах составления списков, сохранении информации о программе и использовании указателей и указуемых.

Лекция №11

После одиннадцатой лекции Вы сможете свободно работать с указателями и памятью. Узнаете, что такое char* и string, их сходства и различия, а также начнете работать с Valgrind.

Лекция №12

Двенадцатая лекция посвящена особенностям стека, очереди и связного списка. Разбор возможных проблем, связанных с доступом к памяти. Тут же рассматривается структура двоичного дерева, префиксного дерева и работа со сжатием файлов.

Лекция №13

В этой лекции вы займетесь веб-программированием и познакомитесь с интернет-технологиями. Еще перейдете от командных строк в C к программированию на PHP, JavaScript, познакомитесь с HTML, CSS, SQL и прочим.

Лекция №14

Вы закончите изучение HTML и CSS, узнаете как работает веб-сервер Apache, а также увидите реализацию загрузки главной страницы Facebook.

Лекция №15

Пятнадцатое занятие глубже введет вас в веб-программирование и познакомит с PHP и HTML.

Лекция №16

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

Лекция №17

Вы продолжите знакомство с базами данных и с SQL.

Лекция №18

Погружение в JavaScript и front-end разработка –темы восемнадцатой лекции.

Лекция №19

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

Лекция №20

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

Лекция №21

Эта видеозапись курса будет об искусственном интеллекте. Вы познакомитесь с Элизой. И это не очередной лектор, знакомство вас удивит и надолго останется в памяти. Обработка естественного языка и распознавание речи, невербальное общение также будут объяснены и обсуждены во время лекции.

Лекция №22

В этом видео профессор Йельского университета демонстрирует использование искусственного интеллекта в играх. Вы рассмотрите алгоритмы минимакс, альфа-бета-отсечение, а также разберете игру в крестики-нолики.

Лекция №23

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

Надеемся, что данная статья была Вам полезна!
.

Внимание! Если вы решили использовать «Виртуальную лабораторию CS50», смело переходите к следующей лекции.
Чтобы свободно проделывать операции в CS50 IDE, нужно изучить несколько простых консольных команд. Их нужно набирать в так называемом терминале.

Создание папки для заданий

Кликните правой кнопкой мыши по

/workspace (ваш корневой каталог) в левом верхнем углу CS50 IDE, выберите New Folder. Переименуйте папку в pset1(если вы ошиблись в имени, щелкните по вашей папке правой кнопкой и выберите Rename).

cs50 ide создание папки

Создание файла в папке

Кликните правой кнопкой по папке pset1 и выберите New File. Переименуйте появившийся файл Untilted в hello.txt.

Дважды кликните по hello.txt. В CS50 IDE справа вы увидите новую вкладку и поле, где можно печатать. Если вы это сделали, обратите внимание на появившийся перед названием файла на вкладке красный круг — индикатор того, что в файл были внесены, но не сохранены, изменения.

Сохраните файл, зайдя в меню *File > Save или с помощью клавиш command + S (на машинах Apple) или Ctrl + S (на других ПК). Звездочка должна исчезнуть.

Давайте проверим, лежит ли файл там, где должен. Сделаем это с помощью командной строки, пора к ней привыкать:).

Проверяем где файл

workspace — текущая рабочая директория (та, что открыта в рабочей среде). Тильда (

) указывает на корневую директорию (в ней лежит workspace). Обратите внимание, что workspace в терминале — то же самое, что и иконка

/workspace в левом верхнем углу CS50 IDE.

Давайте попрактикуемся. Кликните в каком-либо месте терминала, наберите в командной строке

и нажмите Enter. Эти две строчные буквы — сокращение от «list» («список») — вызовут список файлов и папок, находящихся внутри текущей директории

Чтобы перейти в другую папку, нужно набрать команду cd (change directory) и имя папки или путь к ней. Например:

Если вы пишете только саму команду cd, но не подставляете аргумент (то есть имя папки, в которую ей нужно перейти), она вернет вас в корневую директорию по умолчанию. Таким образом, в активной строке вы увидите следующую картину:

Перейдем в рабочую папку, набрав команду

Активная строка поменялась на

Это подтверждает, что вы теперь находитесь в директории pset1


Друзья, мы рады сообщить, что перевод всего гарвардского курса CS50 закончен.

Мы писали, что в курсе 24 серии, однако последние две оказались одной и той же лекцией (одна прочитана в Гарварде, а другая в Йеле), поэтому в списке переведённых лекций не 24, а 23.

Список лекций под катом.

  • Основы компьютерных наук и программирования;
  • Концепции алгоритмов и алгоритмичности мышления. Какие задачи можно решать с помощью программирования и каким образом;
  • Концепции абстракции, структуры данных, инкапсуляции, управления памятью. Основы компьютерной безопасности. Процесс разработки ПО и веб-разработка;
  • Основы языка программирования C и Scratch;
  • Основы баз данных и SQL;
  • Веб-разработка: основы CSS, HTML, JavaScript и PHP;
  • Основы подготовки презентации проектов по программированию.

Курс переведён и озвучен нашей студией по заказу JavaRush, и мы хотим сказать им огромное спасибо за поддержку!

Список переведённых лекций:

1-я лекция: вступительная, знакомит с общими понятиями языков программирования, а также с командой преподавателей и системой предстоящих занятий.

2-я лекция: также является вступительной и знакомит с общими понятиями языков программирования, продолжая тему первой лекции.

3-я лекция: знакомит с понятием и функциями компилирования и рассказывает, каким образом в программах появляются баги (начиная с самого первого «компьютерного жучка»), как их распознать и чем они могут быть вызваны.

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

5-я лекция: продолжение о багах, плюс раскрывает понятие структуры программы, объясняет, зачем нужны функции внутри кода, в чём важность области действия значений, и вводит функцию strlen. Также из неё вы узнаете, как в CS50 борются с любителями списывать, и научитесь экономить оперативную память компьютера во избежание ошибки сегментации.

6-я лекция: об основах криптографии, массивах и аргументах командной строки.

7-я лекция: знакомит с основными методами сортировки данных. Дэвид Мэйлен рассказывает о пузырьковой сортировке, сортировках выбором, вставкой и слиянием, а зрители проверяют их на практике.

9-я лекция: продолжение знакомства с оператором условия — if, введение понятие рекурсии, а также обсуждение скандала концерна Volkswagen и проблемы компьютерной безопасности. Лектор детально рассматривает функцию перестановки — swap, демонстрирует приёмы работы с отладчиком программ и раскрывает структуру и механику оперативной памяти.

10-я лекция: о разных методах составления списков, сохранении информации о программе и использовании указателей и указуемых.

11-я лекция: изучение указателей, разбор структуры функций библиотеки CS50, знакомство с утечкой памяти, введение понятия linked list и других структур данных с детальной демонстрацией.

12-я лекция: про особенности стека, очереди и связного списка. Разбор возможных проблем, связанных с доступом к памяти. Тут же рассматривается структура двоичного дерева, префиксного дерева и работа со сжатием файлов.

13-я лекция: о хэшировании данных, сетевых протоколах и о том, как при помощи зашифрованных соединений защитить себя от подозрительных незнакомцев.

14-я лекция: введение в веб-программирование и знакомство с языками HTML и CSS. Впервые в истории студенты двух учебных заведений — Гарварда и Йеля — при помощи современных технологий параллельно проходят обучение на курсе.

15-я лекция: знакомство с языком программирования PHP и языком разметки HTML.

16-я лекция: продолжение рассмотрения языка PHP, теперь для разработки веб-приложений, а также знакомство с базами данных и MySQL.

17-я лекция: продолжение знакомства с базами данных SQL.

19-я лекция: продолжается знакомство с языком JavaScrip, а также демонстрируется использование компьютерных технологий в сфере археологии.

20-я лекция: рассматривается тема компьютерной безопасности: излагаются основы личной безопасности в Интернете, принципы работы с паролями, объясняется специфика вредоносного программного обеспечения. Также в лекции затрагиваются проблемы неприкосновенности личных данных в современную цифровую эпоху, в том числе в общественно-политическом контексте.

21-я лекция: профессор Сказелатти из Йельского Университета рассказывает о системах обработки естественных языков. В лекции рассматриваются алгоритмы распознавания речи, раскрывается понятие статистических моделей распознавания речи, скрытых марковских моделей, вопросно-ответной системы, семантической обработки текста, а также затрагивается тема создания систем невербального общения.

22-я лекция: профессор Сказелатти из Йельского Университета демонстрирует использование искусственного интеллекта в играх. В лекции рассматриваются алгоритмы минимакс и альфа-бета-отсечение, а также разбирается игра робота в крестики-нолики.

23-я лекция: подводятся итоги курса, в игровой форме повторяются некоторые темы, идет непринужденное общение.

Гарвардский курс Computer Science 50 (Introduction to Computer Science I).

Введение в информатику и искусство программирования. Этот курс учит студентов мыслить алгоритмически и эффективно решать проблемы. На курсе рассматриваются абстракции, алгоритмы, структуры данных, инкапсуляция, управление ресурсами, безопасность, разработка программного обеспечения и веб-разработка. Языки программирования C, Python, SQL и JavaScript плюс CSS и HTML. Задачи, основанные на реальных областях биологии, криптографии, финансов, судебной экспертизы и игр. Курс предназначен для не специалистов, с или без предварительного опыта программирования.


Друзья, основные теоретические сведения вы можете почерпнуть из конспекта семинаров. Там, помимо основ С рассказано, как подключиться к специальной облачной IDE CS50 (это нужно сделать для выполнения и проверки заданий), описаны основные нужные команды Linux и структуры языка. Если вам будет недостаточно материала о C, изложенного в лекции и конспекте, обратитесь к другим источникам. Например, к тем, что указаны в конце данной статьи.

  • Цели первой недели
  • IDE CS50
  • Командная строка и обновление рабочей среды
  • Работа в IDE
  • Hello, C!
  • Баги?
  • Проверка на правильность: тест check50
  • Основы С: сравнение со Scratch
  • Основные типы данных в C
  • Библиотеки С
  • И снова Hello C: разбор синтаксиса простейших программ
  • Еще немного о вводе/выводе в C

Материалы в этом топике:

  • Ввод данных с проверкой: специальные функции библиотеки cs50.h
  • Задание 1. Умный подсчет расхода воды
  • Задание 2. С нами Марио!
  • Задание 3. Время получать сдачу
  • Как подтвердить правильность кода и получить оценки
  • Ресурс кода
  • Дополнительная литература
Ввод данных с проверкой: специальные функции библиотеки cs50.h

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

GetString() считывает введенную пользователем строку
GetInt() считывает введенную пользователем строку и проверяет, не записано ли в ней целое число
GetFloat()считывает введенную пользователем строку и проверяет, не записано ли в ней число с плавающей точкой
GetLongLong() считывает введенную пользователем строку и проверяет, не записано ли в ней длинное вещественное число.

Задание 1. Умный подсчет расхода воды


Логично: чем дольше вы принимаете душ, тем больше воды уходит на этот процесс. Давайте прикинем, сколько? Даже если ваш душ едва открыт, в минуту из него вытекает примерно 6 литров воды. А это 12 бутылочек воды, которые вы носите с собой для питья. Обычно человек принимает душ минут 10. Итого, чтобы помыться, нужно 120 полулитровых бутылок. Немало!

Создайте файл water.c в вашей директории

/workspace/pset1. Программа должна подсчитывать сколько бутылочек воды уходит на душ зависимости от времени. То есть:

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

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

Чтобы проверить правильность выполнения программы с помощью check50, нужно ввести следующую строку в терминале:

А если вы хотите посмотреть, как работает программа water, написанная сотрудниками курса выполните следующую команду:

Задание 2. С нами Марио!


Знаете ли вы самого знаменитого водопроводчика в мире? С легкой руки компании Nintendo вымышленный усатый и немного полноватый дядечка в красной кепке стал героем для нескольких поколений геймеров. Если вы не знаете, о ком речь, вот вам ссылка на классическую игру 1985 года: поверьте, она всё ещё хороша и заслуживает внимания! Также можно найти вариант классического Super Mario для смартфонов или оффлайновых эмуляторов. Всё это нам нужно для общего развития, это еще, к сожалению, не задание;). А задание состоит вот в чем. В конце первого уровня Mario каждый игрок видел вот такую полупирамидку:

Создайте файл mario.c в вашей директории

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

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

Если пользователь ввел неправильные данные (ввел не число, или число, которое меньше единицы или больше, чем 23), программа должна снова попросить его ввести данные, как в примере внизу, где подчеркнутый текст — то, что вводил пользователь с клавиатуры.

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

Чтобы скомпилировать программу, введите строку в терминале:

или более прозрачный, но длинный вариант:

после этого запустите программу на исполнение:

Если вы хотите проверить правильность выполнения программы, запускайте check50:

А если вы хотите поиграться с версией mario, созданной ассистентами курса, mario набирайте следующую строку:

Задание 3. Время получать сдачу


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

Однако что будет, если кто-то рассчитается с кассиром крупной купюрой? Представьте, сколько мороки будет с тем, чтобы посчитать монетки на сдачу. Для минимизации количества выдаваемых монет можно использовать так называемые «жадные» алгоритмы. Они, согласно определению Национального Института Стандартов и Технологии (NIST) всегда находят оптимальное решение на каждом шаге решения задачи, допуская, что конечное решение (полученное из совокупности таких шагов) также будет оптимальным.

Что это значит? Представим, что кассир должен покупателю сдачу в 41 цент, а у него на поясе есть цилиндры с монетками для сдачи номиналом в 25, 10, 5 и 1 цент. Руководствующийся «жадным» алгоритмом кассир сразу же захочет выдать максимум, на первом же шаге. На этом шаге оптимальным или наилучшим решением будет выдать 25 пенсов. 41-25 = 16. Осталось выдать 16 пенсов. Очевидно, 25 пенсов слишком много, значит, остается 10. 16-10 = 6. Теперь выдаем по тому же принципу 5 пенсов, и затем — 1. Таким образом, покупатель получит всего четыре монеты номиналом 25, 10, 5 и 1 пенс.

Оказывается, «жадная» пошаговая инструкция выдачи денег оптимальна не только для этого случая, но также для номиналов валюты США (и Евросоюза тоже). То есть, если у кассира достаточно монет любого номинала, алгоритм будет работать лучшим образом, то есть, выдаст минимальное количество монет из всех возможных случаев.
Итак, какое минимальное количество монеток нам нужно, чтобы дать сдачу? Это и есть наша третья задачка.

Создайте файл greedy.c в своей директории

Дано: монетки номиналом 25, 10, 5, 1 цент

Программа должна:

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

Примечание: для ввода будем пользоваться функцией GetFloat из библиотеки CS50 и printf из стандартной библиотеки ввода/вывода для вывода. Кроме того, программа должна проверять корректность ввода.

Мы попросили вас использовать GetFloat, чтобы пользователь мог вводить значение в долларах и центах через точку. Например, если мы должны $9.75, пользователь должен ввести 9.75, но не $9.75 или 975.

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

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

Кстати, перед тем, как что-либо считать, будет логично перевести всю сумму в центы, (и заодно преобразовать её из float в int), что поможет избежать массы ошибок и сложностей.
Чтобы наш автоматический анализатор кода мог правильно проверить вашу задачу, убедитесь, что последняя строка вывода вашей программы не содержит никакой другой информации, кроме минимального количества монеток: целое число с символом
после него (те, кто учится на JavaRush, прекрасно знают, о чём мы здесь говорим =)).

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

Учитывая особенность чисел с плавающей точкой, можно игнорировать нуль и вводить такое число в форме .41.
Конечно, пользователи, которые захотят проверить программу на возможность ввода некорректных данных по полной, должны увидеть что-то вроде:

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

Если во время тестирования приложения вы поймете, что цикл не останавливается, вы можете прервать выполнение программы комбинацией ctrl-c (иногда — многократной).

Как компилировать и выполнять программу вы уже знаете.

Если вы хотите проверить правильность работы вашей программы, с помощью утилиты check50, в терминале введите следующую строку:

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

Как подтвердить правильность кода и получить оценки

Вариант 1

Если вам важно проверить именно правильность кода, а не получить итоговую оценку, вы можете его проверять и исправлять с помощью команды

введенной в терминальной строке CS50 IDE.
Где name — название файла вашей задачи.

Вариант 2
Если же вы хотите получить оценки (по сути, тот же запуск check50, но с запоминанием результата и заполнением некоторых форм на английском, тогда проделайте следующие шаги:
Шаг 1 из 2

Вопросы со звездочками – обязательны:

  • Alright, should’ve seen this one coming! In just a few sentences, what’s a library? * (Кратко опишите, что такое библиотека)
  • In just a few sentences, what role does

Друзья, если возникают какие-то вопросы, пишите их в комментариях под этим руководством. Если вы не достигли пятого уровня JavaRush, чтобы получить приглашение на info, рекомендуем это сделать. Это бесплатно, интересно и не очень сложно.


Предыстория: кто мы и как дошли до жизни такой

Мы — команда проекта JavaRush. А JavaRush, кто еще не в курсе, — это полностью автоматизированный обучающий онлайн-курс по Java. Когда-то давно, именно благодаря поддержке хаброюзеров и статьям на хабре, JavaRush и появился. В то время мы собирались переучить на программистов миллион человек.

Очень амбициозно, не так ли? Но, как говорится, «проект, который можно сделать за две недели, мы делали три месяца. Потому что ничего нельзя сделать за две недели».

В нашу миссию — переучить на Java-программистов миллион — мы по-прежнему верим, но также решили поставить себе тактическую цель поскромнее: сделать офигенный онлайн-курс по Java. Считаю, нам это удалось. Мы продолжаем успешно пилить и допиливать наш JavaRush, обросли успешными «выпускниками»… Но сейчас немного о другом.

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

Но нет правил без исключений. Гарвардский CS50 — это такой университетский курс, перед которым я снимаю шляпу. Хочу, чтобы все наши студенты и преподаватели посмотрели его. Именно так должен выглядеть современный университетский курс: ярко, познавательно, вдохновляюще.


Курс просто шикарен, хотя опытные программисты не найдут там много полезной информации для себя: он рассчитан на новичков. Но им — новичкам — рекомендую обязательно изучить CS50.

Курс настолько крут, что Йельский университет отказался от собственного введения в программирование в пользу CS50. Более того, уже несколько лет CS50 могут проходить не только студенты Гарварда, но и все желающие, на сайте edX, причем, абсолютно бесплатно. Единственное «но»: курс на английском…


Короче говоря, CS50 нас настолько впечатлил, что мы решили перевести его на русский, хотя там нет ни слова о Java. Мы нашли классных ребят — студию переводов Vert Dider — и совместно принялись за адаптацию лекций.

На кого рассчитан

Если вы — новичок, пройдите CS50. Если кто-то из ваших знакомых приглядывается к ИТ и программированию, советуйте CS50 не глядя. Я серьезно.

CS50 подойдет любому человеку, кто решил стать «айтишником». Пожалуй, его можно рекомендовать и способным 12-летним, и умудренным опытом «перебежчикам» из других профессий. Идеально — старшеклассникам и студентам.

Курс очень прогрессивный и обновляется из года в год. При этом в отличие от большинства подобных университетских обучающих программ (например, MIT 6.00X) от слушателя не требуются знания университетской математики, достаточно школьного уровня.


Профессор компьютерных наук Дэвид Малан. Возможно, когда вы его увидите, у вас произойдет разрыв шаблона «профессор университета»: он чрезвычайно энергичен и подача информации у него ну очень живая. Думаю, успех курса — во многом его заслуга. Также ему помогают многочисленные ассистенты. Некоторые из них — опытные ребята, некоторые — из числа тех, кто сам совсем недавно прошёл CS50.

Один из самых популярных курсов Гарварда теперь и на русском языке. Его основным лектором является Дэвид Малан - один из известнейших преподавателей CS.



Курс завоевал статус самого популярного курса Гарварда, надеемся, он понравится и вам. Ниже приведен список всех лекций и их краткое описание.

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

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

С началом третей лекции вы поймете, что игры закончились, но, тем не менее, учиться станет еще интереснее. Теперь у вас появится новый инструмент — язык программирования C. Знакомство с ним будет проходить легче благодаря уже знакомому Scratch. После лекции вы сумеете работать со своим кодом с помощью командной строки и узнаете некоторые интересные факты.

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

В пятой лекции вы узнаете о том, как устранять баги, которые являются верными спутниками разработчиков. Также узнаете секрет бесконечного цикла и что такое функциональная декомпозиция. Будете знать область действия каждой созданной переменной. Познакомитесь со строками и с понятием «ошибка сегментации».

Шестое занятие будет проведено лектором Робом Боуденом, но Дэвид также будет на месте. Вы поймете, что такое массивы и какими они бывают. Еще вы познакомитесь с загадочным словом криптография и тем, что оно означает.

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

Рекурсия, сортировка слиянием, компилятор Clang: все это станет понятно вам после восьмой лекции этого курса.
Теперь вы узнаете, как применять побитовые операторы, и вообще поймете цель их использования. Также вы узнаете о том, что думает Барак Обама о самом эффективном способе сортировки миллиона 32-битных целых чисел.

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

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

После одиннадцатой лекции вы сможете свободно работать с указателями и памятью. Узнаете, что такое char* и string, их сходства и различия. Еще начнете работать с Valgrind. А что это, вы узнаете из этой лекции.

Читайте также: