Элективы на второй семестр CMU

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

Историческая справка

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

Существуют требования по количеству элективов за всю программу. Подробнее я уже писал [тут] А именно, надо иметь 45 юнитов элективов за три семестра. Типичный полный курс дает 12 юнитов, мини-курс – 6 юнитов. Иметь более чем два электива за семестр – тяжело, просто не хватит времени. Поэтому рекомендуемая нагрузка в юнитах по трем семестрам: 12/12+12/12 либо 12/12/12+12.

Поскольку в том семестре у меня был лишь один мини, в этом я должен взять полтора курса, чтобы наверстать. Таким образом, у меня будет 6/6+12 /12+12

Что будем изучать?

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

  • 15-640 Distributed Systems (12 units)
  • 08-722 Data Structures for Application Programmers (6 units – mini)

15-640 Distributed Systems

12 юнитов, лабы, групповые проекты, два занятия в неделю.

Этот курс очень популярен. Это можно прочувствовать на размере его wait-list (список ожидающих). Т.е. список тех студентов, которые хотят записаться на курс, но пока что им не хватило места. На картинке можно видеть, что я восьмой в списке из 112 человек.

Capture

Особенно его популярность ощущалась на первой лекции. Я даже сделал фотографию [тут]. Толпа примерно такая же, как на консультации Овчинкина (физтехи поймут). Сам по себе курс меня впечатлил. Пока что я мало что могу сказать по делу, но из интересного:

  • все задания будут выполняться на языке Go – стильно, модно, молодежно
  • основная цель курса – написание распределенных приложений, устойчивых к сетевым проблемам
  • например, среди учебных проектов будет написание распределенного bitcoin майнера. Конечно, с упором на распределенность, а не производительность.
  • похоже, придется писать много кода
  • будет три групповых проекта
  • тему третьего проекта разрешается выбрать произвольно
  • еще один пример проекта, который был сделан в том году: аэрохоккей на бесконечной доске с произвольным числом пользователей
  • в конце курса будет голосование за лучший финальный проект, победитель получит в награду raspberry pi =)

Краткое описание курса на английском:

15-440 is an introductory course in distributed systems. The emphasis will be on the techniques for creating functional, usable, and high-performance distributed systems. To make the issues more concrete, the class includes several multi-week projects requiring significant design and implementation.

The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems.

The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects.

Пока курс не начался, и мне даже недоступен его syllabus (учебный план), но это обещает быть интересным. Буду держать в курсе !

08-722 Data Structures for Application Programmers

Два занятия в неделю, многочисленные лабы по программированию и quizzes (опросы) каждую неделю.

Здесь все более прозаично. Курс выбран как сравнительно несложный способ наверстать упущенные 6 юнитов.

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

Курс позиционируется как очень хороший способ подготовиться к собеседованиям:

This course is an introduction to Data Structures and a few fundamental algorithms for students with some prior programming experience (functions, loops, and arrays mainly in Java). It covers the conceptual and implementation views of most common data
structures and algorithms. It also goes over the Java Collections (such as List, ArrayList, LinkedList, Set, HashSet, TreeSet, Map, HashMap, TreeMap, and PriorityQueue) to solidify the understanding of data structures. There is an introduction to the analysis of algorithms that operate on them. Following learning-by-doing methodology, there will be many repetitions of writing code and reviews of the items covered in lectures.

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