Nov. 25th, 2011

akuklev: (Default)
Существует древнее слово «лобызать», происхождение которого теряется во мгле балтославянского праязыка и, вероятно, родственно с «лизать» (тут общий протоиндоевропейский корень) и, возможно, латинским labium = губа. Его значение не менялось более десятка веков: «выражать ласку, благодарность, восхищение, почтение, преданность, благорасположение, благословение или вожделение приложением губ, возможно сопровождаемым посасыванием или полизыванием».

Затем это слово вдруг сменилось словом «целовать», чей корень «цел» к процессу явно не имеет никакого отношения, а имеет к целостности или здоровью (ср. «уцелеть»). Интересно, как так вышло?
akuklev: (Default)
Под влиянием чтения исходников 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
- Цифровая обработка сингналов и изображений
- Моделирование аналоговых процессов

December 2016

S M T W T F S
    123
456789 10
11121314151617
18192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 10th, 2025 12:41 am
Powered by Dreamwidth Studios