- PVSM.RU - https://www.pvsm.ru -
В этой статье отвечу на три вопроса:
Какие существуют виды языков программирования;
Почему нужно сначала изучить SQL;
Как учить SQL бесплатно.
Если вы только выбираете язык программирования или уже программируете, но не уверены в своём выборе — эта статья для вас. Мы рассмотрим, какие бывают виды языков программирования, почему данные — это основа любой программы, как эти данные хранятся и как с ними работать. В конце статьи я приведу 5 бесплатных ресурсов, которые сам использовал для изучения SQL.
Это моя первая статья на Хабре, так что буду рад вашим комментариям и замечаниям.
Автор курсов по программированию, Senior Backend разработчик. До IT открывал кофейни, обучал людей в ресторанах и занимался дизайном.
Я пишу про IT уже больше 2 лет в виде коротких заметок, которые можно прочитать за чашечкой кофе. Такие посты я называю «чашки кода». Сначала я рефлексировал о своём опыте в IT, затем писал про новости в этой сфере, а когда мне начали задавать одни и те же вопросы, я стал писать посты‑ответы. Три самых популярных вопроса были: «С чего начать программировать», «Какой язык выбрать» и «Как учить SQL». На все три вопроса я ответил в одном посте, который впоследствии я стал пересылать так часто, что даже запомнил ссылку на него. А сейчас пришла пора написать полноценную статью.
Все языки программирования можно разделить на три группы: машинные, ассемблерные и высокоуровневые. С каждым уровнем мы добавляем абстракции от уровня «железа». Абстракция — это приём, при котором сложная система скрывается за понятным способом взаимодействия. Например, автоматическая коробка передач в машине добавляет нам простую абстракцию. Нам не нужно вручную переключаться между передачами — это происходит автоматически, за счёт абстракции. Другой пример: раньше люди делали фото на плёнку, проявляли её и получали фотографию. Сейчас есть полароиды, которые делают фото всего за одно нажатие кнопки и моментально печатают его. Такие механические действия скрыты за простой абстракцией.
В программировании абстракции встречаются постоянно. В высокоуровневых языках мы не думаем, как работает память компьютера, как конвертировать биты в символы и о множестве других проблем. Это накладывает ограничения. Например, скорость программы будет ниже, но процесс разработки — быстрее. Иногда абстракции не могут решить проблему, а наоборот усложняют понимание, о чём говорит Кевлин Хенни:
Любую проблему можно решить путём введения дополнительного уровня абстракции, кроме проблемы слишком большого количества уровней абстракций.
В итоге у нас есть три уровня языков программирования:
Высокоуровневые (High‑level) — языки, близкие к человеческому, обеспечивающие абстракцию от деталей «железа». Удобны для разработки сложных программ.
Ассемблерные (assembly) — низкоуровневые языки, представляющие машинные инструкции в читаемой форме. Зависят от архитектуры процессора: язык для MacBook с процессором Intel не будет работать на MacBook с процессором M.
Машинные (machine) — набор машинных инструкций, которые понимает процессор. Самый низкий уровень, напрямую взаимодействующий с «железом». Такой код будет в бинарном виде, то есть будет содержать только единицы и нули.
Машинные языки появились в начале 1940-х. Тогда программисты писали программы напрямую, в виде наборов битовых команд, то есть в виде нулей и единиц. Работать было сложно. К концу 40-х годов появились первые ассемблерные языки, которые были понятны человеку.
Ассемблерный код при запуске переводится в машинный, а затем запускается компьютером. Таким образом, ассемблерный код тоже можно назвать абстракцией. А какое‑то время он даже считался высокоуровневым.
Любой код проходит несколько этапов, становясь ассемблерным, а затем машинным. Если вы пишите на С или Rust, то код будет преобразован в ассемблерный на этапе компиляции. На нём написанный код обрабатывается и подготавливается файл для его запуска. В итоге мы получаем машинный код, потратив немного времени на его обработку.
Некоторые языки могут пропускать этап ассамблерного кода, а некоторые используют интерпретацию или специальный вид JIT‑компиляции.
Современные разработчики давно не пишут на низкоуровневых языках. Вы можете не тратить время на этот вид языков программирования.
В самых популярных рейтингах языков программирования — TIOBE Index, PYPL Index и RedMonk — топ-20 занимают высокоуровневые языки. Они делятся на несколько категорий: системные, скриптовые, специфические и эзотерические. Начать изучать программирование стоит с системных или скриптовых языков. Языки для специфических задач хорошо описывают своё предназначение названием. А эзотерические можно смело пропустить, как ассемблерные и машинные.
Эзотерические языки придумываются для развлечения или исследования возможностей программирования. В реальной разработке они не встречаются, а читать их обычно сложно. Эту категорию мы пропустим.
Системные языки предназначены для разработки программ, которые взаимодействуют напрямую с «железом» и системными ресурсами. Эти языки обеспечивают высокий уровень контроля над памятью и производительностью, поэтому они используются для создания операционных систем, драйверов устройств и высокопроизводительных приложений. Новые популярные языки, вроде Go или Rust, используются и для веб‑разработки.
Лично я рекомендую начинать программировать именно с языка C. Он небольшой, учит работать с памятью, а навыки программирования на нём актуальны в любом другом языке. Хотя многие начинают писать на C, немногие продолжают. Язык содержит мало абстракций, а доступ к памяти требует от разработчиков ответственности и внимательности, так что скорость разработки на нём низкая. Я начал программировать на С, затем перешёл на Python, а потом на Rust.
Скриптовые языки предназначены для автоматизации задач, управления программами и обработки данных. Обычно они интерпретируемые — это означает, что код выполняется напрямую без предварительной компиляции. Из‑за отсутствия компиляции такие языки могут содержать больше ошибок и выполняться медленнее, чем системные. Ответственность разработчика уже не в контроле ресурсов, а в качестве написанного кода. Может показаться, что порог входа в такие языки ниже, чем в системные. Однако, большое количество абстракций в языке требует большего времени на его изучение.
Скриптовые языки отличаются простотой синтаксиса и высокой гибкостью, поэтому они подходят для быстрого прототипирования. Благодаря скорости разработки и большому количеству разработчиков, такие языки используют как в стартапах, так и в крупных компаниях.
Самый популярный язык в мире — это Python. Это скриптовый язык который легко читать и у него широкий спектр применения. Если вы не писали раньше код, то Python или JavaScript — хороший выбор. Важный минус: после такого приятного языка вы вряд ли захотите писать на низкоуровневых, и возможно, вы всю жизнь будете использовать только один язык.
Языки для специфических задач решают конкретную проблему или используются в узкой области разработки. Например, вам нужен язык для размещения контента на веб‑странице, и HTML решает именно эту задачу. Можно возразить, что HTML — это язык не программирования, а вёрстки. Если хотите об этом поспорить, жду вас в комментарии.
SQL — тоже язык из этой категории. Он используется в сфере работы с данными. Изначально SQL создавался как язык конечного пользователя. Это означает, что он проектировался не для программистов или разработчиков. SQL предназначался для тех, кто работает с данными напрямую. Например, для аналитиков, менеджеров, исследователей и других специалистов, которым нужно быстро извлекать, фильтровать и анализировать данные.
SQL — абстракция доступа к данным. Нам не нужно понимать сложную логику работы самой базы данных или программирования на низкоуровневых языках. Это позволяет конечным пользователям сосредоточиться на работе с данными, а не на технических деталях их обработки.
Идея SQL заключалась в том, чтобы сделать его простым и понятным, и пользователи могли бы самостоятельно писать запросы. Со временем SQL приобрел черты полноценного языка программирования (например использование переменных, циклов и процедур). Это сделало его инструментом для разработчиков, аналитиков и специалистов технической поддержки.
Фундаментальный принцип языка SQL заключается в том, что он декларативный. Это значит, что программа описывает результат, который пользователь хочет получить. Альтернативой являются императивные языки программирования, где пользователь описывает алгоритм получения результата.
Объясню на примере: мама отправляет сына в магазин.
В декларативном языке, вроде SQL, сын получает список покупок:
молоко, 1 л
яйца 10 шт
батон хлеба
В императивном языке сын получает алгоритм:
Выйти из квартиры и закрыть дверь.
Спуститься по лестнице (или на лифте) на первый этаж.
Дойти до ближайшего магазина.
Взять корзину для покупок у входа.
Пройти к отделу с молоком, выбрать и положить в корзину 1 литр молока.
Найти отдел с яйцами и положить 10 штук в корзину.
Пройти к полкам с хлебом и взять один батон.
Дойти до кассы, оплатить покупки.
Вернуться домой с покупками.
Хоть SQL и является декларативным языком, алгоритм получения данных всё же есть. Программа, которая управляет данными, преобразует декларативный запрос пользователя в алгоритм получения этих данных и выполняет его. Такие системы называются Системы Управления Базами Данных.
Любая программа состоит из данных и действий над этими данными. Данными могут быть личные данные пользователя, видео в социальных сетях или любая другая информация. Действия над данными тоже не ограничены: пользователя можно авторизовать по комбинации логина и пароля, а видео — конвертировать в другой формат. Данными могут быть и обычные числа, которые хранятся как результат вычислений.
У нас есть данные, с которыми мы делаем какие‑то действия. Эти данные нужно где‑то хранить. Хранить их можно в самой программе, но если она неожиданно выключится, то мы их потеряем. Вспомните, как в детстве вы играли в любимую компьютерную игру и вдруг слышали, что родители заходят домой. Вы быстро нажимали на кнопку выключения компьютера и ваш прогресс терялся. Или например, вы пишите дипломную работу в текстовом редакторе. Увидев, что в программе произошла ошибка, вам остается лишь надеяться, что вы недавно сохраняли работу. Во всех этих случаях данные хранились в самой программе и не были записаны на диск.
Долговременное хранение данных на диске — задача не такая простая. Простым решением было бы хранение данных в файлах. В таком случае, вам нужно придумать, как читать файлы, записывать их, искать в них информацию и многое другое. Самое популярное решение — хранение данных в реляционной базе. Технически, СУБД хранят данные в файлах. Например, SQLite хранит все данные в виде одного файла. СУБД предлагает нам абстракции: использование SQL позволяет нам легко работать с данными.
Вспомните заголовок этой статьи: «Прежде чем изучать любой язык программирования, необходимо изучить SQL». Какой бы язык программирования вы не выбрали, вам придётся хранить данные отдельно от вашего приложения. Для такого хранения с 1970-х годов используются реляционные базы данных. Работа с реляционной БД выполняется посредством SQL запросов. Я рекомендую сначала разобраться с хранением данных, а затем уже думать над тем, как с ними работать.
Изучить SQL можно бесплатно. Бесплатные материалы есть для любого уровня: начиная от простых запросов, заканчивая проектированием и разработкой новых СУБД. Я собрал 5 бесплатных инструментов для каждого уровня. Все эти инструменты я сам использовал для изучения SQL. Если вы только начинаете свой путь, вам нужно понять основы работы с SQL, а для этого необходима практика в запросах. Поскольку язык изначально задумывался как простой доступ к данным, то для простой работы не нужно изучать большое количество теории. Вам потребуется готовая база данных и задания, так что первые два ресурса именно про это.
Курс по SQL на степике [7]
В нём есть как теория, так и практика. В курсе работаем с MySQL — одной из самых популярных версий СУБД. Так как синтексис запросов в SQL стандартизирован, вы сможете работать с любой реляционной БД после этого курса. Для приложений я рекомендую использовать PostgreSQL, но вы можете использовать даже SQLite.
Дополнительная практика на тренажёре [8]
Закрепляем основы и изучаем примеры запросов. В этом тренажёре практика на примере авиакомпаний, сервиса бронирования и базы данных института. Много заданий разного уровня сложности, отлично подходит чтобы закрепить основы и понять сценарии запросов в разных ситуациях.
Инструмент для запуска БД и программ — Докер [9]
Базу данных можно запустить локально на своём устройстве, но это не всегда удобно. Современный подход разработки предлагает использовать Докер для запуска приложения и зависимых сервисов. Обязательно изучите этот инструмент, если планируете развиваться как разработчик.
Путеводитель по базам данных [10]
Если БД вас заинтересовали и вы захотите изучить больше, то прочитайте книгу за авторством Комарова. В ней он рассказывает обо всех доступных видах баз данных, компромиссах при их использовании и об управлении базами данных.
Автор: By-Lazarev
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/yazy-ki-programmirovaniya/410528
Ссылки в тексте:
[1] Об авторе: #author
[2] Виды языков программирования: #languages
[3] Машинные и Ассемблерные языки: #low_level
[4] Высокоуровневые языки: #high_level
[5] SQL‑СУБД: #sql
[6] Бесплатные ресурсы: #free
[7] Курс по SQL на степике: https://stepik.org/course/63054
[8] Дополнительная практика на тренажёре: https://sql-academy.org/ru/trainer
[9] Инструмент для запуска БД и программ — Докер: https://karpov.courses/docker
[10] Путеводитель по базам данных: https://postgrespro.ru/education/books/dbguide
[11] Источник: https://habr.com/ru/articles/881896/?utm_source=habrahabr&utm_medium=rss&utm_campaign=881896
Нажмите здесь для печати.