С чего начинать новичку изучать программирование и хакинг? Становление инженером

Мне много вопросов задают по этому поводу и я решил сделать такую статью-обзор на то, куда нужно обратить свой взор новичку при изучении программирования и становления инженером. И не важно, будет ли это в последствии программирование или кибербезопасность, начало пути предполагается идентичное.

Итак, начнем..

Начальный шаг - Разбор самых фундаментальных вещей:

Дать себе ответ на вопрос, что такое компьютер и что такое программирование, в таком виде, в котором оно дано.

Эти вопросы состоят из следующих тем:

- Архитектура ЭВМ:

(процессор, память, контроллеры и т.д.)

- Разобраться, как процессор способен воспринимать язык программирования и что такое язык программирования вообще.

Из этого будет вытекать ряд концепций:

- Что такое компилятор;

- Что такое интерпретатор;

- Уровни языков программирования;

- Парадигмы языков программирования.

- Базовые понятия языков программирования:

1. Ветвления

2. Циклы

3. Лямбда выражения

4. Рекурсия и т.д.

Из этого будут вытекать все новые и новые существительные:

- Системы счисления;

- Различные виды данных;

- Различные типы кодирования данных;

- Теория типов данных и многое другое;

В целом нужно разобраться с тем, что такое компьютер и как этот компьютер можно программировать.

Сюда можно отнести:

- Концепция баз данных;

- Виды бах данных;

- Как там хранится информация;

Следующий шаг – это изучение математики:

Для изучения помогут отличные советские книги и сервисы, которые помогут прокачать ваш скилл в этой науке.

Следующий шаг - Изучение сетей и вообще сетевого программирования.

Нужно изучить модель интернета.

Модель TCP/IP

Модель OSI

Второй фундаментальный момент в программировании это:

- Сокеты.

Модели протоколов и сокеты – это две базовых составляющих сетевого программирования.

Программистам WEB нужно знать, как работает HTTP или протоколы приложений.

Программистам сетевой безопасности нужно разбираться в дополнительных уровнях протоколов, например, SSL/TLS.

Следующий шаг – операционные системы.

Для начала нужно разобраться, что такое операционная система и какие виды операционных систем бывают:

- Windows

- Linux

- Android

- Mac OS

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

Более углубленно заниматься операционными системами следует тому, кто планирует писать системный софт.

В системный софт входят такие программы, как антивирусы и файловые менеджеры, трансляторы.

У каждой операционки есть определенный интерфейс. APIs.

К примеру, Win32 Api в Windows.

Следующий шаг – выбор языка программирования.

Нужно определиться с языком программирования и стилем программирования.

Нужно знать определенные концепции.

В этот перечень входит знание:

- Структур данных;

- Алгоритмов;

- Паттернов проектирования;

Вот, собственно, тот необходимый минимум знаний, которые понадобятся для дальнейшего развития вас, как инженеров по кибербезопасности.

Думаю эта статья будет полезна новичкам.