January 21, 2019

Почему C# - лучший первый язык!

Конечно, многие поспорят с этим утверждением, но я попробую переубедить вас в обратном.

1) Типизация

Типизация - один из важнейших факторов как для первого языка, так и для второго, а иногда и для третьего. (но это уже редкость) Конечно как новичок вы можете недооценивать это или недоумевать, что же в этом такого.

В C# - строгая типизация. Некоторые считают, что лучше начинать с динамической, а некоторые вообще с языков без нее. Это совершенно неправильно, как считаю я и множество профессиональных программистов, (я не один из их числа, но осведомлен) ведь когда у тебя динамическая ты не до конца понимаешь как устроены типы данных, если не углубляться. Однако это один из фундаментальных понятий в каждом языке, о котором важно знать. Однако не бойтесь - это довольно просто, если разобраться в вопросе, а не просто сидеть на "динамике".

Также большой плюс для новичков, которые выбрали C# как первый язык окажется то, что в Шарпе есть множество типов данный - от String до Sbyte. Некоторые новички наоборот отталкиваются от мысли, что "придется учить ворох всяких типов, а потом путаться", а если этому еще и кто-нибудь "взрослый" посоветует - бегите! Лучше сразу понимать множество типов и использовать их в разных языках, а при переходе на новый не разбираться в новых типах, а сразу их использовать по назначению и по опыту. Вам так будет только проще. А то будете недоумевать "А зачем так много типов? Можно же одним Integer обойтись!".

(Сразу поясню - такое количество типов нужно, чтобы грамотно оптимизировать код, ведь лучше тратить меньше ОЗУ на переменную с парой цифрами и использовать Byte, чем на эту мелочь тратить в 4 раза больше с Integer. Да, это всё в байтах высчитывается, но представьте, что у вас их - массив из сотен элементов! Ну как?)

2) Производительность и легкость

C# вобрал в себя всё наилучшее из C++, Java и других языков, но при этом не взял багов, недоработок, костылей и т.д. У него легкий синтаксис, в отличии от C++, но при этом почти, если не также производителен. Да, в нем нельзя работать на разных уровнях абстракции и в нем нет гибкой работы с памятью, но зато его синтаксис не вызывает ужас, в нем легко разобраться и вообще: "зачем новичкам работа с памятью, вы чё здурели!?!" Если что можно относительно легко перейти на тот же C++.

3) Благоприятная среда

C# - сильно развивающийся язык. Он быстро улучшается, (относительно) и имеет очень дружелюбное коммьюнити, (опять же - относительно) а также имеет просто нереально удобный IDE в лице Visual Studio. Всё это - результат работы Microsoft для формирования "идеального языка для дружбы и радуги".

4) Множество применений

У C# есть множество применений, в которых он преуспевает.

  • Бэкэнд - C# очень даже популярен для бэкэнда, но, очевидно, не достаточно, чтобы стоять на ровне с PHP, Python и Node.js. Однако он, насколько мне известно, используется чаще чем тот же Go. (Golang)
  • Веб-приложения - если в бэкэнде он не сильно преуспевает, то для веб-приложений он довольно таки хорош. ASP.NET сильно в этом преуспел.
  • Разработка ПО - Microsoft = Windows, Windows = самая популярная настольная ОС. А кто у нас самый популярный язык для разработки нативных приложений? Верно, C#! WPF - самый мощный, продвинутый и удобный инструмент для этого, а сияние WinForms еще не до конца угасло. Есть и C++, но он всё же уступает в пользу кроссплатфоменности.
  • Разработка мобильных приложений - Xamarin в пролёте. Он не то что не популярен - его не любят. Хотяте в моб. приложения - идите к Kotlin (Android) и Swift (IOS). Даже если смотреть на кроссплатформенную разработку Xamarin ели-ели двигается, ведь приходится писать разметку под каждую ОС.
  • Разработка инди и мобильных игр - Unity - это ваш единственный выбор. Почему? А потому что он самый популярный, легкий и технологичный игровой движок, и при этом всём бесплатный. Пока Godot не покарил рынок у вас два варианта - идти навстречу Godot или веселиться с Unity.
  • Разработка ААА игр - Ну, тут уже C# проигрывает C++, из-за производительности и движка. Почти все крупнобюджетные движки (Unreal Engine, CryEngine и пр.) пишутся на C++, не считая FrostBite, в котором пишут на C#, но он только у злого и ужасного EA, так что тут шансы падают, если вы не идете работать к студии с Unity или к дочерней студии/самой EA.

Как видите Шарп очень многогранный язык, особенно в сфере игр и разработки ПО.

Минусы

А вот пошли минусы C# для новичков.

1) "Любовь" Visual Studio к тебе

Как бы это странно не звучало, но удобство Visual Studio и его постоянная помощь - минус для новичков. Но как это? Новичкам для набивки опыта важно делать всё самому, иначе ничего не закрепится достаточно сильно и придется долго и упорно допиливать навыки.

Я сам на этом попал, когда переходил на другой язык, в котором есть только ты, текстовый редактор и отладчик. Тогда я реально почувствовал боль, когда после долгого глаженья по головке тебе приходится всё делать самому. Да, это легко пересилить, но след останется и всегда будет в уголку сознания повторяться слова типа "Эй! У этой IDE нет *какая-то удобная штука из Visual Studio*! Он фигня!!!", хотя и у всех остальных нормальных этой мелочи нет.

2) Кроссплаформенность

Хотя этот минус C# уже заделывают добавляя C# во всё большее кол-во ОС, но всё же это не нативная поддержка как у C++. Да, C# не был кроссплатформенным изначально, а задумывался как пленник Windows, но потом Microsoft поняли свою ошибку (или не они, я уже не помню) и начали её исправлять.

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


Итог

Как итог могу сказать, что C# практически идеален как первый язык, по крайней мере как просто входная дверь. Да, если вы изучаете веб, то он вам окажется абсолютно бесполезен, но он мягко и плавно вбросит в самую пучину технологий и всего крутого в мире программирования. Если вы мечтатель о будущей игре - бегите изучать C# немедленно! (Если не хотите в Unreal) Хотите просто иногда создавать ПО для "Винды"? C# - идеал для вас! Сами знаете C#, но надо сделать сайтик по быстрому? Возможностей ASP.NET вполне хватит, если, конечно, хотите влезать в эту пучину бесконечных терминов, технологий и протоколов. (Легче в конструкторы или WordPress, если честно)