
Под влиянием чтения исходников Xv7 сформулировался у меня такой вот учебный план для воспитания IT-генералистов:
Информатика, модуль Understanding Basics.
Блоккурс 1: Простые двоичные машины
Материалы: радиоконструктор, состоящий из NAND-блоков, переключателей и лампочек.
Ход курса: в маленьких группах студенты учатся собирать из NAND-блоков двоичные сумматоры, мультиплексоры, триггеры и проч. Итог курса: ALU с вводами и выводами, т.е. самодельный калькулятор, умеющих складывать, вычитать и умножать.
Длительность: 1 неделя (при ежедневных занятиях)
Блоккурс 2: Программируемые двоичные машины
Материалы: FPGA-кит с полным инструментарием для разработки и отладки.
Ход курса: Первым делом простые двоичные машины из предыдущего курса имплементируются на FPGA (посредством языка VHDL). Затем собираются управляющие схемы: в начале конечный автомат для реализации операций деления и взятия квадратного корня итеративным методом. Затем программируемый калькулятор, который развивается до Forth-процессора MicroCore. Это учебный полнофункциональный процессор, с диалектом форта в качестве машинного языка; полное описание с комментариями и исходным кодом влезает в 70 страниц. По ходу развития калькулятора до процессора постепенно вводятся концепции языка Forth, показываются азы программирования.
Длительность: 2 месяца (при ежедневных занятиях)
Блоккурс 3: Низкоуровневое программирование
Материалы: Arduino-кит (в идеале, кит на базе разработанного ранее MicroCore).
Ход курса: на Arduino последовательно реализуются индикаторы, бегущие строки, роботизированная манипуляторы/СУ станком, передвигающийся робот. По ходу реализации студенты изучают язык Си, преподаватель тщательно заостряет внимание на соответствие между кодом на Си (в идеале, C--), машинным кодом и тем, что происходит внутри процессора, прозрачность между всеми тремя уровнями должна сохраняться непрерывно. Студенты должны усвоить процедурный подход к программироанию: понятия подпрограмм и сопрограмм, осознавать размещение скомпилированного кода и данных в памяти, понимать концепцию и техники использования указателей.
Длительность: 1 месяц (при ежедневных занятиях)
Блоккурс 4: Устройство операционной системы
Материалы: Исходники и скомпилированная среда обучающей Unix-операционной системы Xv6 (исходники с комментариями и пояснениями занимают 80 страниц)
Ход курса: Аспект за аспектом, подсистема за подсистемой изучаются все исходники Xv6, по ходу ученики пишут простые прикладные программы-примеры, работающие внутри системы: работа с файлами и потоками, памятью, простыми внешними устройствами, взаимодействие процессов. Обучение продолжается до полного понимания всех аспектов работы операционной системы. В заключительной части делается краткое обозрение компонентной структуры больших современных операционных систем на примере Linux. Интересующимся студентам предлагается собрать Gentoo Stage 1.
Длительность: 2 месяца (при ежедневных занятиях)
* * *
Вот после такого можно продолжать уже в самые разные стороны:
Развитие темы:
– Современные архитектуры процессоров (x86, ARM, ...)
- Перспективные архитектуры процессоров (MMIX, ...)
- Современные ЯП (Java, .NET, ...)
- Перспективные ЯП (Clojure, Haskel, Scala, ...)
- Современные операционные системы (Linux, ...)
- Перспективные операционные системы (L4 microkernels)
Software engineering:
- Разработка и анализ алгоритмов
- Структуры данных и файловые системы
- Базы данных и работа с ними
- Построение пользовательского интерфейса (технический аспекты)
- Построение пользовательского интерфейса (дизайнерский аспекты)
- Разработка многокомпонентных взаимодействующих систем
- Моделирование workflows, формальные методы
- Модуляризация, стандартизация, реюзабельность, сопровождаемость
- Обеспечение качества и документирование
- Подходы к организации коммандного программирования
Computer science:
- Абстрактные машины и языки
- Лямбда-исчисление и теория типов
- Семантика программ, верификация и валидация
- Парсеры и компиляторы
- Machine learning
- Представление знаний, экспертые системы и AI
- Natural language processing
- Цифровая обработка сингналов и изображений
- Моделирование аналоговых процессов