Как настроить смартфоны и ПК. Информационный портал

Лекции для программистов. Что изучают на CS50

В открытый доступ уже несколько лет назад, но переводится на русский впервые. За основу взяли самую свежую версию - ту, что стартовала в самом Гарварде осенью 2015 года.

Передаём слово ребятам из JavaRush.

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

Однажды Zapp, глава JavaRush (о JavaRush будет в конце статьи), рылся в интернете, пытаясь найти такие вот алмазы для новичков в программировании - студентов JavaRush - и наткнулся на CS50. Под этой аббревиатурой скрывается вводный курс по основам компьютерных наук и искусства программирования. Его читают студентам Гарвардского университета, с недавнего времени - еще и в Йеле. И «заочно» во всем мире, посредством образовательной интернет-платформы edX. Причем совершенно бесплатно!

Признаться, курс зацепил Zapp’а, хотя обычно он не слишком (мягко говоря) жалует университеты, пичкающие студентов технологиями, утратившими актуальность ещё во времена бурной юности их родителей. Вузовские «айтишные» лекции еще и скучные чаще всего. Настолько, что скулы сводит. Но нет, CS50 - не такой, даже близко! Он прогрессивный (постоянно обновляется), лекции можно смотреть как крутой сериал (а не засыпать на задней парте или заниматься своими делами), задания подобраны со смыслом. Курс хочется смотреть, изучать и… продолжать вливаться в ИТ.

Одним словом, CS50 делает ровно то, что должен делать любой вводный курс: дает основы и вдохновляет на будущие свершения. При этом он универсален, то есть пригодится абсолютно любому будущему айтишнику независимо от специализации. А еще, чтобы усвоить CS50, не нужно штудировать «матанализ», «дискретку» и прочую университетскую математику. Курс вполне осилит гуманитарий или старшеклассник. Если английский знает, разумеется. А если нет? Раньше тех студентов, кто с трудом разбирал энергичную речь лектора, могли выручить разве что автоматически переведенные субтитры, из которых выудить смысл крайне тяжело на самом деле.

Но теперь даже английский учить не придется. Хотя нет, конечно, но уже для работы, а не для учёбы. Потому что мы - JavaRush и студия VertDider - перевели лекции CS50 на русский.

Чему учат на CS50

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

С программированием как таковым CS50 начинает знакомить на «нулевой» неделе. Вероятно, чтобы не пугать даже самых неуверенных гуманитариев, профессура Гарварда первым делом показывает студентам визуальный язык Scratch, на котором можно составлять программы простым перетягиванием графических элементов. Эта разработка Массачусетского Технологического Института (MIT) предназначена для обучения школьников, но основные концепции процедурного программирования - всякие циклы и условия - понять помогает очень быстро. Однако на Scratch никто долго не останавливается, а сразу же переходят на «великий и прекрасный» язык C, и большинство практических заданий студенты CS50 решают именно на нем. Очень неплохой выбор хотя бы потому, что C - чуть более низкоуровневый, чем большинство других ходовых языков, то есть хорош для понимания работы компьютера. К тому же знание основ С не помешает «линуксоидам» и прочим админам. Кстати, Linux’у и его командам также уделено внимание в курсе.

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

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

Узнают о том, стоит ли боятся рекурсии и когда она необходима. А еще - о такой экзотике, как указатели, которые наделяют программиста огромной силой, но негативно сказываются на безопасности.

Счастливые слушатели CS50 получат представление о такой науке, как криптография, и поймут, в чем сила самых известных шифров - Цезаря, Виженера, DES.

Точно так же - поверхностно, но в самый раз для первого знакомства - в курсе поведают о веб-разработке, основах CSS, HTML, JavaScript и PHP. И немного о SQL с базами данных.

Если очень кратко, то CS50 вот о чём:

  • Алгоритмы и алгоритмизация задач.
  • Абстракции, структуры данных, инкапсуляция, управления памятью.
  • Основы языка программирования C и программирования в целом.
  • Понятие о веб-разработке и базам данных: CSS, HTML, JavaScript, PHP, Ajax SQL.
  • «Правильная разработка». Что такое MVC.
  • Искусственный интеллект.
  • Понятие о шифровании.

Кто учит, как давно и кого

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

Впервые Дэвид прочёл CS50 в 2007 году, а уже в 2014 году 12% студентов Гарварда всех специализаций, то есть более восьми сотен человек, записались на «Основы программирования», загнав его в топ популярности среди всех курсов колледжа. До этого все было не так весело и многолюдно. Скажем, на лекции создателя Facebook Марка Цукерберга в 2005 году присутствовало аж 15 студентов. Правда, тогда эта социальная сеть только-только набирала обороты. Каждый год Дэвиду ассистируют множество человек - как другие преподаватели, так и недавние студенты CS50. И еще пара-тройка Muppet’ов=).

Вы, возможно, слышали о Сьюзен Войчицки (Susan Wojcicki), исполнительном директоре Youtube. Так вот, в 1990 году она заканчивала Гарвард. Факультет истории и литературы, как ни странно. На последнем курсе девушку перемкнуло, и она решила узнать побольше о компьютерах, посему - выбрала CS50. Затем была Кремниевая долина, дружба с Ларри и Сергеем (теми самыми Ларри и Сергеем), свой луна-парк, все дела. Вот как CS50 может изменить жизнь.

А вы кто такие, господа переводчики?

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

Где найти переведенные лекции

Вот страница , на которой появляются лекции курса на русском языке. Они будут доступны совершенно бесплатно всем пользователям интернета. Перевод первой лекции появился 20 июня, следующая будет 27 июня, дальше - по мере их готовности.

Следите за обновлениями на страничках JavaRush в социальных сетях.

По основам программирования

Учебно-методическое пособие

для студентов высших учебных заведений, обучающихся

по направлениям экономика, менеджмент

Нижний Новгород


Малыженков В.И. Информатика и вычислительная техника. Курс лекций по основам программирования: Учебно-методическое пособие – Нижний Новгород: Изд-во Нижегородского госуниверситета, 2011. – 52 с.

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

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

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

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

Рецензент: доцент, к.т.н. Громницкий Владимир Семенович

© Малыженков В.И., 2011

© Нижегородский государственный

университет им. Н.И. Лобачевского, 2011

Введение………………………………………………………………….………..4

Глава1. Основы компьютерной грамотности………………...…………………5

1. Что такое компьютер?.................................................................................5

2. Базовая конфигурация ПК………………………………………………..5

3. Операционные системы (ОС)………………………………………….…7

4. Файловая система MS DOS и WINDOWS……………………………….8

5. Структура файловых систем………………………………….…………10

Глава 2. Обработка данных в среде алгоритмических языков……………..…11

1. Парадигмы программирования………...………………………………11

2. Этапы решения задач на компьютере…………………………………..11

3. Общее описание языков программирования (Basic, Pascal)…………..16

3.1 Алфавит………………………………………………………….…16

3.2 Описание данных………………………………………………….17

3.2.1. Типы данных…………….……………………………….17

3.2.2 Константы…………………………………………………17

3.2.3 Переменные…………………………………………...…..19

3.2.4 Функции…………………..……………………………….20

3.3 Выражения…………………………………………………………21

3.3.1. Арифметические выражения……………………………21

3.3.2.Логические выражения…………….……………………..22

3.3.3 Строковые выражения………………………..…………..23

3.4.Основные исполняемые операторы языков……………………...23

3.4.1 Оператор присваивания………………………………….24

3.4.2 Условный оператор………………………………………24

3.4.3 Оператор выбора по ключу…………………..………….25

3.4.4 Операторы цикла………………...……………………..27

3.4.5 Оператор безусловного перехода…………...……….30

3.4.6 Операторы ввода – вывода……………………………30

3.5.Структура программного модуля……………………………...…31

4. Пример решения задач с модульным подходом……………………….32

5. Сложные типы данных………………...………………………………..35

6. Обработка файлов данных…………………………………..………….38

6.1. Общие понятия……………………..……………………………..38

6.2. Основные операции по обработке файлов………..…………….39

6.3 Операторы (процедуры) обработки файлов в Basic и Pascal…...40

7. Принципы структурного программирования…………..……………..44

8. Описание простейших модулей………………………………………..46

9. Пример составления программы в соответствии с принципами структурного программирования………………………………………47

Литература……………………………………………………………………...51

Введение

Термин «информатика» впервые появился во Франции в начале 70-х годов и произошел от сочетания двух слов: information (информация, разъяснение) и automatique (автоматика, автоматический). Так образовалось французское слово informatique . В русском языке вместо вольного перевода этого термина как «информационная автоматика» утвердилось понятие «информация и средства её автоматической обработки». В США укоренился другое словосочетание - с omputer science – наука о компьютерах.

В нашем курсе мы будем представлять информатику как составляющую следующих компонент:


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

Глава1. Основы компьютерной грамотности.

1. Что такое компьютер?

Термин «компьютер» образован от английского слова compute – вычислять. Так же переводится и английское слово calculate , однако под compute обычно понимается выполнение более сложных операций, в том числе и логических. Так появилось два типа счетно-решающих устройств: компьютеры и калькуляторы.

С точки зрения пользователя компьютер – это комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач (обработка, хранение, передача информации).

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

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

2. Базовая конфигурация ПК.

К основным устройствам персонального компьютера относятся:

1) системный блок;

2) монитор;

3) клавиатура;

4) “мышь”.

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

Кроме того в системном блоке находятся:

HDD, НЖМД – hard disk drive, накопитель на жестких магнитных дисках (жесткий диск, винчестер) - устройство хранения информации. Информация с HDD пересылается в оперативную память для обработки или на внешние устройства. Отличается от оперативной памяти существенно большими объемами хранимой информации, но меньшей скоростью доступа к ней. На винчестере храниться важнейшая часть программного обеспечения любого компьютера - операционная система;

FDD, НГМД – floppy disk drive – дискета, предназначенная для переноса информации с одного на другой компьютер;

CD ROM – compact disk read only memory (память только читается);

DVD –R, RW – design video drive, диски для чтения или чтения-записи. Отличаются от CD , большим обьемом хранимой информации;

Видео – и сетевые карты;

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

Монитор.

Монитор – это устройство для просмотра вводимой и выводимой информации, диалоговое устройство.

Мониторы бывают разных типов: с ЭЛТ – электронно-лучевая трубка; ЖК – жидкокристаллические, плазменные. В настоящее время в основном используются ЖК-монитры. Мониторы обладают определенными характеристиками:

1. размер диагонали экрана (типовые 14"-21", всего от 9" до 42" (23-106см);

2. частота обновления и регенерации от 75-до 110Гц. Ниже - мигание, выше – размывание и удвоение изображение;

3. разрешение – количество пикселей на миллиметр(мин:640х480, - 1024х768 - мах:1280х1024); размер пикселя в среднем 0.18-0.25 мм, не выше 0,28;

4. ТСО-92-95-99 – Total Cost Oqupation - это классы защиты потребителя от электромагнитного излучения экрана монитора.

Клавиатура.

Клавиатура является устройством ввода информации. С помощью клавиатуры можно вводить тексты, текстовые команды и некоторые специальные команды (Esc,Ctrl и другие).

(Основы языка С++, I семестр)

Введение

В первом семестре рассматриваются основные конструкции языка Си и базовая технология программирования (структурное программирование).

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

    1. Алгоритм и программа

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

алгоритм

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

Сначала всегда разрабатывается алгоритм действий, а потом он записывается на одном из языков программирования. Текст программы обрабатывается специальными служебными программами – трансляторами. Языки программирования – это искусственные языки. От естественных языков они отличаются ограниченным числом «слов» и очень строгими правилами записи команд (операторов). Совокупность этих требований образует синтаксис языка программирования, а смысл каждой конструкции – его семантику.

    1. Свойства алгоритма

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

    Результативность: алгоритм должен приводить к получению результата за конкретное число шагов (при делении 1 на 3 получается периодическая дробь 0,3333(3), для достижения конечного результата надо оговорить точность получения этой дроби, например, до 4 знака после запятой).

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

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

Алгоритмы можно представить в следующих формах:

    словесное описание алгоритма.

    графическое описание алгоритма.

    с помощью алгоритмического языка программирования

1.2. Компиляторы и интерпретаторы

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

Товарищи инженеры, уже четвертый год пошел, как я взялся преподавать в . За это время у меня накопилось огромное количество примеров кода и материалов, примерно на 90 лекций . Должен сказать, что за весь период своей профессиональной деятельности (а это 24 года почти ежедневного написания кода), я никогда не подымал свой уровень программирования, как за последние годы, работая со студентами. Если раньше мне казалось, что написать кратко, сложно и внушительно - это верх мастерства, то теперь я осознал, что мой код должны понимать студенты после минимальных объяснений, иначе он никуда не годится. Я пришел к выводу, что способность эту можно и нужно распространить не только на обучающий код, но и на весь рабочий код. Более того, обучающий код не должен существенно отличаться от рабочего кода, потому, что мы учим будущих инженеров делать настоящие системы, а не учебные. А после многочисленных просьб, я решил записывать все лекции в виде скринкастов, которые сразу после завершения лекции отправляются на ютюб. За этот учебный год я планирую записать 100 лекций, из которых уже опубликованы 23 , готовы материалы еще для 67 лекций и новых 10 лекций еще в процессе подготовки.

Концепция курса

Все вы знаете, что у нас в отрасли есть существенные проблемы с фундаментальным инженерным образованием:

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

Построить курс на базе JavaScript - это конечно экспериментальная затея, но этот язык уж точно не будет лишним ни для кого в современном ИТ. У самих же JavaScript разработчиков очень часто наблюдается плохая базовая инженерная подготовка и нехватка фундаментальных знаний по структурам данных, алгоритмам, базовым абстракциям, паттернам, архитектуре, парадигмам и приемам программирования. Большинство кода, что пишется сейчас в индустрии, просто выбрасывается вскоре после создания, потом опять переписывается и опять выбрасывается. В общем, качество и знания редко требуются, разве что на собеседованиях. Выгоднее всего делать некачественный код и обслуживать его или выбрасывать код и продавать больше времени на его повторное написание. Кроме того, наша отрасль совершенно оторвалась от науки, в этом есть существенные заслуги маркетологов, потому что мы уже программируем не на языках программирования и не на абстракциях, а мы программируем на фреймворках и библиотеках, которые нам "втюхали" в красивой обертке. Мы собираем все из кубиков, часто без всякого научного осмысления и редко можем ответить на вопрос, почему мы делаем так а не иначе. Все по частям уже давным-давно написано, все можно найти в интернете, но оказалось, что одно с другим не лепится, то есть по частям оно есть, а вместе это не работает. Связывать разобщенные кусочки кода гораздо сложнее чем поодиночке их сделать. Происходит это именно из-за отсутствия системного подхода, терминологического раскола и понятийной рассинхронизации специалистов. Вместе будет работать только то, что идеологически совместимо, что базируется на общей теории и выведенных из этой теории общих стандартах. Я надеюсь, что этим курсом я сделаю хоть небольшой шаг к достижению такого важного для отрасли консенсуса.


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

Структура курса

  • Базовые понятия : программные абстракции, переменные, операторы, типы данных, массивы, структуры, скалярные и ссылочные типы, отображения;
  • Основные понятия : функции, контексты и область видимости, классы и объекты, прототипы, методы, лямбды, чистые функции, побочные эффекты, замыкания, частичное применение, каррирование, композиция, функции высшего порядка, колбэки, враперы, декораторы, примеси, события, интерфейс, синглтон, итераторы, функциональные объекты, функторы, монады, работа с файлами, потоки, сокеты, мемоизация, наследование, генераторы, асинхронное программирование, чеининг, модули и зависимости, обработка ошибок, фабрики и пулы, таймеры, регулярные выражения;
  • Вспомогательные материалы : git, системы контроля версий и менеджеры пакетов, работа с консолью, тестирование, непрерывная интеграция, логирование, линтеры, оптимизация и производительность, борьба с утечками памяти, скрытые классы, мономорфные функции, дженерики, сборка мусора, управление памятью;
  • Структуры данных : коллекции, массивы и типизированные массивы, буферы, списки, стек, очередь, дек, деревья двоичные и иерархические, многомерные деревья, повороты и балансировка ветвей, множества, хешмапы, графы, развернутые списки, асинхронная очередь, автоматы, итерирование структур данных и поиск;
  • Расширенные понятия : символы, прокси, диферы, фьючеры и промисы, линзы, трансдьюсеры, async/await, коллекторы данных, асинхронная композиция, адаптеры асинхронности, асинхронные итераторы, интроспекция, рефлексия, скаффолдинг, инверсия управления и внедрение зависимостей, песочницы, слоистая архитектура, компонентный подход, слой доступа к данным, проекции данных, мониторинг файловой системы, клиент-серверная и трехзвенная архитектура, кластеризация и балансировка, проектирование протоколов, динамическая перегрузка модулей, метаданные, динамическое связывание, межпроцессовое взаимодействие;
  • Примеры кода и комплексного использования технологий: живые электронные таблицы, чат на вебсокетах, реализация языка запросов к графам, альтернативная библиотека асинхронных абстракций metasync, сравнение реализации одинаковых задач на разных парадигмах, сравнение стилей функционального программирования, примеры структуры приложений, маршрутизация обработчиков в node.js приложениях, изоляция кода в песочницах, транзакционные объекты;
  • Парадигмы программирования : императивное, структурное и неструктурное, процедурное, объектно-ориентированное, прототипное, функциональное, логическое, декларативное, асинхронное, реактивное, событийное, автоматное, обобщенное, программирование управляемое потоками данных, мультипарадигменное, метапрограммирование.
22 июня 2016 в 10:42

Гарвардский курс по основам программирования CS50 теперь на русском

  • Блог компании JavaRush ,
  • Учебный процесс в IT

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

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

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

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

К сути

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

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

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

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

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

А теперь подробнее о CS50

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

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

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

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

Кто ведет

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

Что изучают на CS50

  • Основы компьютерных наук и программирования. Системы счисления, работа с командной строкой в Linux, циклы, условные переходы и прочие радости.
  • Концепции алгоритмов и алгоритмичности мышления. Вы узнаете о том, какие задачи можно решать с помощью программирования и каким образом. О бинарном поиске, простом по сути, но очень эффективном и требующем тщательности в реализации, Дэвид Малан расскажет сходу, прямо на нулевой лекции. И попробуйте потом забыть сцену с разрывом телефонного справочника, а вместе с ней - и полученные знания! Вообще, курс охватывает все основные алгоритмы, которые нужно знать и понимать «айтишникам».
  • Концепции абстракции, структуры данных, инкапсуляции, управления памятью. Основы компьютерной безопасности. Процесс разработки ПО и веб-разработка.
  • Основы языка программирования C и визуального языка Scratch. Собственно, все основные примеры и задания студенты делают на языке C.
  • Основы баз данных и SQL.
  • Веб-разработка: основы CSS, HTML, JavaScript и PHP. Естественно, только самые азы.
  • Основы подготовки презентации проектов по программированию.
  • Курс CS50 появился в Гарварде в 80е годы прошлого столетия.
  • В 2014 году Йельский университет решил отказаться от собственного курса по основам компьютерных наук в пользу CS50. В осеннем семестре 2015 года Дэвид Малан на каждой неделе проводил одну лекцию в аудитории Гарварда, вторую - в аудитории Йельского университета.
  • Да, CS50 сразу же стал самым популярным курсом Йеля: в осеннем семестре 2015 года на него записалось 510 студентов, больше, чем на любой другой курс любой специальности.
  • В Гарварде в 2012 году CS50 был вторым по популярности с 691 зарегистрированным студентом, однако в этом же году курс стартовал на образовательной платформе edX, что расширило его аудиторию еще на 53 000 слушателей со всего мира.
  • Осенью 2014 года CS50 выбился в лидеры в родном Гарварде с 818 записавшимися студентами. Это 12% всех учащихся колледжа.
  • Однажды лекцию CS50 вёл экс-CEO Microsoft Стив Балмер . В своем неповторимом и запоминающемся стиле;).
  • В 2005 году Марк Цукерберг вел одну из лекций CS50 в качестве приглашенного гостя. Его пришло послушать… 15 человек.
  • Курс выбирают не только профильные студенты, но и те, кто хотят расширить кругозор, узнать что-то о компьютерах. Порой это кардинально меняет жизнь этих «непрофильных» студентов. Например, выпускница факультета истории и литературы Сьюзен Войчицки (Susan Wojcicki) прослушала CS50 на последнем курсе. А затем переехала в Кремниевую Долину. Сегодня она - исполнительный директор YouTube.

Где найти переведенные лекции

Страница, на которой будут размещены лекции курса на русском языке: javarush.ru/cs50.html . Они будут доступны совершенно бесплатно всем пользователям интернета. Перевод первой лекции 20 июня уже был опубликован на ресурсе. Следующую лекцию ждите 27 июня, и далее они будут появляться по мере их готовности.

Следите за обновлениями на страничках JavaRush в социальных сетях.

Лучшие статьи по теме