company_banner

Какой язык программирования учить в 2020-м?

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



    HCL, Карл! Язык, который не просто очень далёк от «Самых Популярных», но ещё и создан для конфигурации, так что его вообще странно ставить в один ряд с языками общего назначения. Страшно представить приключения новичка, который решит строить карьеру по таким советам. Начнём с того, что по запросу «как выучить HCL» вместо туториалов по языку вылезают тексты о соляной кислоте.


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


    Оглавление




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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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



    Вступление


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


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


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


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


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


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


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


    C (1972) и C++ (1985)



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


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


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


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


    Python (1990)



    В каком-то смысле Python — противоположность C: если там «сложно, зато производительно», то здесь «просто, зато к производительности есть вопросы».


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


    Что же до производительности, то Python действительно проигрывает и C++, и многим другим языкам. Но порой его называют «медленным» презрительно, а вот это уже зря. Вспомним слова о том, что языки хороши или плохи не сами по себе, а применительно к задачам. Да, есть задачи, для которых Python не подойдёт — но есть и такие, где разница в скорости между ним и другим языком вообще не будет заметна. У Python есть свои области применения, для которых он достаточно хорош.


    Что это за области? Ещё давно Python полюбили учёные — и теперь с его помощью занимаются такими околонаучными вещами, как машинное обучение и data science. В бэкенде веб-сервисов его тоже используют. Про образование уже сказано. А помимо разработки, его любят в системном администрировании — там он отлично подходит для мелких утилит.


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


    JavaScript (1995)



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


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


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


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


    Java (1995)



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


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



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


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


    C# (2000)



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


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


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


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


    Kotlin (2010)



    Этот язык создала в Санкт-Петербурге компания JetBrains. Он совместим с Java, поэтому Java-проекты можно постепенно переводить на Kotlin: не переписывая всё разом, а постепенно добавляя туда Kotlin-код. И многие попробовавшие его Java-разработчики захотели к нему перейти, ощутив, что тут нет «скуки и многословности», всё выразительнее и современнее.


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


    JetBrains совершенно не хотят останавливаться на Android и метят с Kotlin в самые разные ниши, даже те, где не представлена Java. Каких-то успехов в этом компания добивается, с каждым годом язык становится популярнее, но от других вроде той же Java пока что сильно отстаёт, и насколько ещё ему получится вырасти — открытый вопрос. Так что, если учить Kotlin, в Android-разработке это точно очень пригодится, а в других областях — как повезёт.


    Swift (2014)



    Наконец, самый молодой язык из перечисленных — он был представлен меньше шести лет назад. Обычно за такое время языки не успевают стать достаточно популярными для попадания в такие списки. Но здесь ситуация особая: компания Apple, создавшая его, ясно дала понять, что теперь iOS-приложения надо писать на нём. А тут как Apple скажет — так и будет, свою платформу компания контролирует.


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


    И в итоге выбор получается совсем простой. Хотите писать приложения для айфонов (ну или для Mac, Apple TV, Apple Watch) — учите Swift. Не хотите их писать — не учите Swift. Ну, если хотите делать приложения «для iOS и Android сразу», существуют ещё кроссплатформенные решения вроде Flutter, но они куда менее популярны.


    Прочие языки


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


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


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


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


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


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


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


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


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


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


    Заключение


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


    И к этому посту почти наверняка появятся комментарии, что в нём многое некорректно, упущено что-то значимое и вообще надо было всё написать иначе.


    Что если я заявляю «надо объяснять главные различия», то надо было обязательно рассказать про типизацию.


    Что где-то я забыл упомянуть важнейшую область применения.


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


    А напоследок хочу обратиться к опытным разработчикам с минуткой рекламы. Несмотря на личные предпочтения, я старался в этом тексте не ставить никакой язык выше другого. Тот же подход у компании JUG Ru Group, где я работаю: мы проводим конференции по самым разным языкам и темам (от JS и .NET до тестирования и devops).

    И этим летом в наших онлайн-конференциях поучаствуют такие люди, как создатель C++ Бьярне Страуструп и создатель Java Джеймс Гослинг. А ещё будет создатель Stack Overflow Джоэл Спольски — поскольку на SO задают вопросы о самых разных языках, то и ему самому наверняка захотят задать вопрос самые разные разработчики. В общем, на каком бы языке вы ни писали, вероятно, среди этих конференций есть интересные для вас — рекомендую сходить на сайт и проверить лично.
    JUG Ru Group
    Конференции для программистов и сочувствующих. 18+

    Похожие публикации

    Комментарии 258

      +37
      Честно говоря, зря вы объединили С и С++ в одном разделе. Сейчас это две совершенно разные парадигмы программирования, и разница между ними пожалуй как между Java и JavaScript — похожие названия и в синтаксисе встречаются схожие конструкции. И на этом всё.
      И если С не самый удачный выбор для лёгкого старта в программировании, но по крайней мере, вполне пригоден, то современный С++ можно рекомендовать для старта разве что тем, кто гик до мозга костей, и способен разобраться с кодом вообще на любом языке, хоть брейнфаке.
        +1
        О, как быстро начались ценные дополнения, на которые я надеялся :) Спасибо за комментарий!
          +1
          Elixir в некоторых обзорах тоже советуют учить.
            0

            Эликсир — это набор макросов для эрланга. Продвинутых, умных, с очень тонко продуманным обращением с AST, но в эликсир люди ходят за виртуальной машиной эрланга и OTP (сиречь, за бесплатными concrurrency и fault-tolerance). В каком-то смысле он как котлин — язык для тех, кто не осилил скалу. С точки зрения рантайма никаких плюсов по сравнению с эрлангом он не дает.


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


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

            Так что в качестве первого языка я совсем не советую, как и эрланг. Нет смысла: OTP решает задачи, которые просто никогда не встают перед джуниорами и даже мидлами. Это больше про «го выбросили в помойку уже давно, а сейчас и джава перестала тянуть».

              +1
              В каком-то смысле он как котлин — язык для тех, кто не осилил скалу.

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

              В качестве первого языка… На своём опыте могу сказать, что схема в целом рабочая, но времени займёт много. Ознакомиться как минимум стоит, хотя бы на уровне работы Джо erlang.org/download/armstrong_thesis_2003.pdf
                0
                Не совсем понятно в каком

                Ну, целевая платформа — одна и та же виртуальная машина. Поэтому все, что может один, может и другой.


                в эрланге же нет ничего такого, чего не было бы в элике

                А в джаве (или скале) прям до хрена такого, что котлином не выразить? Я немного запутался в ваших отрицаниях отрицаний, так что если имелось в виду что-то другое — поправьте :)


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

                  0
                  А в джаве (или скале) прям до хрена такого, что котлином не выразить?

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

                  Потому что если начинать с фреймворков, то хорошим разработчиком уже не стать никогда.

                  В целом солидарен, да.
                    0
                    Ну, целевая платформа — одна и та же виртуальная машина. Поэтому все, что может один, может и другой.

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

                    В Erlang очень все печально с метапрограммированием. И метапрограммирование на основе макросов позволило реализовать нормальный ORM (ecto) в Elixir. И при этом в Erlang до сих пор нету нормальной реализации ORM.

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

                    Есть два разработчика:
                    первый начинал без фреймворков и для каждой задачи продолжает писать свои решения, в виде своих библиотек.
                    второй начинал с фреймворка, но не только просто использовал, но и смотрел как внутри устроено.
                    По Вашей логике первый хороший разработчик, второй нет. Для меня же ответ неоднозначный и неочевидный.
                      0
                      В Erlang очень все печально с метапрограммированием.

                      Это не совсем так, точнее — совсем не так.


                      нормальный ORM (ecto)

                      Ормы должны умереть, а ecto — просто pet-project Жозе, который  уже начинает мешать нормальному развитию собственно языка. У меня тоже, кстати, есть такой смешной проект https://github.com/am-kantox/lazy_for/blob/master/lib/lazy_for.ex — но в продакшн я его не тащу.


                      По Вашей логике [...]

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

                    +1

                    Советовать в качестве ознакомления с ЯП для новичков докторскую на 300 страниц — это сильно

                      0
                      А какая собственно разница, что это именно докторская? По содержанию она мало чем отличается от любой книги по программированию, более того — там довольно много посвящено историческому контексту появления нужды в таком инструменте. 300 страниц — это не особо-то и много для книги, LYSEFGG вон 600.
                        0

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

                      0
                      С точки зрения рантайма никаких плюсов по сравнению с эрлангом он не дает.

                      да что тут сравнивать то?
                      В Эрланг встроены акторы в парадигму, в скалле и други языках они просто эмулируются. Если сравнить акторы эрланга и библиотеку Akka, то эрланг будет выигрывать по скорости и стабилности.
                      Скала сделала упор на асинхронность и бекэнд, а котлин на современные треования по кложурам, потокам и Rx/функциональному программированию.
                  +7
                  Си хоть может и не будет легким на старте, но я бы его в обязательном порядке рекомендовал изучить всем в качестве второго или третьего языка, просто чтобы приобрести понимание того, что скрывается за всеми этими абстракциями и заботливым рантаймом в высокоуровневых языках.

                  А вообще, лучше расширять кругозор, комбинируя противоположности. Освоили высокоуровневый объектно-ориентированный язык — попробуйте низкоуровневый процедурный (и бонусом можно еще попробовать упороться по функциональщине, но это уже потом). Писали на языке со слабой динамической типизацией — освойте что-нибудь с сильной статической. Был опыт с компилируемыми — возьмите скриптовой интерпретируемый.
                  Все это неплохо так расширяет горизонт знаний и позволяет сравнить плсы и минусы разных подходов чтобы выбирать более подходящие инструменты в будущем.
                    +1

                    Тогда уж для этих целей лучше изучить машинные инструкции и архитектуру, а не только си. Парадигма си не менялась со времён PDP (который был по сути портативным ассемблером, и который хорошо адаптирован к архитектуре PDP), поэтому си такой же абстрактный язык, как и остальные. Единственный плюс — нет рантайма, и при вышеперечисленных знаниях архитектуры, компилятора, инструкций можно заранее знать, в какие машинные инструкции будет скомпилирован код (если без оптимизаций конечно). Что в общем и используют low-level разработчики и разработчики ядер.

                    –8
                    C можно считать подмножеством даже для современного C++, хотя и есть между ними некоторые отличиям. Непонятно, зачем их разделять. На самом деле мне непонятно, зачем сейчас вообще учить C, если даже на ардуине C++ вполне эффективен.
                    Можно найти задачи, которые не требуют владения всеми конструкциями языка, а тем более всей станартной библиотекой или бустом. При этом знания, полученные при изучении, будут весьма полезны при освоении других языков, которые в той или иной степени используют синтаксические конструкции из C++.
                      +7
                      C можно считать подмножеством даже для современного C++,

                      Давно разошлись по идеологии и путям развития.
                      Так верно говорить для C и Objective-C, но С++ уже давно не в ту степь смотрит.
                        0
                        Куда он смотрит в данном случае не важно. Там появились новые отличия, которые влияют на совместимость? Кажется, в двадцатом что-то собирались делать, но точно не помню.
                          +2
                          Там появились новые отличия, которые влияют на совместимость?
                          Да, уже лет 20 назад.
                            0
                            Однако, если Википедия от нас ничего не скрывает, они не настолько велики, чтобы не объединять эти языки в одну группу.
                              +1

                              Они достаточно большие. Там, даже, сравнение указателей по разному работает. Разные объектные модели. Про type punning через union, vla, compound literals и прочие фишки C я даже говорить не буду.

                        +1
                        C можно считать подмножеством даже для современного C++

                        Ну, это не совсем верно. Правила С++ более строгие, и примеров кода, который компилируется в С, но не компилируется в С++, вы найдёте немало. Да банально порядок объявления функций. В С++ функцию надо объявить перед использованием, а в С не надо.
                          –2
                          Ну да, C — язык более анархичный. И это ещё один повод его не использовать. Я считаю, что первый язык должен быть достаточно строгим — меньше будет плохого кода.
                            +1

                            В смысле, в C не надо?! В C тоже надо. Да, там была фича, что если функция не объявлена, то считается, что она такая int foo(...). Для printf такое подойдёт, а вот malloc уже так работать не будет.

                            +2
                            Вы ещё предложите BASIC с FORTRAN'ом не разделять по той же причине :)
                              0
                              Про них я ничего сказать не могу, ибо не знаю. Я их лет тридцать назад учил, но никогда не использовал.
                                0
                                Это был контраргумент к рассмотрению C/C++ «в одном пакете»: BASIC был создан как «детский» вариант «взрослого» FORTRAN
                                  0
                                  Однако, он уже давно перерос «папашу» и от начального варианта с номерами строк ушёл очень далеко. С C этого не произошло.
                                    0
                                    Почему-то школота не может понять что хотя бы один язык должен оставаться неизменным.
                                      +1
                                      Я бы сказал что это как с латынью: неизменными остаются только мёртвые языки :)
                                      +1
                                      Чего не произошло с C?
                                      Что в BASIC поменялось кроме исчезновения номеров строк?
                                        +1
                                        C не изменился настолько сильно, как Basic. Версии, которыми сейчас активно пользуются, а не классика, конечно.
                                        Вы Visual Basic видели? Для многих сейчас это и есть Basic. ЕМНИП сто лет назад в Turbo Basic уже было что-то подобное объектам.
                                          0
                                          Бэйсик уже минимум лет 20 ничем не уступает всяким Delphy. До сих пор бы на нем писал, если бы не линукс.
                                            +1
                                            А как называется комитет по стандартизации?
                                            Какая последняя версия стандарта?
                                            Какие вообще есть стандарты?
                                              0
                                              Микрософт же.
                                                +1
                                                Насколько я знаю, есть стандарт де-факто — вижуал бейсик. Остальные всем пофиг.
                                                  +1
                                                  Всё так. Единственное, что VB уже закрыт.
                                                    0
                                                    Да Вы что! На чём же они теперь макросы для Ёкселя писать предлагают?
                                                      +1
                                                      Всё таки есть большая разница между макросами и старой позицией, до закрытия проектов Майкрософтом, как универсального языка.
                                                        0
                                                        А где можно узнать про закрытие? Вроде, так и выпускается вместе со студией.
                                                          0
                                                          Вот тут пост был. Groramar несколько поторопился его хоронить — пока это только остановка дальнейшего развития. Какой там срок поддержки у .NET 5?
                                                            0
                                                            Да даже если и прекратят разработку фич, это мало что значит. Даже поддержка VB6 до сих пор сохранилась в винде, и люди продолжают писать.

                                                            Вообще считаю VB6 идеальным для новичков, которые не знают, чего хотят. Легкий и лаконичный синтаксис, трудно выстрелить в ногу, есть простая событийная модель. Потом дообучившись работать с памятью и указателями можно мигрировать на любой императивный язык.
                                                              +2
                                                              В современных реалиях, когда «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!» можно считать что это смерть языка.
                                      +3
                                      Они сильно разъехались за последние 20 лет. Современный С++ — это не то, что пишут в рафинированных книжках, там все по другому.
                                      Plain C примерно так и остался, по-ближе к железу и побольше предсказуемости и машинный код приходится отсматривать, для отлова узких мест.
                                        –1
                                        То есть, сейчас текст на C++, использующий только то, что есть в Plain C (плюс аналоги complex, VAL и т.п.), выдаст машинный код, сильно отличающийся от написанного на Plain C?
                                          0

                                          Аналогов Vla на C++ нет. Даже vla расширение g++ работает абсолютно по-другому, в отличии от C. Если вы соберёте C код C++ компилятором, то, вероятнее всего, там будет неопределённое поведение, но ещё более вероятно, что он не соберётся.

                                            +1
                                            Насчёт VLA согласен. Не то, чтобы мне нравилась идея размещать в стеке массивы неопределённой во время компиляции длины, но это может быть эффективно.
                                            Понятно, что не соберётся — это всё же разные языки. Но очень близкие, по крайней мере сравнение Java/JavaScript совсем не к месту.
                                              0
                                              Vla — это тип, а не синтактический сахар вызова alloca. Vla — не обязательно размещается на стэке. Например, вот.
                                              float (*tmp)[size] = malloc(sizeof(*tmp));
                                                0
                                                Это понятно. Но такая конструкция уже мало отличается от обычного new.
                                          0
                                          Судя по реакции, здесь много разработчиков, которые активно используют Plain C и со мной не согласны. Не могли бы вы привести пример не слишком экзотического кода на нём, который сильно выигрывает у аналога на C++ по эффективности или простоте.
                                          Не холивара ради, а мне интересно, где я мог бы заметно выгадать от такой замены — для практического использования.
                                            +1

                                            Не могу сказать, что активно использую plain C (вообще не использую), но там не надо думать о лайфтаймах объектов, а в плюсах это непрекращающийся источник UB (которыми, впрочем, компилятор не пользуется). Поэтому если вы пытаетесь писать корректный с точки зрения стандарта код, то вам придётся делать нетривиальное количество приседаний для того, чтобы лайфтаймы объектов правильно начались, особенно — до С++20.

                                              +1
                                              это уже тема для статьи
                                            +2

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

                                            +6
                                            И если С не самый удачный выбор для лёгкого старта в программировании

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

                                              +4
                                              C и C++ конечно зря объединили, но вот про современный C++ вы тоже зря. В качестве первого языка C++ подойдёт куда лучше Си (если правильно учить) — можно писать без возни с выделением памяти, без указателей, без ручного освобождения ресурсов, и всё будет прекрасно работать. Есть прекрасный доклад на тему обучения C++ без этого: Stop Teaching C.

                                              Даже для написания std::cout << "Hello\n" не требуется ни детального понимания правил поиска имён, ни ADL, ни перегрузки операторов — хватит интуитивного «синтаксис почему-то такой».

                                              Хотя мне кажется, что Python или PascalABC.NET (не классический!) подойдут для обучения ещё больше, там меньше абстракций течёт, чем в C или C++.
                                                +2
                                                Даже для написания std::cout << "Hello\n" не требуется ни детального понимания правил поиска имён, ни ADL, ни перегрузки операторов — хватит интуитивного «синтаксис почему-то такой».

                                                А вот для того, чтобы понять хотя бы сообщение об ошибке в интуитивном std::cout << "Hello, pair " << x, y << std::endl, уже придётся таки разбираться.

                                                  +3
                                                  хватит интуитивного «синтаксис почему-то такой»

                                                  Вот это как раз не надо. Потому что открыв учебник, написанный 10 лет назад, человек прочитает там "<< и >> — операторы битового сдвига", и получит хорошую прививку от этого вашего программирования. Я, вот, знаю, что можно делать с операторами, но меня все равно корежит от этого синтаксиса, придуманного кем-то, кому лень несколько кнопок лишних нажать.
                                                    +1

                                                    Так и не надо открывать учебники десятилетней давности. Некоторые вон вообще на Turbo C с <iostream.h> и запретом std::string как глючного и тормозного до сих пор учат — так, конечно, не надо.


                                                    И как отличить подобную дичь от условно "современного C++" без исходных ссылок на хорошие материалы новичку — непонятно.

                                                      +3
                                                      и запретом std::string как глючного и тормозного до сих пор учат — так, конечно, не надо.

                                                      для мк надо — строки как класс занимают 4 килобайта флеша, а это очень дохрена для популярных серий мк.

                                                        +1

                                                        Во-первых, откуда 4 килобайта, во-вторых, у вас что, компилятор в LTO не умеет?

                                                          0

                                                          умеет. И версия релизная. Если убрать string и все строки заменить массивами символов, то "магическим" образом -4к

                                                            0

                                                            Это пока в C++ не завезли consteval (или constinit, я уже запутался) и constexpr-конструкторы для строк.

                                                              0
                                                              А можете пояснить, как связано занимаемый скомпилированной программой объём, и эти все constexpr? Казалось бы, класс string-то всё равно нужно включать.
                                                                0

                                                                Потому что тогда не будет никаких динамических аллокаций (предполагая, что в С-коде их нет), и компилятору будет легче вырезать вообще все кишки std::string.

                                                  +4

                                                  Я про C++ абсолютно согласен. К примеру, у меня есть группа вк, в которой я уже пару месяцев помогаю людям изучать python. Это при том, что я на порядок лучше знаю C++. Но помогать в изучении C++… нет уж, увольте.

                                                    0
                                                    от задач зависит. Та же книга Страуструпа хорошо описывает язык для обучения, но в основном в интернете уроки по Шилду, который приравнивает C к C++.
                                                    Ну, а если брать современные задачи, например парсинг json, http запросы, асинхронность, то есть некоторые сложности в погружении.
                                                    +3
                                                    И если С не самый удачный выбор для лёгкого старта в программировании, но по крайней мере, вполне пригоден, то современный С++ можно рекомендовать для старта разве что тем, кто гик до мозга костей, и способен разобраться с кодом вообще на любом языке, хоть брейнфаке.

                                                    Не могу согласиться с утверждением насчёт C++. Подмножества языка, которое можно назвать "современный C++" довольно-таки просто в освоении и использовании. Как вам, например, программирование на C++ без new и простых указателей.


                                                    Проблема тут в том, что есть довольно много курсов (учебных материалом) по C++, которые совершенно неправильно подходят к процессу обучения. Я не буду вдаваться в подробности, а лучше приведу пример хороших курсов. Это курсы по C++ от Яндекса, там по-моему человек узнаёт что в языке есть указатели и new где-то к третьему курсу :) Я разумеется могу ошибаться, но как факт, людей не заваливают избыточной сложностью с самого начала.


                                                    Ну и касательно относительно пригодности C для "относительно лёгкого старта". Я бы сказал, что на C++ это будет даже легче за счёт абстракций более высокого уровня. Да хотя бы std::vector, std::string, std::*_ptr, ссылки и т.п… Это всё прячет кучу ненужной вначале сложности.


                                                    PS
                                                    Я склонен рассматривать стандартную библиотеку C++ как в некотором роде часть языка, так как она даже в стандарт входит.

                                                      0
                                                      Стандартная библиотека и есть часть языка, это как «core» в каких нибудь других языках. За основу надо брать Страуструпа, там хорошо всё описано.
                                                        0

                                                        Тут иногда находится о чём поспорить, поэтому я пояснил свою точку зрения, на всякий случай :)

                                                          0
                                                          Ну это как Java рассматривать отдельно от ее Collections и других «встроенных» штук.
                                                      +1
                                                      Хотел было возразить, что нет, C++ нормальный первый язык. Я с него начал и продолжаю работать на нём. Но потом понял, что на брейнфаке я тоже писал немало и даже никнейм на хабре к нему отсылает. А я считал себя нормальным человеком :(((
                                                      +1

                                                      Эх, вашу бы статью, да пару лет назад…

                                                        +8

                                                        А что не так было с выбором? Поделитесь опытом?

                                                          +1
                                                          Много мыкался от одного языка до другого, делал критичные заявления типа java панацея, python медленный и т.п. (Сейчас в основном использую python). Статья помогает здраво взглянуть на выбор первого языка для обучения
                                                            +1
                                                            Практически моя история, в 2015 году начинал изучать Java, потом бросал потом снова начинал, в 2017 году начал изучать C# изучив основы понимал как мало я знаю для трудоустройства, в 2018 году изучал JS (AngularJS и NodeJS) но в моем городе было две вакансии для middle+ разработчиков, в итоге в 2019 году я попробовал Python и понеслось… уже почти год работаю Python backend разработчиком, жалею что раньше не серьезно к нему относится, писал пару утилиток будучи системным администратором, но всерьез не воспринимал, а зря.
                                                              0
                                                              Почему-то ожидал увидеть историю про выбор слишком специфичного/узконаправленного/экзотического/нишевого языка и уход с него.
                                                            +8

                                                            И что бы вы делали в 2018-ом году со статьёй "Какой язык программирования учить в 2020-м"?

                                                              +7
                                                              Что Бифф сделал с альманахом, только в меньшем масштабе)
                                                              +5
                                                              Знал бы я про Python и Java 22 года назад… :) Тогда у меня был 486SX с DOS, без интернета, у меня из литературы — только ZX-Ревью и учебники по фортрану, паскалю и бейсику из местной библиотеки. Несколько последних лет глотаю не пережевывая новые и «новые» тренды в программировании и до сих пор не определился, в какую сторону двигаться. Java — чисто, аккуратно… Но основной спрос, как я понял, почему-то на javascript и фреймворки на нём. Python понравился лаконичностью. C++, как мне показалось, востребован в значительно меньшей степени. 10 лет назад писал простые скрипты на erlang для jabber организации, где работал. Сейчас erlang ещё актуален? В какую сторону двигаться?
                                                                +4

                                                                Двигаться туда куда интересно, где есть мотивация изусать и разбираться

                                                                  +1
                                                                  Познали бы боль миграции с Python2 на Python3 (которая у некоторых до сих пор)
                                                                +10
                                                                На вопрос с картинки Google должен был, ващето, в первых строках давать «английский» и «китайский».
                                                                  0
                                                                  А мне гугл Python предложил, затем JS и Java ))
                                                                  0
                                                                  В С String* arg и String *arg одно и то же?
                                                                    +8
                                                                    Да.
                                                                    Но есть один
                                                                    нюанс
                                                                    int* var1, var2; // var1 будет int*, var2 будет int

                                                                    который может сбить с толку, поэтому int *var выглядит все-таки более осмысленно.
                                                                    +20

                                                                    не понял,.а где PHP?))

                                                                      0
                                                                      Как написано в заключении, «Я даже намеренно упустил один популярный язык, про который недостаточно знаю, чтобы хорошо его описать — думаю, его сторонники сами придут в комментарии и восполнят пробел». И правда, уже пятым комментом!

                                                                      Честно признаюсь: хотя ещё в школе баловался с PHP, довольно смутно представляю, что происходит с PHP-разработкой сейчас. Если вы знаете лучше, можете немного рассказать?
                                                                        +12
                                                                        С PHP как с Java — с года в год все кричат «PHP умирает», а он тем временем живее всех живых, и продолжает обрастать фреймворками, библиотеками, версиями самого языка. Вакансий много.

                                                                        Ну и просто интересное замечание — если в 2020-ом году человек вам рассказывает какой плохой и убогий PHP, то он или работал с ним в последний раз лет 5 назад, либо вообще никогда не работал :)
                                                                          0
                                                                          Спасибо. А вот в контексте «первого языка» — у PHP раньше была репутация языка с низким порогом входа (что для новичков может быть плюсом), это по-прежнему так, или с новыми фреймворками и версиями самого языка всё усложнилось?
                                                                            +7
                                                                            И да, и нет. Язык по-прежнему прост в изучении. Можно быстро начать писать работающий код, веб-сервер встроен прямо в язык, бери и запускай. С другой стороны, научиться писать работающий код и писать код профессионально — совсем разные вещи. И вот тут уже нужны фреймворки, стандарты PSR, паттерны и хорошее понимание ООП.
                                                                            На рынке множество вакансий совсем разного уровня — соответственно, можно легко найти работу в веб-студии условно «за еду» и поднабраться опыта. Однако многие почему-то так и остаются на уровне копирования кода со SO десятилетней давности и безо всякого интереса, что было добавлено в язык за последние ~10 лет.
                                                                            Можно сказать, чтобы стать хорошим разработчиком, знающим PHP, придется много вкладываться в самообразование или попытаться как можно скорее попасть туда, где на нем пишут профессионально.
                                                                              +2

                                                                              Ну про самообразование, это везде так.

                                                                              0
                                                                              del
                                                                                +1
                                                                                Сейчас это место занял js и питон
                                                                                  +1
                                                                                  Ну, очень хочет занять, но ещё никак не занял. Просто даже инфраструктурно, хостинга без РНР не найти, а с пайтоном — не так радужно.
                                                                                    0
                                                                                    Ну JS вообще не требует хостинга, а питон обычно разворачивают на локалке и сразу в бой, особенно для ботов и всего такого. В последнее время все чаще замечаю что новички начинают либо с фронта в виде JS, либо питона
                                                                                    +2
                                                                                    PHP очень сильно в новых редакциях ушел в сторону Java. Один класс-один файл и т.д. (PSR), так что он стал настолько далек от phyton как java от python. А одностраничные поделки на PHP в отрасли никому не нужны уже.
                                                                                      0
                                                                                      Поэтому одностраничные поделки делают на всяких реактах, либо делают простенькие программы на питоне. Если не ошибаюсь, все последние курсы для новичков также в основном на питоне
                                                                                    0
                                                                                    это по-прежнему так, или с новыми фреймворками и версиями самого языка всё усложнилось

                                                                                    Думаю, что он довольно средний, если считать уровень джуна, а не новичка, который может только hello world. Есть много популярных языков, к которых порог ниже, например Python или Ruby.
                                                                                    Кстати говоря, у JS этот порог вхождения до джуна обманчиво низкий. Наверное он один из самых высоких в IT.

                                                                                      0
                                                                                      Не к холивару. Давно заметил разделение рынка на 2 лагеря.
                                                                                      Те, кто начал с python/js уходят в js/python/ruby
                                                                                      Те кто начал с java/php уходят в php/java/kotlin/scala
                                                                                        0

                                                                                        Я ушел из python в ruby, из ruby в php.
                                                                                        Сейчас считаю php максимально комфортным и уходить из него не хочу. Это мой любимый язык.


                                                                                        Все современные языки в топе знаю кроме Swift, Kotlin, D, Rust и Haskel.

                                                                                          0
                                                                                          Вот, и правильно: работать надо с тем, с чем комфортно.
                                                                                          0
                                                                                          Если убрать PHP из второй группы, то у вас выходит что люди уходят в языки схожей же типизации, с каких и начинали.

                                                                                          А если просто посмотреть на вторую группу, то «начали писать бэкенды -> продолжают писать бэкенды».

                                                                                          В общем всё логично.
                                                                                            0
                                                                                            А зачем его оттуда убирать? Писать на современном PHP можно как с типами (в полях классов, аргументах функций), так и без, причем без типов — не рекомендуется, в Scala есть тип Any, в Java дженерики и автоматическая конвертация типов int в long. Вот Котлин — тот да, отличается самой строгой типизацией из перечисленных.
                                                                                            +3

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

                                                                                              +1
                                                                                              потом чутка php (книжку в буквальном смысле на помойке нашёл)
                                                                                              Очень символично))

                                                                                              сейчас постепенно ухожу в ещё большую наркоманию
                                                                                              Поделитесь
                                                                                                +2
                                                                                                Поделитесь

                                                                                                Idris, всякое такое.

                                                                                          +1
                                                                                          Если брать современные требования к PHP разработчику, то Java(7) в освоении будет проще. Java заставляет сразу всё делать правильно, прописывать каждую строку, каждый символ, каждый неймспейс, каждую скобочку, область видимости для каждой переменной, ну и т.д. Один файл — один класс, другое запрещено законом.
                                                                                          в PHP же можно накидать инструкций в файл и нажать F5, но рост будет так себе как профессионала, Java в этом плане заставляет соответствовать. Похожие стандарты в PHP прикатились с PSRами (или как они там называются).
                                                                                            +1
                                                                                            Один файл — один класс, другое запрещено законом.

                                                                                            Если можно, немножко позанудствую: в java нет запретов на несколько классов в одном файле. Единственное ограничение: не более одного класса верхнего уровня, видимого за пределами пакета.
                                                                                              0
                                                                                              inner классы это роскошь для многих языков, вот я их и не упомянул.
                                                                                                0
                                                                                                И на верхнем уровне можно определить больше одного класса, если они не public (к счастью никто так особо не делает).
                                                                                                  0
                                                                                                  современные IDE заколебут тебя с этим
                                                                                                    0
                                                                                                    Специально проверил: современные IDE молчат)
                                                                                                  0
                                                                                                  Вложенные статики по-моему заметных накладных расходов не добавляют.
                                                                                            0
                                                                                            вот-вот, я как начал читать статью даже попкорн приготовил, думал — ну щас начнется… а его «намеренно пропустили», тьфу едрить))
                                                                                              +1
                                                                                              5 лет назад про PHP говорили ровно то же самое. Видимо и через пять лет будут говорить то же.
                                                                                                0
                                                                                                С PHP как с Java — с года в год все кричат «PHP умирает», а он тем временем живее всех живых, и продолжает обрастать фреймворками, библиотеками, версиями самого языка.
                                                                                                Как и Delphi :) Постоянно кричат, что умирает, а я новости по компонентам, либам, фреймворкам и собственно самой среде с трудом успеваю читать.
                                                                                                +1
                                                                                                На чистом PHP как и JS мало кто пишет что-то большое, надо знать плюсом фреймворк, я работал c C++(AVR), C#(Unity), JS\PHP, щупал Python и Node.js, но придерживаюсь мнения что «каждому — свое»
                                                                                                PHP прекрасен для веб-бекенда, за 20+ лет выдумано куча решений, он хорошо поддерживается хостингами, серверами, просто разворачивается, хочешь написать что-то простое, быстро и без зависимостей. например простой бекенд для VR магазина, пожалуйста один исполняющий файл php +nosql/sql/file, и все. Хочешь Node, ок, но будь добр доставь 100500 зависимостей, и купи vps. Сколько раз с наскоку надо было решать быстро задачу на беке — PHP выручал. Для сложного есть отличные фреймворки Laravel или Symfony, и они спроектированны так что бы меньше говнокодить и имеют отличное комьюнити.
                                                                                                Меня поражают возможности Python(имхо очень перспективный), но синтаксис жесть, когда ты привык к скобкам то тебе просто переключаться между подобными языками, а с ним у меня пока тяжко идет.

                                                                                                В общем, я о чем, все языки круты чем-то своим. В статье самое главное раскрыто: каждому своя ниша, нужно выбирать язык исходя от задач, удобства, и своего будушего направления
                                                                                                0
                                                                                                [del]
                                                                                                  0

                                                                                                  Автор таким образом дал понять свое к нему отношение.

                                                                                                  +2

                                                                                                  а где ассемблер? с него по идее все началось.

                                                                                                    +8
                                                                                                    Если с него начинать, на нем можно и закончить(изучение разумеется)
                                                                                                      0
                                                                                                      хе мой путь: VB->assembler->c->c++->php->java->js->kotlin
                                                                                                        0

                                                                                                        да ладно? асм он разный, для 8080/51/86 вполне изучаем, за одно придет понимание как 0/1 бегают при различных операциях и почему.

                                                                                                          +2
                                                                                                          Ассемблер же прост, как пробка. Заодно даёт понимание того, как это всё внутри работает.
                                                                                                          Кстати, и Си после него совсем не кажется сложным.
                                                                                                            +2
                                                                                                            Да, после ассемблера С кажется даром божьим. Добавляет структуру в код ассемблера.
                                                                                                            А когда понимаешь эту идеологию перехода через getc и putc в IO операциях, то начинаешь писать свою ОСь :)
                                                                                                          +6
                                                                                                          Как написано в тексте, первым логично учить язык из числа наиболее востребованных сейчас — насколько могу судить, ассемблер в их число не входит.
                                                                                                            0
                                                                                                            В embedded очень даже востребовано знание разных видов ассемблера, когда речь идет об оптимизации используемого железа в попытке сэкономить 1-50% цены микроконтроллеров в масштабе от 1000 произведенных устройств. А так же перенос кода на новые платформы без кусков кода на ассемблере не обходится. Ну и разработка собственно самих процессоров требует для первоначальной отладки/портирования компиляторов очень много работы с асмом. В общем как только заканчиваются ресурсы или нужно освоить новую железку хороший программист С превращается в программиста на АСМе.
                                                                                                              +5
                                                                                                              Только в эмбеде зарплаты раза в 2 ниже, чем в JS, приличной работы — мало, развитие — только в случае смерти вышестояещего руководства, а порог вхождения — прилично выше. И надо железо любить и разбираться в нем.
                                                                                                              +2

                                                                                                              Писать на ассемблере, может, часто и не надо. Но вот читать ассемблер требуется часто.

                                                                                                                0
                                                                                                                Особенно когда дело доходит до реверс-инжиниринга или хотя бы до отладки чужих бинарников. И когда знатоки ООП/ФП/разнообразных парадигм не понимают, что такое call convention и вообще смотрят на IDA, как баран на новые ворота.
                                                                                                              +3
                                                                                                              Ассемблер мертв дважды, а то и трижды.
                                                                                                              Первый раз его убили переписав Unix на Си, что было неслыхано — писать ядро ОС не на ассемблере. Но цена труда программиста оказалось выше чем производительность.

                                                                                                              Второй раз ассемблер убили микроконтроллеры. Раньше все было просто и понятно — функционал просто не влазил в 64к памяти программ (или еще в меньший объем). Но даже AVR уже был оптимизирован под Си, а ARM уже даже не только под Си, но под операционные системы.

                                                                                                              Ну и последний бастион для Ассемблера, что я встречал — в Скайпе была команда пишущие ассемблерные вставки кодеков. Только Скайп разогревает телефон, когда FaceTime держит айфон холодным. Все потому что ассемблер не нужен. Битовыми числодробилками должен заниматься хардвер, а не софтвер на ассемблере.

                                                                                                              (лично я годами писал профессионально на нескольких ассемблерах. Умею но больше не хочу)
                                                                                                                +1
                                                                                                                Полноценная отладка для микроконтроллеров без знания их ассемблера — не возможна.
                                                                                                                  0

                                                                                                                  Интересно, что там можно в ассемблере отлаживать? Разве только посмотреть, как компитлятор оптимизировал твой код с C±±. По идее, следую правильным процессам и отладка то не нужна. Даже сложные алгоритмы все равно отлаживать в Си коде, а не ассемблере. Очень редко там что то, контекст переключить, тест Алу и конвейера сделать для диагностики ядра… больше даже предположить не могу...

                                                                                                                    0
                                                                                                                    Из-за оптимизации компиляции не всегда можно поставить брикпоинты в нужном месте кода C (а без оптимизации может не влезть в микроконтроллер). Да и ручная оптимизация С кода иногда очень важна (например програмная реализация последовательного интерфейса с максимально возможной скоростью).
                                                                                                                      0

                                                                                                                      Если брейкпоинт нельзя поставить, значит этот код компилятор выкинул и смотреть там нечего… в ассемблере этого кода тоже не будет.
                                                                                                                      А если вы шагает по ассемблеру, то рядом в исходниках на Си вам показывается, где вы находитесь…
                                                                                                                      Поэтому, я все ещё не пойму, что можно отлаживать в ассемблере для программы на Си? Ну оптимизировал он все и что? Как можно на ассемблер повлиять? Ради интереса, как оптимизация получилась, согласен, но практического смысла то ноль. От вас это не зависит, и можно его не смотреть, причем разные компиляторы по разному ещё сделают.


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

                                                                                                                        0
                                                                                                                        Зачастую компилятор оптимизирует все лучше любого гуру ассемблера.

                                                                                                                        Этот точно не про компилятор под msp430 (сейчас пишу под него).
                                                                                                                          0

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

                                                                                                                    +2
                                                                                                                    Битовыми числодробилками

                                                                                                                    а ассемблер этим и не занимается, для этого есть всякие << или >>
                                                                                                                    тут вопрос в скорости выполнения операции. Попробуйте FullHD RTP поток на Java посохранять на диск на основе какого либо RFC. Довольно утрированный пример, но после первой попытки сразу вспомните про C++ и «что пониже», где есть ручное управление памятью. Вот и для ассемблера попадаются такие задачи о сих пор.
                                                                                                                      0
                                                                                                                      Битовыми числодробилками должен заниматься хардвер, а не софтвер на ассемблере.

                                                                                                                      Только не всегда есть средства на производство этого кастомного хардвера (если вы о FPGA или ASIC'ах). Иногда дешевле добавить интринсиков или прямых ассемблерных вставок в ваш более высокоуровневый код на других языках.

                                                                                                                    0
                                                                                                                    Интересно, у кого-нибудь удалось воспроизвести ответ Google из первой картинки? У меня первой вылезает ссылка на даннную статью :D
                                                                                                                      0
                                                                                                                      Результатов: примерно 5 930 000 000 (0,36 сек.)

                                                                                                                      1. Какой язык программирования учить в 2020-м? / Блог… — Habr

                                                                                                                      Но на «какой язык учить в 2020» выдаёт выделенный ответ из другой статьи.
                                                                                                                        +3
                                                                                                                        Если хочется посмотреть на тот текст, из которого гугловский колдунщик извлёк список, то он вот.

                                                                                                                        Там что-то совсем странное: это по большей части осмысленный текст, где на Kotlin, HCL и Go обращают внимание в конце как на «самые быстрорастущие» языки (а не «самые популярные»), но при этом в начало текста вкорячена вот эта безумная конструкция про Самые Популярные Языки с теми же Kotlin, HCL и Go. В итоге текст противоречит сам себе.
                                                                                                                        +17

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


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


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


                                                                                                                        Если научиться писать код в языковых конструкциях языка Х, пусть он и самый востребованный, это просто пустая трата времени, если не вызывает интереса. А это довольно важный момент, потому что если человек последует гайду, но выберет язык/технологию от которой его воротит, а не что-то, что вы не считаете достойным для изучения по своим субъективным критериям, то он просто бросит.

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

                                                                                                                            Так или иначе человек будет использовать конкретный язык и делать конкретные задачи для изучения. Я ведь прямо об этом и упомянул, что "можно брать любой язык, который не вызывает отторжения и вызывает интерес", как раз для того, чтобы было желание делать что-то не абстрактное.


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

                                                                                                                              0
                                                                                                                              Новичок, строго говоря, вряд ли готов гарантировать, что вообще будет программировать. Изучить язык (до какого-то условного стартового уровня) кажется все-таки первично. Затем может последовать обучение программированию. А может не последовать.
                                                                                                                              0
                                                                                                                              Исходя из «Программу нужно запустить, посмотреть, повертеть в руках :) » я бы добавил, что для первого языка программирования очень важно наличие хороших инструментов отладки и сред разработки, которые бы работали с отладчиком из коробки. Близко к идеальном варианту, хоть и сильно ограниченно по удобству долгосрочного использования, всемозможноые онлайн инструменты вроде jsfiddle, onlinegdb и подобные.

                                                                                                                              P.S. Ищу подобный инструмент (с отладчиком) для Ruby.
                                                                                                                              0
                                                                                                                              Если научиться программировать — потом можно освоить любой другой язык довольно быстро
                                                                                                                              «Освоить» можно по-разному. Можно изучить синтаксис и весело говнокодить/формошлепить, а можно писать с понимаем, чтобы работало эффективно и надежно, и было потом не стыдно за этот код. В первом случае — да, во втором случае — увы, не все так просто.
                                                                                                                              На эту тему очень хорошо уже высказывались на Хабре,
                                                                                                                              Язык это не только синтаксис и системные библиотеки. Это и всё остальные существующие библиотеки, баги в них, баги в языке, баги в разных версиях, паттерны использования возможностей синтаксиса, так же это коммунити, история и принципы разработки языка, знания о том что происходит на уровень ниже, производительность и потребление памяти во всём вышеперечисленном, деплой/администрирование рантайма (vsespb)
                                                                                                                              Профессионал это когда знает тонкости языка а не когда скачет по всем языкам одновременно. Это новички обычно страдают «я пишу на всех языках» не понимая что писать в с-like стиле это не программирование. Иначе после таких вот «профессионалов» приходится разгребать wtf в коде. (polearnik)
                                                                                                                                +2

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


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


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

                                                                                                                                  0
                                                                                                                                  Я с Вами соглашусь, и еще добавлю. Вообще говоря, дисциплина Программирование
                                                                                                                                  как она есть не только не предполагает «знания» (слово-то какое) конкретного языка,
                                                                                                                                  но и, вообще говоря, наличия компьютера как предмета. Он, как и «язык», тут не
                                                                                                                                  при чем. Но говорить это в данном обсуждении как-то не очень уместно, поскольку
                                                                                                                                  так называемому «разработчику» важно побыстрее сложить из конкретных кубиков
                                                                                                                                  конкретную пирамидку или ее часть. Дык, в чем проблема? Все языки лучшие. Дело
                                                                                                                                  вкуса и привычек, имхо.
                                                                                                                                    0
                                                                                                                                    Тут проблема курицы и яйца. Научиться «мыслить в концепциях разработки программ в целом» невозможно без большого опыта в программировании, многочисленных наступаний на грабли в процессе разработки с нуля и поддержки уже работающего софта. И постоянного анализа, откуда взялись грабли, почему на них наступили, и как избежать таких проблем в будущем. На эту тему есть, конечно, полно книг, но мне кажется, что без собственного опыта разработки настоящего понимания не придет все равно.
                                                                                                                                  0

                                                                                                                                  Языки полезно изучать как минимум потому, что в каждом языке заложена своя парадигма и семантика. Это и приводит к изучению программирования на реальных примерах. Да, есть языки-комбайны вроде c++, но упор в этих языках всё равно на что-то одно, а другие парадигмы разрабатывались по принципу "чтобы было" и могут быть не столь развиты и не столь понятны для новичка, когда в другом языке парадигма X может быть в более удобной форме для понимания и программирования в целом, поскольку она является основополагающей этого языка.

                                                                                                                                  +1
                                                                                                                                  А упоминаний о языке мододелов — Lua…
                                                                                                                                  Вакансий на нём мало, зато можно видоизменять игры!
                                                                                                                                    0

                                                                                                                                    Ещё, некоторые на нем в AMS или AMB умудряются небольшие утилиты делать, при том довольно годные…
                                                                                                                                    Хотя, имхо, это не то, что стоит изучать в 2020 году. Да и в современных играх он не шибко часто используется, разве что в каких то казуальных.

                                                                                                                                    +4
                                                                                                                                    Всё это фигня. Нужно знать не один язык, а общую картину. Потому как айти сейчас развивается с такой скоростью, что раз в 5-10 лет всё меняется до неузнаваемости.

                                                                                                                                    Помнится, у меня в свое время была цепочка примерно такая: «pascal -> c++ -> delphi -> php -> javascript -> asm -> python, prolog, lisp, erlang, ruby, c#, haskell, perl, go». Разумеется, профессионально я использую от силы пару-тройку языков, еще пару на любительском уровне, на остальных вообще уже забыл как писать, и еще в очереди на изучение несколько штук.

                                                                                                                                    Так что, я думаю, нет никакой разницы, с чего начинать. Всё равно, при должном любопытстве, года за два-три в багажнике будет не менее десятка опробованных языков. А там уже будет понимание, в какую сторону стоит углубляться. Можно начать с самых популярных, тут уже в зависимости от того, ищешь ли работу с первого дня или для души изучаешь :)
                                                                                                                                      +7
                                                                                                                                      Помнится, у меня в свое время была цепочка примерно такая: «pascal -> c++ -> delphi -> php -> javascript -> asm -> python, prolog, lisp, erlang, ruby, c#, haskell, perl, go».

                                                                                                                                      Честно говоря, половина из языков в этой цепочке таковы, что вы могли бы успешно сидеть на них лет 15 или 20, не меняя стека, будь у вас такое желание.
                                                                                                                                        +3
                                                                                                                                        Это уже потом. А новичку следует посмотреть и пощупать всё, до чего он только может дотянуться. Это как проработать всю жизнь каким-нибудь шахтером или поваром, даже не подозревая, что есть и другие профессии. Да, будешь очень вкусно готовить, но кто знает, может есть более подходящее занятие? Которое никогда не найдешь, потому что бросил поиски в самом начале пути.

                                                                                                                                        Ну и в принципе кругозор важен. Бекендеру поможет знание, что происходит на фронте. Фронтендеру — что там на беке и в бд. Им обоим будут полезны низкоуровневые знания и наоборот — железячнику не помешает знание более высоких уровней абстракций.
                                                                                                                                          +2
                                                                                                                                          Честно говоря, половина из языков в этой цепочке таковы, что вы могли бы успешно сидеть на них лет 15 или 20, не меняя стека, будь у вас такое желание
                                                                                                                                          Всё так. Моя цепочка Basic/Assembler/Pascal > Слегка Форт > Borland Pascal for Win > Delphi. На последней уже почти 20 лет, и как-то не исписался :) Интересные задачи, интересное применение (медицина, вот как раз в том числе с Ковидом 'воюем'), всё получается, всем доволен и буду дальше работать.
                                                                                                                                          И, да, я работаю на себя, поэтому мне шашечки из букета языков не нужны вовсе, ехать нужно. Едется отлично и в своё удовольствие.
                                                                                                                                          У нас уже и веб освоили. Наконец :)
                                                                                                                                        0

                                                                                                                                        Не стоит ставить на один язык)

                                                                                                                                          +2
                                                                                                                                          Fortran — а где Фортран? Реально найти позицию в разработке, хотя и не в «айти». Разработка, но не игрушечек, смартфончиков и скриптиков, а железяк. Все большие железки от полуметра и крупнее: Машинки, танчики, самолетики, корабли, нефтеплатформы, мосты, большие дома, заводы и ракеты. Инженерные расчеты остаются в большой степени на нем. Ну не считая химии и много чего другого. В науке — астрономы и физики его все еще особенно любят. Ну и начать программировать на нем очень легко. Он почти как Бейсик или Python, хотя не очень далек и от C. Процедурное программирование естественно ОО — тоже можно. Параллельное: coarrays, OpenMP, MPI. Минимальный бойлерплэйт. Выучив Фортран легко двигаться как в сторону интерпретируемых языков, так и в сторону C.
                                                                                                                                            +1
                                                                                                                                            Ну, в число наиболее популярных он явно не входит (вбил сейчас «Fortran» в поиск HeadHunter по Москве, нашлось 5 вакансий с его упоминанием против 2233 у «JavaScript»), поэтому в посте и нет. Но спасибо за комментарий, он как раз хорошо дополняет.
                                                                                                                                              0
                                                                                                                                              Это разные «Jobs» бывают. Вот в качестве (наполовину-) шутки — по количеству «jobs» Fortran сильно опережает все остальное: www.archer.ac.uk/status/codes (кластер Archer).

                                                                                                                                              Ну а на linked.in, indeed.com, dice.com, куча предложений по слову Fortran. Но это конечно не в России. И это не совсем «IT»: Computation scientist, CDF engineer, Mechanical engineer, Aerodynamics engineer, Modeling and simulation engineer, Radar modeling analyst, propulsion engineer, GNC engineer, Meteocean modeler, Oceanographer и т.д. на любой вкус. Вплоть до Electronic warfare.

                                                                                                                                                +2
                                                                                                                                                Как я понимаю, от всех этих engineer'ов требуется в первую очередь знание предметной области, а не фортрана
                                                                                                                                                  0
                                                                                                                                                  Точно! Это и есть главный вопрос — зачем, с какой целью, в какой предметной области собираетесь программировать. «Какой язык учить?» полностью определяется целью. Если «просто попрограммировать» для общего понимания на досуге, то что-то простое, хоть Python хоть Scratch, или тот же Бейсик. Если нужно считать Fortran/Matlab/PythonC/C++, Если предметная область статистика и data analysis: R, или даже SAS/Stata (если нужно). Если ML, NN: Julia/Python. Если веб, то тут лучше меня посоветуют спецы :) Я вообще сомневаюсь, что бывает просто программирование в отрыве от предметной области. Разве что чистая computer science. Но это совершенно отдельная вещь.
                                                                                                                                                    0
                                                                                                                                                    Я, скорее, про то, что удельный вес умения программировать в наборе скиллов mechanical engineer'а и веб-разработчика будет очень разным. Как раз потому, что у первых предметная область сильно сложнее, чем у вторых.
                                                                                                                                              +1
                                                                                                                                              Ну в перечисленных сферах фортран активно вытесняется C/C++ тот же LAMMPS в предыдущие годы полностью с него соскочил, не в последнюю очередь благодаря GPU, на фортране вы имеете чистый CUDA, OpenACC, OpenMP и ноль библиотек по типу Trust, ArayFire, Kokkos, Raja и т.д. Я бы сказал, что фортран в этих сферах жив только благодаря BLAS, LAPACK. По производительности, я не видел чтобы он выигрывал у того же C или C++ в HPC, максимум на том же уровне.
                                                                                                                                              Да он очень простой в изучении, но если нужно, что-то отличное от перечисленных библиотек или простых задач, готовьтесь писать все самостоятельно, boost нет, как и много другого, не говоря уже о Python, JavaScript и их количества библиотек, на все случаи жизни.

                                                                                                                                              Поэтому я бы не рекомендовал фортран к изучению как первый язык, его всегда можно будет выучить прицепом за неделю максимум.
                                                                                                                                              А вот отучиться писать свои велосипеды, когда этого можно (и даже нужно) не делать будет очень сложно.
                                                                                                                                              Как говорил Дейкстра: «Писать на фортране можно на любом языке.» P.S.: он о нем не очень лестно отзывался.
                                                                                                                                                0
                                                                                                                                                Полностью согласен и полностью несогласен. Главный вопрос, очевидно, зачем учиться программировать. Если цель — разработка ПО, то вне всяких сомнений — учите «хорошие» языки C/C++ и т.п… Если же нужно что-то быстро посчитать в пределах своей предметной области, то часто лучший выбор это именно Фортран. Студента с нуля можно научить азам программирования на Фортране за неделю с нуля. Для многих C++ слишком сложен. В C++ даже для «профессионального разработчика» туча сложностей и неочевидностей (на Хабре была статья о множестве методов инициализации переменной, инициализации — переменной), плюс разного рода старые конструкции (которые часто гуглятся в первую очередь). Фортран же прост как огурец.

                                                                                                                                                Велосипедостроение — неоспоримое зло. Но опять же, часто быстрее сделать свой велосипед, чем учить C++ и множество либ/API etc. Преимущество Фортрана — в нем есть почти все что нужно для расчетов. Я имею в виду, главным образом, работу с массивами. В C++ arrays практически нет, нужны либы. А ограниченность Фортрана — на самом деле благо, он почти никогда не позволяет выстрелить себе в ногу. Если важны элегантные «шашечки,» то однозначно не Фортран, если «просто ехать» (да, тяп-ляп и в расчеты) — то Фортран.

                                                                                                                                                Да, и еще одно преимущество Фортрана — самая жуткая древность почти всегда заработает. Можно взять пыльные перфокарты 60-х годов, и оно почти всегда скомпилируется и запустится. Даже если нет (редко что было исключено из языка, например `real` индекс цикла) — флаг компилятора вернет все обратно. Как тебе такое, Python?
                                                                                                                                                  +1
                                                                                                                                                  Так он прост как огурец именно потому, что это и не язык-то в общепринятом
                                                                                                                                                  смысле. Во всяком случае, изначально. Он был создан именно для того, чтобы
                                                                                                                                                  не думать о языке. Именно поэтому там были встроены, например, комплексные
                                                                                                                                                  числа. Да, их можно легко реализовать внешним образом, но это будет как раз
                                                                                                                                                  то, что заставит человека думать о языке, а это не должно мешать. Фортрана
                                                                                                                                                  давно бы не было, если бы не огромные библиотеки, написанные на нем, и
                                                                                                                                                  используемые во всей естественно-научной сфере. Включая такие организации,
                                                                                                                                                  как ЦЕРН, например. Или Дубну. Кто решится все это добро, проверенное и
                                                                                                                                                  используемое, с какого-то перепугу перекодировать во что-то другое? А потом 20
                                                                                                                                                  лет выковыривать ошибки и несостыковки. Зачем? Вот и живет. И стандарты
                                                                                                                                                  меняет время от времени. Я где-то видел 2018. Может, уже и новее есть?
                                                                                                                                                    0
                                                                                                                                                    Согласен, но сейчас для простеньких задач проще использовать python+numpy, если нужно выгрузить счёт на gpu добавляем loopy. Не знаю как в Москве и Санкт-Петербурге, но в Челябинске, например, физиков в 10-х годах учили фортрану, сейчас приходят студенты и на тех же специальностях о фортране уже не слышали, его полностью вытеснил Python, с его библиотеками, так как тут все в одном. Не нужно считать задачу на одном языке, а обработку и визуализацию производить в том же Matlab'е. Так же некоторые пакеты для специфических расчётов, тот же LAMMPS, могут собираться в виде библиотек встраиваемых в Python, что позволяет автоматизировать весь процесс.
                                                                                                                                                      0
                                                                                                                                                      Ну я не думаю, что python+numpy хорошо подойдет для новичка, это почти как два разных языка в одном флаконе. Для более продвинутого уровня в Фортране есть `ISO_C_BINDING`: можно линковать с C, вызывать из Python/R/Matlab и многого другого. Обработка данных и графика — в большинстве случаев отдельная работа с данными. Ее не обязательно делать там-же где данные генерируются. Новичок может делать ее хоть в GUI-пакетах вроде SPSS или Statistica, или даже в Экселе. В общем для новичка, у которого предметная область связана с вычислениями, простой Фортран вполне неплохой выбор в качестве первого языка. Julia и Python тоже.
                                                                                                                                                        0
                                                                                                                                                        Перечитайте своё сообщение и посчитайте сколько технологий и языков вы предлагаете изучить, чтобы иметь полноценное рабочее приложение для вычислений.
                                                                                                                                                        Согласен numpy, loopy, numba, это «диалекты» имеющий, в некоторых случаях, отличный от Python синтаксис, но это всё таки один язык, с одним подходом к документации и т.д.
                                                                                                                                                          0
                                                                                                                                                          Не, я не предлагаю новичку сразу учить все, что упомянуто в моем сообщении.
                                                                                                                                                          для новичка, у которого предметная область связана с вычислениями, простой Фортран вполне неплохой выбор в качестве первого языка.
                                                                                                                                                          Не поймите меня неправильно, я не предлагаю всем начинать с Фортрана. Можно и с Python'а и с Julia. Все зависит от цели и характера предметной области. Но я не думаю, что новичку в программировании начинать Python+numpy будет легко. Я исхожу из требований среднего студента в вакууме с нулевыми навыками написания программ, которому нужно быстро с ходу начать работать с кодом и делать свою MSc или PhD. У такого студента, не computer science, нет ни времени ни желания изучать сложные стеки и технологии. Но уже скорее всего есть минимальные навыки работы с цифрами в Экселе. На Фортране он сможет быстро начать генерировать данные, хоть на лаптопе (а чуть позже и на HPC системе) и сразу начать работать с ними в привычном Экселе (и тут же получить свои credits). Тот же студент может работать и с кусками готового (г****-)кода. И да, Фортран изучают (ок, я не в России). После Фортрана легко освоить любые другие языки (потом можно его и ненавидеть, нет проблем).

                                                                                                                                                          Статья-то вообще не о том, на чем лучше программировать или лучше считать, а о том, с какого языка начинать программировать с нуля. Фортран один из вариантов.
                                                                                                                                                  0
                                                                                                                                                  Также как и 30 лет назад Фортран остается нишей научных коллективов.
                                                                                                                                                  Причем если у нас его постепенно вытеснил Си, то в некоторых лабораториях Англии, Германии и Испании — Фортран живее всех живых.
                                                                                                                                                  0
                                                                                                                                                  Так какой же мне выучить, phillennium? Я так и не разобрался :)
                                                                                                                                                    +4
                                                                                                                                                    Ну с тобой-то как в старом анекдоте: ты можешь уже ничего не учить, «просто ходи туда-сюда, а мы смотреть будем, хлопать будем!»
                                                                                                                                                    +8
                                                                                                                                                    1С никто не предложил. Ну и правильно.
                                                                                                                                                      0

                                                                                                                                                      И ABAP никто не вспомнил, странно.

                                                                                                                                                        0
                                                                                                                                                        Интересно, а что бы посоветовали человеку, который сейчас занимается 1С, но уже стал понимать, что хочется чего-то другого, т.к. вроде и работаешь, даже с каждым разом что-то новое узнаешь, но по факту топчешься на месте, т.к. интересных задач нет, а годы-то идут.
                                                                                                                                                        +2

                                                                                                                                                        Едва ли можно использовать здесь эпитет "идеальный", но мне кажется максимально хороший выбор именно для первого языка прикладного (не системного) программирования сегодня — Python.
                                                                                                                                                        Достаточно прямой синтаксис, всякие интересные радости вроде рефлексии и декораторов, реально широкий набор библиотек: веб, графики, ML, всё на свете.
                                                                                                                                                        Всё это даёт шанс и научиться программировать (алгоритмы, структуры данных, вот это всё), и при этом с этими знаниями и тем же инструментом войти в отрасль, несколько сглаживая шок от того, насколько этот ваш Pascal далёк от того, за что сегодня в среднем платят деньги.
                                                                                                                                                        И вот с этим знанием уже можно более обоснованно выбирать, чем именно интересно заниматься дальше.

                                                                                                                                                          0
                                                                                                                                                          Недавно знакомый дизайнер расстроился, увидев статью «Какие языки программирования должен знать дизайнер?» (HTML и CSS, JavaScript, SQL, R, Python). Так что не только программисты сталкиваются со странностями на затронутую тему.
                                                                                                                                                            0

                                                                                                                                                            R? Дизайнеру? Какие там вообще были аргументы в его пользу?

                                                                                                                                                              0
                                                                                                                                                              Я ж оставил ссылку, можно глянуть при желании:
                                                                                                                                                              Так как язык тесно связан со статистикой и прикладным анализом данных, он может стать полезным инструментом для UX-аналитика.
                                                                                                                                                              В статье «должен» из заголовка превращается в «может пригодиться» в тексте, плюс на дизайнера взваливаются смежные обязанности, в итоге можно любой язык предложить.
                                                                                                                                                            +1
                                                                                                                                                            Мне кажется чтобы решить какой язык программирования учить, надо сначала решить чем хочется заниматься: фронтенд, бэкенд, десктоп, эмбеддед, геймдев и т.д. и т.п.

                                                                                                                                                            И если это решение принять, то и выбор, какие ЯП учить, как минимум очень сильно сузится.
                                                                                                                                                              +5
                                                                                                                                                              Это только если говорить про взрослого дядьку, который решил войти в айти и выбирает себе направление деятельности. Молодому падавану вопрос, что ему интереснее, фронтэнд, бэкэнд, эмбэд и так далее звучит примерно как вопрос «Что вам больше нравится, смузи, фалафель или манговый фреш?» для Агафьи Лыковой.
                                                                                                                                                                0
                                                                                                                                                                Ну на мой взгляд это даже для молодого падавана более понятно чем различия языков програмирования как таковых. То есть на мой взгляд даже молодой падаван разницу между фронтэндом и скажем эмбеддед хоть примерно, но понимает. А если он даже этого на понимает, то и языки программирования ему выбирать на мой взгляд рановато.
                                                                                                                                                                  +1
                                                                                                                                                                  Я даже не про то, что он не в состоянии узнать, какие есть направления в разработке, а про то, что он не в состоянии сказать, чем ему хочется заниматься. Пока сам не попробуешь, не поймёшь. А с большой вероятностью падаван залипнет надолго на том первом направлении, которое ему подвернулось.
                                                                                                                                                                  0

                                                                                                                                                                  Ну, не знаю. Я свой первый язык (pawn) в 2011 учил, потому что хотел свой SAMP сервер сделать. Лучше учить первым тот язык, который сразу пригодится. Так, мотивации, как минимум, больше будет.