На рынке есть десятки популярных ЯПов, и сеть набита статьями для новичков: какой язык выбрать? Мы решили сделать подборку статей с субъективным обзором языков для профессионалов, которые ищут, в какую сторону можно расширить свой кругозор.
Первую статью цикла мы посвящаем языку C#.
Шарпы — популярны.
Все плюсы и минусы технологии вытекают из этого факта. Огромное сообщество, тысячи библиотек на все случаи жизни, превосходный туллинг — всё есть. Когда приходишь в дотнет, у тебя нет никаких проблем. Есть Visual Studio и Rider — сверхсовременные IDE, которые сами умеют создавать все основные шаблоны проектов, скачивать все необходимое, чтобы они заработали, и собирать их по нажатию кнопочки.
Туллинг по-настоящему взрослый. Линтеры делались долго и вдумчиво, компилятор набит фичами под завязку и покрывает даже самые неочевидные сценарии сборки.
Очевидные вещи здесь делаются очевидным образом, а на все популярные проблемы есть популярные решения. Есть миллионы вопросов и ответов на стековерфлоу. Если ты не можешь сделать что-то именно в дотнете, тебя скорее всего забанили в гугле. Очень легко найти себе знакомых дотнетчиков, которые будут помогать со сложными особенностями платформы. Написаны тысячи книг.
Процесс изучения отлажен годами, все знают что читать, как делать, у кого спрашивать. При этом сама платформа не суперсложная. Крепкий мидл на другом языке уже через пару дней сможет писать сносный код на C#, пока дело не коснется многопотчки, работы с памятью или оптимизаций.
C# — мощный язык с кучей возможностей.
Корная либа достаточно богатая — из коробки ты в дотнете получаешь тысячи утилит, структур данных, и всяких таких вещей. Решать стандартные задачи здесь действительно легко — все есть, обо всем подумали за тебя. Хороший интероп с плюсами докидывает сверху кучу плюсовых либ, обернутых в дотнетные — на случай, если тебя заставят молотить байты в каком-нибудь софте, свазанном с видео или звуком.
Язык достаточно современный, все самые популярные фичи на рынке в нем или есть, или планируются. Синтаксис полегче чем в Java, потяжелей чем в совсем современных языках вроде Котлина. Шапрпповый код при компиляции превращается в промежуточный язык, который выполняется JIT-компилятором на клиентской машине — в этом есть свои преимущества, но такой принцип работы не оставляет шансов писать настолько же быстрый код, как на плюсах или голанге. Но C# все ещё достаточно быстрый в своей категории. Если просто сесть и писать незамудренный код, очень долго не будешь упираться в какие-то неожиданные проблемы в производительности самого языка.
Язык не супер быстрый — но есть огромное пространство для оптимизаций. Структуры — чтобы хранить данные на стеке, АПИ сборщика мусора, чтобы оптимизировать его работу в конкретных кейсах, есть unsafe — чтобы поработать с указателями и оптимизировать какой-то ботлнек. Богатые инструменты для параллелизма. Есть интрисики, для оптимизаций под конкретные процессоры. Короче, если заморачиваться — скорость работы можно прокачать на раз.
В C# мощная поддержка ООП — тут любой код лежит в классах, полный суппорт наследования, а теперь и множественного наследования через дефолтную реализацию интерфейсов. Куча различных модификаторов доступа, возможность разделять ответственность модулей на уровне сборок. Типизация строгая статическая — всё что можно тайпчекается на этапе компиляции, всё что нельзя — метаинфа о типах едет в рантайм, и может быть прочекана там. Сам дизайн языка как будто специально сделан так, чтобы фигачить архитектуру по Бобу и Фаулеру. В C# очень легко объяснить компилятору, какие части системы делают это, а какие то, и кто из них о ком знает.
Гораздо меньше шарпы поддерживают функциональную парадигму. Но и здесь есть четкое движение вперед. Недавно завезли слегка кастрированный паттерн-матчинг, есть таплы и почти есть рекорды. Давно есть лямбда выражения. Самый распространненый в дотнете способ работы с коллекциями — LINQ выражения — выполнен полностью в функциональном стиле.
Но основную проблему языка это только усугубляет. Для современного ЯПа C# слишком многословный. Они завозят новые функциональные фичи, но огромное количество необходимых синтаксических надстроек не позволит их использовать так же изящно, как в каком-нибудь OCaml. Тут чем дальше, тем хуже. Страшный груз обратной совместимости легко разруливается создателями языка на техническом уровне, но всегда выливается в ещё одно утяжеление синтаксиса. Мне немного стыдно, когда я вижу код минимально рабочей программы на C# — язык буквально отказывается освобождать меня от написания очевидного.
Дотнет — для ентерпрайза.
Если ты решил прийти, чтобы изобретать новые подходы — тебе тоже не сюда. В дотнете на все есть практики, и все им следуют. Даже скобочки тут придётся форматировать именно так, как принято. Это даже не минус — так со всеми взрослыми языками, и от этого никуда не уйдешь. Самое дурацкое — очень легко стать шарповой боевой единицей, но момент, когда ты точно понимаешь, как работает твой код — наступит оооочень не скоро. В платформе, принципах её работы — масса нюансов, которые по щелчку не выучатся.
Дотнет объективно хорош тем, что на нем можно делать почти все. Бекенды, десктопы, мобильные приложения, сервисы, машинное обучение, ботов. Но это дома можно. Работу ты все равно найдешь только бекендером — других вакансий тупо не бывает.
Что касается рыночных мотивов — тут все просто. В СНГ неплохой рынок на дотнет, зп именно что средние, работенка непыльная. Если хорошо знаешь английский — тогда все круто меняется. В мире много мест, где за дотнетчиков платят полновесным золотом — в том числе и за удаленных. Беда тут одна — культура собесов в дотнете — настоящая жопа. Тут принято мучить кандидатов десятками вопросов на знание деталей платформы, которыми никто не пользуется -их придется именно что учить. Добавьте к этому стандартную дрочь на бекендерском собесе, и получите эталонное шарповое интервью. Тяжелое, и непроходимое без подготовки для спецов любого уровня.
В целом мой вывод такой: если в плане карьеры, то дотнет — это для людей, которые хотят найти свой энтерпрайз, и долго, методично и планомерно развиваться в одном узком направлении, которое гарантирует стабильный рост уровня жизни. Если хочешь менять индустрию своими идеями и библиотеками, скакать с одной работы на другую, или просто поменьше учить и работать — тебе не сюда.
А если в плане поэкспериментировать дома — самое то. Ничего не надо изучать и настраивать, скачал IDE, написал мобильное приложение, веб-приложение, ML модуль. Быстро и просто.
На правах рекламы
Подыскиваете сервер для разработки и размещения или VDS для отладки проектов? Вы наш клиент! Посуточная тарификация виртуальных серверов самых различных конфигураций, антиDDoS и лицензии Windows уже включены в стоимость. Поспешите попробовать!