Comments 64
Все его упоминают, но на самом деле мало кто читал. Он хорош скорее как справочник. А для изучения лучше, скажем, взять Кормена и др. «Алгоритмы: построение и анализ».
А ещё лучше взять Седжвика. Это один из учеников Кнута, считающий, что изложение должно быть максимально доступным. Без десятеричных ассемблеров MIX и конкретной математики в качестве разгрузочных упражнений.
Я когда-то учился по Кормену, так что у меня импринтинг возник. :) Седжвика тоже читал, но он больше практикам подходит, примеры кода этому только способствуют.
Да, слышал хорошая книга — правда по оглавлению почти такая же, как в ссылке.
Хорошая книжка и легко читается, но, к сожалению, короткая. :)
Численные методы — только если хотите ими потом заниматься
Как же Вы собираетесь машинным обучением без вычей заниматься? Уж про вычислительную алгебру точно почитать нужно.
функции-генераторы
generating functions на русском зовутся производящими функциями, а не генераторами.
Graduate

Аспирантура в Computer Science — это не наша аспирантура. Здесь вы продолжаете учиться пару лет и сдаете comprehensive exam, в случае PhD по 5-ти дисциплинам, то есть надо в голове держать очень серьезную базу на этот момент. Очень полезное упражнение (я сдавал на MSc по 3-м, это намного проще).
Мне казалось, что в аспирантуре студенты уже не столько учатся, сколько помогают учить других (TA) и занимаются исследованиями. Другое дело – обучение на магистра, но не стоит путать MSc и PhD. Зачастую встречаются всевозможные комбинации вроде магистратуры, плавно перетекающей в аспирантуру, но в общем случае, согласно моему представлению, это разные программы.

Соответственно, аспиранту в машинном обучении нужно знать примерно всё. M. Jordan составил список того, что нужно прочитать аспиранту, собирающемуся заниматься исследованиями в области машинного обучения.
Линейную алгебру я включил. Оптимизацию тоже. А все остальное — отдельными курсами не стоит мне кажется — чего-то понадобится конкретное — можно изучить.

Да, не всю терминологию на русском еще освоил :)

По поводу MSc/PhD — нет, программа, курсы одна и та же, требования по PhD чуть выше.

Насчет Jordana — я не про PhD писал — это отдельная тема, я пропагандирую универсальность, и смесь инженера/ученого. У нас в России почти негде заниматься исследованиями в области машинного обучения (и получать при этом разумные деньги на жизнь)
Линейную алгебру я включил. Оптимизацию тоже
Линейная алгебра в отрыве от её вычислительного аспекта не очень полезна прикладнику. Как вы, например, собственные числа искать будете? Как корни характеристического многочлена? А вот для многочлена 5-й степени и выше не существует алгоритма, позволяющего найти решение в аналитическом виде. Тут уж без вычей никак.
Можно, конечно, просто взять библиотеку, но понимания того, что она делает, нет. А потом ещё и удивляться, почему же это с матрицами с большим числом обусловленности всё плохо.

У нас в России почти негде заниматься исследованиями в области машинного обучения (и получать при этом разумные деньги на жизнь)
Яндекс в последние лет 10 развёл хорошую «движуху» в Москве на эту тему: в самом Яндексе есть исследовательские группы, есть ШАД, есть совместные магистратуры с Физтехом и Вышкой. Помимо этого, в МГУ есть кафедра Математических Методов Прогнозирования, некоторые её сотрудники предподают и в ШАДе. Наконец, в СколТехе есть группа компьютерного зрения, кажется, занимающаяся Deep Learning'ом (разумеется, в задачах зрения). Вроде, есть ещё Samsung R&D, но про него я ничего не слышал.

Про другие регионы, к сожалению, сказать толком нечего. До недавнего времени в Питере существовала HP [Research] Labs, где занимались всевозможными исследованиями на тему анализа данных (аудио, видео, картинки и текст), но в прошлом году лаборатория вместе с сотрудниками была перенесена в Штаты.

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

Да, вот вы и перечислили почти все места. Еще неплохо обстоят дела в Институте Проблем Передачи Информации и в Институте Системного Программирования. Это, увы, очень и очень немного…

Деньги — уж извините, штука важная, и без них всегда один исход — все уезжают в штаты.

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

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

Деньги — уж извините, штука важная, и без них всегда один исход — все уезжают в штаты.
Ну, судя по тому, что что-то ещё в России осталось, недостатка оных не наблюдается. Ну и не в деньгах же счастье.
Ну DSP в штатах обычно не в Computer Science, а в Electrical Engineering или Computer Engineering. Тут можно очень большой перегруз устроить — если нужен DSP — можно тогда в нем и учить комплексное пространство.
Автор дает очень полезные рекомендации. Только все как-то ориентированно на машинное обучение. Про одну только компьютерную графику можно такую статью сделать, если вдруг кто-то мечтает стать игроделом. А про написание веб-сайтов с блекджеком и отдельной статьи может не хватить. Но в целом, необходимое упомянуто.

Меня смутило только пренебрежительное отношение к языкам программирования. Можно конечно «Scala… сделать основной рабочей лошадкой», а потом выяснить, что индустрия использует C++/Java, при этом желательно наличие опыта программирования на С-подобном языке. Ведь может быть так, что человек просто хочет работать программистом безо всяких machine learning. Мне не ясна логика автора в этом вопросе.
Нет, как на машинное обучение? Чисто для машинного обучение не надо ни компилятор писать, ни СУБД, ни операционку. Как раз я за универсальность.

К языкам программирования отношение не пренебрежительное — это мой накопленный опыт, можно отдельную статью про это написать. Вкраце — почему Скала? В обучении хочется с минимальными трудностями решать сложные задачи. Если вы доказатель теорем будете писать на C, у вас это займет в 10x больше времени, чем на Питоне. И зачем терять время? Но на Питоне вы не напишете высоко-производительный код и у вас никаких статических проверок. Скала — совмещает оба — можно заниматься ситемным программированием на ней, и можно писать AI код.

Перейти со Скала на C++/Java не так сложно (но очень неприятно!)
Популярность Scala сейчас растет. Мне удалось найти работу не имея попыта в Java — Scala оказалось достаточно.
Почитал статью. Потом учебную программу нашего универа. Потом снова статью. Понял что родился не в той стране.
Университет должен давать базу, но если этого не происходит — всё в ваших руках. У меня в университете было не много интересного и я это интересное сам осваивал (например по новому языку за семестр). Почитайте что-нибудь из списочка (https://github.com/vhf/free-programming-books)
У нас осталась очень сильная математическая школа все равно, если есть тяга к знаниям — всего можно добиться
Корочку надо получать на уровне топ-университетов в первую очередь. Знаний у вас может быть сколько угодно, только никому вы с этими знаниями не нужны, если не проходите формальный отбор на какую-нибудь визу по наличию диплома.
Для получения визы как раз-таки топ-университеты и не обязательны.
Сам уехал в штаты по H1B визе имея диплом БГУ (далеко не топ в мировом рейтинге).
Ну ок, «корочку надо получать в первую очередь», можно так сказать. Без диплома, думаю, не уехали бы.
Все это хорошо и важно, но немножко 20-й век сплошной.

Есть вещи более современные. После всех этих графов и синхронизаций и ассемблеров, бац — а монады человек в упор не понимает. CPS в упор не понимает. Почему wait/notify не нужно, не понимает.

Так что… грустно это все. Как можно ту же теорию моделей освоить без какой-то более серьезной базы, я не знаю.

Но вернемся к элементарным вещам. Лямбда-калкулюс тут где у вас?

(Я, видимо, немножко туповат — не вижу, а кто автор-то?)
Вы думаете монады в 21-ом веке изобрели? Теории множества и теории баз данных (где теория моделей присутствует) вполне хватит, чтобы быстро понять все что нужно из теории категорий.

CPS (Continuation Passing Style) изобрели в 1975 году

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

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

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

И речь не о том, чем типа я или кто-то хочет заниматься; речь о понимании сути того, чем человек занимается. Если вы лично остановились в своем развитии на «реляционном калькулюсе», то мои соболезнования.
Хорошо, что вы спросили, зачем нужно лямбда-исчисление. Это одна из самых удобных формализаций вычислительного контекста с точки зрения размера и формальности доказательств с её использованием. Правила редукции на основе какой-нибудь машины Тьюринга выглядят крайне синтетическими, и содержат больше бесполезных подробностей нежели смысла. Во многих ВУЗах и теорию множеств не рассказывают, но от этого никак не изменится тот факт, что она крайне удобна в качестве оснований математического анализа и других разделов математики.

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

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

Может дело в вежливости, а не в разности мнений?
Я вот ничего против функциональщины не имею, но больше всего меня отталкивает от нее это наше community — напыщенные, самоуверенные «олимпиадники», которые хамят на каждом шагу.
Вообще всегда знал, что хаскелисты — люди агресивные, такой вам вопрос на встречу — с чего вы взяли, что функциональное программирование — это круто? По-моему логическое программирование ничем не хуже. Можно турнир устроит — Haskell vs. Prolog.
Prolog плохо позволяет писать обобщенные алгоритмы. Это приводит к тому, что к нему нет стандартизованных библиотек и в реальных задачах он не очень практичен.
Но изучать его надо, хотя бы что бы подойти к программированию в ограничениях. Да и после него проще изучать SPARQL и Erlang :-)

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

Программисты же обычно люди рациональные, и не выбирают языки программирования, пользуясь метриками вроде «круто». Если у вас есть более конкретный вопрос, я мог бы вам на него ответить.
И еще в догонку — дайте пожалуйста формальное определение монады в формализме ZFC а не в теории категорий.
Монады это функуторы, область опередения и значения которых часто не являются множествами. ZFC с подобными объектами не очень хорошо работает.
К тому же сомневаюсь, что ZFC полезнее теории категорий для программиста. Да и не проще.
Ну все, Глеб срезал.

ZFC ваше тут ни пришей не пристегни, товарищ оппонент. Монады от теории множеств не зависят.

Впрочем, спасибо, открыли мне немножко глаза на образ мышления людей, «обучившихся компьютерным наукам». Я со своими студентами тоже все удивляюсь. Линейная алгебра от зубов отскакивает, а что такое композиция двух функций, первый раз слышат.
О да, срезал, как у Бунина… ZFC со всеми объектами нормально работает, видимо вы не в курсе.
Ну что вы, в мои планы вовсе не входит развеивать какие-либо из ваших сомнений. Сомневайтесь на здоровье, не буду вам мешать.
Замечание: класс объектов обычно не является множеством в смысле аксиоматической теории множеств. Категория, в которой объекты составляют множество, называется малой. Кроме того, возможно (с небольшим исправлением определения) рассмотрение категорий, в которых морфизмы между любыми двумя объектами также образуют класс, или даже большую структуру. В этом варианте определения категория, в которой морфизмы между двумя зафиксированными объектами образуют множество, называется локально малой.

Неужели так сложно хотя бы прочесть определение?
Не надо от аглебры и теоретикомножественной топологии отказываться. Очень полезное для понимания того, что в программе происходит, продолжение теории множеств.
Не говорю отказываться, но не изучать абстрактно. То есть понадобилось — тогда уже изучить. Тут похожий подход нужен, как в физике — берем аппарат тогда, когда он нужен, а не заранее не пойми зачем.
Эти дисциплины полезны не столько сами по себе возможностью применения (этим тоже, но обычно можно пережить и без них), сколько тем что дают новый взгляд на базовые понятия. Как и теория множеств.
Математики для computer science мало не бывает. Но нельзя сначала закончить мехмат, а потом учить computer science. Да и на мехмате не все выдерживают одну абстракцию без практического приложения. Вот посмотрите книжку Виану по теории баз данных — там очень хорошая математика, но вся сразу в приложении.
Видимо Computer Science != Information Technologies
Я учился на M.Sc.IT в Британии, из вашего списка нам преподавали от силы 20% дисциплин
Ну IT = бизнес образование по сути, на одном science без бизнеса далеко не уедешь
Я учился в Германии на степень диплом-информатик (потом эту степень переименовали в M.Sc.). Курс был очень похож.

P.S.: Хорошая книга по model checking'у (одна из ветвей верификации): mitpress.mit.edu/books/principles-model-checking
Очень интересно про Германию, там всегда была мощная школа по Computer Science, но все никак не получается там сделать конкурент силиконовой долины. А прямо совсем похож, или какие-то отличия? Немецких студентов, приезжающих в штаты на PhD обычно отличала особенно сильная математическая подготовка.
Ну тут первые 2-3 семестра основы математики (анализ, линейная алгебра, дискретная математика, теория вероятности, мат. логика и игры, основы нумерики) являются общими лекциями для информатиков, математиков и физиков (+ учителя). Соответственно поблажек там нет, учат доказывать, разбираться в нотации итд. После второго года можно выбирать специализацию в том числе и в теорию (advanced alogirhtms, complexity beyond NP, parameterized algotihms, automata theory and logic, formal verification etc.). Заставляют сохранять некий «микс» между теорией и практикой, но специализаций очень много — практически по числу кафедр.
и еще, тут лекции часто ведутся не по одной книге как в часто штатах или Англии (где даже слайды стандартные по книге), а по нескольким книгам и/или пэйперам. Это заставляет студентов читать разные книги и сравнивать источники.
Вот еще пара ссылок на подобные же идеи — собрать из онлайн-курсов университетскую программу: http://abava.blogspot.ru/2014/05/blog-post_10.html
Вполне получается.

Мне кажется, такого будет больше — учебные сайты будут собирать «программы» под конкретных заказчиков
Вот мнения аспиранта из Brown, который учился в МГУ:

Добавлю мои пять копеек. Наверное, больше не с точки зрения «сделай сам», а как человек покрутившийся здесь в graduate school.
Снача немного воды.

Имхо, MSc нужен только тем, у кого нет достаточного образования после бакалавратуры. Дело не в специализации. Средний бакалавр помимо major еще получает и minor, со всеми вытекающими. А еще курсы по истории и искусству может взять. У него просто может не быть достаточно знаний. У нас, в Брауне, были MSc-шники, у которых CS был лишь minor, и им хотелось переквалификации. Я, как PhD студент, обязан был брать курсы. Это было жутко лишнее, и только занимало время. После МГУ-шной подготовки курсы смотрелись как детский сад. Я не пытаюсь быть элитистом и говорить про «лучшее математическое образование в мире». Математические курсы, которые я брал: комбинаторика, дискретная вероятность, приближенные алгоритмы, были очень загружены. В этом основное отличие от России: нужно много пахать в течение семестра. Но материал воспринимался вторично, и мне казалось, что курсы идут ооочень медленно. Вывод: если вы учились (не зубрили, забивали или ещё что), в приличном Российском ВУЗе с приличной программой, MSc с математическими курсами вам нафиг не сдался.

Немного воды про курсы. Оставим математику, вернёмся к более техническим вещам. В Российском образовании этого реально не хватает. Имхо, основной аргумент идёт так: мы научили человека мыслить логично, а в практичных вещах он и сам разберётся. Фишка в том, что разобраться во всём объёме сложно. Поэтому взять курс с какой-то выжимкой по предмету может очень помочь. Практики чисто в виде implementation в России точно не хватает. В Штатах, в курсе по СУБДам могут спокойно попросить дополнить движок новыми оптимизациями или новыми методами хранения. В курсе по сетям могут попросить реализовать TCP/IP. В курсе по ОС реализовать куски операционки. В моё время в России этим никто не занимался, что плохо. Потому что это позволяет понять как всё устроено на практике. Программирование было, но мало. Ещё одна фича graduate school, которая мне очень понравилась: собственные проекты. Если брать graduate курс, то часто могут попросить придумать и реализовать небольшой проектик, можно в команде. На статью не хватит, но работать практически научит. Вывод: я бы не сказал, что программа в России прямо сильно страдает, это можно исправить. Но вот практическую составляющую поднимать нужно, она там нулевая. Одно но: деньги. В Штатах на курсе присутствует орава платных TA-ев, которые способны все эти проекты проверять. Одному-двум человекам справиться сложно, особенно профессорам или аспирантам.

Теперь немного критики. Можно себе представить MSc таким вот гениальным инженером, но на практике это не так. В Штатах развитой капитализм. В первую очередь MSc-шники приносят деньги. В связи с этим никто не будет требовать слишком много из страха потерять народ. Я общался и делал что-то совместное с «мастерами». Уровень часто низкий. Как всегда, всё зависит от человека. Честно говоря, среди бакалавров, имхо, гораздо больше смышлёных ребят. Многие люди воспринимают MSc просто как карьерный move, ради корочки. Профессионал выходит соответствующий. Кстати, где-то comprehensive экзамены есть, где-то нет. В Брауне, например, нет. Достаточно взять какое-то количество курсов из разных дисциплин. Опционально можно ещё сделать какой-нибудь проект и написать тезис. Всё. Имхо, это правильно. Comprehensive exams по принципу знал-сдал-забыл --просто зубрёжка, которая в реальности ничего не проверяет. Зачем сдавать одно и то же по два раза? В любом случае, не стоит забывать, что Штатовские вузы — просто брэнд, со всеми рекламами, рейтингами и прочей фигнёй. Проработка курсов в своём роде тоже грамотный маркетинг. Не стоит думать, что выпускник какого-нибудь Stanford в десять раз круче всех остальных. У него просто корочка красивее. Человеческий фактор важнее ВУЗовского.
1 hr · Like · 1

Alexander Kalinin Предложенный выше курс мне понравился. Я не уверен, что всё это легко выполнимо в рамках ВУЗовской программы. Каждый курс будет слишком нагружен. Плюс, теоретику часто не нужны ЯП или ассемблер. Например, если он занимается графами. Хотя я сторонник глубокой специализации (разумеется, с учётом необходимых базовых областей). Для всего остального существует collaboration. Собственно, проще всего — понять что нужно, посмотреть course prerequisites, и составить программу. С остальным можно познакомиться самостоятельно и если потребуется. Имхо, главный скилл хорошего профессионала --умение быстро находить информацию и обучаться. Забывать что-то и не знать чего-то никогда не стыдно.

Книжки и курсы:
1) По алгоритмам добавил бы Седжвика. У него есть очень хороший курс по алгоритмам на Java, что делает его доступным. И да, нижние границы для сортировки он выводит Курс на Coursera тоже есть.
2) По теории вычислений: Arora, Barak «Computational Complexity: A Modern Approach». Хорошо написана, хотя некоторым сложновато. Она поновее заодно.
3) Книжка про «Approximate algorithms», которую ты приводишь, --про _приближённые_, а не рандомные алгоритмы. Основной Грааль там в том, что бы выполнять polynomial-time approximation (PTAS) с любым уровнем приближения (эпсилон), если возможно. Многие из приближённых алгоритмов не рандомны, для многих существует де-рандомизация. Плюс, многие рандомные алгоритмы не являются приближёнными. Книжку читал ещё до того, как вышла
4) Про ЯП и компиляторы. Не вижу архи-большой необходимости спускаться в ассемблер для всех, если честно. Особенностей много, в зависимости от архитектуры. Если ты берёшь только ANTLR или JavaCC, ты теряешь LALR-грамматики. Это упущение. Вообще, C/C++ не страшный. Более того, в большинстве нормальных мест его очень активно используют. На Bison написать грамматику можно не медленнее чем на Java-свистульках. Вообще, как можно больше стоит учить про параллельное программирование и соответствующие алгоритмы.
5) В архитектуре я не вижу смысла проектировать CPU в обязательном порядке. А вот узнать про особенности архитектур стоит. Разница между ARM и x86-64, например, значительная. Например, с точки зрения orderings. Не зная этого, не будешь хорошо программировать параллельно. Там же и узнаешь про кэши и их когерентность, что для multi-core становится всё важнее.
6) В AI вообще ничего не вижу про Constraint Programming. А тема, замечу, важная. И да, 8 (и не только 8) ферзей нормальный солвер по местам расставит Туда же, в принципе, входят LP и MIP, так что это относится к оптимизации, которую ты упомянул.

Извиняюсь за каламбур Что-то, наверное, пропустил. Я считаю, что в MSc «топовых ВУЗов» заложено слишком много веры, и не стоит их считать за золотой стандарт. Самостоятельно или в ВУЗе практике всё равно не обучишься, хотя базовые знания помогут более-менее разбираться в теме. По мне, так когда начинаешь заниматься чем-то реальным, знания приходят очень быстро и более естественно.
так практика (ее отсутствие) в вузах России именно с деньгами и связана. Нет денег на оплату руководителей (исполнителей) этой практики — нет и практики :(
Мнение программиста, закончевшего MIT:

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

Из того что заметил:
— у нас первый курс по теме был достаточно тероетический, проводился на scheme и по этой книжке: en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs
Выбор scheme был интересен т.к. этому языку мало где учат (что позволяет уравновесить возможности разных студентов) но при этом на нем можно написать очень глубокие вещи — символическую манипуляцию, и тд. Одна из задачек заключалась в том чтобы написать интерпретатор scheme на scheme. Так же scheme использовался для курса по искусственному интеллекту.

Ну эт было давно — в недавнее время со scheme перешли на python и старички начали жаловаться что мол «падает у нас качество и мало мы издеваемся над юнцами».

По алгоритмам вот этот курс очень понравился — он на undergrad уровне но там есть и про b-tree и про randomization чуток:
stellar.mit.edu/S/course/6/sp14/6.046/materials.html

Еще понравился курс computer language engineering: ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-035-computer-language-engineering-spring-2010/lecture-notes/
Тут цель — написать свой собственный компилятор — с оптимизацией и переводом на ассемблер. И это включает в себя обучение ассемблера. И сразу появляется резон выучить эту нечисть.

Вот еще интересный рисунок — как картину обучения видит MIT
www.eecs.mit.edu/docs/ug/6-3.pdf

То есть в принципе — меньше внимания уделяется конкретным языкам (C++ и SQL вообще не упоминаются) но больше теории и практики на конкретных задачах (напиши интерпретатор, напиши компилятор, хоть и на Java, напиши простенькое ядро и тд)…

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

Вот так-с… does this help?
Диалог с американским профессором:

Professor: Teamwork is essential. The choice of programming languages is also curious. Why Scala?
1d ago

Pavel Velikhov Yeah, thanks, I forgot about teamwork, a lot of projects in: compilers, operating systems, databases, definitely teams of two. Scala: its really nice to have both a low-level language and a high-level language. You can build pretty-much systems code...more
1d ago
Pavel Velikhov
Pavel Velikhov I did though listen to a lecture about Scala's collections and map operator, which is in a complete state of mess, but I hope they will fix it soon.
1d ago

Professor: Agreed. I would also add a course on software testing and just as you had mentioned a formal methods, which is missing from your synopsis. For example, I would add a course on theorem proving (automated or interactive) and/or model checking and/or using theorem proving or model checking for program analysis. I have experience trying to teach all of these, will email you if interested. For a functional language, I would go with either Lisp (as it is classic) or Haskell (as I am in Scotland). I would not chose Scala, since despite the idea being good, there are quite a few things to fix.
1d ago

I put theorem proving into AI and Database Theory, so from my experience there would be no need for such class — expect a couple seminars on applying the techniques to the specific problem. I like Haskell as a language and I'm aware of some serious flaws in Scala (I was very optimistic about it when they started). But it gives all Java libraries and frameworks and its much much easier to get a job with Scala skills.
Павел, спасибо за интересную информацию.
Попробовал сделать примерное сравнение с курсами по специальности 22-01 «Вычислительные системы, комплексы и сети», совпадение процентов на 80.
Обучение студентов: американские университеты в сравнении с советским вузом
P.S. Обнаружил эту дискуссию четырехлетней давности, где какие-то КТН учили меня ZFC, приводя в пример американских профессоров, которые все лучше знают.

Я как-то не отметил тогда тот факт, что я как раз американский профессор.
ZFC я тоже преподаю моим студентам, если чо. И теорию моделей. Но собравшиеся полуобразованцы, включая этого срезавшего Глеба, путающего Бунина с Шукшиным, видимо, пока им credentials не предъявишь, будут продолжать нести свою фигню. Ну вперед. Вы ж не мои студенты, не переучивать же вас.
Only those users with full accounts are able to leave comments. Log in, please.