Гид по языкам программирования: решения для конкретных задач

Вторник, 12 октября 2021 г.

Следите за нами в ВКонтакте, Телеграм'e и Twitter'e

12.10.2021, 13:24 Сравнивать разные языки программирования — это непростая задача. Описывая их особенности, очень легко скатиться в банальности или ввязаться в интернет-спор. Поэтому прежде всего хочется заметить, что подавляющее большинство популярных языков программирования достаточно выразительны и позволяют решать более-менее все типичные задачи, которые могут возникать у современного инженера-программиста. Тем не менее, в силу разных причин конкретные задачи могут решаться с помощью конкретного языка программирования более или менее эффективным способом. Иными словами — стоит выбирать для решения каждой задачи подходящий язык программирования, удобный для конкретного программиста. Python

Python очень популярен сегодня. Начало его разработки относится к концу 1980-х и связано с голландским программистом Гвидо ван Россумом, который и является первым автором этого языка. Со временем развитие языка перешло в ведение фонда Python Software Foundation, а Гвидо был удостоен неформального титула «великодушного пожизненного диктатора», который он сложил с себя только в 2018 году. 

Язык Python известен как достаточно дружелюбный для начинающих. По этой причине, а также благодаря наличию огромного количества самых разнообразных прикладных библиотек, Python популярен у неспециалистов: от физиков и географов до лингвистов и биологов. Немалую роль тут сыграло и появление так называемых Jupyter-блокнотов. Они позволяют производить «живые» документы, которые не являются в полной мере программами, а скорее тетрадками, в которых смешаны вычисляющий исходный код, результаты вычислений, пояснения и интерпретации результатов. Сегодня Python используется для анализа данных, социологии и маркетинговых исследований, научных вычислений, а также в машинном обучении (где, впрочем, без знакомства с С++ обойтись едва ли получится). 

Другой язык программирования, который широко используется в анализе данных — это R. Если Python специально не задумывался как язык для работы с данными, то R был создан специально для этого. R — это язык программирования для непрограммистов. Соответственно, его код интуитивно понятен большинству людей, обладающих каким-то опытом программирования и знаниями в предметной области (например, имеющих базовую подготовку по математической статистике). 

Достаточно удобно (и эффективно) с помощью R можно выполнять операции с векторами и матрицами. Обычно R используют для написания небольших программ, предназначенных для проведения конкретных расчетов. Как и в экосистеме Python, программистам на R доступно огромное количество открытых библиотек, содержащих конкретные алгоритмы для решения вычислительных задач, и даже задач машинного обучения.

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

Разработка языка была начата в середине 1990-х в Новой Зеландии как открытый проект, и продолжается с тех пор целым сообществом энтузиастов. Любопытно, что имена первых авторов — сотрудников Оклендского университета Росса Айхэки и Роберта Джентлмена — начинаются на букву «R».

В актуальной на сентябрь 2021 года версии известного рейтинга языков программирования TIOBE, язык Си занимает первое, а С++ — четвертое место. В принципе, этим можно было бы и закончить раздел про эти два языка программирования. 

Язык Си был разработан в конце 1960-х — начале 1970-х годов в США Деннисом Ритчи. Целью Денниса было создать язык для программирования операционной системы UNIX — это определило и свойства языка, и его дальнейшую судьбу. До наших дней и Си, и его наследник С++ — основные инструменты в руках системных программистов, разработчиков операционных систем, драйверов, компиляторов, программного обеспечения для устройств, робототехнических устройств и т. д. До появления языка Си все эти специалисты были вынуждены программировать с использованием низкоуровневых ассемблеров, соответствующих конкретным машинам, для которых велась разработка, что было не слишком комфортно. 

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

Си — достаточно консервативный язык процедурного программирования. Размеренный темп его развития часто рассматривается как плюс. В то же время уже в 1980-х годах сотрудник Bell Labs Бьёрн Страуструп, пришел к выводу, что для решения поставленных перед ним задач, связанных с телефонией, возможностей процедурного программирования не хватает. Он предложил расширить язык Си функциями объектно-ориентированного программирования по аналогии с языком Симула (Simula). В результате получился новый язык, который сначала назывался «C with classes» (Си с классами), а затем был переименован в С++. Заметим, что сам язык с тех пор существенно изменился, а экосистема языка обогатилась многочисленными библиотеками, среди которых упомянем знаковые STL и Boost, без которых не обойтись современному разработчику на C++.

Наследником стиля исходного кода языка C++ стал язык Java, появившийся в середине 1990-х годов. Автор языка — Джеймс Гослинг — работал в компании Sun Microsystems и разрабатывал язык для программирования бытовой техники. Есть версия (впрочем, не единственная), что именно поэтому язык и назван Java в честь острова Ява, где в обилии произрастает кофе, а кофемашина — разновидность бытовой техники. Да и вообще, к кофе у программистов традиционно особенная любовь. 

Довольно быстро язык стал использоваться не по своему первоначальному назначению. С развитием Интернета Java стала основным языком для разработки клиент-серверных приложений, функционирующих и во всемирной паутине, и в локальных сетях. Благодаря специфике исполнения (байт-код Java исполняется виртуальной машиной) стало действительно удобно разрабатывать приложения без привязки к особенностям конкретного «железа» и операционной системы. Кроме того, благодаря управляемой памяти и «сборщику мусора», который есть в этом языке, программисту стало сложнее допустить ошибку при работе с памятью — использовать Java стало безопаснее, чем C++. За что, конечно, приходится платить худшей, в среднем, производительностью. 

В 2000-х объектно-ориентированное программирование на Java обогатилось компонентным подходом, а платформа Java EE стала стандартом в мире корпоративных информационных систем. Впрочем, Java недолго оставалась в одиночестве на олимпе корпоративного программного обеспечения. В 2000 году компанией Microsoft был представлен язык C# (Си шарп), который стал конкурентом Java и был предназначен для разработки приложений для операционной системы Windows. Интересно, что главный дизайнер языка — Андерс Хейлсберг — ранее успел поработать над интегрированной средой Turbo Pascal, которая не понаслышке знакома миллионам выпускников школ по всему миру, а также создал язык Delphi. Язык C# следует подходу Java к разработке программ, но привносит и свои интересные идеи. Если вы хотите стать программным инженером, архитектором, разрабатывать крупные корпоративные системы, то изучение Java или C# — неплохой выбор.  JavaScript, TypeScript

Андерс Хейлсберг не скучает и после окончания работы над C#: в 2010-х он присоединяется к команде Microsoft, которая разработала современный язык для программирования браузерных приложений — TypeScript. TypeScript является расширением классического языка веб-разработки JavaScript, с которым ежедневно сталкивается каждый пользователь Интернета.

JavaScript появился в середине 1990-х годов. Примерно в это время Интернет вместо того, чтобы быть вотчиной ученых и инженеров, постепенно становился местом встречи для людей всех профессий и занятий. Главным проектировщиком языка стал американский программист Брендан Айк из компании Netscape, который позднее долгие годы был главным инженером в Mozilla Corporation, известной своим браузером Firefox. JavaScript (или JS) — язык со слабой динамической типизацией и управляемой памятью со сборщиком мусора. Программы на JS интерпретируются непосредственно браузером пользователя. Синтаксис языка похож на Java (отсюда и название). Современные веб-программы — сайты и веб-приложения — почти никогда не разрабатываются с нуля с использованием одного только языка программирования. Намного чаще веб-сайт строится на базе какого-либо готового каркаса, а также многих подключаемых компонент. Компоненты для JavaScript обычно имеют в названии JS или j, например: React.js, AngularJS, jQuery и т. д. Разработка на базе каждого конкретного каркаса имеет свои особенности и сильно отличается от работы с другими каркасами. Так что, чтобы стать веб-разработчиком, мало будет изучить язык программирования. Придется также погрузиться в пучины веб-каркасов, системного администрирования и других технологий. Kotlin, Swift

Мы уже вспомнили языки для веб-разработки, программирования серверов и настольных компьютеров, анализа данных. А что с мобильными приложениями? Можно сказать, что подавляющее большинство современных смартфонов и планшетов работает под управлением операционной системы одного из семейств — Android или iOS. Есть, конечно, и смартфоны с Linux и Windows, и другие устройства, но количество их крайне невелико. 

Для платформы iOS есть достаточно современный язык программирования Swift, представленный компанией Apple в 2014 году. Swift является развитием языка программирования Objective-C, который был и остается основным языком для разработчиков платформы Apple. Любопытно, что Крис Латтнер, главный проектировщик Swift, является также основным разработчиком в инфраструктурном проекте LLVM, на базе которого строятся многие современные компиляторы. 

В свою очередь, приоритетным языком для платформы Android компания Google в 2019 году объявила язык программирования Kotlin, который появился в 2011 году. Особенно приятно, что этот язык программирования родился в России, в Санкт-Петербурге, а его главным проектировщиком стал наш соотечественник — Андрей Бреслав из компании JetBrains. В этой связи и название, продолжающее «островную» традицию Java: на острове Котлин расположен город Кронштадт. 

Код на языке Kotlin, созданном как современный язык общего назначения, изначально собирался в исполнимый Java-машиной байт-код. Кроме того, Kotlin обладал многими возможностями, отсутствующими в Java (например, к ним можно отнести расширяющие функции, null-безопасность, а также приятным синтаксисом). В результате этот язык пришёлся по вкусу мобильным разработчикам. Современный Kotlin может компилироваться не только в байт-код Java, но и в JavaScript, а также в машинный код некоторых платформ. Благодаря этому имеется возможность писать на одном и том же языке программирования как для мобильных, так и для настольных систем, серверов, встраиваемых систем.   Редкие языки:  ML, Lisp и Haskell

В заключение хотелось бы упомянуть ещё несколько не столь популярных сегодня языков программирования, изучение которых не только принесет массу интересного опыта, но и будет крайне полезно. Это функциональные языки ML, Lisp и Haskell. Все три появились достаточно давно и не очень популярны сегодня. 

Lisp — один из первых языков программирования, был разработан пионером искусственного интеллекта Джоном Маккарти в США в 1958 году. ML — детище Робина Милнера — появился в Эдинбургском университете в 1973 году. Самый молодой из троицы — Haskell — разработан большой международной компанией исследователей и официально представлен в 1990 году. И хотя не так-то просто найти вакансию, где требовался бы разработчик на одном из этих языков, близкое знакомство хотя бы с одним из них существенным образом расширит ваше понимание фундаментальных концепций в мире программирования. Знание этих языков позволяет увидеть, откуда родом многие идеи, с которыми можно встретиться в современных языках промышленной разработки. 

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

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

Автор:  Алексей Мицюк, доцент факультета компьютерных наук НИУ ВШЭ

Следите за нами в ВКонтакте, Телеграм'e и Twitter'e


Просмотров: 409
Рубрика: Hi-Tech


Архив новостей / Экспорт новостей

Ещё новости по теме:

RosInvest.Com не несет ответственности за опубликованные материалы и комментарии пользователей. Возрастной цензор 16+.

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

Архивы новостей за: 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003