Как разобраться в Computer Science самостоятельно


Оглавление (нажмите, чтобы открыть):

Как разобраться в Computer Science самостоятельно

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

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

MIT OpenCourseWare

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

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

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

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

Мичиганский университет

Университет подготовил целую серию курсов о программировании на Python (раз, два, три, четыре, и это далеко не всё!), а также о других языках программирования. А вот теоретические курсы Мичиганского университета, на который стоит обратить внимание и практикам — «История, технология и безопасность Интернета» и «Mindware: критическое мышление информационной эры».

Как правило, онлайн-курсы платные, однако часть видео и материалов к ним — в свободном доступе. Это не позволит получить сертификат о прохождении, но вполне может дать возможность подтянуть Python и поупражняться самостоятельно.

Университет Дьюка

Ещё один известнейший мировой университет, где учат компьютерным наукам, делая упор, в частности, на науку о данных. Советуем обратить внимание на курс «Управление большими данными с MySQL», а также на несложную обучающую программу, где учат создавать веб-страницы с помощью HTML и CSS, а также Javascript для разработки программ и алгоритмов, которые помогают сделать сайт функциональным и интересным.

Университет Джона Хопкинса

Здесь имеет смысл обратить внимание на курсы по даталогии — разработчики онлайн-курсов из Университета Джона Хопкинса постарались на славу, подготовив целый набор программ для изучения науки о данных. Изучив доступные на Coursera программы, можно выбрать для себя один из курсов по анализу данных и статистическому анализу.

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

Школа анализа данных

Двухгодичные очные вечерние курсы от компании «Яндекс» работают с 2007 года. Здесь специализируются на преподавании анализа данных, компьютерных наук и больших данных. Обучение бесплатное, однако требует хорошей математической подготовки.

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

У ШАД есть отделения в Санкт-Петербурге, Екатеринбурге, Новосибирске, Киеве и Минске. Для студентов из городов, в которых нет филиалов, доступны видеолекции. Кроме того, записи лекций школы по некоторым предметам выложены в открытый доступ чтобы послушать их, достаточно просто перейти по ссылке (курсы «Машинное обучение», «Алгоритмы и структуры данных поиска», «Параллельные и распределенные вычисления» и другие).

Computer Science Center

Совместный образовательный проект Computer Science клуба при ПОМИ РАН, компании JetBrains и Школы анализа данных Яндекса.

Computer Science Center приглашает студентов средних и старших курсов, аспирантов и молодых специалистов на бесплатное очное вечернее обучение в Санкт-Петербурге или Новосибирске. Можно выбрать одно из трёх направлений: анализ данных, разработка ПО или современная информатика. Обучение длится два или три года, в зависимости от направления.

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

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

Институт биоинформатики

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

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

Также в институте существуют очные программы, предполагающие посещение лекций и работу над научными проектами. А среди онлайн-курсов Института биоинформатики на платформе онлайн-курсов Stepic есть, в частности, «Введение в Linux», «Молекулярная биология и генетика», «Основы статистики». Если вы хотите разобраться в работе нейросетей, вам тоже сюда.

Курсы Mail.Ru Group

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

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

Software Engineering

Базовые курсы программы

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

Правила очного обучения

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

Для выпуска нужно сдать двенадцать курсов и пройти три семестра практики или научно-исследовательской работы. У каждой программы обучения есть базовые курсы, которые нужно закончить для выпуска. Слушателям доступны некоторые заочные курсы ШАД и курсы Computer Science клуба.

Отзывы студентов

Елена Санникова

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

Илья Афанасьев

Отличное место, чтобы прокачать свои знания и навыки, познакомиться с очень интересными людьми и найти свой путь в computer science.

Дмитрий Зырянов

Очень важный опыт. CSC даёт актуальные знания, которые могут реально пригодиться в будущем. Эти знания позволили найти отличную работу. Для меня это было так же важно, как обучение в университете.

Любовь Паина

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

Как я приручил MIT-овский курс по Computer Science

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

Если вы хотите заняться саморазвитием, то придется заняться и самообразованием.

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

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

Сегодня мне хочется поделиться стратегией, которую я использовал, чтобы уместить в 12 месяцев 4-летнюю MIT-овскую программу по computer science. Эти техники я отточил на материале 33 предметов, разбираясь с тем, что помогает мне учиться быстрее, а что — нет.

Почему зубрежка не срабатывает

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

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

Вместо зубрежки мне пришлось искать способ ускорить процесс понимания материала.

Можно ли ускорить понимание?

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

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

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

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

1. Установление связей
2. Исправление ошибок

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

Я мучался с преобразованием Фурье, пока меня не осенило, что это что-то вроде превращения напряжения в частоту или излучения в цвет. Подобные озарения пробрасывают связи между тем, что вы уже понимаете, и тем, что еще только пытаетесь понять.

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

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

Метод погружения: как учиться быстрее

За год моего эксперимента я получил совершенный метод скоростного обучения.

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

Мой метод можно условно разделить на три этапа:
1. Обзор материала
2. Практика
3. Озарение

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

Первый этап: обзор материала

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

Если речь об учебном курсе — просмотрите лекции или прочтите учебники. Если речь о самообразовании — прочтите несколько книг по теме и соберите информацию.

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

Если вы смотрите видеолекции, хорошей идеей будет смотреть их на ускорении в 1.5 или 2 раза. Для этого скачивайте видео, а потом используйте функцию ускорения в приложениях-проигрывателях, например в VLC. Я однажды просмотрел семестр лекций за два дня при помощи этого метода.

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

Вот так, например, выглядят мои заметки, которые я вел во время занятий по машинному зрению.

Второй этап: Практика

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

№1 Нет мгновенной обратной связи

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

№2 Размельчение задач

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

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

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

Третий этап: Озарение

Первые два этапа нужны, чтобы вы могли понять, что именно вы не понимаете. Это совсем не так просто, как может показаться. Бывает, нам лишь кажется, что мы с чем-то разобрались. Или, например, в общих чертах тема нам ясна, а какие-то детали — нет, и не ясно, какие именно.

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

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

Фейнмановская техника

Я впервые столкнулся с этим методом в автобиографии нобелевского лауреата по физике Ричарда Фейнмана. Он рассказывал о том, как мучался с каким-то сложным исследованием и решил тщательно разобраться с каждой-каждой деталью задачи, осваивая все доступные материалы, до тех пор, пока не придет понимание исходной задачи.

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

Вот короткое видео, которое описывает эту технику.

1. Возьмите лист бумаги
2. Запишите идею, с которой хотите разобраться, в верхней части страницы
3. Опишите эту идею так, будто объясняете ее кому-то другому

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

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

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

Мастер Йода рекомендует:  JavaScript slice и другие методы для работы с подстроками Javascript

Когда совсем ничего непонятно

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

Для освоения методик

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

Для формул

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

Для проверки памяти

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

Глубокие знание

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

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

Аналогии

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

Визуализации

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

Упрощение

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

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

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

Способ учиться быстрее

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

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

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

А если я не студент?

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

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

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

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

Похожее

Скотт Янг

Писатель, блогер, разработчик, learning-hacker. За год самостоятельно изучил 4-летнюю программу MIT курса Computer Science.
Все посты автора →

Как разобраться в Computer Science самостоятельно

Как разобраться в Computer Science самостоятельно

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

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

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

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

[1] Программирование. Лучшая книга:
Структура и интерпретация компьютерных программ

Книга под названием «Структура и Интерпретация Компьютерных Программ» была выпущена в далёком 1979 году. Раньше по ней преподавали вводный курс в программирование среди студентов MIT.
Сейчас книга находится в свободном доступе в Интернете, и любой желающий может скачать и изучать её в своё удовольствие. Помимо книги, в сети также есть цикл видео-лекций от авторов, они расположены на ресурсе MIT OpenCourseware, мне кажется они могут неплохо дополнять друг друга по ходу изучения материала. Чем же примечательна эта книга? Да хотя бы отзывами на Amazon 🙂 Среди рецензентов есть такие личности как Peter Norvig и Paul Graham. К слову, сейчас у книги рейтинг 3.8 из 5, отчего некоторые известные личности недоумевают. А если серьёзно, то это фундаментальный классический труд в области программирования (ничем не хуже небезызвестной книги The Art of Programming от Д. Кнута, которую никто не читал). Единственным непонятным моментом для меня является факт преподавания курса программирования для новичков по этой книге.
Представляю как можно напугать новоиспечённых студентов её содержимым. Интересно, есть ли в сети статистика по которой можно узнать много ли людей, посещавших этот «адский» курс, предпочли в дальнейшем поменять свой major 🙂 Если бы организаторы Code.org пропагандировали программирование по этой книге, получился бы знатный epic fail. Итак, по-моему мнению, книга явно не для новичков в программировании, так как концепции в ней сложны для восприятия людьми «не нюхавшими пороху», более того, понадобится недюжинный запас мотивации и терпения, так как упражнения после каждой секции сложны и требуют от читателя изрядно «попотеть». Но награда стоит того. Я прочитал лишь первую главу этой книги (их всего 5), проработал часть упражнений и, признаюсь, почувствовал как стал лучше разбираться в некоторых вещах (обрёл какой-никакой фундамент).
Подробнее: vk.com/wall-51126445_29383

[2] Архитектура ЭВМ. Лучшая книга: Цифровая схемотехника и архитектура компьютера

Учебник Дэвида Харриса и Сары Харрис «Цифровая схемотехника и архитектура компьютера», второе издание, 2012, сводит вместе миры программного обеспечения и аппаратуры, являясь одновременно введением и в разработку микросхем, и в низкоуровневое программирование для студентов младших курсов. Этот учебник развивает традиции знаменитого более раннего вводного учебника «Архитектура компьютера и проектирование компьютерных систем» от Дэвида Паттерсона и Джона Хеннесси, причем соавтор предыдущего учебника Дэвид Паттерсон сам рекомендовал учебник от Харрисов как более доступный и детальный. Следуя новому учебнику, студенты строят реализацию подмножества архитектуры MIPS, используя платы с ПЛИС / FPGA, после чего сравнивают эту реализацию с индустриальными микроконтроллерами Microchip PIC32. Таким образом вводится вместе схемотехника, языки описания аппаратуры Verilog и VHDL, архитектура компьютера, микроархитектура (организация процессорного конвейера) и программирование на ассемблере — в общем все, что находится между физикой и высокоуровневым программированием. MIPS является единственной архитектурой на текущий момент, которую можно реально использовать одновременно и для изучения микроархитектуры, и для изучения микроконтроллерных приложений, и для изучения разработки и применений высокопроизводительных процессоров. Все другие варианты – Intel, ARM, Atmel AVR, IBM Power, ARC, Tensilica, SPARC, Open RISC, RISC-V – либо недостаточно поддерживаются учебниками, либо являются сложными для студенческих микроархитектурных проектов, либо обременены юридическими трудностями, либо представлены только для низкопроизводительных процессоров, либо недостаточно применяются в индустрии.
Подробнее: vk.com/wall-51126445_18938

[3] Алгоритмы и структуры данных. Лучшая книга:
Алгоритмы. Руководство по разработке Скиена С.

Второе издание популярного бестселлера «Алгоритмы. Руководство по разработке» раскрывает тайны проектирования алгоритмов, анализа их действенности и эффективности. Развивая успешную концепцию первого издания, книга является отличным практическим руководством по разработке эффективных алгоритмов, содержит практические упражнения и готовые решения 75-ти проблем алгоритмизации.
Рассмотрены основы организации данных, операции сортировки, поиска, работы с графами и другие темы современного программирования. Профессор Стивен С. Скиена, заслуженный исследователь алгоритмов и лауреат компьютерных наук IEEE, предоставляет полную онлайн-поддержку для преподавателей на полностью обновлённом и улучшенном сайте с лекциями, слайдами, аудио- и видеоматериалами. Несмотря на сложность рассматриваемого материала, его стиль остаётся лёгким для восприятия с разумной долей юмора. Часто он встраивает в текст истории, приключившиеся с ним как разработчиком программного обеспечения, которые прекрасно иллюстрируют описанные методы на практике. Книга «Алгоритмы. Руководство по разработке» станет полезным справочником для программистов и отличным учебным пособием для студентов, изучающих программную инженерию и компьютерные науки.
Подробнее: vk.com/wall-51126445_16941

[4] Математика для компьютерных наук. Лучшая книга:
Mathematics for Computer Science Eric Lehman

Эта книга охватывает элементарную дискретную математику для информатики и техники. Она подчеркивает математические определения и доказательства, а также применимые методы. Темы включают формально-логическую нотацию, методы доказательства; индукцию, упорядочение; множества, отношения; элементарную теорию графов; целочисленные конгруэнции; асимптотическую нотацию и рост функций; перестановки и комбинации, принципы счета; дискретную вероятность. Кроме того, могут быть рассмотрены следующие темы, такие как рекурсивное определение и структурная индукция; машины состояний и инварианты; рекуррентности; производящие функции.
Подробнее: vk.com/wall-51126445_26104

[5] Операционные системы. Лучшая книга:
Компьютерные сети. Таненбаум Э., Уэзэрол Д.

Перед вами — очередное, пятое издание самой авторитетной книги по современным сетевым технологиям, написанной признанным экспертом в этой области Эндрю Таненбаумом в соавторстве с профессором Вашингтонского университета Дэвидом Уэзероллом. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером и использовалось в качестве базового учебника в ведущих технических вузах. В книге последовательно изложены основные концепции, определяющие современное состояние и тенденции развития компьютерных сетей. Авторы подробнейшим образом объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до уровня прикладных программ. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования Интернета и компьютерных сетей различного типа. Пятое издание полностью переработано с учетом изменений, происшедших в сфере сетевых технологий за последние годы и, в частности, освещает такие аспекты, как беспроводные сети стандарта 802.12 и 802.16, сети 3G, технология RFID, инфраструктура доставки контента CDN, пиринговые сети, потоковое вещание, интернет-телефония и многое другое.
Подробнее: vk.com/wall-51126445_18450

[6] Компьютерные сети. Лучшая книга:
Компьютерные сети. Нисходящий подход Куроуз Джеймс

Книга знакомит читателя с фундаментальными основами построения и функционирования компьютерных сетей на примере пятиуровневой архитектуры сети Интернет. Описаны базовые компоненты компьютерной сети, ключевые подходы к передаче данных в телекоммуникационных сетях, принципы взаимодействия сетей друг с другом, подробно рассмотрены важнейшие службы и протоколы всех уровней сетевой архитектуры. Отдельная глава посвящена беспроводным и мобильным сетям и их особенностям. Большое внимание уделено одной из самых развивающихся сегодня областей – мультимедийным сетевым технологиям, в частности, специфике передачи аудио- и видеоданных. Будут затронуты важные аспекты сетевой безопасности и разнообразные принципы, методы и приемы, обеспечивающие безопасный обмен информацией. Весь материал книги снабжен интересными примерами, кроме того читателю доступны дополнительные материалы для выполнения упражнений. Книга будет полезна всем, кто специализируется в области технологий компьютерных сетей – от студентов до системных администраторов.
Подробнее: vk.com/wall-51126445_40224

[7] Базы данных. Лучшая книга: Readings in Database Systems

Эта книга призвана предоставить технологическим специалистам в области программного обеспечения — как профессионалам, так и студентам — основы для исследований в области баз данных в прошлом и настоящем, а также технический контекст для понимания новых инноваций. Он также предназначен для ссылки на тех, кто уже работает в системах баз данных. Этот набор показаний представляет то, что мы считаем наиболее важными вопросами в области базы данных; базовый материал для любой профессиональной СУБД.

[8] Языки и компиляторы. Лучшая книга:
Компиляторы. Принципы, технологии, инструменты, 2-е издание

Это новое издание классической «книги Дракона» полностью переработано и включает последние разработки в области компиляции.
По сравнению с изданием 1985 года (русский перевод издан в 2001) — книга заметно потолстела. Эта книга начинается с изложения основных принципов разработки компиляторов, включая детальное рассмотрение лексического и синтаксического анализа и генерации кода. Особенностью данного издания является широкое освещение вопросов оптимизации кода, в том числе для работы в многопроцессорных системах. Строгость изложения материала смягчается большим количеством практических примеров. Написание компиляторов охватывает такие области знаний, как языки программирования, архитектура вычислительных систем, теория языков, алгоритмы и технология создания программного обеспечения. Помочь в освоении этих технологий и соответствующего инструментария и призвана данная книга.

[9] Распределённые системы. Лучшая книга:
Distributed Systems 3rd Maarten van Steen, Andrew S. Tanenbaum

Для этого третьего издания «Распределенных систем» материал был тщательно переработан и расширен, объединяя принципы и парадигмы в девять глав: 1. Введение 2. Архитектура 3. Процессы 4. Связь 5. Наименование 6. Координация 7. Репликация 8. Отказоустойчивость 9. Безопасность Было проведено разделение между основным материалом и более конкретными предметами. Последние были организованы в коробочные разделы, которые могут быть пропущены при первом чтении. Чтобы помочь понять более алгоритмические части, примеры программ на Python были включены. Примеры в книге опускают много деталей для удобства чтения, но полный код доступен на веб-сайте книги, размещенном по адресу www.distributed-systems.net.

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

— ИИ: пройдите введение в ИИ от университета Беркли и выполните проект Pacman. Прочтите великолепную книгу от Рассела и Новрига Artificial Intelligence: A Modern Approach;
https://ai.berkeley.edu/home.html

— Машинное обучение: пройдите этот курс на Coursera и убедитесь, что действительно понимаете смысл повествования и основы машинного обучения, прежде чем переходить на Deep Learning;
https://ru.coursera.org/learn/machine-learning

— Графика: ознакомьтесь с серией лекций из университета Беркли CS184 и прочтите книгу Computer Graphics: Principles and Practice.
https://cs184.eecs.berkeley.edu/sp19
https://vk.cc/9Qe777

Насколько важно строго следовать порядку, приведенному в статье?

На самом деле, все 9 дисциплин достаточно часто пересекаются. К примеру, возьмите дискретную математику и алгоритмы: изучение математики поможет вам в освоении алгоритмов. Знание алгоритмов, в свою очередь, даст стимул погрузиться в дискретную математику. В идеальном сценарии программист достаточно часто повторяет данный материал в своей карьере.

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

А где же язык X?

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

Почему вы до сих пор рекомендуете книжку с драконами (Compilers: Principles, Techniques and Tools)?

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

#программирование@physics_math #[email protected]_math #сети@physics_math #базы_данных@physics_math #распределенные_приложения@physics_math #алгоритмы@physics_math #[email protected]_math
#программирование #cs #сети #базы_данных #распределенные_приложения #алгоритмы #os

Мастер Йода рекомендует:  Какие книги должен прочесть каждый разработчик

Как работать в Data Science без ученой степени

Размышления и рекомендации от Data Scientist Джейсона Юнга

Введение

Привет, я хочу рассказать вам, как стать Data Scientist, не имея диплома (или просто бесплатно). По иронии судьбы, у меня есть диплом, и он даже имеет отношение к Data Science (Магистерская программа в Северо-Западном университете). Но до этого я работал бухгалтером в Deloitte. Странно, да? Я был далек от Data Science и всего технического. Мне приходилось много изучать онлайн самостоятельно после работы и даже во время магистратуры, чтобы догнать однокурсников, так как я пришел не из технической сферы. Как человек, прошедший через все это, могу с уверенностью сказать, что обучение в университете очень помогает, но совсем не обязательно. Мне кажется, раз я побывал по обе стороны — и диплом получил, и онлайн учился — я смогу дать вам особый взгляд. Получение магистерской степени в Data Science — хороший и быстрый способ попасть в эту сферу, но, к счастью, вовсе не единственный, особенно, если вы не хотите тратить $60–90 тысяч на обучение. Однако от вас потребуется строгая самодисциплина.

Если кто-то спросит меня, как попасть в Data Science, этот пост будет для них. Надеюсь, что мои советы будут актуальны и полезны; во время моего обучения мне очень помогали эти ресурсы. Прежде, чем мы углубимся в детали, давайте разберемся, что такое Data Science.

Чем занимается Data Scientist?

Пропустите этот пункт, если вы это уже знаете.


Ну, исходя из моего опыта работы Data Scientist в нескольких компаниях вроде GoDaddy, HERE, и GoGo, Data Scientist решает задачи с помощью машинного обучения в Big Data. Несколько примеров: предсказать вероятность отказа клиента от подписки, выявить ошибки в данных, вычислительный специальный анализ гигабайт и терабайт данных, кластеризация клиентов по смысловым группам, аналитика текста при определении тем в расшифровках чатов онлайн поддержки, расчет предполагаемых доходов, и так далее до бесконечности.

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

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

Что нужно, чтобы стать data scientist (без траты средств)

Тебя привлекает работа в Data Science? Замечательно. Мы живем в прекрасное время, когда все можно изучать бесплатно. Я пытался сосредоточиться на бесплатных или дешевых вариантах — кто не любит бесплатные штуки? Просто это требует усидчивости и упорства. Я разделю весь процесс на три этапа.

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

1 этап: детство

Чтобы быть хорошим Data Scientist, нужно разбираться в программировании, статистике и математике. Я советую посмотреть как минимум это:

  • Университетский курс введения в computer science (в моем случае это был С++).
  • Менее сложные университетские курсы по математике: такие как многовариантные исчисления, дифференциальные уравнения, линеарная алгебра. Это очень поможет вам понимать элементарные математические процессы в глубинном обучении, например, обратное распространение и матричные операции.
  • Университетский курс введения в статистику и вероятности поможет разобраться с R.

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

  • Математика: Многовариантные исчисления, дифференциальные уравнения, линейная алгебра от Khan Academy.
  • Статистика: Статистика в R и введение в Data Science: Специализация по Data Science от Университета Джонса Хопкинса на Coursera.
  • Python: CodeAcademy.com для общего программирования в Python.

Примеры того, на что способны Data Science, можно посмотреть на Kaggle.com, где ребята изучают и соревнуются в Data Science-проектах. Кроме того, на DataCamp.com есть практические пособия по множеству тем в Data Science — и на R, и на Python.

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

2 этап: отрочество

Сейчас вы уже должны лучше разбираться в Data Science и статистических методах. На 2 этапе вам уже хочется пойти дальше и получше разобраться с машинным обучением. Я понял, что онлайн-ресурсы типа Coursera обычно не охватывают тему так же глубоко, как курсы университетского уровня. К счастью, Stanford’s AI Lab выкладывает много классных онлайн-курсов. Так что вы можете смотреть лекции мирового уровня, комментарии к ним и еще много материалов по теме абсолютно бесплатно. Поэтому советую по возможности смотреть курсы на Coursera и Стэндфордские лекции одновременно. Например, DeepLearning.ai на Coursera очень хорош для понимания практической стороны глубинного обучения, а курс Stanford’s CS231n Computer Vision
— рассматривает все гораздо глубже.

На этом этапе пройдите курсы:

  • Машинное обучение: Andrew Ng’s Machine Learning Course на Coursera. Я прошел этот курс, но не стал платить за сертификат, потому что домашняя работа не подразумевала использование Python или R. Но он все равно очень полезен для понимания основ машинного обучения.
  • Машинное обучение: Stanford CS229 Machine Learning Course. Это старые, но все еще очень актуальные лекции Эндрю Ына.
  • Текстовая аналитика: Прикладной анализ текстов с Python на Coursera. Я не проходил этот курс, но как Data Scientist вам очень желательно обладать навыками текстовой аналитики и обработки естественного языка (Natural Language Processing, NLP).
  • PySpark: Введение в PySpark от DataCamp. PySpark это Python-версия Spark фреймворка для распределенной обработки данных. Проще говоря, он позволяет вам использовать Python с Very Large Data Bases (VLDB). Я пользуюсь им как минимум раз в неделю.
  • Deep Learning: Курс DeepLearning.ai от Andrew Ng на Coursera. Я оплатил сертификат, потому что там очень хорошая домашка. Это не очень дорого, так что я бы рекомендовал заплатить.
  • Компьютерное зрение: Курс Стэндфорда CS231n: Сверточные нейронные сети для визуального распознавания.
  • Обработка естественного языка (NLP): Курс Стэндфорда CS224n: Глубокое Обучение в Обработке Естественного Языка.

Повторюсь, есть и другие ресурсы типа DataCamp, Udacity, edX, and fast.ai, на которых можно найти информацию по множеству тем.

3 этап: юность

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

Во-первых, личные проекты. Если вы учитесь на программе Data Science, большая часть курсов посвящена выполнению проектов по машинному обучению — они хороши и для практики навыков, и для иллюстрации ваших способностей работодателю. Поэтому я очень советую попробовать себя в сторонних проектах. Самый простой путь — Kaggle. Еще, даже если этого нет в требованиях, не помешает иметь на Github примеры ваших кодов и проектов, чтобы показать их вашему будущему начальству.

Во-вторых, скорее всего вам будут задавать вопросы по SQL. Когда я только начинал работать в GoDaddy, я мало что знал о SQL. К собеседованию я немного полистал W3Schools.com, CodeAcademy и погуглил частые вопросы на собеседованиях по SQL. Зависит от компании но, знания по машинному обучению и программированию в любом случае ценятся больше, чем SQL. Этому довольно легко научиться на работе. Здесь Leetcode.com можно потренироваться в SQL и программировании.

Ну и наконец, к завершению этого этапа вы должны обладать необходимыми знаниями, чтобы разбираться в самых разных темах машинного обучения. На чем именно сосредоточиться — будь это RNN, CNN, NLP или что угодно еще — только ваше дело. Что касается меня, сейчас я пытаюсь разобраться в обучении с подкреплением (reinforcement learning).

Заключение

Это был мой первый пост на Medium и я очень надеюсь, что он был вам полезен. Я постарался сосредоточиться на курсах, которые можно пройти, а не на конкретных инструментах или Python/R библиотеках, которые нужно знать, потому что в этих курсах о них так или иначе расскажут.

Если вы хотите посмотреть примеры кодов в машинном обучении, зайдите на мой репозиторий Github, в который я регулярно выкладываю все новое, что узнаю. Я планирую и дальше выкладывать новости о проектах, над которыми работаю, и вообще рандомные мысли на Medium!

С чего начать изучение Computer Science?

Есть какая-то дорожная карта в изучении Computer Science, с чего вообще начинать чтобы хорошо разбираться в вещах? Естественно, я думаю не стоит читать русскоязычные книги. Не смотреть треш и т.д. Но можете кратко описать некий правильный список стеков, чтобы хорошо ничинать изучение Computer Science?

Есть какая-то дорожная карта в изучении Computer Science,

Кнут. В технологиях дальше разберёшься.

Забухай с сисадмином. НУ или Cs 50.

С матанализа. Ну и забухать надо.

что CS 1.6 уже не модно? можно также с админом

Учебник по матлогике.

В универе на первом семестре расскажут. Удачи!

Найди задачу, которую Надо решить и решай.

они бы еще там сами знали

Ну CS50 пополезней CS1.6 будет.

каких стеков? приведи пример стека

Для начала не использовать термины смысла которых не понимаешь.

Читай SICP, потом Dragon Book (в переводе «Компиляторы: принципы, технологии и инструменты»), по реляционным базам труд Дейта «Введение в системы баз данных», по алгоритмам Кнут.

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

дорожная карта
список стеков
не стоит читать русскоязычные книги

Забей, не в коня корм.

В чём оно состоит? Из каких дисциплин?

Подавляющее количество универов живо за счет отсутствия такой «дорожной карты» в качестве стандарта. Рассказывают. И ещё много каких услуг оказывают там где и контент бы прокатил

Кнут. В технологиях дальше разберёшься.

Я к этой инфе шел долгим и околистым путём.

Я просто воровал книги из магазина, и кнут доставил как теоретическая основа.

Я просто воровал книги из магазина

Мне воспитание не позволяло и я как лошара читал их прямо в магазине.

Мне его жизнь «доставила». А книги да, подорожали, хоть тырь ;(

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

Наглость — второе счастье, гг.

Если задаешь такие вопросы — это не твоё. Иди изучать кинологию.

Ты хоть на трекер какой в тему ‘исчшу книгу’ список выкатил? Натырили б тебе, надо только знать что

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

А я когда книжки читал в магазинах, так интернета и за границей особо ещё небыло.

Да я-то мелкий, чо уж там

Первым делом надо пройтись по математике.

cs:go куда прикольнее в мелочах. шпиляю помаленьку, даже перестал нубом быть.

Да я тоже не особо толстый — но твоей способности тырит книги, когда нет денег купить — завидую!

я после универа лет пять не играл, а потом понял что для cs надо cлишком много скилл восстанавливать, потому шпилю в smite

Из преподавамых в рамках программы CS

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

Олифер «Сетевые операционные системы» (и в жопу таненбаума). Крейгон «Архитектура компьютеров и её реализация».

Ты случаем не С++ имел в виду ?

На Coursera есть достаточно много курсов

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

пЕРВЫМ, кУПИ, сЕБЕ, уЧЕБНИК, аНГЛИЙСКОГО! чТОБЫ, нАКОНЕЦ-ТО, нАЧАТЬ, пИСАТЬ, тЕРМИНЫ, нОРМАЛЬНО, Т.Е., пО-аНГЛИЙСКИ, и, нЕ, лОМАТЬ, вСЕМ, гЛАЗА!

Таненбаум в жопу не поместится, там 1000 страниц как минимум

Начинай с дискретной математики. Во-первых, она действительно используется на практике (практически всё, здесь перечисленное https://ru.wikipedia.org/wiki/Дискретная_математика в той или иной мере используется при составлении алгоритмов), во-вторых, это подготовит тебя к изучению любых теорий, оперирующих значками. Можешь взять что-то ориентированное на программистов, например, книжка совсем для чайников так и называется: Дискретная математика для программистов. Еще тебе понадобится что-то по алгоритмам, например Алгоритмы: построение и анализ Кормена. Если это слишком сложно, еще один автор, который популярно пишет для самых маленьких — это Вирт — Алгоритмы и структуры данных. Дальше язык программирования. В случае книжки Вирта это будет Паскаль, которому ты и научишься по ходу чтения.
После того, как ты научишься писать алгоритмы и начнёшь самостоятельно ориентироваться в индустрии (т.е. сможешь понять любую задачу, найти и разобраться в любом нужном тебе алгоритме, изучить и начать использовать любую библиотеку или фреймворк, выбрать прочитать специализированную книжку) можно переходить к осуществлению твоей ебанутой мечты. Для этого тебе понадобится изучить хороший язык программирования. Хороший в том плане, что находясь в тусовке, ты всегда сможешь развиваться и изучать что-то новое, как фундаментальных, так и в прикладных направлениях. Сейчас таким языком является Haskell. Изучая его ты естественным образом придёшь к изучению теории типов, углублению своих знаний во многих разделах абстрактной алгебры, мат. логики, теории категорий, а также в области дизайна программ и языков программирования. Впрочем, как я уже писал, изучение его требует самостоятельности, а следствием самостоятельности будет то, что ты сам выберешь себе специализацию. Например тот же теорвер, если он тебе нравится (мне, например, нет), тогда Haskell будет языком программирования для структуризации и записи алгоритмов, а теория категорий — инструментом, помогающим спроецировать знания предметной области на конструкции языка программирования.

Ну если ты решил заняться Computer Science, то жопу надо разработать. Вот у меня, например 4 года физфака МГУ и 3 года Теорфиза МИФИ + этим летом в магистратуру МИФИ в институт лазерных и плазменных технологий поступаю. Я могу в жопу спрятать все тома Страуструпа и ещё место для пары банок пива останется. После магистратуры надеюсь, что смогу запихать китовый хер.

Естественно, я думаю не стоит читать русскоязычные книги.

Английский-то уже выучил, чтобы снобизмом в отношении родного языка заниматься?

Software Engineering

Базовые курсы программы

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

Правила очного обучения

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

Для выпуска нужно сдать двенадцать курсов и пройти три семестра практики или научно-исследовательской работы. У каждой программы обучения есть базовые курсы, которые нужно закончить для выпуска. Слушателям доступны некоторые заочные курсы ШАД и курсы Computer Science клуба.

Отзывы студентов

Елена Санникова

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

Илья Афанасьев

Отличное место, чтобы прокачать свои знания и навыки, познакомиться с очень интересными людьми и найти свой путь в computer science.

Дмитрий Зырянов

Очень важный опыт. CSC даёт актуальные знания, которые могут реально пригодиться в будущем. Эти знания позволили найти отличную работу. Для меня это было так же важно, как обучение в университете.

Любовь Паина

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

Где искать курсы по computer science

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

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

MIT OpenCourseWare

Это может быть интересно :

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

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

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

Мичиганский университет

Университет подготовил целую серию курсов о программировании на Python (раз, два, три, четыре, и это далеко не всё!), а также о других языках программирования. А вот теоретические курсы Мичиганского университета, на который стоит обратить внимание и практикам — «История, технология и безопасность Интернета» и «Mindware: критическое мышление информационной эры».

Мастер Йода рекомендует:  Как спрятать информацию на сайте от поисковой системы при помощи тега noindex

Как правило, онлайн-курсы платные, однако часть видео и материалов к ним — в свободном доступе. Это не позволит получить сертификат о прохождении, но вполне может дать возможность подтянуть Python и поупражняться самостоятельно.

Университет Дьюка

Ещё один известнейший мировой университет, где учат компьютерным наукам, делая упор, в частности, на науку о данных. Советуем обратить внимание на курс «Управление большими данными с MySQL», а также на несложную обучающую программу, где учат создавать веб-страницы с помощью HTML и CSS, а также Javascript для разработки программ и алгоритмов, которые помогают сделать сайт функциональным и интересным.

Университет Джона Хопкинса

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

Здесь имеет смысл обратить внимание на курсы по даталогии — разработчики онлайн-курсов из Университета Джона Хопкинса постарались на славу, подготовив целый набор программ для изучения науки о данных. Изучив доступные на Coursera программы, можно выбрать для себя один из курсов по анализу данных и статистическому анализу.

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

Школа анализа данных

Двухгодичные очные вечерние курсы от компании «Яндекс» работают с 2007 года. Здесь специализируются на преподавании анализа данных, компьютерных наук и больших данных. Обучение бесплатное, однако требует хорошей математической подготовки.

У ШАД есть отделения в Санкт-Петербурге, Екатеринбурге, Новосибирске, Киеве и Минске. Для студентов из городов, в которых нет филиалов, доступны видеолекции. Кроме того, записи лекций школы по некоторым предметам выложены в открытый доступ чтобы послушать их, достаточно просто перейти по ссылке (курсы «Машинное обучение», «Алгоритмы и структуры данных поиска», «Параллельные и распределенные вычисления» и другие).

Computer Science Center

Совместный образовательный проект Computer Science клуба при ПОМИ РАН, компании JetBrains и Школы анализа данных Яндекса.

Ещё по этой теме :

Computer Science Center приглашает студентов средних и старших курсов, аспирантов и молодых специалистов на бесплатное очное вечернее обучение в Санкт-Петербурге или Новосибирске. Можно выбрать одно из трёх направлений: анализ данных, разработка ПО или современная информатика. Обучение длится два или три года, в зависимости от направления.

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

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

Институт биоинформатики

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

Также в институте существуют очные программы, предполагающие посещение лекций и работу над научными проектами. А среди онлайн-курсов Института биоинформатики на платформе онлайн-курсов Stepic есть, в частности, «Введение в Linux», «Молекулярная биология и генетика», «Основы статистики». Если вы хотите разобраться в работе нейросетей, вам тоже сюда.

Курсы Mail.Ru Group

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

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

Получить диплом бакалавра в университете США по направлению Computer Engineering или Computer Science

Вы решили поступить в американский университет и изучать компьютерные технологии? – Тогда эта информация будет вам полезной. Консультанты EDUSTEPS, которые специализируются на зачислении студентов из Украины в университеты США, сделали для вас подборку американских университетов с сильными факультетами по направлениям: Computer Science и Computer Engineering. Американские университеты предлагают два направления для обучения в сфере компьютерных технологий: Computer Science и Computer Engineering. Часто эти специальности вы можете найти на факультетах Инженерии или Компьютерных технологий. Чтобы понимать, какую специальность выбрать, прежде всего давайте разберемся в разнице этих двух направлений.

5 веских причин изучать Computer Engineering и Computer Science в США

Возможность трудоустройства после окончания университета

Bachelor of Computer Science (Компьютерные науки)

Компьютерные науки или информатика — это изучение компьютерных технологий, как аппаратного, так и программного обеспечения. Это разнообразная область; требуемые навыки являются применимыми и востребованными практически для каждой отрасли в современном технологически зависимом мире. Таким образом, область информатики разделяется между рядом субдисциплин, большинство из которых являются полноправными специализированными дисциплинами сами по себе. Область компьютерных наук охватывает несколько основных областей: компьютерная теория, аппаратные системы, программные системы и научные вычисления. Студенты будут выбирать кредиты в американском университете из этих субдисциплин с различными уровнями специализации в зависимости от желаемого применения степени информатики. Хотя самая строгая специализация происходит на уровне Магистратуры.

Примерный перечень изучаемых предметов:
Applied Mathematics, Digital Image/ Sound, Artificial Intelligence, Microprogramming, Bioinformatic, Networks And Administration, Computer Architecture Networks, Cryptography, Computer Engineering, Operating Systems, Computer Game Development, Robotics, Computer Graphics, Simulation And Modeling, Computer Programming, Software Development, Software Systems, Data Management, Web Development, Design Databases, Parallel Programming, iOS Development, Mobile Development, Memory Systems, Computational Physics

Bachelor in Computer Engineering (Компьютерная инженерия)

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

Диплом бакалавра в университете США

Список университетов где изучать Computer Engineering или Computer Science

EDUSTEPS рекомендует выбрать следующие университеты для получения диплома бакалавра в сфере Computer Engineering или Computer Science
UMass Boston
#202 National Universities Ranking, US News & World Report
• Computer Engineering
• Information Technology – IT BS

University of Central Florida
#171 National Universities Ranking, US News & World Report
#82 in Computer Science, US News & World Report
#82 in Engineering Programs, US News & World Report

• Computer Engineering: Comprehensive Track
• Computer Engineering: Digital Circuits Track
• Computer Science
• Information Technology

University of Dayton
#124 National Universities Ranking, US News & World Report
#137 in Engineering Programs, US News & World Report

• Computer Engineering
• Computer Information Systems
• Computer Science

The University of Illinois at Chicago
#145 National Universities Ranking, US News & World Report
#64 in Computer Science, US News & World Report
#70 in Engineering Programs, US News & World Report

• Computer Engineering
• Computer Science: Computer Systems
• Computer Science: Human-Centered Computing
• Computer Science: Software Engineering

The University of Kansas
#115 National Universities Ranking, US News & World Report
#91 in Computer Science, US News & World Report
#78 in Engineering Programs, US News & World Report

• Computer Engineering
• Computer Science

University of South Carolina
#103 National Universities Ranking, US News & World Report
#111 in Computer Science, US News & World Report
#110 in Engineering Programs, US News & World Report

• Computer Engineering
• Computer Science
• Computer Information Systems
• Integrated Information Technology

University of the Pacific
#110 National Universities Ranking, US News & World Report
#44 in Engineering Programs, US News & World Report

• Computer Engineering
• Computer Science
• Data Science

The University of Utah
#110 National Universities Ranking, US News & World Report
#43 in Computer Science, US News & World Report
#61 in Engineering Programs, US News & World Report

• Games
• Computer Engineering
• Computer Science

Adelphi University
#151 National Universities Ranking, US News & World Report
• Computer Management and Information Systems
• Computer Science
• Applied Mathematics and Statistics

American University
#69 National Universities Ranking, US News & World Report
• Games and Interactive Media
• Computational Science
• Computer Science

Auburn University
#103 National Universities Ranking, US News & World Report
#91 in Computer Science, US News & World Report
#56 in Engineering Programs, US News & World Report

• Software Engineering
• Wireless Engineering – Hardware
• Wireless Engineering – Software
• Computer Science

Auburn Montgomery
#95 Regional Universities South, US News & World Report
#37 TOP Public Schools, US News & World Report

• Computer Science
• Information Systems – Applications
• Information Systems – Infrastructure

Florida International University
#216 National Universities Ranking, US News & World Report
#122 TOP Public Schools, US News & World Report
#162 in Engineering Programs, US News & World Report

• Computer Engineering
• Computer Science
• Informational Technology

Вы выбрали университет в США и специальность? Тогда этот план зачисления для вас:

Computer Science Center: зачем студентам технических вузов дополнительное образование?

Координатор академических программ Яндекса

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

Например, с 2005 г. Академия современного программирования предлагала студентам технических специальностей очные вечерние занятия в Санкт-Петербурге. Программа дополняла предлагаемое в вузе образование: она содержала недостающие курсы из Software Engineering Curriculum – международного образовательного стандарта в области разработки программного обеспечения.

Два года спустя появился Computer Science клуб (CS клуб) при Санкт-Петербургском отделении Математического института Российской Академии наук (ПОМИ РАН), который был открыт для всех желающих. Цель Клуба — рассказать как можно большему числу студентов и IT-специалистов про computer science, показать, какие задачи решаются в этой области, и заинтересовать наукой.

Тогда же, в 2007 году, в Москве начала работу Школа анализа данных Яндекса (ШАД) – двухлетние курсы дополнительного образования в области компьютерных наук, организованные компанией Яндекс. В Школе преподают дисциплины, которые обычно не входят в университетскую программу и связаны с анализом данных. Как и Академия современного программирования, ШАД дополняет образование, предложенное в вузах, но в своём направлении.

В 2011 году ШАД приняла решение расшириться и открыть отделение в Санкт-Петербурге. К тому моменту Академия и Клуб уже были достаточно известны, а их организаторы и преподаватели сильно пересекались. При этом конфликта интересов не было: Академия доступна только для студентов, прошедших конкурсный отбор, а Клуб – для всех желающих. Добавлять ещё один образовательный проект казалось не лучшим решением: преподаватели снова должны были бы вести курсы и там, и там, а среди студентов появилась бы дополнительная конкуренция.

Давайте на примере Computer Science Center (CS центр) в Санкт-Петербурге посмотрим, на кого рассчитано дополнительное образование в области IT, каким образом выстроен учебный процесс и, самое главное, для чего это нужно самим студентам и организаторам.

Объединив усилия, организаторы Академии, Клуба и Школы создали CS центр и его направления. За направление Computer Science отвечает CS клуб. Направление Data Mining можно рассматривать как филиал ШАД. Академия современного программирования преобразовалась в направление Software Engineering. Поскольку Академия существовала при активной поддержке компании JetBrains, то именно JetBrains отвечает на направление Software Engineering.

Первое время студенты поступали на конкретное направление и учились по фиксированной программе, как это было и в Академии, и в Школе. Чуть позже стало понятно, что студенты, которые учатся на направлении Software Engineering, интересуются ещё и анализом данных, а студенты Data Mining – более теоретическими задачами computer science, и так далее. Тогда программа стала более гибкой, и с тех пор студенты могут выбирать больше половины курсов самостоятельно в зависимости от того, что им интересно.

Выбор действительно есть: ещё одна задача CSC – искать специалистов в области информационных технологий и помогать им делиться знаниями с начинающими программистами. Коллекция курсов Центра насчитывает сорок дисциплин, некоторые преподаются каждый год, другие – раз в два года или реже. Сорок – это не считая курсов CS клуба, которые тоже присутствуют в программе в качестве курсов по выбору.

Большинство курсов записаны на видео и лежат в открытом доступе, но это не всё. CS центр занимается дополнительным образованием не только для тех, кто живёт в Санкт-Петербурге. Подготовив несколько онлайн-курсов, Центр совместно с Академическим университетом (СПбАУ РАН) запустил онлайн-программу по основам программирования. Программа состоит из двенадцати полусеместровых курсов, которые дают базу и обзор областей для начинающего программиста.

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

С 2011 года в CS центре учились или сейчас учатся около 500 студентов, из них 116 стали выпускниками, еще 185 в данный момент учатся. Нагрузка на студентов Центра предполагается высокая: около 20 часов в неделю. Не все с ней справляются, поэтому и не все доходят до выпуска. Когда у студента возникают проблемы на основном месте учёбы или появляется потребность в работе, дополнительное образование – это то, чем он может пожертвовать без видимых потерь. Центр относится к этому с пониманием. Некоторым становится неинтересно, но таких меньшинство.

Поступающих больше с каждым годом: учащиеся рассказывают своим одногруппникам в университете о CSC, и это работает лучше, чем другая реклама. На собеседованиях часто звучит вопрос: “Почему вы поступаете в CSC?” – и самый популярный ответ: “Не хватает практики в университете”.

Участие в практиках или в исследованиях готовит студентов к решению задач, с которыми они столкнутся в работе. Это отдельная часть обучения, которая стоит наравне с прохождением курсов. Без практики или исследования студент не станет выпускником, поэтому поиск актуальных проектов – большая задача для Центра.

Быстро развивающейся IT-индустрии необходимо место для подготовки новых специалистов, где программа обучения будет так же стремительно меняться. Обычно в вузе образовательная программа составляется на несколько лет вперёд и успевает очень быстро устареть. Центру гораздо проще давать необходимые здесь и сейчас знания, готовить студентов к работе в IT-компаниях без переобучения и экспериментировать с форматами. Выпускники CS центра – начинающие IT-специалисты с опытом работы в приближенных к реальной жизни проектах, широким кругозором и сформировавшимися интересами в индустрии.

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

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

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

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

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

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

Добавить комментарий