Доброго времени суток %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). Давайте снова продвигать идею того, что нужно учить разные языки, а не зацикливаться на одном. Это приведет к взаимопониманию и всеобщему развитию.
Автор: AndreyRubankov