Что выбрать C++ или C#? С чего лучше начать?

Что выбрать C++ или C#? С чего лучше начать?

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


Единственная сфера использования – поддержание работоспособности проектов, которые ещё не перешли на обновлённые языки. Если проект качественный, он в скором времени обновится, иначе будет постепенно терять популярность, соответственно, все равно нет перспективы развития. При желании заняться изучением нового языка стоит предпочесть C++ или C#.

Особенности C#

После пропуска большого этапа «обучения» на Си, можно задаться вопросом куда же всё-таки направляться и какое состояние в сфере программирования на C#. При выборе этого языка стоит помнить, что программист строго привязан к операционной системе Windows, можно даже не учитывать преимущества Mono Develop, так как основной недостаток – полная зависимость от дальнейших действий Microsoft



В большей части вакансии C# связанные с Asp.net – это веб разработка и всё тому подобное. Здесь уже выбор каждого. В отношении обучающего материала лучше сразу начинать с Шилдта, его способ описания ООП достаточно понятен и ясен, хотя и сам язык не вызывает особых сложностей, особенно если есть хоть какие-то знания. После его прочтения стоит перейти к Троелсену, который позволит почувствовать фундамент под ногами и даст более-менее приличные знания. После базового освоения языка можно дополнить информацию с помощью Рихтера, который детальнее раскроет особенности работы с .NET платформой.

Достоинства C++

Теперь стоит обратиться к изучению С++, который хорошо показал себя за счёт абстракционного мышления. Иначе говоря, программист волен сам выбирать писать ли ему на высоком или низком уровне, изменяя способ написания в зависимости от задачи.


С++ уже позволяет писать программы, которые могут работать на разных платформах, с этой целью разработан Qt



В отношении методичной литературы стоит посоветовать Страуструпа, его книга представлена в форме справочника, которая хорошо знакомит с принципами языка и методами работы. Когда с ним будет покончено можно перейти к Саттеру и Мейерсу, но для закрепления материала нужно обязательно использовать практические навыки. Этого уже достаточно для понимания языка выше среднего.


Не относится к теме статьи, но стоит также присмотреться к языку Java. 


Если судить в целом, то все языки представляют собой только инструмент. Правильное использование – это залог успеха, состав мозгов и способ мышления помогают добиваться впечатляющих результатов всегда. Вовсе не обязательно изучать языки наизусть, напротив, заучивание даже плохо, достаточно всего лишь понимать принципы работы. Чтобы нам не углубляться в алгоритмы, стоит изучить книгу Кормена. 


У каждого языка различаются сферы использования. Если акцент ставится на написание игр, лучше предпочесть С#, ведь язык применяется в основе распространённого движка Unity. Он позволяет создавать игры как с 2-мерной графикой, так и полноценные 3D. В противовес можно сказать, что С++ применяется в основе Unreal Engine, он отличается большей мощностью и требуется для написания масштабных игр для ПК.

Сравнение языков

1. Скорость написания

C# обеспечивает быстрейший старт в сфере программирования, прототип можно создать значительно быстрее. Если в приоритете лежит скорость изначальной разработки, стоит выбирать C#, который выигрывает у С++.



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


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


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

В отношении кросплатформенности С++ сильно превосходит конкурента, хотя и есть определённые оговорки. Придётся прибегнуть к дополнительным затратам и между некоторыми платформами отмечается бинарная несовместимость.


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



Сейчас под Windows разработана достаточно полноценная инфраструктура на .net, а в остальных платформах такого решения не было запущено.


3. Библиотеки

Выбор между библиотеками можно сделать в пользу С++, так как не только их количество больше, но и ассортимент качественнее. За длительную историю разработки удалось достичь хорошей оптимизации и было устранено большее количество недочётов. Многие библиотеки находятся в открытом доступе, могут использоваться на разных платформах и имеют открытый код. 


Даже с учётом ряда положительных сторон всё не настолько радужно, ведь многие библиотеки С++ разработаны по различным структурам, порой даже без них. Нередко встречается структурно-процедурная форма построения, причина такого недостатка – перенос библиотеки с Си.



Дополнительным минусом можно выделить формирование и переопределение основных типов данных. В множестве библиотек С++ возникает необходимость создавать собственные контейнеры, изменять базовые типы данных и строки. Со стороны логического обоснования – это обеспечивает повышенную производительность, улучшение кросплатформенности, устранение недостатков кода. Несмотря на очевидные позитивные стороны вопроса значительно снижается удобство пользования и красота кода. 


Среди базовых библиотек C++ выбор не такой обширный, по функционалу С# превосходит их. Основная сложность и задача программиста – это правильный подбор библиотек и это потребуется даже при выполнении небольшого проекта.


4. Стоимость поддержки

Значительной разницы в цене поддержки между обоими языками не отмечается. Важно осознавать, что отдельные баги внутри приложений на С# сложно поддаются устранению методами .net. Если потребуется исправление багов, цена резко увеличится, а поддержание станет дороже. Если коснётся рефакторинга, то чаще всего проекты С# проще поддаются изменению.


Лично я не могу со 100% уверенностью всем советовать выбирать тот или иной язык, так как нет правильного ответа на вопрос. Выбор зависит от поставленных целей, типа задач и предполагаемого результата, который требуется достичь. Для меня С# значительно приятнее и ближе, ведь основная часть работы связана с движком Unity, но нельзя скрывать повышенную популярность Unreal Engine на C++.


После определения задачи стоит подобрать лучший язык на основании перечисленных пунктов, а также типа синтаксиса.

()
13 Февраля 2018

Возврат к списку