При изучении программирования многие люди интересуются, какой язык программирования нужно изучать, чтобы в будущем иметь хорошую работу с высокой зарплатой. Нельзя с уверенностью утверждать, что тот или иной язык предназначен именно для этой цели. Но можно более подробно изучить описание существующих языков программирования, чтобы самому сделать правильный выбор.
Языки программирования можно классифицировать по нескольким параметрам:
- Модные и немодные;
- Компилируемые и интерпретируемые;
- Универсальные и специализированные;
- Алгоритмические и языки описания данных;
- Низкоуровневые и высокоуровневые;
- Объектно-ориентированные и языки структурного программирования;
- Сопутствующие Фреймворки, Библиотеки и Технологии.
Чтобы сделать осознанный выбор того или иного языка, рассмотрим эти классификации более подробно.
Модные и немодные языки программирования
В подобной классификации есть немного шутки. Тут скорее рассматриваются наиболее распространенные языки программирования и те, которые применяются не так часто, либо вообще не используются.
Со временем одни языки становятся популярными, о других же забывают. Во многом это связано со сменой технологий. Когда операционная система MS DOS, работающая на 16-битных процессорах Intel, широко использовалась, в те времена самыми распространенными были языки Турбо С и Турбо Паскаль. Разработчиков, изучающих Assembler, и вовсе называли элитой. В настоящее время эти процессоры уже устарели и не используются, как и система MS DOS, поэтому и потребности в языках нет.
Язык Delphi стал продолжением Турбо Паскаля. Его широко использовали, когда в ходу появились первые 32-битные версии системы Windows. С течением времени появлялись новые языки программирования, и Delphi не мог конкурировать с ними.
JavaScript, изначально предложенный компанией Netscape, смог превзойти аналогичный язык JScript от разработчиков Майкрософт. Свою известность JavaScript заработал за свою открытость и поддержку огромным количеством компаний разработчиков.
С и С++ длительное время не теряют своей популярности ввиду большой эффективности разработанного на них ПО. С течением времени и другие языки программирования начинают широко использоваться. Обращают внимание не исключительно на эффективность выполнения программ, но и на другие факторы. Важны также простота изучения, разработки программ и их обслуживания. Про С++ точно не скажешь, что он соответствует этим параметрам.
Язык С++ является очень гибким и обладает широкими возможностями. Разработчикам, изучающим С++, понадобится внимательно следить за ходом написания программы, чтобы, как говорится в известной шутке, он не превратился из языка программирования в язык написания ошибок.
Языки С и С++ можно назвать эталоном для разработки программ. Однако, при их изучении стоит учесть одну особенность. Программы, созданные для разных компиляторов, не всегда имеют совместимый исходный код.
С# (си шарп), конкурирующий с языком С++, набрал свою популярность с появлением новой платформы .Net от компании Майкрософт.
Язык JavaScript широко распространен, но, ввиду трудности поддержки разработанных на нем программ стал развиваться язык TypeScript, решающий эту проблему.
Из наиболее распространенных сегодня языков следует выделить Python, который сравнительно прост в изучении, открыт и применяется в самых разных сферах. Например, для создания компьютерных игр, веб-ресурсов, в искусственном интеллекте.
У каждого языка программирования найдутся сторонники и последователи. Но, популярность в настоящее время вовсе не значит, что язык будет оставаться таким через 5 или 10 лет.
Компилируемые и интерпретируемые языки программирования
Каждая программа в первую очередь представляет собой текст, понятный человеку. Относительно легко его может обработать компьютер, поскольку текстовые символы в нем представляются некоторыми целыми числами – кодами символов. Программа, для которой предназначен текст, написанный программистом, трансформирует его в последовательность команд микропроцессора. Ее называют компилятором. Другими словами, компилятор преобразует числа (коды символов), которые программист видит на экране как текст, в другие числа, которые для компьютера являются командами микропроцессора.
Соответственно, языки программирования, которым необходим компилятор, называют компилируемыми. Для запуска программы на этом языке нужно обработать ее компилятором, чтобы в результате вышел исполняемый модуль, который будет выполнять программу. Для примера, в ОС Windows таким исполняемым модулем является файл, имеющий расширение .exe.
С развитием технологий начали появляться языки программирования, которым не нужен компилятор для запуска. Преобразование текста программы этих языках в набор команд микропроцессора совершается незаметно при запуске текста программы. Стоит обратить внимание, что запуск текстовой программы должен происходить под управлением так называемого Интерпретатора – еще одной программы. Именно Интерпретатор и производит ту самую скрытую компиляцию. Интерпретируемыми являются языки программирования, которым необходим Интерпретатор для запуска программ.
Компилируемыми являются языки программирования С, С++, Pascal, интерпретируемыми – JavaScript, Visual Basic Script (VBScript), Python и PHP.
Основное различие компилируемого языка программирования и интерпретируемого состоит в скорости исполнения программы. Обычно программы, обработанные компилятором, работают быстрее, чем те, которые запускаются с помощью Интерпретатора. Из достоинств интерпретируемых программ стоит выделить то, что создавать и тестировать такие программы гораздо легче, так как исключается промежуточная стадия компиляции.
Существуют языки программирования (например, С#), компиляция которых производится особенным образом через две стадии. Программа, написанная на С#, компилируется в среде .Net не сразу в набор команд микропроцессора, а в другую программу на языке CIL (Common Intermediate Language), прежде известном как MSIL (Microsoft Intermediate Language). Далее эта промежуточная программа отправляется на вход Just-In-Time (JIT), где проходит компиляцию в среде .Net. Подобные преобразования через несколько языков хороши тем, что не требуют наличия в компьютере подходящего микропроцессора, чтобы выполнять программы, что придает этим программам максимум универсальности.
Примерно так же происходит компиляция на языке TypeScript. В процессе программа трансформируется в другую текстовую программу (так называемый код на JavaScript), после чего она может выполняться интерпретатором JavaScript. Подобные сложности дают возможность пользоваться достоинствами TypeScript: строгой типизацией данных и выявлением погрешностей в процессе компиляции.
Универсальные и специализированные языки программирования
Существуют языки, использование которых позволяет создать программу почти любой сложности, пусть это дело не всегда бывает быстрым, и выполняться она может с недостаточной скоростью. Наиболее универсальным языком программирования является С++. К этой категории также относятся языки семейства Pascal и Delphi, Java и С.
Специализированные языки разрабатываются для конкретной сферы применения, к примеру, для создания веб-ресурсов (Perl, PHP и JavaScript), вычислительных программ (Fortran, F#), компьютерных игр (Lua, Unity, Godot, Twine), искусственного интеллекта (LISP), для бухгалтерского учета (1С). Специализация может быть основана и на применяемой технологии программирования – для создания многопоточных приложений используется язык Cw (си-омега).
Для использования в конкретном направлении программисты продолжают создавать новые скрипты или языки программирования. Это особенно актуально для сферы компьютерных игр, где пересекаются много направлений искусства, технологий и наук. При создании игр применяют также уже хорошо знакомые языки – Python для системы нарративных игр, Swift для гаджетов Apple.
Для создания математических моделей используются языки MatLab и Wolfram (Mathematica), для создания и обслуживания баз данных – SQL, для компьютерной графики могут использоваться MEL (Maya) и MAX Script (3ds Max).
Алгоритмические и языки описания данных
Главное назначение алгоритмических языков – создавать огромные и непростые программы, описывающие алгоритмы (действия). Хотя, по сути, такие языки тоже способны описывать данные.
Языки описания данных имеют только одно предназначение – описывать данные различных видов программ. Они являются необходимым дополнением к стандартным алгоритмическим языкам. Во время создания веб-ресурса на JavaScript вероятнее всего понадобится выучить синтаксис CSS (каскадные таблицы стилей) и язык описания данных JSON, предоставляющий удобный формат передачи информации между клиентом и веб-сервером.
Рассмотрим еще один пример. При разработке баз данных используется SQL – язык обработки и получения данных. Он также имеет раздел DDL (Data Definition Language), который считается языком описания данных.
В настоящее время разработчики уделяют много внимания вариантам описания и управления информацией, можно сказать, наравне с вариантами описания алгоритмов.
Низкоуровневые и высокоуровневые языки программирования
Подобное разделение в настоящее время не слишком актуально из-за того, что почти любой язык программирования сейчас можно относить к высокоуровневым. Низкоуровневые языки все еще есть, но используются редко. Например, тот же Ассемблер или CIL, предназначенные не столько для человека, сколько для машин.
Когда компьютеры только появились и начали развиваться, количество возможных компиляторов было очень ограниченным. В те времена программисты могли создать драйвер для клавиатуры на языке Assembler просто для забавы.
Команды на Assembler практически схожи с командами микропроцессора, которые предоставляют возможность обработки данных величиной 1, 2 или 4 байта. Поэтому передать на этом языке какой-нибудь сложный тип информации не представляется возможным. Зато скорость исполнения программ на Assembler не идет ни в какое сравнение с подобными программами на прочих языках.
CIL можно назвать аналоговым языком ассемблера, только он предназначен для выполнения на платформе .Net. Компилятор системы .Net преобразовывает команды CIL в набор команд установленного микропроцессора, где размещена платформа .Net. Обычно программа на языке CIL является результатом другой программы, разработанной на одном из высокоуровневых языков системы .Net, после ее прохода через программу-компилятор.
Язык CIL является особым, он предназначен больше для машин, чем для людей. Чтобы создать программу сразу на этом языке, понадобится много времени и сил. Программы на языке CIL создаются компиляторами, после чего используются другими программами системы .Net.
Объектно-ориентированные и языки структурного программирования
Первые объектно-ориентированные языки программирования (или просто ООП) появились приблизительно в конце 80-ых годов двадцатого века. Их появление было настоящей революцией в развитии технологий. До появления объектно-ориентированных, широко использовались высокоуровневые языки структурного программирования. Было время, когда их тоже считали огромным прорывом в развитии технологий.
Создать первый компьютер получилось только в результате больших стараний Алана Тьюринг и других подобных гениев. Он создал специальную машину Тьюринга, которая стала основой всех современных числовых компьютеров. Если описать коротко принцип работы этой машины, перечень команд микропроцессора, включая команды условных и безусловных переходов на прочие команды, записаны в оперативную память. Подобные переходы на языке Assembler обозначаются JMP (от слова jump – прыжок), а на высокоуровневых языках – GOTO (от слов go to – перейти к).
Изначально в программировании компьютера использовался язык Assembler, в котором команды практически схожи с командами микропроцессора. В теории на языке Assembler возможно создать программу любой сложности, но на практике описывать на нем множество прикладных задач – вовсе не легкое занятие, занимающее уйму времени.
В начале 70-ых годов двадцатого века начали появляться языки структурного программирования, позволяющие решать прикладные задачи. Большой вклад для этого внесли Никлаус Вирт, создавший язык Pascal, и Эдсгер Дейкстр, предложивший избавиться от оператора GOTO в высокоуровневых языках программирования, заменив его тремя видами операторов и функций.
Спустя время начали появляться новые языки программирования (Basic, С, Pascal, Algol, Cobol, Fortran, PL1). Написание программ по методике «сверху вниз» в структурных языках программирования очень понравилось разработчикам. Согласно методу, при разработке использовался перечень функций, имеющих подфункции, для вызова которых необходимо подставить на вход интересующие данные, а в результате получить соответствующий ответ.
Если обобщить, структурные языки программирования в основном используют алгоритмы, содержащие функции, а данные для них могут подойти любые. Большую роль в появлении структурного программирования имела идея Норберта Винера, основателя кибернетики. Он рассматривал функцию в качестве черного ящика, в который возможно отправлять какие угодно данные на вход и получать необходимый выход.
Языки структурного программирования отлично подойдут, чтобы решать простые задачи вроде сортировки данных или поиска самого короткого пути. Нашлись решения для большого числа сложнейших задач на основе алгоритмов. Дональд Кнут написал многотомное издание «Искусство программирования», до настоящего времени являющееся руководящей книгой многих программистов.
По мере усложнения программ выросла также и вероятность внести ошибку в программу. Во многом это связано с возможностью подставить функции какую угодно информацию на вход. Именно с такой ошибкой в 1999 году связано крушение космического аппарата NASA «Mars Climate Orbiter».
Так и возникла идея объектно-ориентированного программирования, где сначала рассматривается валидность данных, а функции являются дополнением к данным, обрабатываемым ими. Объект – это собрание данных с соответствующими им функциями. В объектно-ориентированном программировании введен запрет, не позволяющий функциям обрабатывать чужие данные, не предназначенные для них. Это снижает вероятность подмены данных и значительно увеличивает надежность программного обеспечения.
Создание объектно-ориентированных языков программирования и развитие аппаратных технологий привело к тому, что объемы ПО и данных к нему выросли во много раз, о чем можно судить, к примеру, по тому, что сперва для дистрибутивов программ стало недостаточно дискеты, затем стало мало и компакт-диска. Объектно-ориентированное программирование стало для разработчиков настоящим открытием.
Сопутствующие Фреймворки, Библиотеки и Технологии
Определенный язык программирования может быть соединен технологической цепочкой или целой системой программирования, которые являются фреймворками.
Например, платформа .Net является фреймворком. Определенные языки программирования (C#, F#) созданы исключительно для данной платформы. Чтобы понять, как будет работать программа, разработанная на конкретном языке, нужно понимать особенности самой платформы.
Программистам, которые создавали оконные программы для начальных 32-битных Windows на языке С++ от компании Майкрософт, также нужно было освоить библиотеку MFC.
Чтобы разработать веб-ресурс с использованием технологии MVC от компании Майкрософт, программистам понадобится использовать язык разметки страниц веб-сайтов Razor.
Для разработки продвинутых программ с использованием универсальной платформы Майкрософт может понадобиться язык разметки XAML.
В качестве похожих примеров можно назвать Ruby on Rails – серверную платформу, предназначенную для создания веб-ресурсов; Unity, Cocos, Unreal Engine – для компьютерных игр; OpenGL и DirectX – для 3D-графики.
Существуют еще варианты классифицировать языки программирования, но они больше будут полезны продвинутым разработчикам. К примеру, существуют языки со строгой типизацией и без.
Как выбрать язык программирования?
Профессиональные разработчики очень часто владеют сразу несколькими языками программирования. Но, при такой большой скорости развития информационных технологий, версия языка может устареть уже через пару лет. Например, разработчики TypeScript за 5 лет выпустили более двадцати обновлений (с 2015 до 2019 гг.).
Чтобы упростить выбор языка программирования, следует сначала выбрать прикладную область, операционное обеспечение и организацию для будущей работы. Это сильно сократит список вариантов. Хотя, у некоторых организаций бывают довольно необычные требования, особенно для начинающих программистов. Например, в вакансии могут быть описаны технологии, касающиеся одновременно несколько языков программирования.
В случае, когда организацию пока выбрать сложно, лучше начать изучение программирования на каком-нибудь универсальном языке. Из-за сегодняшней популярности интернета начинающим разработчикам желательно изучить хотя бы основы языка HTML и, соответственно, языки описания данных XML и JSON. Также полезным будет ознакомиться с основами SQL.
Давно позади время, когда одна и та же версия языка могла использоваться в течение десятков лет. Главная особенность разработчика – непрерывное отслеживание новейших технологий и языков. Существенную часть опыта разработчики получают во время написания программ, хотя курсы будут хорошим стартом для начинающего программиста, а во время работы можно продолжить обучение на практике. Возможно, именно в процессе работы получится выбрать язык программирования для дальнейшего изучения.
В последнее время все чаще разрабатываются новые системы визуального программирования, не требующие знания языков. К примеру, для создания веб-сайтов довольно часто используются WordPress, Bitrix24 или Wix. При помощи такой системы простые пользователи, которые не являются программистами, могут выбирать веб-сайты из готовых шаблонов, подключаться к данным и самостоятельно формировать бизнес-процессы.
Удобство и простота подобных систем визуального программирования для многих являются настоящим открытием. Может создаваться впечатление, что в скором времени в программистах не будет нужды. Однако, это только на первый взгляд. Эти самые системы для обычных пользователей создаются все теми же программистами.
Статьи по теме:
- ТОП134 программы обучения по языкам программированию
- Как стать программистом: верно ставим цели и задачи
- 68 свежих курсов по работе с искусственным интеллектом (ИИ)
Бодрого дня и удачи в поисках ответов!