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

Компьютеры постоянно производят вычисления. Изначально они создавались для упрощения бухгалтерского учёта. Сегодня люди преобразуют данные: загружают фотографии в Instagram, смотрят видео на YouTube, играют в игры. Всё это – огромные объёмы данных, которые преобразуются. Компьютер не понимает, что картинка – это картинка; для него это набор нулей и единиц. Размер файла – количество информации в нём. Чем больше информации, тем выше качество.

Бит, байт и единицы измерения данных

Бит – наименьшая единица информации (0 или 1). Байты состоят из восьми бит и кодируют 256 значений (2<sup>8</sup> = 256). Комбинаторика – единственная область математики, которая понадобится в программировании. Её освоение занимает пару дней. Далее идут килобайты, мегабайты, гигабайты, терабайты и т.д.

Программирование и языки программирования

Все программы работают с данными. Программирование – преобразование одних данных в другие. Задача программиста – объяснить компьютеру, что делать, максимально точно и понятно для других людей. Для этого существуют языки программирования. Они созданы для людей, а не для процессора, который понимает только машинный код (нули и единицы).

Пример программы «Hello, world!» для процессора x86-архитектуры был бы представлен шестнадцатеричным кодом, который нечитаем. Для упрощения был создан ассемблер – язык программирования, проще машинного кода, но всё ещё сложный. Сейчас на нём практически никто не пишет.

Хранение данных

Компьютер работает с данными, которые нужно где-то хранить. Места хранения: регистры процессора (очень мало места), кэш процессора (больше места, хранится часть данных из оперативной памяти, к которым процессор обращается часто), оперативная память (RAM) (хранит программы и операционную систему. Данные существуют только при наличии питания), жёсткие диски (HDD) и твердотельные накопители (SSD) (дешёвые, долго хранят данные, но доступ к ним медленный).

У каждой программы есть область памяти: статическая память (заранее известный объём) и динамическая память (выделяется по необходимости).

Большинство приложений загружают данные из сети. Место хранения этих данных – база данных. Это программы для удобного доступа, поиска, вставки и удаления данных (не просто хранение в текстовых файлах). Для работы с базами данных используется язык SQL. Пароли хэшируются для безопасности.

Безопасность и разработка ПО

Безопасность – важная часть разработки ПО. Слабая защита приводит к взломам и утечкам информации. Белые хакеры ищут уязвимости в системах легально, за это хорошо платят.

Базы данных и их применение

База данных содержит таблицы (как в Excel), но её основная особенность – связи между таблицами. В них хранится почти вся информация: посты в Instagram, товары в интернет-магазинах, банковские переводы, игровые аккаунты и т.д. Для отображения информации в пользовательском интерфейсе делается запрос к серверу, который обращается к базе данных. Сервер – это тоже программа, ожидающая запросов. Ваш компьютер может быть сервером.

Системное и прикладное программирование

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

Выбор языка программирования

Выбор языка – вечная проблема новичков. Можно выбрать любой популярный язык: Python, JavaScript, Java, C#, C++, PHP. Разные языки – разные инструменты. Например, Java хороша для безопасных приложений с транзакциями, а C++ нужен там, где важна скорость и полный контроль (системы реального времени). Для простых задач лучше выбрать Python. В C++ программист управляет памятью, что может привести к утечкам памяти. Большинство языков управляют памятью самостоятельно.

C и C++: краткое сравнение

C появился в начале 70-х, повысил уровень абстракции по сравнению с ассемблером. C++ появился в середине 80-х, добавил объектно-ориентированное программирование (ООП), библиотеки и пакетные менеджеры. C++ более абстрактный, чем C.

Типизация данных

Типизация бывает статической (тип переменной указывается заранее, например, в C++. Обеспечивает оптимизацию и быстрое выполнение) и динамической (тип переменной может меняться во время выполнения программы, например, в JavaScript. Может приводить к ошибкам и снижать скорость).

Пример программы на Python

(Здесь был бы код небольшой программы на Python с комментариями, объясняющими его работу, включая функции, циклы, работу с файлами, и т.д.)

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

Что будем искать? Например,программа