Доброго времени суток %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 это не только
Сейчас в 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)
JekaMas
06.08.2017 18:24+2Вот никогда не слышал от разработчиков на golang(тут хорошо бы увидеть от вас что-то подтверждающее первоначальное высказывание), что в языке какие-то «новые фичи», но часто слышал, что есть необходимый набор ортогональных фич, хорошо проверенных временем:
csp — сто лет в обед
простота кода — привет наследию Вирта, pascal, oberon, active oberon, modula 1-2
обратная совместимость, отсутствие «ломающих» изменений — нечастое явление, но тоже встречается
Уверен, что и народу из js, java, c# тоже будет что сказать, про неточности в статье.
Думаю, что статью стоило все же сделать в более обоснованных высказываниях.
izzholtik
06.08.2017 18:37Вообще, выглядит так, будто мир захватывают узкоспециализированные языки, а ЯП общего назначения отмирают.
MrGobus
06.08.2017 19:13О боже, еще один достиг просветления.
Что-то уровень статей на хабре последнии дни словно биткоин скатывается в холивары на тему у кого «длиннее». (см. JavaScript вирус мозга и т.п.)
Проверка временем в golang =) ЛОЛлллллл…
Обратная совместимость в JavaScript на npm =) В библиотеках написанных комьюнити на коленке бесплатно? Не являющимися официальной частью языка? Как вы это себе представляете? Как такое вообще можно сравнивать с официальными SDK? И наконец, если в Java такая уж обратная совместимость, то почему android приложения не запускаются под windows без эмулятора?
sidny_vicious
06.08.2017 19:17Не знаю про остальные языки, но, я считаю, что фичи в C# не будут особо отпугивать начинающих разработчиков. Просто со временем новые фичи вытеснят старые и только, а новые программисты будут решать старые задачи новыми средствами.
yarric
06.08.2017 19:20-3А рецепт прост: хочешь программировать под macOS или iOS — бери Swift и/или C++, хочешь программировать под всё остальное — бери C++ с Qt. Хочешь писать системы управления учётом поставок туалетной бумаги — бери Java или C#.
Кстати про
Go… строгий кодстайл кода из коробки
Fixed format ещё в Fortran изначально был, в 50-х. Потом от него избавились, а теперь Google пытается продать это как фичу своего Go.
aamonster
06.08.2017 21:34(мрачно) Вам, видимо, не довелось писать на том Фортране. Это был не навязанный codestyle (когда достаточно прогнать автоформатирование), а бесячие технические ограничения, оставшиеся со времён перфокарт.
izzholtik
06.08.2017 22:34например?
не могу придумать ничего, кроме, наверное, длины строки / объёма файлаDrPass
06.08.2017 23:01не могу придумать ничего, кроме, наверное, длины строки / объёма файла
Мне приходилось сталкиваться с RPG. Это тоже язык тех времен и тех компьютеров. Сталкивался относительно недавно, лет 10 назад. В нём, например, объявления переменных и операторы нужно было писать в определённых колонках. Ну т.е. для синтаксического анализатора играло роль количество пробелов, которые можно было поставить в начале строки. Старожилы говорили, что благодаря этому его действительно легко было читать с перфокарт.
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
Не смертельно, но неприятно. Я уже даже не помню, можно ли было писать код лесенкой (и писали ли мы так), но метки и символы продолжения строки всё равно портят форматирование.
Позже, правда, от этого отказались.
yarric
06.08.2017 22:40А у гугла это теперь не баг, а фича. Кстати я тех времён хоть и не застал, но с языками типа FORTRAN немного знаком — самое нервирующее было то, что компилятор не сообщал об этом понятным образом.
DrPass
См. первоисточник.
Все остальные суждения про языки надуманы.