Прошлые домены не функционирует! Используйте адрес
ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
Level 1 Введение в специальность
Базовый инструментарий программиста: repl. Примитивы и базовые матераильные конструкции: переменная (мутабельная, немутабельная [name binding]), вызов процедуры, оператор, оператор как вызов процедуры, выражение. Базовые вычислительные конструкции программирования: процедура (абстрагирование и аппликация, мера абстрактности выражений), условное выполнение (if, switch, cond), рекурсия (хвостовая, древовидная), вычисление, шаг вычисления, тупики в вычислениях (без теорем продвижения и сохранения, до типов пока не дошли), конвенции вычисления параметров при вызове процедур (call by name, call by value, call by need). Взаимосвязь между программированием и другими науками: общие черты и различия выражения языков программирования и математических выражений, разница между функцией в программмировании и математической, понятие комбинатора и контекста, свободные и связанные переменные, отличительные черты выражений языков программирования (контекстность, побочные эффекты). Язык программирования как алгебраическая система.
Книги: SICP
Практика: Задачки SICP, разбор избранных частей промышленных исходников с указание где там какое понятие из изложенного материала, масленные эксперименты "а вот если бы здесь было бы N все сложилось бы иначе", "можно сделоть".
Level 2 Начала программирования
Лямбда-исчисление: лямбда-выражения, абстракция, аппликацияя, альфа-, бета-, тета- преобразования. Выразительность лямбда-исчисления: булаены, нумералы, конструкции условного вычисления, рекурсия (комбинатор неподвижной точки). Структуры данных: память компьютера (линейное адресное пространство с ячейками + типы адресации), список, строка как структура данных. Машина Тьюринга, толстота по тьюрингу. OISC-системы. Машина Маркова. LISP.
Книги: Хариссон по лямбда-исчислению + что-нибудь покрывающиее остальные темы
Практика: Конструирование машин Тьюринга, Маркова, лямбда-конструкций, простейшего интерпретатора лиспа, Subleq-машины. Макроассемблер subleq-машины (выразить nop, mov, add, call, ret через subleq).
Level 3 Escape from hikkatraz
Гуманитарные аспекты программирования: язык программирования как средство коммуникации между программистами. Сообщества, экосистемы. Парадигмы мышления. Популярные парадигмы: ООП, ФП, байтолюбство. Прагматика языков программирования. Методология разработки программного обеспечения (примеры, V, аджайл, XP и какая-нибудь прочая бухня). Итерационность. Параметры надежности программного обеспечения: Ошибки в программировании и их основные источники. Повторяемость ошибок, разница между надежностью аппаратуры и программ. Особеннсти старения программного обеспечения. Экономика программирования: ресурсы, потребляемые программами: процессорное время, паметь, человеко-часы. Понятие алгоритмической сложности компьютерных программ. Методы защиты от ошибок: тестирование, обзор методов формальной верификации. Системы типов: место систем типов среди методов формальной верификации, проблемы простого нетипизированного лямбда-исчисления. Задачи эффективного использования машинного времени: виды и подводные камни разных видов многозадачности, примитивы потоковой многозадачности. Калбаки, подпрограммы, прерывания, короутины, генераторы, треды, тред-пулы. Конкуррентность и паралеллизм. Дистрибутивность, кластеризация.
Книги: Маконнел, Кормен, Пирс, че-нить по паралельности сотоварищи, развлекуха типа 50 дурацких ошибок погромистов, курятника в руках цыплят.
Практика: путешествия к центру TAPL, изучение 1..N промышленных языков программирования до кондиции джуниора. Генератор мотиваторов, имиджборда. Выход на родственников-заказчиков/фриланс биржы и попытка заработать первые денежки. Участие в опен-сорц проектах.
Level 4 Ну что тебе сказать про программирование?
(мне до такого далеко, пишу по интуиции)
Теории языков. Иерархия хомского. Начала математики. Миша, НМУ, что-нибудь из программы Мишы. ATAPL. Теорем пруферы. Разница между симметричной моноидальной и декартовыми категориями. Почему язык N говно?
Книги: ATAPL, HoTT, я не знаю
Практика: разработка программ-инструментов для других программистов, статус core-developer'а, проталкивания собственных парадигм (судьбоносных решений для проекта, которые будут реализовывать другие участники), аккуратное установление атмосферы управляемого безумия в рабочем коллективе, достижение бамплимита, выявления фундаментальных недостатков любого языка программирования. Выявления фундаментальных недостатков языка программирования без перехода по ссылкам.