<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Чашка Кода</title>
    <description>The latest articles on DEV Community by Чашка Кода (@a_cup_of_code).</description>
    <link>https://dev.to/a_cup_of_code</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1030154%2F54694efc-1562-4b9f-a2bf-1b3e190c6132.png</url>
      <title>DEV Community: Чашка Кода</title>
      <link>https://dev.to/a_cup_of_code</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/a_cup_of_code"/>
    <language>en</language>
    <item>
      <title>Как выбрать язык программирования для бекенда</title>
      <dc:creator>Чашка Кода</dc:creator>
      <pubDate>Thu, 13 Feb 2025 07:14:13 +0000</pubDate>
      <link>https://dev.to/a_cup_of_code/kak-vybrat-iazyk-proghrammirovaniia-dlia-biekienda-2b0a</link>
      <guid>https://dev.to/a_cup_of_code/kak-vybrat-iazyk-proghrammirovaniia-dlia-biekienda-2b0a</guid>
      <description>&lt;p&gt;В этой статье отвечу на три вопроса:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Какие существуют виды языков программирования;&lt;/li&gt;
&lt;li&gt;Почему нужно сначала изучить SQL;&lt;/li&gt;
&lt;li&gt;Как учить SQL бесплатно.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Предыстория
&lt;/h2&gt;

&lt;p&gt;Я пишу про IT уже больше 2 лет в виде коротких заметок, которые можно прочитать за чашечкой кофе. Такие посты я называю "чашки кода". Сначала я рефлексировал о своём опыте в IT, затем писал про новости в этой сфере, а когда мне начали задавать одни и те же вопросы, я стал писать посты-ответы. Три самых популярных вопроса были: "С чего начать программировать", “Какой язык выбрать” и "Как учить SQL". На все три вопроса я ответил в одном посте, который впоследствии я стал пересылать так часто, что даже запомнил ссылку на него. А сейчас пришла пора написать полноценную статью.&lt;/p&gt;




&lt;h2&gt;
  
  
  Виды языков программирования
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx63z8huaffajk52uc981.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx63z8huaffajk52uc981.png" alt="Схема распределения языков программирования на английском и русском языке" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Все языки программирования можно разделить на три группы: машинные, ассемблерные и высокоуровневые. С каждым уровнем мы добавляем абстракции от уровня "железа". Абстракция - это приём, при котором сложная система скрывается за понятным способом взаимодействия. Например, автоматическая коробка передач в машине добавляет нам простую абстракцию. Нам не нужно вручную переключаться между передачами - это происходит автоматически, за счёт абстракции. Другой пример: раньше люди делали фото на плёнку, проявляли её и получали фотографию. Сейчас есть полароиды, которые делают фото всего за одно нажатие кнопки и моментально печатают его. Такие механические действия скрыты за простой абстракцией. &lt;/p&gt;

&lt;p&gt;В программировании абстракции встречаются постоянно. В высокоуровневых языках мы не думаем, как работает память компьютера, как конвертировать биты в символы и о множестве других проблем. Это накладывает ограничения. Например, скорость программы будет ниже, но процесс разработки - быстрее. Иногда абстракции не могут решить проблему, а наоборот усложняют понимание, о чём говорит Кевлин Хенни:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Любую проблему можно решить путём введения дополнительного уровня абстракции, кроме проблемы слишком большого количества уровней абстракций.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В итоге у нас есть три уровня языков программирования:&lt;br&gt;
&lt;strong&gt;Высокоуровневые&lt;/strong&gt; &lt;em&gt;(High-level)&lt;/em&gt; - языки, близкие к человеческому, обеспечивающие абстракцию от деталей "железа". Удобны для разработки сложных программ.&lt;br&gt;
&lt;strong&gt;Ассемблерные&lt;/strong&gt; &lt;em&gt;(assembly)&lt;/em&gt; - низкоуровневые языки, представляющие машинные инструкции в читаемой форме. Зависят от архитектуры процессора: язык для MacBook с процессором Intel не будет работать на MacBook с процессором M.&lt;br&gt;
&lt;strong&gt;Машинные&lt;/strong&gt; &lt;em&gt;(machine)&lt;/em&gt; - набор машинных инструкций, которые понимает процессор. Самый низкий уровень, напрямую взаимодействующий с "железом". Такой код будет в бинарном виде, то есть будет содержать только единицы и нули.&lt;/p&gt;
&lt;h3&gt;
  
  
  Машинные и Ассемблерные языки
&lt;/h3&gt;

&lt;p&gt;Машинные языки появились в начале 1940-х. Тогда программисты писали программы напрямую, в виде наборов битовых команд, то есть в виде нулей и единиц. Работать было сложно. К концу 40-х годов появились первые ассемблерные языки, которые были понятны человеку.&lt;/p&gt;

&lt;p&gt;Ассемблерный код при запуске переводится в машинный, а затем запускается компьютером. Таким образом, ассемблерный код тоже можно назвать абстракцией. А какое-то время он даже считался высокоуровневым. &lt;/p&gt;

&lt;p&gt;Любой код проходит несколько этапов, становясь ассемблерным, а затем машинным. Если вы пишите на С или Rust, то код будет преобразован в ассемблерный на этапе компиляции. На нём написанный код обрабатывается и подготавливается файл для его запуска. В итоге мы получаем машинный код, потратив немного времени на его обработку.&lt;br&gt;
&lt;em&gt;Формально, абзац выше содержит допущения, сделанные осознанно. Некоторые языки могут пропускать этап ассамблерного кода, а некоторые используют интерпретацию или специальный вид JIT-компиляции.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Современные разработчики давно не пишут на низкоуровневых языках. Вы можете не тратить время на этот вид языков программирования.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Пример машинного кода:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;101110000 00000001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Пример ассемблерного кода:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;section .data
    msg db 'Hello, World!', 0xA
    len equ $ - msg

section .text
    global _start

_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg
    mov edx, len
    int 0x80

    mov eax, 1
    xor ebx, ebx
    int 0x80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Высокоуровневые языки
&lt;/h3&gt;

&lt;p&gt;В самых популярных рейтингах языков программирования - &lt;strong&gt;TIOBE Index&lt;/strong&gt;, &lt;strong&gt;PYPL Index&lt;/strong&gt; и &lt;strong&gt;RedMonk&lt;/strong&gt; - топ-20 занимают высокоуровневые языки.  Они делятся на несколько категорий: системные, скриптовые, специфические и эзотерические. Начать изучать программирование стоит с системных или скриптовых языков. Языки для специфических задач хорошо описывают своё предназначение названием. А эзотерические можно смело пропустить, как ассемблерные и машинные.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Эзотерические языки&lt;/strong&gt;: Такие языки придумываются для развлечения или исследования возможностей программирования. В реальной разработке они не встречаются, а читать их обычно сложно. Эту категорию мы пропустим.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Пример на языке brainfuck:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight brainfuck"&gt;&lt;code&gt;&lt;span class="nf"&gt;++++++++++&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;+++++++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++++++++++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;+++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;+.+++++++..+++.&lt;/span&gt;&lt;span class="c1"&gt;
&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++.&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+++++++++++++++.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;.+++.------.--------.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;+.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;.&lt;/span&gt;&lt;span class="c1"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Системные языки&lt;/strong&gt; предназначены для разработки программ, которые взаимодействуют напрямую с "железом" и системными ресурсами. Эти языки обеспечивают высокий уровень контроля над памятью и производительностью, поэтому они используются для создания операционных систем, драйверов устройств и высокопроизводительных приложений. Новые популярные языки, вроде Go или Rust, используются и для веб-разработки. &lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Пример на С:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Пример на Go:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Пример на Rust:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Скриптовые языки&lt;/strong&gt; предназначены для автоматизации задач, управления программами и обработки данных. Обычно они интерпретируемые - это означает, что код выполняется напрямую без предварительной компиляции. Из-за отсутствия компиляции такие языки могут содержать больше ошибок и выполняться медленнее, чем системные. Ответственность разработчика уже не в контроле ресурсов, а в качестве написанного кода. Может показаться, что порог входа в такие языки ниже, чем в системные. Однако, большое количество абстракций в языке требует большего времени на его изучение. &lt;/p&gt;

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

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

&lt;blockquote&gt;
&lt;p&gt;Пример на языке Python:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, World!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Пример на языке JavaScript:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, World!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Языки для специфических задач&lt;/strong&gt; решают конкретную проблему или используются в узкой области разработки. Например, вам нужен язык для размещения контента на веб-странице, и HTML решает именно эту задачу. Можно возразить, что HTML - это язык не программирования, а вёрстки. Если хотите об этом поспорить, жду вас в комментарии.&amp;nbsp;&lt;/p&gt;

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

&lt;p&gt;SQL - абстракция доступа к данным, когда нам не нужно понимать сложную логику работы самой базы данных или программирования на низкоуровневых языках. Это позволяет конечным пользователям сосредоточиться на работе с данными, а не на технических деталях их обработки.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Пример на языке SQL:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;p&gt;Объясню на примере: мама отправляет сына в магазин. &lt;/p&gt;

&lt;p&gt;В декларативном языке, вроде SQL, сын получает список покупок: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;молоко, 1 л&lt;/li&gt;
&lt;li&gt;яйца 10 шт&lt;/li&gt;
&lt;li&gt;батон хлеба&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В императивном языке сын получает алгоритм:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Выйти из квартиры и закрыть дверь.&lt;/li&gt;
&lt;li&gt;Спуститься по лестнице (или на лифте) на первый этаж.&lt;/li&gt;
&lt;li&gt;Дойти до ближайшего магазина.&lt;/li&gt;
&lt;li&gt;Взять корзину для покупок у входа.&lt;/li&gt;
&lt;li&gt;Пройти к отделу с молоком, выбрать и положить в корзину 1 литр молока.&lt;/li&gt;
&lt;li&gt;Найти отдел с яйцами и положить 10 штук в корзину.&lt;/li&gt;
&lt;li&gt;Пройти к полкам с хлебом и взять один батон.&lt;/li&gt;
&lt;li&gt;Дойти до кассы, оплатить покупки.&lt;/li&gt;
&lt;li&gt;Вернуться домой с покупками.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h3&gt;
  
  
  SQL-СУБД
&lt;/h3&gt;

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

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

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

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

&lt;h3&gt;
  
  
  Бесплатные ресурсы
&lt;/h3&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://stepik.org/course/63054" rel="noopener noreferrer"&gt;Курс по SQL на степике:&lt;/a&gt;
В нём есть как теория, так и практика. В курсе работаем с MySQL - одной из самых популярных версий СУБД. Так как синтексис запросов в SQL стандартизирован, вы сможете работать с любой реляционной БД после этого курса. Для приложений я рекомендую  использовать PostgreSQL, но вы можете использовать даже SQLite.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sql-academy.org/ru/trainer" rel="noopener noreferrer"&gt;Дополнительная практика на тренажёре:&lt;/a&gt;
Закрепляем основы и изучаем примеры запросов. В этом тренажёре практика на примере авиакомпаний, сервиса бронирования и базы данных института. Много заданий разного уровня сложности, отлично подходит чтобы закрепить основы и понять сценарии запросов в разных ситуациях.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://karpov.courses/docker" rel="noopener noreferrer"&gt;Инструмент для запуска БД и программ - Докер:&lt;/a&gt;
Базу данных можно запустить локально на своём устройстве, но это не всегда удобно. Современный подход разработки предлагает использовать Докер для запуска приложения и зависимых сервисов. Обязательно изучите этот инструмент, если планируете развиваться как разработчик.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://postgrespro.ru/education/books/dbguide" rel="noopener noreferrer"&gt;Путеводитель по базам данных:&lt;/a&gt;
Если БД вас заинтересовали и вы захотите изучить больше, то прочитайте книгу за авторством Комарова. В ней он рассказывает обо всех доступных видах баз данных, компромиссах при использовании и об управлении базами данных.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLSE8ODhjZXjYDBpQnSymaectKjxCy6BYq" rel="noopener noreferrer"&gt;Курс Intro to Database Systems:&lt;/a&gt;
Возможно, вам захочется разработать и свою собственную базу данных или детальнее изучить особенности их реализаций. В таком случае, обратитесь к курсу по системам баз данных от университета "Карнеги Меллон". Курс на английском языке, на момент написания статьи, это самая актуальная информация о системах баз данных, которые я знаю.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxio186kwemvrzoo767me.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxio186kwemvrzoo767me.png" alt="Пост в телеграмме" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
Все ссылки оформил для вас одним постом в телеграме, сохраните себе: &lt;a href="https://a_cup_of_code.t.me/311" rel="noopener noreferrer"&gt;https://a_cup_of_code.t.me/311&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>programming</category>
      <category>beginners</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
