Что прочитать чтобы развивать свои навыки

Что прочитать чтобы развивать свои навыки

Coding


Доброго времени суток!

В обучении программированию имеется два подхода:

Первый - сверху вниз. В качестве основы берется какой-либо высокоуровневый язык программирования (например Python, C#), далее изучаются алгоритмы, операционные системы (ОС), низкоуровневые языки (по типу С, ассемблера) принципы работы железа, архитектура построения компьютеров (процессор, память и тд)

Второй - изучение снизу вверх.

Именно о втором мы и поговорим.

На английском теоретические знания объединяет термин "computer science", на русский можно перевести как "компьютерные науки".

Это междисциплинарный предмет, включает в себя довольно много топиков, многие из которых стоит досконально изучить, а с некоторыми достаточно просто ознакомиться и иметь общее представление, все будет зависеть от Вашего выбора в программировании (GameDev, Software Engineering и тд).

Ниже будут приведены основные разделы и необходимые знания из этих разделов в качестве фундаментальных знаний:

Общие сведения.

Принцип работы железа.

Понятие алгоритма и абстракции

Системы счисления и хранение данных - что это такое и зачем это все нужно (двоичная, десятичная, шестнадцатиричная)

Принцип работы булевых операторов на уровне железа

Что такое триггеры и транзисторы

Как работает память, ее организация, какие виды памяти бывают

Различие винтчестера и ссд

Как представляются различные данные в виде двоичного кода (звук, изображение, текст), как осуществляется их кодирование

Как хранятся числа в памяти (целые и с плавающей точкой)

Что такое сжатие данных и разница в сжатии изображений,видео и аудио

Манипуляция данными и железом

Основы компьютерной архитектуры

Как работает процессор, из чего он состоит, его взаимодействие с остальными частями системы

Понимание принципа исполнения программ на уровне железа, 

Знать что такое пайплайнинг или конвейер

Представление о том, что такое многопроцессорная архитектура

Что такое машинный язык и зачем он нужен

Логические операции и операции побитовых сдвигов (арифметика)

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

Что такое контроллер и зачем он нужен

Коммуникационные рейды - что такое бит, байт, килобайт

Разница килобайта и килобита, для чего это нужно, как это было придумано и тд


ОС

Знать предысторию возникновения, общая архитектура ОС, ее компоненты, их взаимодействие

Что такое shell, что такое файловый менеджер, что такое менеджер устройств, что такое менеджер памяти

Разница между скейджоролом и диспетчером, зачем они нужны

Что такое виртуальная память и пейджинг

Процесс запуска операционной системы

В чем разница между user-mod и kernel-mod

Концепция процесса, понимание разницы между программой и процессом, как реализована многопоточность и что такое прерывание (понимать шаги, выполняемые процессором во время прерывания)

Приоритеты в многопоточности - понимание того, как процесс с высоким приоритетом может работать быстрее чем другие

Знать что такое семафоры и дедлоки


Интернет и сети

Понимать что такое сети и зачем они нужны

Что такое протоколы, объединения сети

Понятие интернета, его архитектура, как работает адресация

Знать принцип работы веба

Что такое http, разница между URL и URI

Что такое xml и html 

Что такое консорциум w3c, зачем он основан

Разница между маршутизатором, свитчом и хабом

Знать что такое mac-адрес и маска подсети

Понятие клиент-серверной архитектуры

Что такое peer-to-peer архитектура, что такое CGA и почему он больше не используется

Что такое домены и его уровни

Что такое хостинг

Протоколы, разница между OSI и TCP/IP

Что такое протокол, где он находится, зачем он нужен

Уровни протоколов

Понятие пакета, понятие порта

Что такое проброс портов, зачем это нужно делать

Сетевая безопасность

Виды атак в сети

Иметь представление между трояном и червем

Принцип DDOS-атак для защиты своего пк от участия в ней

Зачем нужен Firewall, почему всякие бомж-программы просят его отключить

Знать что такое прокси сервер и зачем используют, знать что такое VPN и как он работает

Понимание шифрования, что такое https и ssl

Как используются ключи и тд

Знание системы измерения сложности алгоритмов (асимптотический анализ)

Алгоритмы сортировки, поиска, сжатия, нахождения кратчайших путей, работа с разными структурами данных(графами, деревьями и тд), фиббоначе, динамическое программирование


ЯПы

Предыстория япов, как они появилось

Что такое ассемблер, как он возник

Как появились трансляторы, компиляторы и интерпретаторы, а также понимание разницы между этими программами

Знание парадигм программирования (подмножество, императивный, декларативный, ООП)

Что в себе должен содержать завершенный язык по Алану Тьюрингу

Что необходимо знать, перед выбором определленого япа

Знать что такое структуры данных, зачем они нужны


Понятие переменной

Понятие типа данных

Что такое константы и литералы

Что такое операторы и операнды

Что такое control flow или инструкции по контролю поведения кода

Комментарии, понятие процедуры, принцип работы области и областей видимости

Функции, параметры функций, способы передачи параметров в эти функции

Принцип работы компилятора, что такое лексический анализ, синтаксическое дерево, парсеры, генератор кода

Знать что такое токен

Понимать как работает рекурсия, что это такое

Что такое класс и объект

Что такое инстанс

Что такое конструктор

Три принципа ООП (наследование, инкапсуляция и полиморфизм)

Знать что такое композиция, когда нужно использовать ее, а не наследование

Принцип многопоточного программирования, разница между процессом и потоком


Software Engineering

Представление о том, как писать софт (любой софт, а не только калькулятор на JS)

Имплементации алгоритмом и структур данных

Умение понимать плохой код и хороший (Изучение шаблонов проектирования алгоритмов структур данных, ос, железа)

Что такое прототипизация, модульность, зачем это нужно

Иметь представление о тестировании, понимать зачем нужны тесты

Продумывать дизайн и архитектуру перед разработкой чего-либо

Ставить требования перед написанием софта, а не придумывать их находу

Знание что такое UML-диаграммы, как их использовать

Зачем вообще придуманы парадигмы программирования


Абстракция данных

Понимать как и какие типы данных лучше хранить

Преимущества одной структуры данных над другой

Знать как работает память

Концепция указателя, ссылки и значения

Что такое арифметика поинт рф

Что такое прямой и обратный код

Расположение битов в памяти пк и их направления

Информации очень много, но зная все это, не возникнет проблемы создать свое приложение или что-то подобное, также с таким багажом знаний будет гораздо проще проходить собеседования и вливаться в рабочий процесс на новом месте, а также сделает из Вас довольно качественного специалиста.

А мы вам поможем, запасайтесь терпением,ведь мы поставили себе сдачу, написать про все что вы только что прочитали,мы постараемся сделать все возможное чтобы вы получили нужную информацию,а с вас лайк)

Спасибо за прочтение, делитесь своим мнением в нашем чате


Источник

Report Page