Информатика на Физтехе

27 июня 2014 12:13 BST

Молодёжный комитет МФТИ написал (UPD: запись удалена, но сохранился репост) про изменения в преподавании информатике на младших курсах Физтеха. В посте местами содержится какой-то бессвязный бред, а комментарий проректора Зубцова ещё больше всё запутывает, так что интерпретирую как получится. Насколько я понял, изменения коснутся 2-го семестра информатики, на котором раньше читалась компьютерная архитектура, а теперь будут читать ООП. Кроме того, вместо курса по операционным системам на 3-4 семестрах факультеты смогут выбирать более подходящие им курсы.

МКИ просит конкретно и локанично[sic] высказать свои соображения на этот счёт.

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

Что касается сокращения курса по архитектуре, то это совсем хреновая идея.

Раньше во 2-м семестре информатика давалась под вывеской «Компьютерные основы программирования», при этом на семинарах препы могли давать всё что угодно, в зависимости от интересов конкретного препа. Кто-то продолжал C, кто-то C++, ну а остальные, видимо, заставляли студентов писать тонну кода на каком-нибудь ассемблере (сильно урезанном голом x86 или макроассемблере типа masm), из-за чего этот семестр у студентов не ассоциируется вообще ни с чем кроме ассемблера. При этом на РТ лекции по архитектуре были, но на них никто не ходил, потому что они никак не соотносились с семинарами. На ФАКИ же, например, лекций не было совсем.

Ситуация была совершенно идиотская. Так, например, в конце второго курса практически ни один кандидат на кафедры Intel или МЦСТ не проходил даже минимального курса компьютерной архитектуры, если только он не посещал занятия лаборатории Intel (которая, отчасти, для того и была создана, чтобы сократить разрыв между институтскими курсами и реально требуемыми на кафедре знаниями). Когда я преподавал там у первокурсников, я им несколько раз повторил, что на лекции по архитектуре надо ходить, какими бы унылыми и бесполезными они не казались.

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

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

Знание компьютерной архитектуры и принципов компиляции и исполнения программ необходимо не только тем, кто собирается разрабатывать процессоры и компиляторы, оно, так или иначе, касается всех программистов на любых языках программирования. Разумеется, математики, физики и инженеры всё равно напишут на своих фортранах и матлабах свой проблемно-специфичный говнокод, не понимая разницы между row-major и column-major, засовывая инвариантные выражения и функции в циклы и не используя векторизацию в том же матлабе. Однако, если есть возможность научить их хотя бы основным принципам, может хоть что-то они из этого вынесут, и всем станет веселее жить.

Безусловно, для этого программа курса должны быть адаптирована для разных факультетов. Во-первых, для всех студентов нужно читать лекции. На ФРТК нужно продолжать читать полноценный курс компьютерной архитектуры, ориентируясь на подобные курсы в Intel и МЦСТ и книжку Хеннесси-Паттерсона. Остальным факультетам нужно дать гораздо менее теоретизированную версию, при этом сильнее акцентируя внимание на том, как эти знания помогают в типичных для факультета задачах и языках программирования. Как пример того, что можно рассказать всем этим физикам, химикам и биологам, которые потом всю жизнь будут писать на матлабе:

  • Как влияет процессорный конвейер на производительность и почему ручная «оптимизация» может оказаться проигрышной;
  • Почему вычисления над векторами в матлабе работают быстрее циклов;
  • Почему на процессоре написано «\( N \) ядер», ОС показывает \( 2N \), а параллельная программа ускоряется в \( 1.5N \) раз;
  • Уровни оптимизации в компиляторе, чем -O0 отличается от -O2, и почему небезопасно использовать -O3;
  • Почему вызов функции может нести в себе большие накладные расходы;
  • В каких условиях программа на матлабе или питоне может приблизиться по производительности к такой же на C++, за счёт чего это происходит;
  • Почему биткоины хреново майнятся на процессоре, лучше на видеокартах и совсем хорошо на FPGA/ASIC.

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

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


Программа 1-го семестра по информатике, кстати, тоже абсолютно упоротая, даже если смириться с фактом, что в качестве первого языка изучается C. Первый курс по программированию начинается с ужатых в 2-3 лекции машины Тьюринга и формальных языков, после чего рассказываются основы C и алгоритмы. Это также тупо, как если бы на первых лекциях по механике на 1-м курсе Овчинкин начал бы рассказывать про гамильтонов формализм и принцип наименьшего действия, а потом со словами «вот именно так и обобщается вся механика» переходил бы к кинематике. Откройте Кнута, Кормена или SICP в конце концов, никто не начинает курс по алгоритмам с машины Тьюринга. Но самая жесть заключается в том, что в программе ещё есть задачи на машины Тьюринга и алгоритмы Маркова. Всё, туши свет. Надеюсь, что сегодня уже ни один семинарист таких задач студентам не даёт. И вот непонятно, то ли эту бредятину не могут поменять из-за того что её составлял великий Иванников, то ли из-за банального раздолбайства.



Система Orphus
© 2009–2016 Кузнецов Максим