КДПВ

Доброго времени суток %username%,
Давай поговорим про языки программирования.

Давай раз и на всегда выясним какой из них лучше?

Так какой язык лучше? Ответ прост: Никакой!

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

Еще лет 5, а может и 10, назад были призывы к тому, чтобы разработчики не засиживались на одном конкретном языке, а пробовали все новые и новые языки и подходы. Чтобы не окостенеть мозгами и стать «рабом» конкретного языка/технологии, нужно изучать новое. Таков был совет тех дней.

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

Golang


Появились Гоферы, которые считают, что в их языке есть какие-то действительно новые и революционные вещи. Корутины в этом языке даже по-особому назвали: Горутины. И постоянно почему-то меряются длинной gc паузы с Java. Ребят вы серьезно?

Go – это отличный язык, но в нем из принципиально нового только две вещи: «должно быть как можно меньше ключевых слов» и «строгий кодстайл кода из коробки». Это действительно невероятно крутые идеи! Остальное – это маркетинг.

Горутины? В java это было еще в первых версиях, но ребята пошли дальше и все же заменили на «железные потоки».

В Java используют Runnable/Callable/ФоркДжоин таски, которые можно создавать тысячами и закидывать в Тредпулы/ФоркДжоин пулы, а общаться через Shared Queue, в результате получается практически тот же эффект, который называют горутинами и каналами.

Да, в Go это выглядит более изящно, но это не что-то принципиально новое. За короткими GC паузами же скрыты другие проблемы. В Go не был изобретен принципиально новый GC, там используется «стандартный» GC с поколениями со всеми вытекающими.

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

C# или 1000 и 1 фича


C# очень крутой язык, и типизация есть и встроенный sql для запросов к коллекциям и не только, и паттерн-матчинг, и кортежи вот хотят ввести (или уже?).

Круто! Язык на столько выразительный, что одну и ту же вещь можно сделать минимум 5 разными способами. И он развивается в отличии от Java (классический вброс в сторону Java).

Но подождите, в C# уже наверно пару сотен фич и при этом язык и дальше пытаются наполнять новыми языковыми фичами, упуская из виду тот факт, что чем больше фич в языке, тем сложнее этот язык изучить начинающим специалистам.

Сейчас C# и .NET платформа живут за счет распространенности Windows, которая, к слову, падает с каждым годом. А интенсивный приток новых девелоперов идет за счет Unity3D движка, который позволяет делать игры (мечта каждого!, наверно) и за счет .NET Core, который обещает быть как Java, только лучше!

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

Java и Spring головного мозга


Java это не только ценный мех язык, но и самая распространенная платформа (jvm) под которую пишут на десятке языков. Практически все недостатки, которые приписывают Java, обычно относятся к старым версиям JVM или к старым JavaEE с их xml программированием.
Сейчас в Java (JVM) очень многое изменилось и это одна из самых быстрых платформ с умеренным аппетитом по ресурсам.

Но сейчас не об этом.

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

Но у Java, как платформы есть 2 огромных недостатка:

1. Огромное количество легаси кода (и индусы)
2. Spring головного мозга.

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

То со вторым нужно бороться. Spring – это замечательный фреймворк, который позволяет очень быстро сделать проект. Действительно невероятно быстро. В нем сейчас есть интеграция со всем, с чем только можно. Но к сожалению, есть огромное количество разработчиков, которые знают только Spring и толком ничего больше не знают. Эдакие Sinior Spring Developer. Они действительно круто все сделают на спринге, но к сожалению многие из них не могут мыслить за приделами спринга. И это очень печальный факт.

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

Javascript


Это один из самых популярных языков на данный момент, этот язык развивается на столько быстро, что проект, который начался с самой модной технологией к моменту сдачи становится «легаси».

Маркетинг этого языка гласит: Все должно быть написано/переписано на JS. Даже невзирая на то, что JS комьюнити вечно разделено на десяток лагерей, все они считают, что во главе IT должен стоять JS.

Я согласен с JS комьюнити, у них отличная идея! В свое время Java шла по тому же пути.
Но есть один огромный недостаток – в JS мире царит Анархия и Хаос. Разработчики из года в год переписывают один и тот же проект на «модный в этом году» фреймворк. В большинстве случаев, даже не успевают изучить все возможности фреймворка, как его уже нужно выкидывать.

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

JS комьюнити было бы полезно поучиться постулатам Python, в частности про то, что все должно быть явным. Еще было бы не плохо еще перенять опыт ребят из Ruby on Rails, которые с каждым новым релизом вбивают все больше гвоздей в гроб своего фреймворка (скоро этот гроб станет Железной Девой для RoR разработчиков).

Отдельно стоит отметить, что JS комьюнити бы не плохо взглянуть и на путь Java с его строгим следованием «обратной совместимости», т.к. проект не должен ломаться из-за того, что какая-то зависимость изменила версию с 4.0.2 -> 4.0.3, что бывает довольно часто.

Чтобы на JS можно было писать вообще все, нужно чтобы в JS появилось понятие скучной и унылой стабильности!

В завершении хотелось бы сказать: В каждом языке, в каждой технологии есть свои плюсы и минусы. Ребят, «Давайте жить дружно!» (с) и учиться друг у друга. Нет нужды кидать друг в друга /отходами жизнедеятельности человека/ и меряться латенси (ну или throughput). Давайте снова продвигать идею того, что нужно учить разные языки, а не зацикливаться на одном. Это приведет к взаимопониманию и всеобщему развитию.
Поделиться с друзьями
-->

Комментарии (12)


  1. DrPass
    06.08.2017 18:18
    +4

    См. первоисточник.

    Глупая свинья, — сказали сверху. — Я спраши-
    ваю, какой лучший язык программирования?
    — Ас-ас-ас-ас-ас-ассемблер, — сказал Пятачок,
    дрожа так, что прогнившие внутренности желудя трепыха-
    лись и издавали зловоние.
    — Это понятно, — сказал страшный голос. — Я про
    структурные спрашиваю… НУ? Говори быстро, а то съем…
    — Па-па-па-па-па..., — от страха поросенок не
    мог выговорить не слова. Он вспомнил (из объяснения Пу-
    ха), что лучший язык на свете — конечно же, Паскаль.
    — Понятно, — подытожили сверху. — Умный поросе-
    нок.

    Все остальные суждения про языки надуманы.


  1. JekaMas
    06.08.2017 18:24
    +2

    Вот никогда не слышал от разработчиков на golang(тут хорошо бы увидеть от вас что-то подтверждающее первоначальное высказывание), что в языке какие-то «новые фичи», но часто слышал, что есть необходимый набор ортогональных фич, хорошо проверенных временем:
    csp — сто лет в обед
    простота кода — привет наследию Вирта, pascal, oberon, active oberon, modula 1-2
    обратная совместимость, отсутствие «ломающих» изменений — нечастое явление, но тоже встречается

    Уверен, что и народу из js, java, c# тоже будет что сказать, про неточности в статье.

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


  1. izzholtik
    06.08.2017 18:37

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


  1. MrGobus
    06.08.2017 19:13

    О боже, еще один достиг просветления.
    Что-то уровень статей на хабре последнии дни словно биткоин скатывается в холивары на тему у кого «длиннее». (см. JavaScript вирус мозга и т.п.)
    Проверка временем в golang =) ЛОЛлллллл…
    Обратная совместимость в JavaScript на npm =) В библиотеках написанных комьюнити на коленке бесплатно? Не являющимися официальной частью языка? Как вы это себе представляете? Как такое вообще можно сравнивать с официальными SDK? И наконец, если в Java такая уж обратная совместимость, то почему android приложения не запускаются под windows без эмулятора?


  1. sidny_vicious
    06.08.2017 19:17

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


  1. yarric
    06.08.2017 19:20
    -3

    А рецепт прост: хочешь программировать под macOS или iOS — бери Swift и/или C++, хочешь программировать под всё остальное — бери C++ с Qt. Хочешь писать системы управления учётом поставок туалетной бумаги — бери Java или C#.


    Кстати про


    Go… строгий кодстайл кода из коробки

    Fixed format ещё в Fortran изначально был, в 50-х. Потом от него избавились, а теперь Google пытается продать это как фичу своего Go.


    1. aamonster
      06.08.2017 21:34

      (мрачно) Вам, видимо, не довелось писать на том Фортране. Это был не навязанный codestyle (когда достаточно прогнать автоформатирование), а бесячие технические ограничения, оставшиеся со времён перфокарт.


      1. izzholtik
        06.08.2017 22:34

        например?
        не могу придумать ничего, кроме, наверное, длины строки / объёма файла


        1. DrPass
          06.08.2017 23:01

          не могу придумать ничего, кроме, наверное, длины строки / объёма файла

          Мне приходилось сталкиваться с RPG. Это тоже язык тех времен и тех компьютеров. Сталкивался относительно недавно, лет 10 назад. В нём, например, объявления переменных и операторы нужно было писать в определённых колонках. Ну т.е. для синтаксического анализатора играло роль количество пробелов, которые можно было поставить в начале строки. Старожилы говорили, что благодаря этому его действительно легко было читать с перфокарт.


        1. aamonster
          06.08.2017 23:26

          Почитайте про фиксированный формат Фортрана хоть в вики — https://ru.m.wikipedia.org/wiki/Фортран#.D0.A4.D0.BE.D1.80.D0.BC.D0.B0.D1.82_.D0.B7.D0.B0.D0.BF.D0.B8.D1.81.D0.B8_.D0.BA.D0.BE.D0.B4.D0.B0
          Не смертельно, но неприятно. Я уже даже не помню, можно ли было писать код лесенкой (и писали ли мы так), но метки и символы продолжения строки всё равно портят форматирование.


          Позже, правда, от этого отказались.


      1. yarric
        06.08.2017 22:40

        А у гугла это теперь не баг, а фича. Кстати я тех времён хоть и не застал, но с языками типа FORTRAN немного знаком — самое нервирующее было то, что компилятор не сообщал об этом понятным образом.


  1. runapa
    06.08.2017 19:26

    Еще про русский язык забыли! И про холивары на тему правописания.