Здравствуйте.
В далеком прошлом, я занимался пустой тратой времени. А именно - выбором языков программирования.
Но со временем я выбрал для себя 4 языка программирования. C++/C#/PHP/Python.
C# и Python стояли важнее всех.
Сейчас у меня стали появляться новые задачи, и я задумался над тем, стоит ли продолжать изучать C#, может, выбрать вместо него Java, или изучать 2 одновременно.
В начале хочу сказать, что думаю об этих двух языках.
C# как по мнению многих попытка Microsoft создать собственный Java.
По синтаксису эти языки программирования очень схожи. Но в C# есть преимущества на мой взгляд, делегаты, события, свойства.
Но, к сожалению, стек технологий у Java шире и больше, по сравнению с C#. Простому разработчику, наверное, все равно, но разработчику, который в будущем будет искать работу...
Просмотрев вакансии я понял, что от C# джуниора требуют меньше, чем от Java джуниора.
На википедии есть статья сравнение C# и Java, и там есть очень хорошая цитата.
Кик Рэдек из Microsoft считает С# более сложным языком, чем Java. По его мнению, «язык Java был построен таким образом, чтобы уберечь разработчика от стрельбы себе в ногу» (англ. «Java was built to keep a developer from shooting himself in the foot»), а «С# был построен так, чтобы дать разработчику пистолет, но оставить его на предохранителе» (англ. «C# was built to give the developer a gun but leave the safety turned on»).
На Кворо 1 из разработчиков писал, что Java более многословен, а C# более точен и менее многословен.
В целом, C# мне нравится больше, чем Java. С C# я начал, C# изучал, много практиковался, даже разрабатывал какие-то полезные вещи. Java более многословен, и все таки это другой язык программирования.
Изначально, у меня были следующие цели и задачи:
Разработка настольных приложений, разработка клиент-серверных приложений, разработка игр.
Все бы ничего, C# способен решать эти задачи. Но сейчас появились новые:
Работа с робототехникой (Для этого, в основном, изучаю C++ и Python);
Программирование под Android;
Разработка различных устройств. К примеру, недавно, был в ГМС (в Украине) и делал паспорт. Там был сенсор, куда прикладываешь пальцы, а он сканирует отпечатки и пробивает по базе. Также была специальная ручка, которой ведешь по сенсору свою роспись, а он записывает ее в базу.
Ладно, робототехнику можно опустить, так как C++ и Python подходят для этого лучше.
Программирование под Android. Есть Xamarin. Но на столько же ли это эффективно, как Java?
Разработка таких штук с сенсорами. Вряд ли это можно реализовать на C#...
Что я потеряю, изучая C#, что потеряю, изучая Java?
Как сделать правильный выбор между этими двумя языками программирования, или изучать оба?
Возможно ли в принципе изучение двух этих языков одновременно, и на сколько это эффективно в моем случаи?
Заранее благодарен за ответ!
Как человек, который 1.5 года учился java, а потом вышел работать с C# - точно могу сказать, разница несущественна. Специалисту всё равно какой инструмент он использует. Хотите наиболее производительное мобильное приложение - используете java, хотите desktop windows, вэб бэкенд, игры - C# (имхо). ML - python. Микроконтроллеры - C (C++). Хотите делать качественное ПО для всего вышеперечисленного, тогда я вам огорчу, серебряной пули нет придется использовать разные инструменты, но с опытом, вы поймёте, что различия весьма преувеличены.
Но для работодателя разница существенна. Senior .NET-разработчика просто так не возьмут на аналогичную позицию по Java, так как он не будет знать enterprise-фреймворков.
Изучение двух языков одновременно в принципе возможно. Но если ты нацелен на работу, то забудь про это, так как знание синтаксиса языка мало что тебе даст. Нужно изучать технологии. И у java, и у c# есть начальный стек который рекомендуется знать для уровн, джуна. Хороший уровень их знания увеличивает шансы получить оффер (впрочем не сильно).
Отвечая на конкретные вопросы, изучая с# потеряешь все то что дает jvm, изучая java потеряешь возможность делать нативные приложения из коробки. Если сложно сделать выбор, взгляни в сторону мобильной разработки (читай kotlin). Там энтерпрайз не такой кровавый и все в плане выбора однозначней.
Сформулируйте ещё раз задачу. Например зачем вам вообще изучать какой-то ЯП? Разработка только под Винду и вы уже знаете с#? Так продолжайте, если это ваша работа. Если хочется чего-то нового в этой сфере, попробуйте .Net. Java тут явно лишняя, она не очень хорошо подходит для десктопных программ, как и python или не дай бог php. Не спорю их можно писать на этих языках, но согласитесь это legacy, у .net или c# как минимум больше Профит в этом.
Если вдруг встанет вопрос о кроссплатформености GUI приложения, то я бы рекомендовал Qt, там под капотом c++, можно конечно и python опять же через Легаси костыли типа pyqt, а pygtk так себе.
А вот на c# сделать веб приложение будет проблема, в отличие от рнр или python, да даже на java будет легче :) и главное кроссплатформенность, но сейчас не об этом.
Вам нужно выбрать свою нишу деятельности, отсюда язык сам выберется.
Микроконтроллеры это c и c++ тут без вариантов, как бонус для развития ассемблер можете изучать.
Под андройды конечно же java, как бонус kotlin.
Но учтите мобилки и контроллеры это 2 разных направления, а десктопные ещё и под Винду это вообще 3 направление развития.
А как поступить, если я неопределился с направлением?
Есть вещи, которые хочу программить как хобби. Для работы наверно веб, потому что там проще найти работу. Но тут PHP/Python.
Возможно, Java? Так как на Java можно сделать все, что на C#.
Скорее наоборот, на java можно сделать то, чего нельзя на C#. Например кроссплатформенное десктопное приложение или Android приложение =)
Если рассматривать windows как платформу под которую разрабатывать, то лучше брать нативные решения - .Net, C#, C++ конечно же с применением winapi, все другие языки будут аутсайдерами.
С другой стороны, если взглянуть на таких гигантов как IDEA и его производных, то можно сделать вывод, что GUI на java это не так уж и плохо.
Кстати, если хочется какой-то язык с перспективой на Web разработку, то можно выбрать js, тем более хайповая штука, пиример гуёвого приложения - Atom, там кажись фреймворк Electron, но честно не уверен, что там чистый js.
А то, что ты 4 языка параллельно изучаешь... От того, что ты можешь написать hello world на 10 языках, тебя никто на работу не возьмёт. Только если в вуз преподавать за 20к.
Вообще ответ очевиден, C# больше всего нужен только в экосистеме майкрософта, и на нем только корпоративная фигня.
А у Java есть JVM, мобилки, 90% автоматизации тестирования ведётся на Java, да и Scala с Kotlin есть. Ну и куда же без Spring
Тут в чем фишка. Java то используется много где, но эти сферы не перескаются друг с другом. Не видел, например, Spring разработчика, который бы перешел легко и просто на андроид или автоматизацию тестов.
Terras, ну, Spring это вообще тема отдельная, там аоп и бины правят бал.
И тем не менее из Spring в Android перейти куда проще, потому что есть основы. А уходя из PHP или Python, придётся сначала аннотации понять, дженерики, Core и так далее.
Nikolay Petyukh, та ладно любая разработка 90% легаси, даже если не лагаси то через 5 лет уже им будет и обрастет костылями - жизнь боль =) а в целом как человек который использует и то и то полностью согласен )
Простому разработчику, наверное, все равно, но разработчику, который в будущем будет искать работу...
Простого разработчика - всегда ищет работа!
А разработчик-лентяй - ищет сам работу, чтобы обучаться и ещё за это получать деньги!
Советую, вначале, стать простым разработчиком. ;)
SmInc, Нет. Это я про текущие реалии: стажёр - должен быть уже на уровне чуть ниже миддла. Если это не так, то как правило ему без вариантов устроиться на вакансию даже в качестве стажёра, т.к. конторы не особо любят обучать кого-то за свои же деньги.
Скажу на сообственном примере, я программирую на php и фреймворкe laravel более двух лет, получаю хорошую ЗП всегда полно работы, работаю удаленно на зарубеж, отлично знаю эти технологии и не парюсь, и люди выбирают и платят именно мне, потому что я профи именно в этом.
Если вы хотите использовать преимущества JVM, но вам не нравится Java как язык, для платформы есть множество других вариантов: Groovy, Scala, Clojure... Я бы рекомендовал Kotlin. Он красивый, удобный, современный и на него сейчас многие топ компании переходят. Собственно в части Android и backend разработки.
Вообще, многое зависит от специализации. Как только вы перестанете распыляться и определитесь с тем, чем будете заниматься профессионально, тогда можно будет и средства разработки выбрать.
Олег Гамега, не работал со spring на таком уровне, чтобы оценить многословность ) примерчик бы на java, чтобы можно было оценить и попробовать "причесать" на котлине )))
LeEnot, многословность скорее про архитектуру, там где в спринге все пишут dao в аспнете народ нафигачивает пару моделек и вообще не праится
на аспнете можно быдлокодить почти как на пыхе только не так больно из за строгой типизации ))
это положительно сказывается на скорости разработки, что для меня как праивило решающий фактор
Я не являюсь профессиональным разработчиком и скорее, это даже хобби. Но предпочитаю работать на java. Ни в коем случае не хочу умалять возможности С# и даже отмечу, что в сфере game development'a c# превосходит.. наверное тем, что есть прекрасный движок Unity поддерживающий c#, js и т.д. Хотя, на Java tcnm libgdx jmonkey и другие.