Найти в Дзене
IT - это просто

Зачем нам языки программирования? Простыми словами

Здравствуй, дорогой читатель. Сегодня у нас с вами очень простая, но важная тема. Автор попробует объяснить одну ключевую вещь, на которой держится весь цифровой мир. Мы поговорим о языках программирования. Но не волнуйтесь — никакой сложной математики и страшных терминов не будет. Только образы, истории и простые сравнения. Если вы когда-либо включали компьютер или заказывали такси через телефон, эта статья для вас. Давайте начнём с самого начала, с одной очень старой проблемы. Давным-давно, когда компьютеры были размером с комнату, люди общались с ними очень странно. Представьте, что перед вами стена с тысячами тумблеров — маленьких переключателей. Один тумблер вверх — это «да», или «1». Тумблер вниз — это «нет», или «0». Чтобы попросить такую машину просто сложить два числа, человек должен был вручную щёлкать эти тумблеры, составляя из «1» и «0» длинную-длинную инструкцию. Это был единственный язык, который понимало «железо» — процессор (если интересно, как он устроен внутри, у Авто
Оглавление

Здравствуй, дорогой читатель. Сегодня у нас с вами очень простая, но важная тема. Автор попробует объяснить одну ключевую вещь, на которой держится весь цифровой мир. Мы поговорим о языках программирования.

Но не волнуйтесь — никакой сложной математики и страшных терминов не будет. Только образы, истории и простые сравнения. Если вы когда-либо включали компьютер или заказывали такси через телефон, эта статья для вас.

Давайте начнём с самого начала, с одной очень старой проблемы.

История: Разговор со стеной

Давным-давно, когда компьютеры были размером с комнату, люди общались с ними очень странно. Представьте, что перед вами стена с тысячами тумблеров — маленьких переключателей. Один тумблер вверх — это «да», или «1». Тумблер вниз — это «нет», или «0».

Так выглядело общение с первыми компьютерами: тысячи переключателей и ленты из нулей и единиц.
Так выглядело общение с первыми компьютерами: тысячи переключателей и ленты из нулей и единиц.

Чтобы попросить такую машину просто сложить два числа, человек должен был вручную щёлкать эти тумблеры, составляя из «1» и «0» длинную-длинную инструкцию. Это был единственный язык, который понимало «железо» — процессор (если интересно, как он устроен внутри, у Автора есть отдельный простой разговор на эту тему).

Можно ли так работать? Технически — да. Но это всё равно что общаться с иностранцем, зная только два слова: «хлеб» и «вода». Вы сможете выжить, но рассказать ему красивую историю или попросить приготовить сложное блюдо — никогда. Нужен был способ сделать общение проще.

Что же это такое, если говорить просто?

Представьте, что язык программирования — это очень строгий рецепт и волшебный переводчик в одном флаконе.

Язык программирования — это книга правил (рецепт), а компилятор — волшебный переводчик с человеческого на машинный.
Язык программирования — это книга правил (рецепт), а компилятор — волшебный переводчик с человеческого на машинный.

Вы — повар (программист). У вас есть кухонный робот (процессор), который умеет только кипятить воду, включать таймер и перемешивать. Но он понимает команды только на тарабарском языке, который состоит из звуков «бип» и «буп».

Что делать? Вы берёте особую книгу рецептов (это и есть язык программирования). В этой книге правила: «Чтобы сказать "взять", напиши TAKE. Чтобы сказать "вода", напиши WATER». Вы пишете по этим правилам: TAKE WATER. BOIL.

Затем вы отдаёте эту записку волшебному переводчику (он называется компилятор или интерпретатор). Переводчик — верный помощник. Он смотрит в вашу записку, сверяется с правилами из книги и переводит её в длинную, идеальную последовательность «бип» и «буп»: «БИП-БУП-БИП-БИП-БУП...».

Робот слышит знакомые «бипы» и «бупы» и сразу понимает: ага, нужно взять воду и вскипятить. И выполняет.

Вот и весь секрет. Язык программирования — это и есть та самая книга строгих правил, которая позволяет человеку писать команды на понятном ему языке (похожем на английский), а волшебному переводчику — превращать эти команды в «бип-буп» для машины.

Сказка про Алису и Илью

Давайте оживим эту историю. У Автора есть два старых знакомых:

  • Алиса — она умеет объяснять задачи.
  • Илья (в рамках данной статьи периодически это будет робот) — он умеет их выполнять, но понимает только команды, похожие на шифровку из нулей и единиц.

Однажды Алисе понадобилось, чтобы Илья запомнил, сколько будет 5 + 3.

1. Неудача. Алиса сказала: «Илья, дорогой, сложи, пожалуйста, 5 и 3 и запомни результат». Илья посмотрел на неё пустым взглядом. Он её не понял. Совсем. Как будто она говорила на марсианском.

Алиса говорит на своем языке, но Илья её не понимает. У них нет общего языка.
Алиса говорит на своем языке, но Илья её не понимает. У них нет общего языка.

2. Находка. Тогда Алиса вспомнила про волшебного помощника — Робота-Переводчика. Она взяла блокнот с правилами (язык Python) и написала там очень чётко:
ответ = 5 + 3

Алиса записывает задачу по строгим правилам из специальной книги — это и есть код.
Алиса записывает задачу по строгим правилам из специальной книги — это и есть код.

3. Перевод. Она дала эту записку Роботу-Переводчику и сказала: «Сделай так, чтобы Илья это выполнил». Робот — дело знает. Он прочитал записку, проверил, всё ли по правилам, и превратил её в длинную-предлинную инструкцию, состоящую только из «0» и «1». Эту инструкцию он передал Илье.

Робот-переводчик (компилятор) превращает понятный код в последовательность нулей и единиц, которую понимает Илья.
Робот-переводчик (компилятор) превращает понятный код в последовательность нулей и единиц, которую понимает Илья.

4. Чудо. Илья, получив знакомый набор нулей и единиц, тут же щёлкнул своими внутренними переключателями (их, кстати, зовут транзисторы, а логика сложения живёт в сумматоре), нашёл число 8 и отложил его в свою память в ячейку с именем «ответ».

Илья выполняет инструкции и сохраняет результат. Миссия выполне
Илья выполняет инструкции и сохраняет результат. Миссия выполне

Проблема решена! Алиса и Илья нашли общий язык благодаря правилам из блокнота (языку программирования) и Роботу-Переводчику.

Почему этих языков много? Неужели одного мало?

Отличный вопрос. Представьте, что вам нужно:

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

Задачи разные — инструменты нужны разные. Так и с компьютерами.

  • Есть задачи «близко к железу». Например, написать программу для кардиостимулятора или для двигателя современного самолёта. Здесь важна каждая миллисекунда, каждое движение тока. Для этого нужны «тонкие» и строгие языки (как C или C++). Они как инструменты часовщика.
  • А есть задачи «далеко от железа». Например, создать сайт с фотографиями котиков, написать программу для расчёта скидок в магазине или для умной ленты в соцсети. Здесь важно сделать всё быстро и понятно. Для этого нужны языки «попроще» (как Python или JavaScript). Они как большой и удобный экскаватор — копает быстро, управлять им легче.

Языки ещё и помогают избегать ошибок. Например, хороший язык не даст вам перепутать число и слово. Это как если бы на склаке у вас были чётко подписанные коробки: «Только цифры» и «Только буквы». Вы не сможете случайно положить яблоко в коробку с гвоздями. Про эти правила — типы данныхАвтор уже рассказывал отдельно, это интересно.

Самый главный миф, который нужно забыть

Миф: «А вот мне сказали, что язык *** — самый крутой, а остальные ерунда».

Каждый язык программирования — свой инструмент. Нет лучшего, есть подходящий для задачи.
Каждый язык программирования — свой инструмент. Нет лучшего, есть подходящий для задачи.

Автор просит вас запомнить одну простую вещь. Языки программирования — это просто инструменты. Как в любом хозяйстве.

  • Python/JavaScript — это как универсальный швейцарский нож. Им много чего можно сделать: открыть банку, открутить винтик, порезать хлеб. Удобно, всегда под рукой. Но им не распилить дрова.
  • Java/C# — это как большой заводской станок с конвейером. Он создан, чтобы делать миллионы одинаковых, надёжных деталей. На нём делают большие банковские системы и корпоративные программы. Запускать его для того, чтобы сделать одну табуретку, — странно.
  • C/C++ — это как скальпель хирурга или мощная бензопила. Инструменты для виртуозов и для очень конкретных, сложных задач. Ими можно сделать невероятно точную вещь (игру, драйвер, систему для ракеты), но ими же очень легко пораниться, если не знать, как обращаться.
  • SQL — это как специальный штопор для винных бутылок. Он делает только одно, но делает это идеально. Ним нельзя забить гвоздь, но если у вас есть бутылка (база данных), лучшего инструмента не найти.

Спросите у плотника, какой инструмент самый лучший? Он удивится. Потому что для гвоздя нужен молоток, для доски — пила, а для шлифовки — наждачка. Всё просто.

Так что же это всё значит?

Язык программирования — это мост. Мост между нашим, человеческим, миром идей, задач и «хочу» — и безупречно точным, но очень простым миром микросхем, где есть только «да» и «нет».

Мы придумали эти мосты, чтобы поручить компьютерам скучную, сложную или невыполнимую для нас работу: от управления полётом самолёта до показа смешного видео с котиком.

Их много не потому, что программисты не могут договориться. Их много потому, что и задач в нашем мире — бесконечно много. И это прекрасно.

Если такое объяснение оказалось для вас полезным и вы хотите и дальше без страха смотреть на технологии, Автор будет рад видеть вас среди подписчиков. Вместе мы сможем разобрать что угодно — от работы интернета до магии искусственного интеллекта. Обещаю, будет просто и интересно.

Язык программирования — это мост между миром человеческих идей и миром машинной точности.
Язык программирования — это мост между миром человеческих идей и миром машинной точности.

UPD

Чтобы не перегружать рассказ, Автор сознательно спрятал под ковёр умные слова. Но если вам интересно, вот что они значат:

  • Компилятор / Интерпретатор: Те самые «роботы-переводчики». Разница в том, что первый переводит весь рецепт сразу, а второй — по одной строчке, прямо по ходу готовки.
  • Высокоуровневый / Низкоуровневый язык: «Высокий» — значит, далёкий от «железа», более человечный (Python). «Низкий» — значит, близкий к «железу», более машинный (Ассемблер).
  • Синтаксис: Те самые «правила из блокнота». Как в русском языке: «жи» и «ши» пиши с буквой «и».
  • Парадигма (ООП и др.): Философия языка. Один язык учит думать «объектами» (как будто всё вокруг — предметы с инструкциями), другой — «действиями» (как будто всё вокруг — рецепты).
  • Запись ответ = 5 + 3 — это пример кода на языке Python, одном из самых простых и дружелюбных для начала.