С ЧЕГО НАЧАТЬ ИЗУЧЕНИЕ ПРОГРАММИРОВАНИЯ?

В обзорной заметке предлагается авторский подход к преподаванию (или самообразованию) в области информационных технологий для бакалавров информационной безопасности.

Подход основывается на многолетнем опыте проведения занятий для студентов направления «Информационная безопасность» в СПбГЭУ и организации производственной (преддипломной) практики, т.е. тесном сотрудничестве с компаниями-работодателями.


Остановимся на каждой из тем, показанной на схеме.

1.
Язык программирования Python

Подходит для любых специальностей и любого начального уровня (школа, вуз, курсы повышения квалификации). Создавался как язык для обучения программированию.
Рекомендую обратить внимание на курс, который записываю по Python.


2.
Объектно-ориентированное программирование (ООП)

Python является полноценным ООП языком, поэтому объяснить на его примере основы ООП не составит труда.

3.
Сетевые технологии

Показать работу с сокетами в Python.

Видео по теме:
  1. "Устройство сети Интернет за 15 минут"
4. Язык программирования С

Знание языка Си, на мой взгляд, является обязательным для любого специалиста в области защиты информации.


Без знания Си сложно изучать внутреннее устройство современных операционных систем, невозможно понять причины возникновения программных уязвимостей и т.д.
От языка Си при желании можно перейти к С++ (о том, как это сделать читайте тут).

Изучение Си занимает 1 семестр (при условии, что студенты уже обладают минимальным представлением о программировании), упор необходимо делать на наиболее сложные темы: указатели, строки, массивы и пр. (см. темы и мои материалы на github). Очевидно, что за 1 семестр нельзя стать хорошим программистом на Си, поэтому рекомендую не гнаться за большими проектами, а решать задачи, охватывающие узкие темы.

По окончании каждой лекции (!) желательно проводить небольшую проверочную на закрепление пройденной теории.

Выбор компилятора и IDE: подойдет Code::Blocks со встроенной поддержкой набора утилит, но я предпочитаю gcc (clang) и операционную систему Debian (Kali Linux для хакеров). (см. обоснование выбора Linux).

Что почитать про Си?
  1. А.В. Столяров. Программирование: введение в профессию. II: низкоуровневое программирование (2016). Лучший учебник по языку программирования Си (стр. 190-441). Требуются начальные знания на уровне языка Паскаль (можно найти в первом томе).
  2. Гриффитс. Изучаем программирование на C (2013). Один из лучших учебников по языку программирования Си.
  3. Брайан У. Керниган, Деннис М. Ритчи. Язык программирования C. Классика от создателей. Читать, выполнять упражения и снова перечитывать.
  4. Генри С. Уоррен мл. Алгоритмические трюки для программистов. В качестве дополнительного чтения для развития.
  5. Прата C. Язык программирования С. Лекции и упражнения. 6-е издание (2015). C одной стороны подробный и полный учебник по Си, но с другой - 928 страниц!
Теория алгоритмов и сами алгоритмы должны изучаться в отдельной дисциплине, например, дискретной математике, но случается так, что языки программирования изучаются раньше.
В таком случае приходится затрагивать темы, связанные с алгоритмам.

Алгоритмы, что читать?
  1. Томас Х. Кормен. Алгоритмы. Вводный курс. Самые основы, когда времени мало.
  2. Томас Х. Кормен. Алгоритмы. Построение и анализ. Погружение.
  3. Стивен С. Скиена. Алгоритмы. Руководство по разработке.
 История языка Си тесно переплетена с историей операционной системы UNIX.

5. Архитектура ОС UNIX (GNU / LINUX)

Обычно операционные системы изучаются в отдельной дисциплине, но самые основы необходимо рассказать в процессе изучения языков программирования. Например, потоки ввода/вывода и пр.

Что почитать?
  1. А.В.Столяров. Введение в операционные системы. Просто, доступно, понятно.  
  2. Рэндал Э. Брайант, Дэвид Р. О'Халларон. Компьютерные системы: архитектура и программирование. Учебник, ставший классическим по информационным технологиям. Изучать в обязательном порядке.
6. Ошибка переполнения буфера в стеке

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

Литература:
  1. Джон Эриксон. Хакинг. Искусство эксплойта. Обязательна к изучению для будущих специалистов по информационной безопасности!
7. Язык ассемблера

Разумнее язык ассемблера изучать одновременно с дизассемблированием (п.8) и анализом кода на языке Си (п.4).

Что почитать?
  1. Программирование на языке ассемблера NASM для ОС Unix.
  2. Чарльз Петцольд. Код. Тайный язык информатики. Классика!
8. Дизассемблирование

Позволяет понять, как выполняются программы на машинном уровне. В качестве задания рекомендую написать программу на языке Си, затем ее дизассембировать и посмотреть на связь Си и ассемблера. Вы многое для себя откроете!

9. Функциональное программирование

См. на отдельной странице о языке Scheme

10. Инструментарий для исследования программного обеспечения

11. Операционная система Windows

Литература:
  1. Марк Руссинович. Внутреннее устройство Microsoft Windows. Основные подсистемы ОС.

Редакция статьи от 17 декабря 2020 года. Федоров Д.Ю.
На главную