Найти в Дзене
Войти в IT

Почему не существует лучшего языка программирования? Отвечает программист с 17-летним опытом!

Оглавление

Гуляя по просторам сети, часто можно встретить посты в стиле "Лучший язык программирования 2023 года", "Топ языков программирования", "Битва C# или C++", и тому подобное. Что и говорить! Даже в наш прекрасный блог грешным делом вписалось несколько таких статей - например вот или вот. Все эти заголовки звучат достаточно пикантно, но на самом деле могут вводить начинающего программиста в заблуждение. Как же быть? Кому верить и куда бежать?! Давай разбираться в этом вопросе!

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

Разрушаем идеализацию вокруг "лучших" языков программирования. Учимся опираться на личные критерии выбора, а не на общественное мнение или сторонние советы.
Разрушаем идеализацию вокруг "лучших" языков программирования. Учимся опираться на личные критерии выбора, а не на общественное мнение или сторонние советы.

С чего обычно начинается карьера программиста? Юный джедай, желая постичь азы профессии, ищет - на чем бы таком "самом лучшем" ему начать программировать. И тут, как нельзя кстати, ему попадается подобный красноречивый материал. "Вот оно!" - думает начинающий программист - и с рвением погружается в болото идеализации. Он видит подборку лучших / самых востребованных ЯП / самых высокооплачиваемых ЯП - и с удовольствием выбирает для изучения технологию, щедро воспетую субъективным мнением некоторого автора. Кому-то везет, и в целом новоиспеченному IT'шнику попадается именно тот язык, к которому и "душа лежит", и "деньги платят". А кто-то, потратив несколько месяцев (а может и какое-то количество душевных ресурсов) понимает, что это "не мое".

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

А что вообще значит лучший? 🏆

Из моего опыта, под "лучшим" чаще всего имеют в виду три типа идеализации: (1) самый популярный / распиаренный в СМИ, (2) самый высокооплачиваемый, или (3) самый вакантный язык. В общем и целом, вполне логично, что начинающий специалист в процессе выбора оперирует одним из вышеуказанных критериев. Но давай подумаем - насколько эти критерии реальны? Насколько каждый из них в большей степени помогает сделать выбор, а не мешает ему?

Начнём с того, что большинство языков программирования делается под какие-то конкретные задачи или технологические отрасли (но и это не истина! ведь есть замечательные эзотерические языки программирования как например Brainfuck, или из совсем уж странных - Petooh. Подобные языки обычно пишут либо из исследовательских целей, либо развлечения ради. Да, мы программисты народ такой...). Продолжим рассуждения тем, что в мире языков программирования существует цикличность, прямо связанная с окружающим миром и общемировым "хайпом". И закончим тем, что всё меняется очень ОЧЕНЬ быстро - настолько быстро, что пока ты будешь в деталях учить какой-то "самый лучший язык", он может оказаться абсолютно никому не нужным в диапазоне следующих 5-7 лет.

Мифическая вера в лучший язык программирования и путь "оптимального выбора".
Мифическая вера в лучший язык программирования и путь "оптимального выбора".

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

Возьмем два самых популярных по версии StackOverflow языка на момент написания этой статьи. Это JavaScript и Python. И, собственно, попытаемся их сравнить.

Зачем придумали 🐍 Python и 🟠 JS?

Язык программирования JavaScript создал Брендан Эйх в 1995 году. Он создал его как часть веб-браузера Netscape Navigator 2.0, и потратил на это примерно 10 дней. Как тебе такое, Илон Маск? - язык который запустили за 10 дней, сегодня используется на 90% существующих в мире интернет-сайтов. И к слову сказать, это произошло аж за 5 лет до выхода Windows XP. Сфера применения JavaScript - это веб-программирование.

Брендан Эйх - создатель языка JavaScript.
Брендан Эйх - создатель языка JavaScript.

Итого. Язык JS был создан программистом, работающий по найму на компанию, которая разрабатывала в то время веб-браузеры. Иначе говоря, база языка - прикладная коммерция. Страна происхождения языка - США. Автор языка - Американец. Ссылка на личный сайт автора - вот тут.

Язык программирования Python создал Гвидо Ван Россум в 1989 году (раньше чем JS), работая в "Национальном исследовательском институте математики и компьютерных наук" в Нидерландах. Автор языка изначально позиционировал его как язык-преемник языка ABC, более удобный для работы с операционной системой Amoeba. Python был представлен публике как язык "общего назначения", и язык для решения "разных задач".

Гвидо Ван Россум - создатель языка Python.
Гвидо Ван Россум - создатель языка Python.

Итого. Язык создан учёным-программистом, работающим в научно-исследовательском институте, примерно за полгода. Иначе говоря, база языка - научные исследования. Автор языка - Датчанин, страна происхождения - Нидерланды. Ссылка на личный сайт автора - вот тут.

Python vs JS. Производительность 🚀

Язык Python выполняется интерпретатором. В случае с ОС Windows например, мы устанавливаем его отдельно, как обычный .exe файл. Программы на Python - это именно программы, нередко запускаемые отдельным файлом. И совершенно нередко имеющие графический интерфейс.

А вот JS выполняется исключительно внутри браузера, как часть веб-страницы (если копать ещё глубже, то JS грубо говоря вообще работает в виртуальной среде). Отсюда, конечно, вытекает и разница в производительности эти языков. Python, в общем и целом (отбросим Node JS и прочие "приблуды" поверх JS), будет несколько быстрее.

Для новичка разница в производительности этих языков не будет столь ощутимой. Условный hello world и там, и там отработает быстро - не успеешь и глазом моргнуть. Сравнение же производительности языков для решения больших задач и вовсе будет некорректно - какие-то задачи невозможно решить внутри JS, а другие задачи не имеют смысла для решения через Python.

Так например, написать серьёзную нейросеть на JS будет сложной, или даже невозможной задачей. В это же время, Python нельзя "впихнуть" внутрь сайта для решения задач интерактивности (модальные окна, географические карты и другие подобные задачи).

Python vs JS. Легкость изучения 👨‍💻

На данный момент, Python является одним из "базовых" академических языков во многих программах IT-образования. По факту, он даже вытеснил Pascal в качестве языка для начального обучения программированию. Многие онлайн-курсы предлагают Python именно как первый язык для старта. Более того, некоторые крупные Российские вузы заменяют в своих программах Pascal на Python. В это же время, Python имеет простой и понятный синтаксис, динамическую типизацию, хорошую ООП модель. Всё это, делает его достаточно функциональным и универсальным, и при этом вполне подъемным для освоения новичку.

При этом, в отличие от того же Pascal, Python сейчас активно используется в коммерческой разработке. Fun Fact - изначально "научный" язык переполз в коммерцию. То есть, освоив язык на достаточно хорошем уровне в целом на нем же можно и работать. На условные Pascal (и том же условном мире Delphi) сейчас едва ли возможно найти привлекательные вакансии. На hh.ru, на момент написания статьи, представлено всего 355 вакансий Delphi разработчика. При этом, вакансий для Python порядка 11 794. Разница колоссальна.

С точки зрения обучения программированию, JavaScript и Python оба являются отличным выбором. Оба языка позволяют легко и быстро начать коммерчески-ориентированную разработку.
С точки зрения обучения программированию, JavaScript и Python оба являются отличным выбором. Оба языка позволяют легко и быстро начать коммерчески-ориентированную разработку.

Если говорить о JS, то в целом он так же не слишком сложен для освоения. Язык прощает много вольностей. Свою первую программу можно написать буквально ничего не устанавливая. Достаточно открыть консоль разработчика в браузере и бам! Можно творить. В это же время, языку JS присущи свои, скажем так, особенности. Они могут ввести новоиспеченного разработчика в ступор.

Ну и пожалуй, самое важное - JS (в его "голом" виде без "надстроек" по типу TypeScript, CoffeeScript и т.п.) очень сильно завязан на браузер. Это, во-первых, заметно ограничивает сферы его применения. А во-вторых, требует хотя бы базового понимания HTML и CSS. Точнее, можно то обойтись и без них, но JS именно что нацелен на работу с веб-страницей. В отличие от того же Python, на нем будет проблематично написать скажем консольную утилиту для работы с файлами. JS имеет очень ограниченный доступ к файловой системе (можно сказать, не имеет его вовсе).

Если говорить коротко, то оба языка это неплохой вариант для старта. Но JS все-таки уводит специалиста в сторону веб разработки (ну, либо в сторону Node JS. Но это, уже совсем другая история). Тогда как Python куда более универсален - можно и сервер написать, и нейросеть, и консольное приложение.

Python vs JS. Стек разработки + библиотеки 📖

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

В случае с Python, язык и сам по себе достаточно универсален. Помимо базовой гибкости, под него существует ещё и огромное количество сторонних средств. Они позволяют как писать веб приложения, так и создавать нейронные сети. Django (веб-фреймворк для Python) легким движением руки даст возможность писать полноценные веб приложением с MVC и прочими приятными плюшками. А ещё, он активно поддерживается сообществом - на момент написания статьи последний коммит был всего 7 часов назад.

А уж фреймворков для работы с нейронными сетями под Python создано, как говорится, "на любой вкус и цвет". Тот же tensorflow от Google, о нем наверняка многие слышали хотя бы краем уха. А есть ещё и средства для написания привычных нам приложений рабочего стола aka Desktop. В общем, недостатка разных средств разработки тут явно не наблюдается.

А что же до JS? Ну, тут пожалуй красноречивее всего будет вот эта картинка:

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

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

Более того, начав сегодня изучать популярный фреймворк, завтра можно обнаружить себя за бортом этого же фреймворка. Вот уже есть версия фреймворка 9999, и старая никому не нужная версия 10.1 (которую ты только что изучал), уже не в почете. И теперь надо срочно бежать изучать чего там новое напрограммировали внутри привычной тебе библиотеки (это к слову о том, что в программировании учиться нужно постоянно).

Больше того, помимо фреймворков, в JS есть вещи и кардинально меняющие язык в целом. Например есть такие языки как CoffeeScript или TypeScript. Оба они настолько расширяют возможности JS, что по факту могут считаться (да и в целом считаются) отдельными языками. А есть ещё NodeJS, это так и вовсе можно сказать отдельный ЯП и отдельная платформа, которые превращает JS в универсальный язык отвязанный от браузера. Вот на нем уже можно написать то самое пресловутое консольное приложения для работы с файлами.

Python vs JS. Итоги ⚖️

Так а что же в целом? Что лучше? Какой из этих языков хорошо подойдет новичку? А я скажу, что оба подойдут. И в то же время, не подойдут. Оба языка и хороши и плохи одновременно. Нет лучшего. Почему так? А все просто - назначение у них совершенно разное.

Python - прежде всего универсальный язык, подходящий под множество разных задач и разных платформ. JS - узкоспециализирован и заточен в основном под браузер и веб разработку. Работает так же исключительно в браузере (опять таки, не берем NodeJS, это немного другое). Конечно, мы можем бесконечно сравнивать те, или иные аспекты этих языков. И это тоже будет справедливо. Но, можно сказать, это как сравнивать электрическую отвертку с молотком - да можно, но в целом то у них все же разное применение.

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

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

Новичку же, мне кажется, стоит выбирать исключительно исходя из того, а чем он впоследствии хочет заниматься. Скажем, если решить для себя что "я хочу во фронтэнд разработку" - тогда JS будет наиболее подходящим выбором. А если строить свои планы на например нейросети и data science - то Python будет как нельзя кстати.

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

Не нужно зацикливаться на чем-то одном из-за того, что это популярно и все вокруг говорят что вот именно на C++, C#, PHP, Python и т.д. писать лучше всего. Ну и конечно, на самом старте не нужно забывать об основах - протоколы, типы данных, как оно работает внутри и т.д. (в данном контексте, я это не упоминаю просто потому, что говорим мы сейчас именно о языках). Каждый в IT начинает по-своему, и у каждого это путь будет по своему уникальным.

Анти-паттерн "Золотой молоток" 🔨

На "десерт" не лишним будет сказать и о плохом подходе к выбору языков, платформ и других средств для программирования. Самый пожалуй известный из них это анти-паттерн "Золотой молоток", он же Golden hammer.

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

Антипаттерн программирования "Золотой молоток". Попытка использовать одну и ту же технологию для решения абсолютно любых задач.
Антипаттерн программирования "Золотой молоток". Попытка использовать одну и ту же технологию для решения абсолютно любых задач.

Собственно, симптомы. Допустим, разработчик-идеолог концепции "Золотой молоток" сталкивается с какой-либо проблемой при решении задачи, или с какой-то новой для него проблемой. И вместо того, что бы попробовать новый стек технологий или другое (наиболее подходящее в моменте) решение, он пытается подогнать или как-либо модифицировать задачу под хорошо знакомый и отличный (как ему кажется) подход. Причем, хотя мы и говорим больше о технологиях и стеке - совершенно не обязательно, что именно они могут стать таким золотым молотком. Это может быть даже просто какой-либо понравившийся алгоритм, который человек теперь стремиться использовать абсолютно везде.

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

Почему люди верят в золотой молоток? 🤔

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

  • Привычка и банальная лень. Самая, пожалуй, очевидное. Человек просто привык к одному и тому же стеку технологий или алгоритм. Ему не охота изучать что-то новое, да и зачем? Все же и так прекрасно работает(снова же, как ему кажется).
  • Незнание альтернатив. Разработчик попросту не знает, как можно вообще работать по-другому. В итоге, попросту делает так, как знает и умеет.
  • Страх перед новым. Программист привык к решению, которым пользуется уже достаточно долго. При этом, боится попробовать какой-то новый подход - ведь то, с чем он уже знаком он очень хорошо знает. Ему знакомы подводные камни, какие-то тонкости. А новое, тем более в реальном проекте применять просто боится - вдруг что-то пойдет не так а я не знаю, что с этим делать?

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

Программирование - это путь 💻

Ещё несколько слов начинающим программистам. Как уже было сказано выше - в процессе обучения программированию не нужно зацикливаться. Равно как и бросать обучение на половине. Любой хороший программист в какой-то момент так или иначе начинает представлять как будет выглядеть его код написанный на одном ЯП (или с использованием одного средства) на паре-тройке других языков. При этом, конечно, абсолютно не нужно знать все языки и технологии (спойлер: это невозможно). Можно завести для себя пару-тройку "любимцев" и крутиться именно в этих кругах. Как правило, это как раз и есть стек технологий:

  • .Net разработчики как правило знакомы с C# и каким-нибудь ASP.NET если это веб разработка. WPF/UWP и WinForms если это классические приложения. И так далее.
  • Jav'исты скорее всего будут хорошо знакомы со Spring. Или например Андроидом.
  • Фонтенд-разработчики должны хорошо знать JS и его фреймворки. Или, например, Type/Coffe Scipt
В ходе освоения программирования, каждый специалист рано или поздно выбирает наиболее приятные ему платформы. Кому-то больше нравится веб-программирование. Кто-то делает выбор в пользу разработки прикладных приложений, и так далее. В зависимости от задачи, зрелый специалист выбирает наиболее оптимальные средства для ее решения.
В ходе освоения программирования, каждый специалист рано или поздно выбирает наиболее приятные ему платформы. Кому-то больше нравится веб-программирование. Кто-то делает выбор в пользу разработки прикладных приложений, и так далее. В зависимости от задачи, зрелый специалист выбирает наиболее оптимальные средства для ее решения.

Со временем, в процессе обучения, и самому новичку станет понятно что так сказать лежит ближе к его сердцу. Вот в эту сторону и стоит развиваться. В итоге, можно стать крутым JS спецом, а можно вообще пойти писать низкоуровневые драйверы на C++(а то и ассемблере). Да в целом много чего можно, но не получиться всё и сразу. В IT мы все винтики слаженной и хорошо работающей системы (в идеале конечно) и каждому найдется свое уютное место.

Разрушение идеализации - итоги 🏰

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

1. Идеального языка программирования не существует - везде есть свои плюсы и минусы. Беги от тех, кто говорит обратное. Отписывайся от идеализирующих авторов, удаляй пропитанные бахвальством ссылки, выкидывай в бак рекламные брошюры и вот это вот всё.

2. Трать время не на поиск "Золотого Грааля", а на решение реальных задач. Меряй результаты или полученным опытом, или заработанными деньгами. Лучше - деньгами.

3. Изучая ТОП-листы "самых-самых" языков - читай между строк. Немудрено, что в "ТОП-3" языка уже ломанулись тысячи человек, и ты станешь тысяча плюс первым. Смотри чуть ниже по списку, и думай на опережение.

4. Меряй любую технологию по своему плечу. Старайся думать о том, насколько язык, технология или направление подходят конкретно тебе. Двигайся в своём темпе. Не пытайся быть кем-то другим - будь собой. Ведь если ты будешь жить жизнью другого человека, кто будет жить твоей жизнью?

5. [Экстра-спойлер] IT-индустрия находится на временном взлёте. Вероятно, её постигнет такое же плавное забвение с усреднением зарплат "по рынку", какое пришло в банковское дело, юриспруденцию и многие другие отрасли. Успей поймать волну, если достаточно смел и усидчив.

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

🔥 Понравилось? Подпишись! Победим восстание роботов вместе! 🔥

-11

🚀 P.S. Для тех, кто хочет не просто читать о программировании, а начать свой путь джедая прямо сейчас, приглашаю на Boosty! Там эксклюзивный обучающий материал по программированию для любого уровня подготовки. А ещё там можно посмотреть, как автор выглядит в жизни. Жми сюда и полетели!🚀

P.S.2 Ещё у меня есть Telegram-канал. Там посты чуть проще и веселее. Ссылка

P.S.3 Extra-бонус и минутка чёткого юмора! Язык программирования "Petooh" 🐓 - ты знаешь, кому отправить эту ссылку.

---

Материал подготовил со-автор блога, Андрей Сорокин. Редактура - Виталий П.