- PVSM.RU - https://www.pvsm.ru -
Большинство популярных языков программирования — это языки высокого уровня. Например, Java, Python или C#. Конечно, программировать на них можно и слабо представляя, как на самом деле работают различные уровни абстракции. Но для хорошего IT-специалиста важно понимать и то, как устроена платформа, с которой он взаимодействует, как функционирует среда разработки, компилятор, отладчик. Это приводит нас к разговору о низкоуровневом программировании.
LLP (low-level programming) — это удобный способ разобраться с тем, как писать надёжные, быстрые, компактные и эффективные программы. Наши студенты изучают ассемблер и Си прежде всего ради того, чтобы лучше почувствовать, как работает ПО.
[1]Фото Pablo BD [2] CC BY-SA [3]
IT-индустрия быстро развивается и подвержена моде на технологии и языки. Фундаментальные концепции — например, модели вычислений, виртуальная память, компиляция и сборка программ — изменяются гораздо реже. Понимание того, как базовые принципы таких концепций проявляются в одном языке программирования, поможет быстро освоить похожий язык, если это потребуется для работы. LLP в этом случае дает понять, как программа из исходного текста становится набором машинных инструкций, и как они выполняются на компьютере. В свою очередь знакомство с механизмами управления памятью и принципами работы компилятора поможет писать менее требовательный к вычислительным ресурсам код.
Уточнение: Нам достаточно часто приходится встречаться с тезисом о том, что LLP — это только программирование железа и тому подобные задачи. Это не так.
Где можно встретить LLP на практике:
Наши студенты направлений 09.03.01 «Информатика и вычислительная техника» и 09.03.04 «Программная инженерия» изучают ряд дисциплин, связанных с низкоуровневым программированием. Это — операционные системы, системное ПО (в том числе в среде Unix), разработка компиляторов, технологии виртуализации и др.
Стартовая точка — курс «Низкоуровневое программирование». Здесь студентов ждет работа с ассемблером и Си. Параллельно — они изучают процесс компиляции и выполнения программ. Курс идет в формате «от постановки задачи к готовой программе». Основная цель курса — получить представление о том, как меняется представление программы при переходах между:
Фото hackNY.org [4] CC BY-SA [3]
От студентов, которые приходят на курс, мы ожидаем минимальный опыт программирования на языках высокого уровня (например, Java или C#). И рекомендуем следующие онлайн-курсы:
Курс «Низкоуровневое программирование» читается преимущественно по книге [7], которая написана специально для наших студентов. Книга издана на английском и переведена на японский и португальский. Мы также часто работаем с Intel64 software developer manual и System V AMD64 ABI.
Если говорить простыми словами, данный курс можно детализировать следующим образом (применительно к тем темам, которые были обозначены выше):
Лекции мы разбиваем совместным написанием кода и изучением скомпилированных файлов с помощью инструментов из binutils (objdump, readelf) или gdb. Во время лекции (и не только) студенты задают вопросы как устно, так и в канал курса в известном мессенджере, а преподаватели отвечают на них при первой возможности.
В качестве практических занятий студенты выполняют лабораторные работы. Порой студентам в процессе обучения хочется разработать что-то своё, лично им интересное (игру, программу для управления роботом, компилятор и т.д.).
Поэтому в качестве замены экзамену студенты могут сделать индивидуальный проект на тему, согласованную с преподавателем. После прохождения код-ревью и публикации на GitHub они записывают видео с демонстрацией проекта [8] (на этом канале собраны проекты, реализованные с 2014 года, ссылки на GitHub — в описании).
Пример работы студента курса: аналоговый левитрон (подробный рассказ о проекте на Хабре [9])
На курсе со студентами взаимодействует целая команда преподавателей, которые читают лекции, принимают лабораторные работы, консультируют студентов. Студенты старших курсов участвуют в обсуждениях и помогают нынешним слушателям курса разобраться в тонкостях низкоуровневого программирования.
Основную работу по подготовке материалов к курсу сделал Игорь Жирков, автор учебника по нему. Игорь учился в Университете ИТМО и Академическом Университете, получил степень магистра в ИТМО в 2016 году. Область его интересов — теории типов, математическая логика, языки программирования и низкоуровневое программирование. Его основной текущий проект связан с формальной верификацией рефакторингов языка С с помощью Coq и верифицированного компилятора CompCert для языка С.
Кстати, здесь [7] мы сможете найти книгу, на написание которой вдохновило преподавание этого курса (она была издана на английском, японском и португальском).
Автор: itmo
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/294708
Ссылки в тексте:
[1] Image: https://habrahabr.ru/company/spbifmo/blog/425249/
[2] Pablo BD: https://flic.kr/p/8fHeEg
[3] CC BY-SA: https://creativecommons.org/licenses/by-sa/2.0/
[4] hackNY.org: https://flic.kr/p/9xm9ko
[5] Java. Базовый курс: https://stepik.org/course/187/
[6] Введение в архитектуру ЭВМ: Элементы ОС: https://stepik.org/course/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%83-%D0%AD%D0%92%D0%9C-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC-253
[7] книге: https://www.apress.com/us/book/9781484224021
[8] видео с демонстрацией проекта: https://www.youtube.com/channel/UCOLTncnm6jVkO0pcPoIoHFg/videos
[9] подробный рассказ о проекте на Хабре: https://habr.com/post/380779/
[10] клон «Танчиков»: https://www.youtube.com/watch?v=s4wlfHazINA
[11] клон классической игры «Астероиды»: https://www.youtube.com/watch?v=V9oKIUrjsxo
[12] Forth на микроконтроллере STM32: https://www.youtube.com/watch?v=U-TfTnKhxM4
[13] эмулятор аркадного автомата CHIP-8: https://www.youtube.com/watch?v=iDQcTzY7LxY
[14] виртуальная файловая система: https://www.youtube.com/watch?v=zvcdr9Q7LY8
[15] Ridiculously Awesome Shell: https://www.youtube.com/watch?v=ZLeq_vn3Qog
[16] Источник: https://habr.com/post/425249/?utm_campaign=425249
Нажмите здесь для печати.