vak: (Default)
[personal profile] vak
Увидел тут на днях расписание занятий четвёртого курса Физтеха - кто-то в фейсбуке вывесил.  И стало мне грустно-печально.  Вспомнилась старая шутка про военную академию, где генералов учат мастерски побеждать в давно прошедшей войне.  Здесь же преподают вещи, которые имели огромную ценность во времена Королёва и Курчатова.  То есть пятьдесят лет назад.  Не то, чтобы оно бесполезно, нет, но мир заметно изменился с тех пор.  Не могу судить про теорфизиков, но уж на программистском факультете совсем другие приоритеты требуются.

К примеру.  Мой друг Юрий Панчул [livejournal.com profile] panchul разработал концепцию лабораторного курса для программистских специальностей. Краткий конспект:
  1. Сборка простых электронных схем на основе микросхем малой степени интеграции
    • Знакомство с концепциями логического элемента (gate), D-триггера (D-flip-flop) и синхросигнала
    • Макетная плата (breadboard), батарейка, лампочки (LED), проводочки, микросхема генерации синхросигнала (555 Timer), CMOS микросхемы серии 4000, 7-сегментный дисплейчик
    • Лаба - сборка на макетной плате всяких счетчиков и бегающих огоньков

  2. Дизайн цифровой логики на языке SystemVerilog с реализацией на платах ПЛИС (FPGA) от Xilinx или Altera
    • Знакомство с языком SystemVerilog и его конструкциями - модуль, порты, сигналы, always-blocks, continuous assignments, blocking и non-blocking assignments
    • Знакомство с концепциями моделирования (HDL simulation), логического синтеза, place-and-route, static timing analysis
    • Знакомство с бесплатным/дешевым софтвером Xilinx ISE WebPACK, Altera Quartus II, Aldec HDL, ModelSim-Altera Starter Edition
    • Знакомство с FPGA платами - Xilinx Basys 2, Xilinx Nexys 2, Altera DE0, Altera DE1
    • Лаба - переписать на верилог, засинтезировать и загрузить на плату дизайнов счетчиков и бегающих огоньков из первой лабы

  3. Конечные автоматы и дизайн с адресуемой памятью
    • Знакомство с концепцией конечного автомата (state machine)
    • Знакомство с устройствами ввода на плате - клавишами и кнопками, и как их debounce
    • Знакомство с концепцией адресуемой памяти и интерфейса шины
    • Лаба - конечный автомат, принимающий от переключателей команды чтения и записи в память всяких последовательностей

  4. Что такое процессор?
    • Знакомство с концепциями комбинационной и секвенциальная логики (combinational and sequential logic)
    • Лаба - простейший процессор, выполняющий команды в один длинный цикл. Дискуссия о максимальной тактовой частоте.
    • Концепция конвейера
    • Лаба - конвейерный процессор с 3-5 стадий и без interlocks - hazards компенсируются nop-ами
    • Концепция stalls и forwarding
    • Лаба - конвейерный процессор с stalls и forwarding

  5. Программирование на голом железе и зачатие операционной системы
    • Лаба - знакомство с платой chipKit32 / PIC32 / MIPS и программирование её на С с помощью Arduino-подобного GUI. Кнопочки, лампочки, дисплейчик, IO Shield.
    • Введение в ассемблер на примере MIPS
    • Лаба - загрузка в память программок на ассемблере
    • Концепция простейшей многозадачной операционной системы
    • Лаба - своя игрушечная многозадачная ОС, которая бутится, ставит обработку прерывания по таймеру, в котором переключает задачи по схеме round-robin.

Конструктивная критика приветствуется.

Date: 2011-09-30 06:42 (UTC)
From: [identity profile] dom3d.livejournal.com
Лабораторный курс мне понравился.

А учителя в физтехе бараны по сравнению с практиками типа Панчула.

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

Date: 2011-09-30 07:36 (UTC)
From: [identity profile] dom3d.livejournal.com
Сергей, Вы пишете, что На Физтехе есть прекрасные и лекторы, и семинаристы.
Ага. Я помню у нас в ХАИ было 50 дисциплин.
А сколько было на самом деле нужно для моей будущей работе. И кроме, часто в нужной дисциплине дают не то что нужно, и часто то, что уже давно устарело.

Date: 2011-09-30 07:10 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
на самом деле-то это все не важно и значения не имеет.
какая разница, чему конкретно учить? к моменту окончания все устрее безбожно.
так же не реально все охватить даже по вершкам.

Date: 2011-09-30 07:26 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
Чему учить - важно.

нет, не важно. важно поставить мышление.

Да, есть небольшой процент студентов, которые сами научатся. В моё время из всего курса (около 100 человек) крутыми программерами становилось 2-3 человека, стабильно, каждый год. Этого слишком мало.

а остальные не станут, как ни учи. спосбности не привьешь.

Основы не устаревают

а это чьи слова "Здесь же преподают вещи, которые имели огромную ценность во времена Королёва и Курчатова. То есть пятьдесят лет назад. Не то, чтобы оно бесполезно, нет, но мир заметно изменился с тех пор."?

И охватить их можно - по аналогии с теми же лабами по физике.

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

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

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

а зачем нам каждый год 300 разработчиков процессоров из одного института?

Date: 2011-09-30 15:04 (UTC)
From: [identity profile] panchul.livejournal.com
*** нет, не важно. важно поставить мышление. ***

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

И, если вы правы, почему например врачей все-таки учат биохимии, анатомии и как резать на лабах, а не теорфизике? Почему от врачей не требуют самообразования для реальной работы?

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

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

Date: 2011-10-02 15:07 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
Поставить мышление нужно, но зачем ставить мышление скажем писателя компиляторов теорфизикой и при этом не преподавать алгоритмы, используемые в компиляторах?

а что, именно теорфизикой в действительности мучают?
не, для LR(1) грамматики теорфизика наверное и правда излишня, то вот если дальше начать буриться, в современные, то там как бы не произошла смычка через какую-нибудь теоркат.

И, если вы правы, почему например врачей все-таки учат биохимии, анатомии и как резать на лабах, а не теорфизике? Почему от врачей не требуют самообразования для реальной работы?

ну здрасте, а ординатура?

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

ну расскажите, какое такое специализированное железо доступно и оспользуется какой-либо субд, сайтом на java/php/ror? ms office? 1c бухгалтерией? SAP/R3?

Date: 2011-09-30 08:42 (UTC)
From: [identity profile] v1adis1av.livejournal.com
Да и для физиков-экспериментаторов этот курс (м.б., в слегка урезанном виде) был бы полезен. Я бы и сейчас на такие курсы повышения квалификации походил, серьёзно.

Date: 2011-09-30 10:20 (UTC)
From: [identity profile] dkirienko.livejournal.com
А какой программистский факультет имеется в виду?

Date: 2011-10-01 06:37 (UTC)
From: [identity profile] dkirienko.livejournal.com
А про существование ФИВТ (факультет инноваций и высоких технологий) вы в курсе?

Date: 2011-10-01 19:42 (UTC)
From: [identity profile] dkirienko.livejournal.com
А разве не правильней считать современным программистским факультетом именно ФИВТ, а не ФУПМ?

Date: 2011-09-30 12:08 (UTC)
From: [identity profile] tim-caper.livejournal.com
Конструктивно вряд ли получится, потому что большинству программистов эти знания нужны как теория поля.
Лично мне например основы тензорной алгебры оказались полезнее.

А вообще-то... жаль, конечно, что у нас нигде не учат ни программированию, ни экономике на таком уровне, на каком на физтехе учат физике, но это должны быть ДРУГИЕ институты.
По-моему.

А так-то лабы занимательные, кто б спорил.

Date: 2011-09-30 12:34 (UTC)
From: [identity profile] ak04.livejournal.com
А зачем конечные автоматы? Ну то есть теорию знать надо, но зачем лаба по ним?
А вот добавить понятия кеша и его использования для ускорения было бы полезно.
И еще одно добавление в пункт 5. Не своя игрушечная ОС, а общая ОС в которую в качестве заданий надо добавлять различные возможности.
ОС конечно предельно маленькая по размеру.

Date: 2011-09-30 15:16 (UTC)
From: [identity profile] panchul.livejournal.com
*** А зачем конечные автоматы? Ну то есть теорию знать надо, но зачем лаба по ним? ***

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

*** А вот добавить понятия кеша и его использования для ускорения было бы полезно. ***

Я думал про лабу про кэш. Но если начинать про кэш, то надо сначала перейти к multi-way cache, потом к cache coherency, всяким многоядерным системам, при которых ядра подсматривают кэши друг у друга - это лучше делать отдельно, в, так сказать сиквеле для курса.

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

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

Date: 2011-10-03 08:13 (UTC)
From: [identity profile] ak04.livejournal.com
Про конечные автоматы понял.
Про кэш есть простенькие примеры как грамотное использование кэша увеличивает прозводительность раз так в 10. Без всякой многоядерности. А то об этом очень часто забывают. Подробности и развитие идеи - в следующем курсе.
Про ОС. Чем меньше кода - тем лучше. Это я согласен. Но добавление возможностей в чужой код - очень и очень полезный скилл.
(deleted comment)
(deleted comment)

Date: 2011-10-02 15:09 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
ну а разве управление инжектором у двс не через это самое сделанно?

или там шаговым двигателем в винчетере?

Date: 2011-09-30 16:48 (UTC)
From: [identity profile] sab123.livejournal.com
Каждый верхний пункт - на семестр объема.

Date: 2011-09-30 21:10 (UTC)
From: [identity profile] panchul.livejournal.com
Если читать для электронщика, последовательно. Но если делать экспресс-курс для программиста, то можно ужать это в 2 семестра или даже 1 (если очень экспресс).

Date: 2011-09-30 18:20 (UTC)
From: [identity profile] raydac.livejournal.com
программист или гасконец вощем или отстой, гасконцу не нужны лабы и программы с вузами, так как он с детства академик... иммхо

Date: 2011-10-01 19:57 (UTC)
From: [identity profile] raydac.livejournal.com
невежество - штука относительная )))
From: [identity profile] pingback-bot.livejournal.com
User [livejournal.com profile] beldmit referenced to your post from Обучение программированию (http://beldmit.livejournal.com/329663.html) saying: [...] http://ramlamyammambam.livejournal.com/160954.html [...]

***

Date: 2011-10-01 23:29 (UTC)
From: [identity profile] zo-zo-le.livejournal.com
Очень интересно! Буду читать медленно и внимательно. Но, первое впечатление, все это опоздало лет на 15 :-((((

Re: ***

Date: 2011-10-02 06:42 (UTC)
From: [identity profile] panchul.livejournal.com
Что вы имеете в виду под "опоздало"? Что это надо было делать раньше или что это типа неактуально?

Конечно, это надо было делать раньше - я сам выучил Verilog в 1996 году.

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

Будет очень жалко, если дизайн высокопроизводительного железа не разовьется в России, как он развился в США, Японии, Европе и сейчас развивается в Китае. Для России нет объективных ограничений, почему это не могло бы произойти, особенно сейчас, когда происходят большие перемены (переориентация с Wintel-платформы на мобильные устройства и cloud-computing, а также сростание домашней электроники и мобильных устройств).

Так что лучше позже, чем никогда.

Также см. мой другой вводный пост - http://ru-programming.livejournal.com/1271886.html
Edited Date: 2011-10-02 16:17 (UTC)

Re: ***

Date: 2011-10-06 15:47 (UTC)
From: [identity profile] zo-zo-le.livejournal.com
Ко мне пришли оба Ваши ответа, и первоначальный и отредактированный. В первоначальном ответе Вы более категоричны :-))))

Что это надо было делать раньше или что это типа неактуально?

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

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

http://dmi3s.blogspot.com/2011/04/ii.html

Автор несколько раз говорит о "западывании" на 10 лет. Но, это до 1991 года! Если прибавить сюда лет 5 "безпредела", то получим как раз 15 лет :-(( :-))

Эти вещи сейчас стали не просто массовыми, а очень массовыми. Чтобы понять это достаточно зайти в ларек "Игрушки" на каком нибудь "Черкизоне". Игрушек с использованием ПЛИС множество. И как любая игрушка, - стоят они копейки. (На преподавательский карман - не очень "копейки", но это другая тема.)

Сейчас читаю Ваши ссылки, потом напишу более подробно.

Date: 2011-10-11 21:41 (UTC)
From: [identity profile] dyak.livejournal.com
http://6004.lcs.mit.edu/