На днях натолкнулся на Хабре на статью, в которой автор пытается навалять по морде одному очень популярному на сегодня языку программирования, именно навалять по морде, а не взвешенно раскритиковать. И не было бы этой статьи, если бы не два но: первое но — отвратительно низкое качество: статья по стилю оформления, аргументации и всему содержанию похожа на кликбейт, второе но — вокруг нее развернулась серьезная дискуссия, а сама статья вышла в топ, (видимо те кто ставил плюсы, хотят видеть больше наполненных болью и отчаянием статей). Но, давайте отсечем все лишнее: как и десяток лет назад, и десяток лет до того, мы вновь видим статью критикующую Инструмент с точки зрения абстракной правильности.
И так, вечер, пятница, какие языки вам сегодня кажутся наиболее совершенными, если бы вы разрабатывали свой, то чем бы он отличался от конкурентов, какие задачи решал лучше других, за счет чего победил в битве языков? Должны ли люди вообще программировать или это удел компьютеров?
Комментарии (21)
StanislavL
04.08.2017 17:42Как Вы выразились, в первую очередь язык это инструмент. Говорить, что отвертка правильнее молотка не совсем верно. Вопрос правильности вытекает из способа применения. Гвозди забивать правильнее молотком, а шурупы крутить отверткой. Это я к чему, единственно правильного нету. Есть некий набор.
А по теме о языках. Мне нравятся со строгой типизацией и широкими уровнями абстракции. Уровень языка отражает лаконичность. Как минимально понятно выразить на языке, что мы хотим от компьютера. Причем понятно в том числе и разработчику, который будет читать код.
Ниже уровень — код эффективнее можно написать, но за большее время. Выше уровень мы жертвуем эффективностью в пользу простоты и лаконичности конструкции.
Частично это VM оптимизациями решается, библиотеками с кучей настроек, но не все.
Желательно, чтобы язык уменьшал возможности выстрелить в ногу (отсюда вытекает любовь к строгой типизации) и увеличивал возможности в использовании разных стилей — ООП, процедурный, функциональный и т.д.
Из современных же я пожалуй за Kotlin. Но это вырастает из моего основного Java, поэтому вопрос спорный. Собственно чего и следовало ожидать от коммента.
zugo
04.08.2017 17:51И так, вечер, пятница, какие языки вам сегодня кажутся наиболее совершенными, если бы вы разрабатывали свой, то чем бы он отличался от конкурентов, какие задачи решал лучше других, за счет чего победил в битве языков? Должны ли люди вообще программировать или это удел компьютеров?
ИМХО, самый совершенный из императивных языков на сегодняший день — С#. Главным образом потому, что он действительно проектировался, осмысляя предыдущий опыт и ошибки конкурентов, и потому что авторы не стесняются брать идеи из других языков и даже из других парадигм. Да один только LINQ чего стоит — это же единственный адекватный способ работы с источниками данных. Мало того, что унифицированный, так еще и позволяет избежать контакта с такой ошибкой природы, как SQL.
Что до идеи о том, что «программирование должно быть уделом компьютеров» — отчасти соглашусь. В моем представлении «язык будущего» — это, прежде всего, некое декларативное средство для метапрограммирования и создания всевозможных DSL, позволяющееся абстрагироваться от технической реализации и сфокусироваться на задаче.yarric
04.08.2017 19:05+2И что в C# конкретно такого совершенного, кроме LINQ?
zugo
04.08.2017 22:30+1Например, элементы ФП, типа лямбд (ну ок, сейчас это везде есть) и паттерн-матчинга, удобный синтаксический сахар (вроде эвентов и встроенных геттеров/сеттеров), отличная стандартная библиотека.
Чисто субъективно, благодаря всему этому писать на нем приятнее, чем на той же Java.DarkEld3r
04.08.2017 23:43Не то чтобы я хочу ругать C#, но стандартная библиотека — это всё-таки больше "инфраструктура", а не часть языка, если мы говорим о "фичах".
Опять же, Java весьма консервативная и сравнение с ней не особо показательно.zugo
05.08.2017 00:10Редко когда имеет смысл говорить о языке без его инфраструктуры. Мы же не на голых синтаксических конструкциях пишем, в конце концов.
С# и Java выступают в одной «весовой категории» и применяются для решения схожих задач, да и синтаксически имеют много общего, почему бы и не сравнивать?DarkEld3r
05.08.2017 00:19Дык, речь шла о "совершенстве". Мне кажется, что даже больший интерес представляет сравнение со всякими "маргинальными" языками. Да, их редко имеет смысл всерьёз рассматривать в плане выбора на чём начинать проект, но если ограничиться махровым мейнстримом, то выбор резко сужается и говорить-то особо не о чем.
yarric
05.08.2017 10:41Если вспоминать библиотеки, то в Java иновационных библиотек типа Spring гораздо больше так-то.
yarric
05.08.2017 10:38Лямбды и паттерн-матчинг там далеко не сразу появились, уже после их вхождения в мейнстрим. Изначально там были всякие странные сущности типа делегатов.
BaRoN
05.08.2017 15:31Единственное не написали. Совершенный там async await. Остальное хорошее, но не лучше, чем у других.
Alozar
04.08.2017 19:28+1Простите конечно, но чем вам не нравится SQL?
zugo
04.08.2017 22:42-2На мой взгляд, отдельный тюринг-полный язык для манипуляций с хранилищем данных — это абсурд. Да еще и с крайне своеобразным синтаксисом, да еще и с кучей реализаций, ни одна из которых не соответствует стандарту.
На истину, впрочем, не претендую, будет интересно почитать, если кто-то объяснит, почему без SQL жить было бы ну никак нельзя.
Zakyann
05.08.2017 06:12В будущем может быть да. Пока что имеем почти ежемесячный выход новых JS фреймворков и массовую попытку хомячков за этим всем 'счастьем' угнаться. Как говорится — что-то в королевстве не так.
MadJackal
04.08.2017 17:57Ну, когда меня учили программировать, то учили, что выбор языка определяется потребностями задачи и особенностями ее реализации, включая железо, сроки, платформы и так далее. То есть правильный язык тот, который позволит решить задачу с необходимым качеством в заданные сроки и с минимальным расходом человеческих и прочих ресурсов. В том числе и в связи с последним — выбор языка сугубо персональное дело.
dom1n1k
04.08.2017 20:17Мне кажется, что сегодня при выборе инструментов задача играет где-то третью роль :)
А первые две — распространенность на рынке (откуда вытекают цена и взаимозаменяемость рабочей силы) и зрелость экосистемы.
TimTowdy
05.08.2017 16:14Этот, на первый взгляд правильный и довольно очевидный подход, практически не работает во многих сферах разработки. Это районе девяностых-нулевых были задачи «сделать сайт/приложение под ключ». Сейчас же у многих задач нет попросту конечной точки. Вы создаете некий проект, постоянно развиваете его, поддерживаете, а в какой-то момент возможно даже сделаете pivot. Каков будет жизненный цикл проекта заранее неизвестно. И оценка «решить за время Х с качеством У имея ресурсы Z» становится просто невозможной, потому что все три переменные постоянно непредсказуемо изменяются. Это кстати и послужило толчком к развитию гибких методологий разработки (дальнейший хайп и карго-культ вокруг них не будем обсуждать).
MadJackal
06.08.2017 16:02В целом, наверное, соглашусь, особенно для разработки ПО как области в целом. Хотя почему проблемы оценки "X-Y-Z", которые, по моему опыту, напрочь отсутствовали в девяностых внезапно проявились 21 веке — это отдельный интересный вопрос… "Но не для здесь", всё таки, наверное.
nikitasius
04.08.2017 20:57-2И так, вечер, пятница, какие языки вам сегодня кажутся наиболее совершенными
Мне нравится акцент той блондинки, которая с драконами. Совершенный, слов нет.
Suvitruf
Вы открыли ящик Пандоры.