Какой язык программирования учить в 2020-м? / Блог компании JUG Ru Group / Хабр

Обзоры
Статей с подобными заголовками существует уже множество. Но в них постоянно какая-то дичь! Смотрите, Google ещё до основных результатов советует такое: HCL, Карл! Язык, который не просто очень...

Содержание

  1. Вступление
  2. C (1972) и c (1985)
  3. C# (2000)
  4. Java (1995)
  5. Javascript (1995)
  6. В чём проблемы
  7. Определение сложности языка программирования
  8. Готовые работы на аналогичную тему
  9. Прочие языки
  10. Сложность восприятия кода

Вступление

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

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

Если хочется заниматься чем-то определённым — тогда важнее не теоретические сравнения языков, а то, какие используются конкретно в этой области. Часть информации об этом можно получить из текста ниже, но есть смысл и погуглить «what languages are used for %интересующая_область%».

Если важно как можно скорее пройти путь до получения работы, тогда тоже важнее текстов-сравнений может оказаться другая вещь. Стоит посмотреть на сайте вроде HeadHunter вакансии Junior-разработчиков своего города: какие языки чаще всего упоминаются в них?

А если нет ни спешки, ни определённого запроса, тогда спрошу так: есть ли потребность делать что-то такое, что пользователь видит глазами? Работа над веб-сервисами делится на фронтенд и бэкенд. Грубо говоря, фронтенд — это «что видно в браузере», а бэкенд — это «что выполняется далеко на сервере, чтобы фронтенду было что показывать».

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

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

C (1972) и c (1985)

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

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

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

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

C# (2000)

Когда компания Microsoft представила C#, многие назвали это «ответом Microsoft на Java». Разумеется, между этими языками хватает различий (и за прошедшие 20 лет их число лишь увеличилось), но некоторая перекличка действительно есть, и знание любого из этих языков помогает быстрее освоить другой.

Изначально самая заметная разница была не в самих языках (в синтаксисе или рантайме), а в сферах их применения. Microsoft создал C# как часть своей платформы .NET, связанной с Windows. И если нужно было сделать программу для Windows, то напрашивающимся вариантом выглядел .NET. А вот если такую программу, чтобы запускалась и на Windows, и на Linux, и на Mac — тут могла помочь Java.

ЧИТАТЬ ДАЛЕЕ:  📺 Качественные китайские телевизоры на 2020 год

Но с годами ситуация изменилась: у .NET появилась новая версия .NET Core, уже не привязанная к конкретной операционной системе, а люди стали реже устанавливать программы на компьютер и больше делать в браузере. Это отчасти сблизило сферу применения языков: если посмотреть сейчас вакансии с названием C#, там, как и у Java, часто будет написано что-то вроде «Построение бэкенда для веб-приложений».

Впрочем, это не единственный вариант. В играх на движке Unity тоже используют C#, а это самый популярный движок в мире — так что в геймдеве язык тоже активно представлен (в отличие от Java).

Java (1995)

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

Java используется в первую очередь в бэкенде, и хотя не царит там безраздельно, как JS во фронтенде, позиции очень хорошие. Порой можно услышать пренебрежительное «да она уже устарела и вот-вот умрёт». Ну, во-первых, скажу так: эти слова звучат уже лет дцать, а она что-то никуда не делась. Мы в JUG Ru Group проводим конференции по разным языкам, и по Java получаются самые посещаемые, в прошлом году собралось больше 2000 участников — это никак не выглядит смертью.

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

Другая популярная претензия к Java — мол, она «скучная и многословная», и используют её скучные компании вроде банков, а какие-то другие языки позволяют реализовать то же выразительнее и лаконичнее, и их ценят в весёлых стартапах. Ну, тут всё тоже субъективно, как с JS: знаю многих людей, которые говорят о Java с огнём в глазах и видят в банковской разработке множество интересных задач, но если для кого-то скучно, с этим не поспоришь.

Javascript (1995)

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

JS считается относительно простым языком для обучения. Но стоит учесть, что во фронтенде сейчас почти никто не использует «просто JavaScript», нужно будет ещё освоить один из популярных фреймворков (а также научиться пользоваться инфраструктурой). И вот к ним нареканий о сложности заметно больше — так что по пути к карьере фронтендера боль может возникнуть на этом этапе.

При популярности JavaScript и у него, и у всей современной фронтенд-разработки хватает ненавистников. Кто-то говорит, что во фронтенде всё постоянно меняется и надо постоянно переучиваться вместо спокойной работы (правда, в 2020-м таких жалоб уже заметно меньше, пик остался в прошлом). Кто-то жалуется на странности в логике JS.

Помимо фронтенда, JavaScript используют и в других областях (бэкенде, компьютерных программах, мобильных приложениях и не только), но в них он от господства далёк.

В чём проблемы

Тексты «какие языки учить» зачастую такие слабые, что опытные разработчики разнесли бы их в пух и прах, но опытные разработчики их просто не открывают. Их открывают новички, у которых нет компетенции, чтобы заметить подвох. В результате новички доверяют всякой ерунде, а проблемы в текстах остаются незамеченными и процветают. Что именно это за проблемы?

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

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

Однако также стоит учесть, что JavaScript – это один из наиболее популярных языков программирования. А это значит, что на него существует как достаточный спрос, так и огромное количество предложений. Поэтому если вы изучаете или хотите изучить этот язык, то постарайтесь максимально в нем разобраться и стать отличным специалистом».

ЧИТАТЬ ДАЛЕЕ:  Самые высокие водопады в мире: ТОП-10 больших водопадов

Проблема вторая: закидывание читателя мелочами без объяснения главного.

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

А с текстами о языках происходит именно так. Похоже, когда кому-то ставят задачу написать про них, зачастую автор гуглит по пять случайных фактов про каждый и уверенно идёт за гонораром.

Пример: «Go использовался для создания Ethereum». Что, серьёзно, вот это самая важная информация про язык (когда речь идёт не о Solidity)? Вот она поможет сделать правильный выбор?

Проблема третья: сообщают вещи, которые начинающим попросту ничего не скажут.

Пример: «Недостатки Python: нет таких модификаторов доступа, как protected, private и public».

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

Проблема четвёртая: бездумное следование рейтингам популярности языков. «А-а-а, Go поднялся в индексе TIOBE на несколько строчек, срочно учим его!» Ну слушайте, а ещё по TIOBE получается, что обучающий язык Scratch обошёл Dart — и что теперь, дартовикам надо срочно перейти на детский язык, что ли?

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

Пример: «В некоторых списках Python фигурирует на 5-ом месте, в других его ставят на 2-ое».

Проблема пятая: за всем перечисленным порой забывают про области применения, а для новичков это может быть важнее всего. Представим, что школьница Василиса, которая каждый день пользуется кучей мобильных приложений, захотела сделать своё собственное. Какая ей тогда разница, какие модификаторы доступа у Python, кто кого обошёл в рейтингах и на чём написан Ethereum? Всё, что ей надо знать — на чём пишут для iOS и для Android.

Поэтому вот текст, который пробует от всего этого уйти:

Определение сложности языка программирования

Сложность языков программирования можно рассматривать с нескольких точек зрения:

  1. низкоуровневые языки программирования; традиционно считаются сложными в связи с тем, что написанные на них программы не предназначены для непосредственного восприятия человеком; программы на таких языках представляют собой либо просто ряды и колонки чисел в шестнадцатеричном формате (машинный код), либо листинги, где среди чисел изредка встречаются буквенные сочетания, напоминающие слова английского языка (add, mov и др.); для преобразования машинного кода в приемлемый для восприятия вид существуют специальные программы — дизассемблеры и декомпиляторы;
  2. сложность освоения; есть языки с низким порогом вхождения, которые сравнительно быстро освоить может даже пользователь, никогда раньше не сталкивавшийся с программированием; в качестве примеров можно назвать Basic, Pascal, JavaScript, основы Python; другие языки, такие, как C , Haskell требуют дополнительной теоретической подготовки;
  3. сложность использования; некоторые языки не требуют установки на компьютер никакого программного обеспечения; например, программы на JavaScript можно писать и запускать в любом современном браузере; другие языки требуют наличия довольно сложных установок и настроек; например, для программирования на Java нужны особая виртуальная машина и SDK (набор инструментов), в состав которого входят компилятор, упаковщик, стандартные библиотеки и т.п.;
  4. сложность предметной области; многие языки, не будучи слишком сложными сами по себе, требуют знаний, не связанных с программированием; например, программирование в среде 1С предполагает, что разработчик бегло ориентируется в бухгалтерском учете и экономике предприятия;
  5. сложность ради шутки; некоторые языки программирования намеренно сделаны сложными, чтобы дать программистам возможность потренироваться в решении необычных задач или просто позабавиться (см. ниже).

ЧИТАТЬ ДАЛЕЕ:  Какие таблетки помогут избавиться от головной боли: список эффективных препаратов – Семейная клиника ОПОРА г. Екатеринбург

Готовые работы на аналогичную тему

Прочие языки

Молодые: Go, Dart, Rust и так далее

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

Охотно верю, что в заметной степени это правда. Но есть проблема: почти все такие языки используются в индустрии заметно меньше тех самых «предшественников». Так что даже в Москве такой выбор резко сужает круг вакансий, а если вы в городе размеров Омска, то Rust-вакансии вряд ли встретите в принципе. Конечно, можно искать удалёнку, но для первой работы это не лучший вариант.

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

Высокооплачиваемые: Scala, F#, Haskell и так далее

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

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

Узкоспецифичные языки: SQL, HTML, Bash и так далее

Упомяну для полноты картины. До этого речь шла о языках общего назначения, на которых гипотетически можно писать что угодно. Но существуют ещё языки, используемые строго для конкретного круга задач. Например, SQL используется конкретно для работы с базами данных. И его знание вам может понадобиться «в дополнение» к вашему основному языку.

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

Сложность восприятия кода

Спагетти-код

Причиной сложности программы для восприятия может стать неумелое обращение с языком программирования или применение его для задач, для которых он не предназначен. Например, в ранних версиях Бейсика не использовались подпрограммы и функции, зато интенсивно применялись операторы GOTO, что приводило к появлению т.н. «спагетти-кода», т.е. программ, в которых трудно было разобраться даже самому автору. Такие случаи на ранних этапах развития программирования были характерны не только для Бейсика:

Рисунок 1. Пример спагетти-кода. Автор24 — интернет-биржа студенческих работ

Регулярные выражения

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

Какой язык программирования учить в 2020-м? / Блог компании JUG Ru Group / Хабр

Рисунок 2. Регулярные выражения в Perl. Автор24 — интернет-биржа студенческих работ

Обфускация

Намеренное запутывание компьютерного кода (обфускация) имеет две цели. Во-первых, сделать код непонятным для понимания, например, конкурентами или злоумышленниками; во-вторых, замена длинных переменных одно- двухбуквенными делает программу компактнее, что особенно актуально для загружаемых по сети модулей [removed]

Рисунок 3. Обфусцированная веб-страница. Автор24 — интернет-биржа студенческих работ

Похожие статьи:

  1. Фитнес клубы с пробными занятиями в Воронеже с адресами, отзывами и фото —
  2. Лучшие фрезы с Алиэкспресс для маникюра 2020 года
  3. Рейтинг ОСАГО — ТОП страховых компаний по надежности 2020
  4. 10 потрясающих диких кошек. Энциклопедия. Материал для реферата
Оцените статью