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

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

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


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

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

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


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

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

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

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

Видео по теме:
  1. "Устройство сети Интернет за 15 минут"
Что почитать?
  1. Выполнить лабораторные работы 2, 3
4. Язык программирования С

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


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

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

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

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

Что почитать про Си?
  1. Гриффитс. Изучаем программирование на C (2013). Один из лучших учебников по языку программирования Си.
  2. Брайан У. Керниган, Деннис М. Ритчи. Язык программирования C. Классика от создателей. Читать, выполнять упражения и снова перечитывать.
  3. Генри С. Уоррен мл. Алгоритмические трюки для программистов. В качестве дополнительного чтения для развития.
  4. Прата 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. Дизассемблирование

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

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

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

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

IDA Pro, OllyDbg

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

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

Редакция статьи от 29 февраля 2016 года. Федоров Д.Ю.


На главную