Прежде чем выбирать язык программирования, необходимо изучить SQL

в 16:16, , рубрики: sql, базы данных, для начинающих, СУБД, языки программирования
Прежде чем выбирать язык программирования, необходимо изучить SQL - 1

В этой статье отвечу на три вопроса:

  • Какие существуют виды языков программирования;

  • Почему нужно сначала изучить SQL;

  • Как учить SQL бесплатно.

Если вы только выбираете язык программирования или уже программируете, но не уверены в своём выборе — эта статья для вас. Мы рассмотрим, какие бывают виды языков программирования, почему данные — это основа любой программы, как эти данные хранятся и как с ними работать. В конце статьи я приведу 5 бесплатных ресурсов, которые сам использовал для изучения SQL.

Это моя первая статья на Хабре, так что буду рад вашим комментариям и замечаниям.

Навигация:

Об авторе

Прежде чем выбирать язык программирования, необходимо изучить SQL - 2

Никита

Автор курсов по программированию, 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 занимают высокоуровневые языки. Они делятся на несколько категорий: системные, скриптовые, специфические и эзотерические. Начать изучать программирование стоит с системных или скриптовых языков. Языки для специфических задач хорошо описывают своё предназначение названием. А эзотерические можно смело пропустить, как ассемблерные и машинные.

Эзотерические языки придумываются для развлечения или исследования возможностей программирования. В реальной разработке они не встречаются, а читать их обычно сложно. Эту категорию мы пропустим.

Пример на языке brainfuck

Пример на языке brainfuck

Системные языки предназначены для разработки программ, которые взаимодействуют напрямую с «железом» и системными ресурсами. Эти языки обеспечивают высокий уровень контроля над памятью и производительностью, поэтому они используются для создания операционных систем, драйверов устройств и высокопроизводительных приложений. Новые популярные языки, вроде Go или Rust, используются и для веб‑разработки.

Лично я рекомендую начинать программировать именно с языка C. Он небольшой, учит работать с памятью, а навыки программирования на нём актуальны в любом другом языке. Хотя многие начинают писать на C, немногие продолжают. Язык содержит мало абстракций, а доступ к памяти требует от разработчиков ответственности и внимательности, так что скорость разработки на нём низкая. Я начал программировать на С, затем перешёл на Python, а потом на Rust.

Пример на языке С

Пример на языке С
Пример на языке Go

Пример на языке Go
Пример на языке Rust

Пример на языке Rust

Скриптовые языки предназначены для автоматизации задач, управления программами и обработки данных. Обычно они интерпретируемые — это означает, что код выполняется напрямую без предварительной компиляции. Из‑за отсутствия компиляции такие языки могут содержать больше ошибок и выполняться медленнее, чем системные. Ответственность разработчика уже не в контроле ресурсов, а в качестве написанного кода. Может показаться, что порог входа в такие языки ниже, чем в системные. Однако, большое количество абстракций в языке требует большего времени на его изучение.

Скриптовые языки отличаются простотой синтаксиса и высокой гибкостью, поэтому они подходят для быстрого прототипирования. Благодаря скорости разработки и большому количеству разработчиков, такие языки используют как в стартапах, так и в крупных компаниях.

Самый популярный язык в мире — это Python. Это скриптовый язык который легко читать и у него широкий спектр применения. Если вы не писали раньше код, то Python или JavaScript — хороший выбор. Важный минус: после такого приятного языка вы вряд ли захотите писать на низкоуровневых, и возможно, вы всю жизнь будете использовать только один язык.

Пример на языке Python

Пример на языке Python
Пример на языке JavaScript

Пример на языке JavaScript

Языки для специфических задач решают конкретную проблему или используются в узкой области разработки. Например, вам нужен язык для размещения контента на веб‑странице, и HTML решает именно эту задачу. Можно возразить, что HTML — это язык не программирования, а вёрстки. Если хотите об этом поспорить, жду вас в комментарии.

SQL — тоже язык из этой категории. Он используется в сфере работы с данными. Изначально SQL создавался как язык конечного пользователя. Это означает, что он проектировался не для программистов или разработчиков. SQL предназначался для тех, кто работает с данными напрямую. Например, для аналитиков, менеджеров, исследователей и других специалистов, которым нужно быстро извлекать, фильтровать и анализировать данные.

SQL — абстракция доступа к данным. Нам не нужно понимать сложную логику работы самой базы данных или программирования на низкоуровневых языках. Это позволяет конечным пользователям сосредоточиться на работе с данными, а не на технических деталях их обработки.

Пример на языке SQL

Пример на языке SQL

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

Фундаментальный принцип языка SQL заключается в том, что он декларативный. Это значит, что программа описывает результат, который пользователь хочет получить. Альтернативой являются императивные языки программирования, где пользователь описывает алгоритм получения результата.

Объясню на примере: мама отправляет сына в магазин.

В декларативном языке, вроде SQL, сын получает список покупок:

  • молоко, 1 л

  • яйца 10 шт

  • батон хлеба

В императивном языке сын получает алгоритм:

  1. Выйти из квартиры и закрыть дверь.

  2. Спуститься по лестнице (или на лифте) на первый этаж.

  3. Дойти до ближайшего магазина.

  4. Взять корзину для покупок у входа.

  5. Пройти к отделу с молоком, выбрать и положить в корзину 1 литр молока.

  6. Найти отдел с яйцами и положить 10 штук в корзину.

  7. Пройти к полкам с хлебом и взять один батон.

  8. Дойти до кассы, оплатить покупки.

  9. Вернуться домой с покупками.

Хоть SQL и является декларативным языком, алгоритм получения данных всё же есть. Программа, которая управляет данными, преобразует декларативный запрос пользователя в алгоритм получения этих данных и выполняет его. Такие системы называются Системы Управления Базами Данных.

SQL-СУБД

Любая программа состоит из данных и действий над этими данными. Данными могут быть личные данные пользователя, видео в социальных сетях или любая другая информация. Действия над данными тоже не ограничены: пользователя можно авторизовать по комбинации логина и пароля, а видео — конвертировать в другой формат. Данными могут быть и обычные числа, которые хранятся как результат вычислений.

У нас есть данные, с которыми мы делаем какие‑то действия. Эти данные нужно где‑то хранить. Хранить их можно в самой программе, но если она неожиданно выключится, то мы их потеряем. Вспомните, как в детстве вы играли в любимую компьютерную игру и вдруг слышали, что родители заходят домой. Вы быстро нажимали на кнопку выключения компьютера и ваш прогресс терялся. Или например, вы пишите дипломную работу в текстовом редакторе. Увидев, что в программе произошла ошибка, вам остается лишь надеяться, что вы недавно сохраняли работу. Во всех этих случаях данные хранились в самой программе и не были записаны на диск.

Долговременное хранение данных на диске — задача не такая простая. Простым решением было бы хранение данных в файлах. В таком случае, вам нужно придумать, как читать файлы, записывать их, искать в них информацию и многое другое. Самое популярное решение — хранение данных в реляционной базе. Технически, СУБД хранят данные в файлах. Например, SQLite хранит все данные в виде одного файла. СУБД предлагает нам абстракции: использование SQL позволяет нам легко работать с данными.

Вспомните заголовок этой статьи: «Прежде чем изучать любой язык программирования, необходимо изучить SQL». Какой бы язык программирования вы не выбрали, вам придётся хранить данные отдельно от вашего приложения. Для такого хранения с 1970-х годов используются реляционные базы данных. Работа с реляционной БД выполняется посредством SQL запросов. Я рекомендую сначала разобраться с хранением данных, а затем уже думать над тем, как с ними работать.

Бесплатные ресурсы

Изучить SQL можно бесплатно. Бесплатные материалы есть для любого уровня: начиная от простых запросов, заканчивая проектированием и разработкой новых СУБД. Я собрал 5 бесплатных инструментов для каждого уровня. Все эти инструменты я сам использовал для изучения SQL. Если вы только начинаете свой путь, вам нужно понять основы работы с SQL, а для этого необходима практика в запросах. Поскольку язык изначально задумывался как простой доступ к данным, то для простой работы не нужно изучать большое количество теории. Вам потребуется готовая база данных и задания, так что первые два ресурса именно про это.

  1. Курс по SQL на степике
    В нём есть как теория, так и практика. В курсе работаем с MySQL — одной из самых популярных версий СУБД. Так как синтексис запросов в SQL стандартизирован, вы сможете работать с любой реляционной БД после этого курса. Для приложений я рекомендую использовать PostgreSQL, но вы можете использовать даже SQLite.

  2. Дополнительная практика на тренажёре
    Закрепляем основы и изучаем примеры запросов. В этом тренажёре практика на примере авиакомпаний, сервиса бронирования и базы данных института. Много заданий разного уровня сложности, отлично подходит чтобы закрепить основы и понять сценарии запросов в разных ситуациях.

  3. Инструмент для запуска БД и программ — Докер
    Базу данных можно запустить локально на своём устройстве, но это не всегда удобно. Современный подход разработки предлагает использовать Докер для запуска приложения и зависимых сервисов. Обязательно изучите этот инструмент, если планируете развиваться как разработчик.

  4. Путеводитель по базам данных
    Если БД вас заинтересовали и вы захотите изучить больше, то прочитайте книгу за авторством Комарова. В ней он рассказывает обо всех доступных видах баз данных, компромиссах при их использовании и об управлении базами данных.

Автор: By-Lazarev

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js