logo
Назад

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

Тема 5

01. Многообразие современных языков программирования

22 мин

01. Многообразие современных языков программирования

Видео доступно по абонементу

"

Для чего нужны языки программирования

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

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

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

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

 


На чём написаны языки программирования

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


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

Скажем, если вы посчитаете на калькуляторе 6 + 3 : 3 — получится 7. Если же (6 + 3) : 3 — то 3. Можно провести аналогию и с русским языком: «Казнить, нельзя помиловать» или «Казнить нельзя, помиловать».

 


От нажатия кнопки до вывода на экран

Любые современные устройства — это набор электрических элементов и микросхем, объединённых в цепь на плате или нескольких платах, хотя и достаточно сложный. В свою очередь, микросхемы — это не что иное, как набор транзисторов, которые умеют только одно: занимать одно из двух положений — есть напряжение, нет напряжения (или 1 и 0 в классическом понимании).

Так что же такого происходит внутри устройства, что при нажатии кнопки на клавиатуре или на сенсорную панель на экране появляется буква? Электрический импульс, который образуется при нажатии кнопки или касании сенсорной панели, передаётся на материнскую плату, где, пройдя огромное количество транзисторов в оперативной памяти, процессоре и на элементах материнской платы, занимая 0 и 1 в определённых сегментах элементов, в конечном итоге получает свою адресацию на устройство вывода, то есть на экран устройства или монитор, где принимает определённый цвет в определённых пикселях. В результате чего мы видим то или иное изображение как результат выполненных на клавиатуре или сенсорной панели действий. Тот же Word очень понятен человеку, все операции в нём нам близки, даже естественны: печатать на клавиатуре не сложнее, чем на печатной машинке, только вместо бумаги — экран. Но для того чтобы визуализировать буквы, которые набираются на клавиатуре, множество импульсов должно пройти тот путь, который мы указали выше.


 На этом уроке мы будем говорить о языках, которые понятны компьютерам, а именно о языках программирования, их разнообразии и видах.

Классификация языков программирования

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

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

Первая классификация, которую мы рассмотрим, — это подход к написанию кода в рамках данного языка. Выделяют два основных подхода: декларативный и императивный.

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

Пусть у нас есть следующие факты относительно того, кто является чьим папой:

папа(«Олег»,«Паша»).

папа(«Саша»,«Олег»).

Кроме этого, имеется правило, вводящее отношение «дедушка»:

дедушка(X,Y).

папа(X,Z).

папа(Z,Y).

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

дедушка(«Саша»,x).

Ответ на этот запрос система выдаст так:

x = Паша

Фактически мы сделали запрос в систему и получили ответ. При этом мы указали лишь свойство результата, но не писали, как именно его получить.

 


Описание примера

Вероятно, данный пример необходимо пояснить. Имеется два факта: папой Олега является Паша, папой Саши является Олег. К тому же мы имеем правило, по которому можно определить, кто кому является дедушкой.

Согласно правилу, дедушкой человека X является человек Y. Но ни одного факта для этого у нас нет. Поэтому правило ещё включает в себя связь с имеющимися фактами. Это правило определяется так: если папой человека X является человек Z, а папой Z является Y, то дедушкой человека X является человек Y.

В этом случае при запросе дедушка(«Саша»,x) система пройдёт следующий путь рассуждения: в качестве X указан «Саша», мы можем определить, кто является его папой. Определяем папу Саши согласно имеющимся фактам. Им является Олег. Поэтому Олег является Z. Для Олега также можно установить папу, исходя из фактов. Им является Паша. Таким образом, Паша — это Y, а следовательно, дедушкой Саши является Паша.


 Ещё одним ярким примером декларативного языка программирования является SQL — язык для работы с базами данных.

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

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

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

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

Чтобы сравнить наглядно высокоуровневый и низкоуровневый языки, рассмотрим пример.

Для того чтобы вывести на экран фразу «Hello, world!», в случае с высокоуровневым языком Python потребуется следующий код:

print (\"Hello, world!\")

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

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

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

Начнём с языков низкого уровня. Их основная задача — связать «железо» и простые действия с информацией. К таким языкам относят либо машинные языки, реализованные на аппаратном уровне, либо машинно-ориентированные. Самый известный представитель последней группы — Assembler. Эти языки зачастую соответствуют отдельным командам машины и их последовательности. Написание кода на них требует большой строгости, поскольку нужно описывать в том числе адресацию в оперативной памяти, а иногда даже учитывать модель процессора. Для ПК эти языки необходимы при создании драйверов устройств, которые важны для корректного функционирования установленных комплектующих в рамках операционных систем.

Теперь поговорим о высокоуровневых языках. К ним относится подавляющее большинство популярных языков программирования (Java, JavaScript, C#, php, 1C и другие). Эти языки, как правило, с «железом» непосредственно не работают, а используют машинные языки для обращения к «железу». С их помощью проще писать программный код, поскольку зачастую в их операторы и функции заложены пакеты низкоуровневых языков, что значительно укорачивает код, делая его более ясным и удобным для программирования.

Также стали появляться языки с ещё более высоким уровнем абстракций — так называемые сверхвысокоуровневые языки программирования. К ним можно отнести, например, Ruby, Haskell, Perl. Написанный на них код становится ещё меньше, а качество ПО — выше. Но данные решения пока только развиваются, а основой современного рынка являются высокоуровневые языки программирования.

 


Тыжпрограммист — мастер на все руки

В современном мире бытует мнение, что если специалист тем или иным образом связан с ИТ-сферой, то он программист, понимает абсолютно всё и может починить всё буквально нажатием одной «волшебной» кнопки. Так вот, это огромное заблуждение. Профессии в ИТ настолько же разнообразны, как и специализации врачей в больнице. Согласитесь, стоматолог не обязан знать особенности различных вирусов, а ЛОР не будет лечить болезни глаз — для этого есть офтальмолог. Единственное, что их объединяет, — это гордое звание врача. Конечно, каждый из них обладает базовыми знаниями о работе всего организма, но всё же является профессионалом именно в своей области. Совет: если ваш знакомый работает в ИТ-сфере, причём не обязательно разработчиком (так официально называют человека, работающего с кодом программы), но не может дать вам рекомендацию, какой телефон купить, или помочь установить Windows, то не обижайтесь — скорее всего, он просто работает в другом направлении (к примеру, сетевым администратором или разработчиком 1С) и действительно может не разбираться в вашем вопросе.



А стоит ли учиться программированию?

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

  1. Системные администраторы — специалисты широкого профиля в области ИТ, которые занимаются обеспечением работоспособности ИТ-ресурсов в компаниях.

  2. Сетевые администраторы — специалисты, которые отвечают за взаимодействие между сетевыми устройствами в рамках организации.

  3. Администраторы СУБД — специалисты, которые занимаются сопровождением программного обеспечения, необходимого для управления базами данных.

  4. Тестировщики ПО — специалисты, которые проверяют доработки в программном обеспечении на предмет их правильного функционирования.

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

  6. Веб-дизайнеры — специалисты, которые рисуют будущий сайт в виде условной «картинки».

  7. Аналитики ПО — специалисты, которые формируют технические задания разработчикам на основании требований заказчиков.

  8. Специалисты по ЭДО занимаются сопровождением средств электронного документооборота.

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

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

Что касается зарплат, то у ИТ-специалистов разных направлений они действительно высокие, поскольку это костяк всей ИТ-сферы. Однако есть нюанс: если вы только начинаете свой путь и набираетесь опыта, придётся начать с минимумов.


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

Высокоуровневые языки программирования иногда также называют проблемно ориентированными, поскольку каждая их функция предназначена для решения определённой проблемы. С развитием технологий появились языки программирования с более простым для понимания интерфейсом и как минимум таким же функционалом. Однако на текущий момент существует огромное разнообразие языков программирования. В чём же разница между ними?

Всё зависит от того, какую задачу необходимо решить.

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

Для понимания основ программирования подойдёт Basic, поскольку он достаточно понятен при освоении, но имеет крайне ограниченный функционал.

Также для обучения программированию подойдёт Pascal, поскольку язык является интуитивно понятным и в нём сведены к минимуму синтаксические неоднозначности. Но, как и в случае с Basic, недостатком этого языка является довольно ограниченная функциональность.

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

JavaScript предназначен для придания интерактивности веб-решениям и добавления сценариев в уже готовые HTML-решения. Иными словами, JavaScript делает страницы в интернете более понятными, интересными и функциональными.

Самым универсальным языком является С и его логические продолжения С++ и С#. Данные языки программирования уже сейчас содержат огромную базу функций, предназначенных для решения большинства задач.

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

Если необходимо построить программы для искусственного интеллекта, используется ЛИСП.

Для управления бизнес-процессами и ведения учёта в компаниях используются встроенные языки или SAP.

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

  1. С, С++ и С# — эти языки используются как основные в написании ОС Windows и Linux.

  2. Java — основной язык для написания мобильных приложений под Android.

  3. JavaScript — ещё один из основных языков для написания приложений, хотя более широко он используется в веб-разработке.

  4. HTML/CSS — языки, ориентированные на создание веб-ресурсов.

  5. Python — язык для широкого спектра задач: от небольших скриптов для автоматизации рабочих задач до машинного обучения.

Как мы видим, в наше время существует очень много различных языков программирования, и все они имеют свою специализацию. В дальнейшем список будет только расширяться: появятся новые языки, сменятся популярные, а ныне востребованные языки станут пережитком прошлого. Однако общее назначение всех языков программирования останется неизменным. Они всё так же будут служить для реализации программ, которые помогают нам решать как повседневные, так и отдельные технические задачи.

 

Список литературы

  1. Информатика. 8-й класс: учебник / Л. Л. Босова, А. Ю. Босова. — Москва: Просвещение, 2023.

 

Домашнее задание

  1. Приведите примеры декларативных языков программирования.

  2. Расскажите о ключевой разнице между низкоуровневыми и высокоуровневыми языками программирования.

  3. Для чего можно использовать высокоуровневый язык программирования JavaScript?

  4. Чем объясняется популярность языка программирования Python?

 

Список использованных источников:

Рис. 1, 2. Изображения используются согласно лицензии Shutterstock / FOTODOM

Рис. 3. Иллюстратор Бумастрова А. В.

"

Обсуждение