*https://www.youtube.com/watch?v=aHiVHZYM9m4
**https://300.ya.ru/v_mDkWYby1
таймкоды
00:00:00 Введение
- Видео предназначено для людей, самостоятельно изучающих C++.
- Автор делится roadmap для становления полноценным разработчиком.
00:00:22 Архитектура компьютера
- Изучение процессоров: архитектуры, регистры, пайплайн, тракт данных.
- Основы оптимизации: префиксы, бренч-придикшены, прерывания.
- Ассемблер: основные команды, их применение в отладке и программировании.
- Иерархия памяти: кэши, оперативная и дисковая память.
- Шины: назначение и классы шин.
00:02:17 Операционные системы
- Виртуальная память и файловые системы.
- Пользователи, процессы и потоки.
- Системные вызовы и планирование процессов.
- Взаимодействие процессов.
00:03:15 Компьютерные сети
- Протоколы и иерархия.
- TCP/IP стек, хосты и порты.
- Адресация в сети.
- Основные протоколы: ARP, TCP, FTP, HTTP.
00:04:31 Алгоритмы
- Бинарный и линейный поиск.
- Сортировки: квадратичная, линейная, линейно-логарифмическая, стабильные сортировки.
- Операции над множествами: объединение, пересечение, разность.
- Хэширование.
- Алгоритмы на строках и DFS/BFS. 00:05:26 Структуры данных
- Массивы статические и динамические.
- Связные списки, бинарные деревья, хэш-таблицы.
- Бинарная куча, очередь, стек, графы.
- Асимптотический анализ алгоритмов.
00:06:14 C++
- Работа с памятью: ссылки, указатели, динамическая память.
- RAII, ввод-вывод, взаимодействие с ОС.
- Исключения, шаблоны, контейнеры, итераторы, умные указатели.
- Многопоточность.
00:07:54 Инструментарий
- Поиск информации в интернете.
- Работа с IDE и редакторами.
- Linux: терминал, базовые команды.
- Git, дебаггер, профайлер.
00:08:46 Дополнительные темы
- Тестирование кода.
- SOLID.
- Паттерны проектирования.
- Кэширование и шифрование.
- Сборка мусора и виртуальная машина.
- Компиляция и интерпретация C++.
00:09:41 Последовательность изучения тем
- Архитектура компьютера, операционные системы и компьютерные сети — теоретические темы, требующие дополнительного изучения.
- Рекомендуется выделить время для чтения книг по каждой теме: сначала архитектура компьютера, затем операционные системы, потом компьютерные сети.
- Практикуется работа с прикладным уровнем, процессами и потоками.
00:10:35 Начало практики с алгоритмами и структурами данных
- Начинать следует с алгоритмов и структур данных, используя язык программирования C++.
- Реализация структур данных и алгоритмов помогает прокачивать знания в C++.
- В процессе практики понадобятся инструменты: дебаггер, профилировщик, Google.
00:10:57 Переход к более глубокому изучению C++
- После освоения структур данных и алгоритмов можно переходить к более глубокому изучению C++.
- Рекомендуется писать собственные проекты для портфолио.
00:11:21 Заключение
- Несмотря на обилие информации, важно начать обучение.
- Чем больше времени уделять обучению, тем быстрее будет достигнут результат.
- Темы, которые казались сложными, со временем станут понятными.
In this video
Введение
0:00
есть такие люди которые самостоятельно
0:01
изучают c++ и как правило они не знают
0:03
то что им следует изучать и самое
0:05
главное В какой последовательности И вот
0:07
именно для этих людей я решил записать
0:09
это видео где поделюсь своей роддома или
0:11
если говорить по простому карты и того
0:12
как каждый человек сможет с нуля стать
0:15
полноценным джоннисе пришлось
0:16
разработчиками поехали переходим
Архитектура компьютера
0:18
непосредственно к самой род маппе и
0:20
родма по разделена на отдельные части
0:22
начнём с архитектуры компьютера здесь мы
0:24
видим процессор вот что нам нужно знать
0:26
о процессах это конечно же различных
0:28
архитектуры процессоров его регистраторы
0:30
зачем они используются процессором его
0:32
paypeline кратко познакомиться что это
0:34
такое трак данных то есть тоже
0:36
поверхность нам понять что это такое
0:38
познакомиться с некоторыми оптимизациями
0:40
нам не нужно знать всевозможные
0:42
оптимизации внутри процессоров но нам
0:44
нужно понимать просто базы оптимизации
0:45
Как наш процесс может оптимизировать
0:47
какое-то поведение нашей программе Ну
0:49
допустим я имею в виду prefetting или
0:52
узнать что такое прерывание дальше нам
0:55
не нужно уметь писать эмблере и не надо
0:57
нам писать на сцену чаще всего но нужно
1:00
просто познакомиться узнать какие-то
1:02
основные ассемблерные команды иногда
1:04
навыки бывают достаточно полезными в
1:06
отладке Ну и просто эти знания помогают
1:09
программировании Когда Вы начинаете
1:10
четко понимать как допустим происходит
1:12
вызов функции тот же самый тот же самый
1:14
да Или как работает стек вот следом идет
1:17
конечно же иерархия памяти нужно
1:19
понимать как структует она память внутри
1:21
компьютера и почему так было придумано
1:23
Почему допустим везде не использовать
1:24
каши да Или какую-то дисковую память
1:26
Почему именно вот так вот иерархический
1:28
память у нас складывается внутри
1:29
компьютера здесь поподробнее нужно
1:31
познакомиться с кэшами различными
1:33
уровнями кашей оперативной памятью и
1:35
дисковой памяти а плюс ко всему шины это
1:38
отдельно как бы тема стоит понять зачем
1:40
они используются внутри компьютера и
1:41
познакомились познакомиться с различными
1:43
классами Ну и в конце это конечно же
1:46
уделить дополнительное время устройство
1:48
года вывода и такому устройству как
1:50
димей хотел сказать Сразу что это родная
Назначение Roadmap-ы
1:53
не привязана никакой предметной области
1:54
что я имею в виду но то есть Джон
1:56
который получится на выходе он будет
1:57
способен работать как бы так так и
2:00
допустим системной разработки потому что
2:02
у него будет плотный фундамент и как
2:04
правило от женов работодателей не ждут
2:06
знаний одной или нескольких предметной
2:08
областей от них ждут Вот хорошие основы
2:11
да И самое главное это конечно же их
2:13
Горящие глаза следующая тема евродмапе у
Операционные системы
2:16
нас идут операционные системы здесь что
2:18
у нас важно познакомиться с виртуальной
2:20
памятью понять что это такое как
2:21
используется познакомиться с файловыми
2:23
системами понять такую абстракцию как
2:26
файл и папка да Что Что это такое Почему
2:28
это было так Придумано почему это так
2:30
используется Да и познакомиться с
2:32
какими-то основными базисными файловыми
2:34
системами а рассмотреть такую концепцию
2:36
как юзер моды кёрнул мод и зачем было
2:38
придумано такое разделение познакомиться
2:40
с системным вызовами или так называемой
2:42
сиськами да то есть для чего они тоже
2:44
используются Я бы уделил очень много
2:46
времени процессом потоком понял бы точно
2:48
их концепцию для чего они были придуманы
2:51
как используются внутри операционных
2:52
систем и дальше вот тоже на чём бы я
2:55
заострил достаточно много времени это
2:57
конечно же планирование процессов То
2:59
есть когда и из процессов или потоков
3:01
встанет на ядро и начнет выполняться и
3:03
контекст виччинг переключение то есть
3:05
этих процессов или потоков с ядра когда
3:07
один какой-то процесс пополнялся и нужно
3:09
поставить другой процесс на ядро чтобы
3:10
он выполнялся например и очень важная
3:12
тема это тоже ip7 enterprocess
3:14
Communication как обеспечить то чтобы
3:16
мои процессоры взаимодействовали между
Компьютерные сети
3:18
собой следующая тема у нас идут
3:20
компьютерные сети тоже достаточно важная
3:23
часть Это родная Прежде всего это
3:26
конечно же протоколы иерархия то есть
3:28
понять Вообще как два три четыре пять
3:30
компьютеров взаимодействует между собой
3:31
что такое протокол зачем это было
3:33
придумано дальше подробнее конечно же
3:36
познакомиться со стеком протоколом tcp
3:38
узнать такое понятие Что такое хост Что
3:40
такое порт чтобы эти слова допустим вас
3:44
вы понимали что значение этих слов эти
3:46
чтобы эти слова не составляли вас
3:47
какой-то ступор разобраться с концепцией
3:49
адресации в сети допустим когда у меня
3:51
есть N количество в сети Как мне
3:52
адресоваться к какому-то из них как это
3:55
работает и дальше выделил ряд вот знаете
3:57
Таких вот основных протоколов которые и
4:00
желательно бы знать и примерно понимать
4:01
каждому разработчику это протокол
4:03
сетевого уровня AR по ipsnp протокол
4:06
транспортного уровня tcp/udp и вот что
4:09
касается прикладного уровня то я бы
4:12
здесь конечно же советовал Вам бы
4:14
попрактиковаться с этими протоколами то
4:16
есть DNS и ctp ftpssh это конечно же
4:19
Последний класс протоколов Я предполагаю
4:21
что здесь будет практика с этими
Напутствующие слова
4:23
протоколами хотел бы ответить сразу на
4:25
потенциальный вопрос немного ли тот
4:26
знаний для Джана отвечу Нет немного
4:29
потому что это фундамент это основа это
4:31
тот фундамент на который можно будет
4:33
постепенно возводить огромные здания
4:35
состоящие из ваших знаний каких-либо
4:37
навыков но думаю аналогии вы сейчас
4:39
прекрасно поняли конечно же дальше будет
Алгоритмы
4:42
идти наиважнейший топик под названием
4:43
алгоритмы здесь разделил базовый
4:46
алгоритмы которые стоит не просто
4:48
прочитать конечно же закрепить практикой
4:50
то есть переписать это поиск бинарные
4:52
линейный это сортировки квадратичная Ну
4:55
то есть что я имею в виду подрочно
4:56
Линейная линейный аналитические это
4:57
сложность выполнения сортировки
4:59
соответственно квадратичная Линейная
5:01
линейный алгоритмические сортировки и
5:03
stablend stable сортировки затем
5:05
множество то есть основные базовые
5:07
операции на множеством это объединение
5:09
пересечения и разность множеств
5:11
познакомиться с хешированием Ну я здесь
5:13
не говорю что нужно переписывать
5:14
какие-то хедж функции это не обязательно
5:16
просто понять концепцию хеширования Для
5:18
чего она используется программирование
5:19
базовый алгоритмы настройках и dfs bfs
Структуры данных
5:23
следующая тема из алгоритмами идут
5:24
конечно же структуры данных здесь у нас
5:26
что есть это массивы статический
5:28
динамические это связанные списки
5:29
бинарные Деревья конечно таблицы
5:31
подробнее познакомился с разрешением
5:33
кризиса методом цепочек и открытые
5:35
адресации бинарная куча очередь стек и
5:38
графы то есть то как можно Граф
5:40
представить в память вашего компьютера
5:41
Матрица смежности Матрица инцидентности
5:43
список смешаностей список Рубин Вот
5:46
точно так же как с алгоритмами Я
5:47
рекомендую вам переписать все эти
5:49
структуры данных только тогда придёт
5:51
какое-то такое полное понимание Для чего
5:53
эти структуры данных нужны где их
5:54
следует использовать и плюс ко всему
5:56
если мы будем совмещать эти две темы
5:57
здесь конечно же не хватает
5:59
асимптотического анализа То есть вам не
6:01
нужно разбирать какие-то трудные
6:03
алгоритмы Да уметь без проблем их
6:05
считать сложность вашего алгоритма Ну
6:07
вот базисный алгоритмы которые допустим
6:09
здесь представлены Вы должны научиться
6:11
без проблем считать их асимпатическую
6:12
сложность
6:13
следующая тема конечно же наконец у нас
6:16
идет c++ и я тоже разделил на основные
6:19
темы это топик Это работа с памятью это
6:22
конечно же ссылки указатели динамической
6:23
памяти вот здесь вам прямо стоит очень
6:25
хорошо разбираться с этой темой дальше
6:27
это и достаточно важная тема Я не знаю
6:30
наверное c++ модуль c++ как раз такие
6:33
строятся только вот на вот этой теме это
6:35
работа свободным выводом Это работа с
6:37
операционной системой То есть просто
6:38
практиковаться Как происходит
6:40
взаимодействие с операционной системой
6:41
Да в линуксе Допустим или Windows или на
6:44
какой-то другой операционную систему или
6:46
где вы работаете Это оп конечно же Но я
6:48
здесь подразумеваю не просто знать
6:50
допустим что такое А примерно понимаете
6:52
как оно плюс-минус там работает внутри
6:54
это конечно же концепция исключения и
6:56
Какие проблемы могут возникать с этими
6:58
исключениями шаблоны Я здесь имею ввиду
7:00
что вам нужно метапрограммировать но
7:02
просто нужно знать базисы касаемо
7:04
шаблонов и как их использовать практике
7:06
конечно же STR и стиль Я разбил на
7:09
основные тоже топики это контейнеры Ну
7:13
стоит понимать конечно же как они внутри
7:14
устроены эти понимания придут тогда
7:16
когда вы будете понимать структуры
7:17
данных это алгоритмы то есть большая
7:20
часть алгоритмов пониманием тоже привет
7:22
Когда вы будете знать вот эти алгоритмы
7:23
и итераторы это как раз таки эта
7:26
сущность которая как бы объединяет
7:27
алгоритмы контейнеры То есть это
7:29
некоторые такой промежуточный слой между
7:30
ними и конечно же умными указателями
7:32
дополнительно написал многопоточность
7:34
вам как жена мне придется Скорее всего
7:36
работать точностью Но вам стоит примерно
7:39
ориентироваться и понимать где что и как
7:42
использовать И когда вы будете читать
7:43
какой-то код Если вы смотрите что там
7:45
yotax написано Ну скорее всего понимаете
7:46
что где-то здесь блокировка Да вот
7:48
именно поэтому это как бы я в конце
7:50
уделил просто вот основы что вы
7:52
плюс-минус понимали что это такое как
Инструментарий
7:54
использовать дальше это конечно же
7:55
инструментарий А что я имею в виду
7:58
Google Ну то есть загуглить Когда вы
8:00
что-то не знаете просто научиться искать
8:02
нужный вам информацию это немного
8:04
владеть каким-то айдые или редактором
8:06
Чтобы плюс-минус в нем хорошо работали
8:09
то есть не возникало каких-то базисных
8:12
проблем при взаимодействии с ним это
8:14
Linux Хоть даже если вы собираетесь
8:16
программировать под Windows я
8:17
Настоятельно вам рекомендую
8:18
познакомиться с линуксом с терминалом
8:20
Linux базисными командами внутри него
8:21
эти знания вам будущем непременно
8:23
понадобятся это конечно же гид или
8:25
какая-то другая система контроля версии
8:27
но я бы остановился на GT немного
8:29
практиковаться вот с дебаггером из
8:31
профилайнером понять как использовать
8:32
эти инструменты в практике и так далее
8:34
стоит использовать и в конце отдельный
Другое
8:37
топик это как бы всё вот другое это
8:39
дополнительно Да вот что ещё можно
8:41
изучать для джина что считаю необходим
8:44
это конечно же тестирование понять Как
8:45
тестировать это немного познакомиться с
8:48
сольет и понять вообще для чего
8:50
придумана была эта концепцией Какие
8:52
проблемы решать познакомиться с базовыми
8:53
паттернами проектирования опять-таки не
8:56
нужно изучать все вот эти вот паттерны
8:58
проектирования как же нам но надо знать
9:00
базовый то есть когда допустим какой-то
9:02
коллега скажет Давай здесь писать
9:03
фабрику или синглтон чтобы вы понимали О
9:05
чем идет речь познакомиться с такой
9:07
пациенткой концепцией как кэширования
9:09
когда и где ее использовать шифрование
9:11
тоже когда и где использовать каких
9:12
ситуациях и вот дальше это такие вот
9:15
знаете основы компьютер сайт запросто
9:16
понять зачем это есть и как это можно в
9:20
других каких-то местах использовать не
9:22
касаемо си плюс плюс допустим сборка
9:24
мусора виртуальной машины просто
9:25
познакомиться с этой концепцией чтобы вы
9:28
примерно понимали что это такое и зачем
9:29
это используется и в конце конечно же
9:31
вот поподробнее познакомиться с
9:33
процессом компиляции интерпретации что
9:35
касается c++ Я бы рекомендовал
9:36
поподробнее познакомиться с тем как
9:38
компилирует c++ программа итак хорошо
План обучения
9:42
информация достаточно много но как и в
9:44
какой последовательности всё это изучать
9:45
если мы посмотрим на архитектуру
9:47
компьютера операционной системы и
9:48
компьютерные сети это как правило
9:49
теоретический темы Да здесь кое-что
9:52
стоит закреплять практикой но в
9:53
подавляющем большинстве это просто
9:55
теоретически вот как раз-таки разделы Да
9:57
которые можно изучать дополнительно
9:59
и соответственно Я бы что сделал я бы
10:02
выделил какое-то время и допустим
10:03
несколько месяцев читал бы какую-то
10:05
книгу по архитектуру компьютера Затем
10:06
другую книгу по операционным системам и
10:08
другие еще пару месяцев компьютерной
10:10
сети то есть просто бы вот эти вот
10:12
разделами я занимался как теории Да не
10:15
касаемо допустим там процессов потоков и
10:17
так далее Это конечно же и вот работа с
10:20
прикладным уровнем это конечно же стоит
10:21
закрепить практикой когда допустим я
10:24
набираю эту теорию вечерами или утром
10:26
допустим просто читая книжки или смотрю
10:27
какие-то видео статьи Мне нужно конечно
10:29
же практиковаться и прежде всего Я бы
10:31
начал с алгоритмов и структуру данных то
10:34
есть Я бы начал именно с этого Я бы
10:36
начал практиковаться с языком
10:38
программирования как раз таки моим плюс
10:40
Где бы реализовывал различные структуры
10:42
данных алгоритмы и автоматически У меня
10:44
бы прокачивались знания внутри все плюс
10:46
плюс постепенно с этим как я сказал бы я
10:49
читал книги по вот этим основам и у меня
10:51
бы это всё время одновременно
10:52
прокачивалось Да инструменты А в
10:55
процессе они вам непременно понадобятся
10:56
Вы когда вам придётся багер использовать
10:59
чтобы отложить когда-то вам придется
11:00
профайнером запустить посмотреть как это
11:02
быстро работает и когда там придется
11:04
гуглить то есть вот эти инструменты язык
11:06
они будут прокачиваться автоматически
11:07
когда вы будете изучать структуры данных
11:09
и алгоритмы Затем когда вы Допустим это
11:12
все разобрали Я бы что делал Я бы
11:13
переходил более плотно к изучению все
11:15
плюс плюс И вот этому другому всему что
11:17
здесь перечислено как бы это делал Я бы
11:19
начал писать какой-то свой проект Если
11:21
вы хотите допустим чтобы я записал
11:23
отдельное видео как выбрать проект то
11:25
пишите конечно же об этом в комментарии
11:26
То есть я брал бы себе плюс плюс начинал
11:29
бы более подробно с ним знакомиться
11:30
Знакомиться с вот этой вот другим что у
11:33
меня указано здесь и писал бы какой-то
11:34
свой проект для будущего своего
11:36
портфолио резюмирую это видео хотел бы
Заключение
11:38
сказать следующее возможно ваш мозг
11:40
сейчас вам сказал блин тут столько
11:42
сейчас всякая информация это просто
11:44
невозможно выучить Да только говорится
11:46
глаза боятся руки делают соответственно
11:48
вам просто стоит лишь начать и вот когда
11:51
вы начнёте вы будете удивляться тому
11:54
насколько вы быстро совершенствуетесь То
11:56
есть те темы которые вам казались неделю
11:58
или месяц со сложными По истечению
12:01
какого-то времени будет вам казаться
12:02
простыми И тем самым просто чем больше
12:04
времени будете уделять на обучение тем
12:06
быстрее вы получите ваш Завет


