Сетевые технологии. Аппаратное и программное обеспечение. Для маленьких. Часть 1
Широкими мазками хочу рассказать с самых азов про то направление, которое сейчас изучаю, чтобы самому лучше запомнить материал и с вами поделиться, интересной (надеюсь) и структурированной инфой ?
Будем разбирать Аппаратное и программное обеспечение, немного капнем в историю и пробежимся по основным парадигмам и ЯП (языкам программирования).
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ

Основные элементы, из которых состоит ПК:
1. Блок питания. Отвечает за перераспределение напряжения.
2. Процессор (CPU). Основной мозг, который занимается вычислениями/совершает операции).
3. Память:
- оперативной память (ОЗУ или RAM);
- жесткий диск.
4. Видеокарта.
Видеокарта- предназначена чтобы выводить на монитор картинку и отвечает за специализированные вычислительные задачи. Бывают они двух видов:— интегрированная (встроенная в материнскую плату или процессор);— дискретная (подключается как отдельное устройство к материнской плате или процессору).
Думаю все, даже очень далекие от IT люди хоть раз слышали, что компьютер понимает только язык единиц и нулей, но откуда же берутся?
Самое простое объяснение звучит так: в современном процессоре огромное количество транзисторов и каждый транзистор управляет течением тока в процессоре, т.е по факту управляет нулями и единицами. Лампочка горит — 1, не горит — 0. Число 2 — это вторая лампочка горит, а первая не горит, число 3-обе лампочки горят. И дальше в том же духе. Суть простая: ток есть — единица, нет — ноль.
Но где-то же эти единички и нули должны храниться. Существует 3 типа памяти:
1. Постоянная память (не стирается при отключении от электричества):
- HDD жесткий магнитный диск. На HDD нули и единицы хранятся, как намагниченные и размагниченные участки. Когда диск крутится считывающая магнитная головка сканирует эти участки.
- SSD твердотельный накопитель. SSD более быстрый накопитель, т.к. в нем нет магнитных дисков и там нечему вращаться. А сохраняется все в специальных транзисторах, которые могут сохранять свои состояния без питания. SSD меньше подвержены внешним воздействиям — вибрациям, ударам и тд. Но они и более дорогие.Если в двух словах: SSD там где скорость, HDD там где объём, если нет много денег.
2. Оперативная память. Нужна для того, чтобы временно хранить данные, в случае, если это нужно сделать оперативно, а на HDD и SSD долго записывать.
3. Сверхоперативная. Память внутри процессора, эта память максимально быстрая.
C железяками вкратце разобрались, давайте теперь перейдем к тому, как с этими железяками можно взаимодействовать.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Что такое программы в целом? По сути, это просто инструкции для ПК.
Небольшой экскурс в историю.Когда-то очень давно, во времена первых компьютеров — работали они в режиме так называемой пакетной обработки. Т.е. после того как слепили прогу, которая что-то считала — брали перфокарты, делали в них дырки (это по сути и были наши нули и единички), далее эти перфокарты относились оператору, который или загружал или откладывал их в очередь до момента, пока завершится выполнение других программ.В случае ошибки на одной из перфокарт — ее возвращали и дальше нужно было еще найти где именно была ошибка. В общем, все непросто и очень долго.
Следующей ступенью эволюции в IT стал терминальный доступ, по сути ‘папа’ современного терминала в ОС. Он появился, чтобы как раз, чтобы решить проблему очередей, позволяя разделять время между программами. Также он позволял подключаться к нему сразу нескольким клиентам через разные терминалы (т.е. у каждого пользователя был свой терминал) и процессор разделял свое время между ними.
По мере развития IT росли и слои абстракции — это по прослойки между человеком и ПК, которые создают юзабилити, но уменьшают скорость работы / «понимания» между человеком и ПК. Т.е. когда писали код физически в перфокарту, слоев абстракции по сути не было, затем появился терминал, потом ОС и программы с интерфейсом. И каждый из этих уровней требует ресурсов, и создавая дополнительную прослойку, уменьшает скорость работы программ.
З.Ы. итого существует 2 способа взаимодействия людей с ПК:
Терминал.
GUI graphical user Interface — через отрисованный интерфейс программ.
Тут стоит отметить, что многие профессиональные инструменты программистов работают только в терминале и нет смысла в них добавлять графический интерфейс. Также они более удобны за счет возможности выполнять все команды только через клавиатуру и избавляя от необходимости постоянно тыкать мышкой.
Давайте теперь посмотрим, как появлялись парадигмы ЯП и как в целом шло развивались отношения и понимание между человеком и ПК.
Парадигмы программирования / стили программирования.

Парадигма программирования или подход к программированию — совокупность идей и правил, определяющих стиль написания программ.
Первым появилось Императивное программирование. От слова императив - команда.Это когда есть команды, которые выполняются строго последовательно. По сути все языки в какой то степени являются императивными. А суть первых программ заключалась как раз в строгом и последовательном выполнении голых машинных инструкций.___Процедурное программирование появилось как эволюция императивного программирования, объединяя одинаковые куски кода, чтобы не дублировать их по 100 раз. Парадигма позволяющая писать процедуры.Отличие процедуры от функции в том, что процедура может иметь входные данные, но не может иметь выходных.Функциональное программирование (входит в группу декларативной парадигмы, основное отличие которой от императивной парадигмы в том, что ставит акцент на ЧТО, а не КАК).Появилось наряду с процедурным программированием в конце 50-х годов.Тут выход одной функции является входом для другой.Чтобы это было возможным функциональный язык создает ограничения для функций. Они:— должны быть чистыми;— не должны изменять состояний;— должны принимать аргументы и возвращать результат;— должны быть изолированными конструкциями, которые не меняют ничего в других частях программы.Основной инструмент функционального программирования (ФП) — математические функции.Также к основным идеям функционального программирования можно отнести:
функции высшего порядка — могут принимать другие функции в качестве аргумента или возвращать их;
рекурсию;
лямбда-выражения.
Структурное программирование. Появилось в конце 60х годов. Процедурное и функциональное программирование упростило жизнь программистам, но сложность программ росла и программистам нужно было больше абстракций, так и появилось структурное программирование.
Тут суть в особом структурировании программ, с использованием следующих механизмов:
последовательность;
ветвление;
цикл;
подпрограммы в виде процедур и функций;
блоки кода.
Один из постулатов структурного программирование-вред оператора GOTO, который позволял прыгать от одного блока кода к другому и создавал спагетти код. Это было до структурного программирования.
Самый яркий представитель — язык С, GO.
Объектно-ориентированное программирование ООП появилось в конце 60х годов, также как и структурное. ООП стало ответом на растущую сложность программ.Вводит определения классов и объектов, каждый из которых является экземпляром класса, а также важнейшие понятия:
инкапсуляция;
наследование;
полиморфизм.
ООП позволяет решать проблемы по сути любых масштабов.
К основным языкам ООП можно отнести: Python, Java, JS, С++, C#
Мы рассмотрели основные парадигмы ЯП и основной постулат тут в том, что большинство языков являются мультипарадигмальными.
Теперь давайте разберемся, что такое компилируемые и интерпретируемые языки.
По формату обработки кода и взаимодействию с ПК, языки можно разделить на компилируемые/низкоуровневые (C, C+ , GO, RUST и т.д.) и интерпретируемые/скриптовые/высокоуровневые (Python, PHP, JS, Rubi и т.д.).
Как работает компилятор? Он читает текстовый файл, валидирует (проверяет все ли ок с синтаксисом), оптимизирует, если необходимо конструкции, компилирует этот документ и на выходе выдает исполнимый файл, который можно смело запускать в ОС . Для этого уже не нужен ни компилятор ни исходный код программы, т.е. мы получаем финальную, готовую к запуску программу.
В случае с интерпретатором схема отличается — он читает файл, также проводит валидацию, как и компилятор плюс по ходу выполняет еще какие-то действия и сам же начинает выполнять инструкции которые написаны в исходном коде, построчно!
Основная разница компилируемых и интерпретируемых языков в сложности обучения ими, написании кода и скорости работы программ, написанных на них. Если в двух словах: компилируемые языке ближе к процессору и лучше его понимают, за счет чего быстрее работают, но обычно сложнее в изучении и написании кода.
В то время, как интерпретируемые более просты в изучении, на них можно быстро сварганить какой-то код, MVP так сказать, протестить спрос и далее уже если есть деньги — переписать, к примеру, на низкоуровневом языке код целиком или часть блоков которые под максимальной нагрузкой.
На сегодня все! See u later alligator ??