Вы только начинаете новый проект, и у вас есть на выбор две технологии: Java и .NET. Проект, над которым вы работаете, не предполагает наличия функций, которые позволили бы легко выбирать между двумя технологиями (например, .NET имеет то, что мне нужно, а Java - нет), и обе они должны работать просто отлично для вас (хотя вы только нужен конечно). Примите во внимание:
- Производительность
- Доступные инструменты (даже сторонние инструменты)
- Кроссплатформенная совместимость
- Библиотеки (особенно сторонние библиотеки)
- Стоимость (Oracle, кажется, пытается монетизировать Java)
- Процесс разработки (Самый простой / Самый быстрый)
Также имейте в виду, что Linux не является вашей основной платформой, но вы также хотели бы перенести свой проект на Linux / MacO. Вам определенно следует помнить о проблеме, которая вращается вокруг Oracle и сообщества Java, а также об ограничениях Mono и Java. Было бы очень признательно, если бы люди, имеющие опыт в обоих направлениях, могли дать обзор и свое собственное субъективное мнение о том, что они выберут и почему.
Ответы:
Единственное самое важное (редактировать: техническое) решение:
Если нет, то вы должны пойти с Java.
Вывод из Mono часто используется, чтобы сказать: «Да, .NET является кроссплатформенным». Насколько обоснован этот иск? было то, что Mono - это всего лишь вариант IFF, который вы разрабатываете против него!
Вы не можете ожидать, что .NET-приложения будут работать "из коробки".
@Basic сказал, что это был скорее комментарий, чем ответ. Чтобы быть точным, я считаю, что вопрос стоит на вершине списка, потому что это, пожалуй, самое важное техническое решение, которое вам нужно сделать при работе с .NET. Как сказал Basic, он проведет тестирование на Mono, тогда это не по пути, и я считаю, что Java и .NET одинаково хорошо подходят. У меня очень мало опыта работы с .NET, но совсем немного на Java.
Производительность - Java работает довольно хорошо, но все еще имеет немного времени запуска. Это связано с тем, что JVM запускается с нуля при инициализации, а произвольный доступ к файлу jar библиотеки времени выполнения довольно медленный, когда его нужно прочитать с диска. В последних версиях Java 6 есть фоновый процесс, который пытается сохранить файлы jar библиотеки времени выполнения в дисковом кеше, чтобы при необходимости доступ был быстрым.
Инструменты доступны. Существует множество инструментов, и есть много доступных в виде высококачественного Open Source. У IBM есть несколько очень продвинутых инструментов, но они также требуют немалых денег. Возможно, вы захотите взглянуть на MyEclipse, который зарабатывает на жизнь, собирая лучшие части в мире Java и делая их доступными по низкой цене, чтобы увидеть, что доступно. Netbeans имеет очень хороший графический редактор. У JDeveloper есть хороший отладчик Swing. Sun 6 JDK имеет VisualVM, который является хорошим профилировщиком начального уровня, который может анализировать уже запущенные программы (что является убийственной функцией).
Кроссплатформенная совместимость. Очень хорошо, стремится к отличному. JVM очень, очень надежная и предсказуемая. Проблемы проявляются только тогда, когда различия в операционной системе просачиваются в виде разделителей файлов, чувствительности к регистру имен файлов и поведения меню.
Библиотеки. Есть много и многие из них свободно доступны и могут использоваться, но в основном написаны на Java, так как довольно сложно получить код, написанный на языках, не являющихся JVM.
Стоимость. Ява в основном свободно доступна. Oracle указывает на то, что электроинструменты, скорее всего, от JRocket, будут стоить дорого. Также обратите внимание, что расширенная поддержка («Java для бизнеса») также предоставляется по цене. Платформы, отличные от x86, умирают, но у IBM их предостаточно, и IBM предлагает для них отличную реализацию на Java. Это оценивается как часть операционной системы - скорее всего, для лучшего принятия.
Процесс разработки. Много времени с Java тратится на изучение и выбор подходящей технологии и ее изучение, но когда это будет сделано, я думаю, что есть множество технологий, которые довольно быстро развиваются. Последняя версия Java EE предусматривает написание очень мощных веб-страниц с использованием Facelets, которые можно перезагружать, по крайней мере, так же быстро, как страницы PHP.
Я думаю , что если вы не не квалифицированы ни в одном Java или .NET, вы будете экономить время и деньги, выбирая технологию вы и ваша организация являются наиболее знакомы.
источник
Хорошо, давайте попробуем разобрать это:
На платформах Java и .NET имеется множество хороших инструментов тестирования производительности, я знаю, что в пространстве Java есть множество бесплатных инструментов с открытым исходным кодом, подходящих для большинства сценариев. Я не могу говорить за сторону .NET.
Здесь у Java есть преимущество: для запуска .NET на некоторых платформах требуется проект Mono (или аналогичный). Я не уверен, что Mono на 100% пуленепробиваемый и эффективный, что-то, надеюсь, кто-то еще может вмешаться.
Оба имеют сильную поддержку здесь. Первоначально эко-система Java лидировала (есть буквально бесплатная библиотека с открытым исходным кодом практически для всего, о чем вы могли подумать), но я бы сказал, что .NET наверняка поняла, где это важно (NHiberante для настойчивости, NUnit для модульного тестирования) назвать два основных + я уверен, что есть метрический грузовик больше).
Все компании пытаются монетизировать до некоторой степени, но в случае с Java, я думаю, ваше утверждение немного вводит в заблуждение. Начиная с версии 6 (проект OpenJDK) Java была с открытым исходным кодом, и Oracle не склонен превращать Java в деньги сверх того, что делал Sun. Так что да, они продают серверы приложений и расширения для JVM (в частности, для управления расширениями), но ядро самой Java? Нет, и они никогда не будут (это было публично заявлено много раз).
Я думаю, что и MS, и Oracle получают огромную выгоду благодаря косвенным доходам от своих репрезентативных платформ.
Общая стоимость владения (TCO)? Я даже не собираюсь вступать в эту дискуссию, потому что нет никакого способа доказать это (программирование - творческая человеческая деятельность в конце концов). Я лично считаю, что системы на основе Java обычно имеют более низкую начальную стоимость, поскольку в большинстве случаев вы можете использовать бесплатный стек с открытым исходным кодом сверху вниз. Однако крупные предприятия, как правило, предпочитают иметь контракты на поддержку, чтобы свести на нет эту конкретную выгоду.
Зависит от того, что вы пытаетесь построить! Я лично утверждаю, что они в значительной степени даже, хотя в C # в настоящее время есть некоторые дополнительные функции в базовом языке по сравнению с Java. Тем не менее, с помощью (нескольких совместимых с Java) языков в JVM (Groovy, Scala, Clojure и т. Д.) Вы можете иметь все нужные вам функции языка.
У .NET было явное преимущество для создания «материала» веб-интерфейса некоторое время (Rapid Application Development, если хотите), но я думаю, что JEE6 и / или Spring и другие фреймворки для веб-приложений и приложений в значительной степени сократили этот пробел.
Если вы хотите портировать на Linux, UNIX и, в частности, Mac OS, то, как указано выше, у Java есть преимущество.
Надеюсь, это поможет!
источник
Принимая во внимание ваш список пунктов, я бы разделился, и это действительно зависело бы от того, что мне нужно построить.
.Net выигрывает по этим аспектам:
Java побеждает в следующих аспектах:
Это ничья для этих аспектов:
.Net - это, по сути, единый технологический стек платформы. Да, есть Mono, но до тех пор, пока Mono не будет на 100% совместим с реализацией Windows, он не обеспечит настоящий кроссплатформенный опыт. Единственное подмножество, на которое вы можете рассчитывать на поддержку кроссплатформенности, - это то, что подходит для Silverlight.
Тем не менее, .Net лучше воспринимается производительность (фактические измерения TBD). В глазах пользователя воспринимаемая производительность - единственное, что имеет значение. После более чем 12-летнего развития Java и работы в .Net я могу оценить мощь платформы.
Java, с другой стороны, имеет гораздо более богатый набор IDE, и стоимость этих превосходных IDE намного меньше, чем стоимость варианта .Net. С другой стороны, стоимость профессиональных движков J2EE легко превосходит стоимость среды разработки. В .Net у меня есть ощущение, что меня забивают до смерти. В Java есть обходные пути к огромным затратам, которые можно легко компенсировать с помощью времени их разработки. За пределами IDE для значимых инструментов (профилировщик, покрытие и т. Д.) Затраты равны.
В конце концов, это действительно зависит от необходимости . В любом случае, если я собираюсь развертывать на Windows, тогда .Net не составляет никакого труда. У меня есть клиенты, которые занимаются только Windows магазинами. Если я собираюсь развертывать на Unix или мне нужна поддержка разнородных систем, то Java не представляет никакой сложности. Я даже могу быть радикальным и предложить смешанный стек технологий. В конце концов, только потому, что клиент требует, чтобы сервер был Unix, не означает, что они запускают это на своих рабочих столах. Не каждое приложение лучше всего превратить в веб-приложение.
источник
Производительность - даже
Обе платформы работают очень хорошо практически для всех приложений.
Не очень много, чтобы выделить их, хотя мой субъективный опыт заключается в том, что Java имеет небольшое преимущество для долго работающих приложений, тогда как .Net быстрее для запуска приложений.
Доступные инструменты (даже сторонние инструменты) - Дискуссионный
Зависит от того, какие инструменты вам нужны и с чем вы знакомы.
.Net, безусловно, имеет несколько отличных инструментов, предоставляемых Microsoft. С другой стороны, в мире Java есть такие же хорошие инструменты, например, в Eclipse, средах Netbeans IntelliJ.
Кроссплатформенная совместимость - победа Java
.Net в основном привязан к платформам Microsoft (Windows, Xbox и т. Д.). Полные реализации недоступны для любых платформ не Microsoft .
Mono хорош, но на самом деле он не дает вам полной кроссплатформенности, потому что он не поддерживает все библиотеки .Net (например, вы не можете ожидать, что все компоненты Windows GUI будут работать правильно, поэтому, если вы не переключитесь на кроссплатформенный инструментарий, такой как GTK #, вы не сможете запустить свое приложение на разных платформах)
Ява действительно переносима. Не только язык, но гораздо важнее то, что все библиотеки Java являются переносимыми. Если вы будете придерживаться чисто библиотек Java (например, Swing for GUI), тогда ваш код будет работать везде, где у вас есть среда выполнения Java.
Библиотеки (особенно сторонние библиотеки) - Java win
Вероятно, лучшая сила платформы Java - обширная экосистема библиотек, особенно библиотек с открытым исходным кодом. Несколько примеров:
Стоимость (Oracle, кажется, пытается монетизировать Java) - Java выиграет, если вы идете с открытым исходным кодом, в противном случае даже.
Вы можете иметь 100% открытый стек Java с открытым исходным кодом, который бесплатен и не привязывает вас к какой-либо конкретной проприетарной платформе. Это на 100% бесплатно.
Кроме того, вы можете купить IntelliJ IDEA, запустить Java в Windows и использовать собственную базу данных, и в этом случае она будет стоить столько же, сколько и обычный стек Microsoft .NET.
Процесс разработки (самый простой / быстрый) - дискуссионный
Вероятно, это больше зависит от опыта ваших разработчиков с каждой платформой, а не от конкретной характеристики платформы.
.Net, безусловно, имеет несколько отличных инструментов, которые могут сделать вас очень продуктивными для простых приложений с графическим интерфейсом в Windows. Не удивительно, так как это «сладкое пятно» для разработки .Net.
С другой стороны, я предпочитаю стек Java для разработки на стороне сервера. С помощью таких инструментов, как Maven, и всех возможностей непрерывного развертывания / интеграции вы можете создать очень эффективный процесс разработки для надежных серверных приложений.
С точки зрения языка C # имеет некоторые преимущества в производительности по сравнению с Java. Но, с другой стороны, если вы сейчас разрабатываете на платформе Java, тенденция состоит не в том, чтобы использовать саму Java, а в том, чтобы использовать один из новых языков JVM, такой как Scala, Groovy или Clojure, - если вы это сделаете, вы будете гораздо более продуктивными. чем C # или Java.
источник
.Сеть
Трудно ответить на этот вопрос, не будучи субъективным или пламенным (у меня такое чувство, что я буду разочарован), но .Net - это язык на подъеме, и Java, кажется, застряла в юридических вопросах и стала менее популярной.
Кроме того, в настоящее время .net является гораздо более сплоченным и современным языком с превосходной поддержкой многоядерного (Parallel.net) и асинхронного программирования (реактивных расширений), не говоря уже о LINQ, без которого я не мог бы жить. .Net также имеет ряд бесплатных инструментов, но Visual Studio Express, Sql Server Express, Web Matrix и т. Д.
Это правда, что Java имеет некоторые мультиплатформенные преимущества. У вас есть несколько вариантов для .Net с моно и т. Д., Которые могут подойти для традиционных приложений или серверных компонентов, но некоторые становятся сомнительными, если вы делаете что-то очень специализированное (и давайте не будем обсуждать WPF).
Другой вариант, если кроссплатформенность действительно очень важна, - это перейти на Silverlight, я лично не очень заинтересован в «приложениях» silverlight, но, по крайней мере, это работает.
Кроссплатформенность - это болевая точка, спросите себя, действительно ли это необходимо, по крайней мере, на этом этапе.
источник
В нашей организации на данный момент мы бы выбрали Java. Причина этого проста: наша команда Java является более крупной, опытной и лучше обученной, чем наша команда .NET (которая также достаточно привязана к обслуживанию существующих систем, так что им не хватает ресурсов для выполнения каких-либо крупных новых проектов) ,
Тем не менее, если были неотложные причины для использования .NET (например, требования клиентов, некоторые клиенты могут иметь большую установленную базу программного обеспечения .NET и хотят, чтобы их новая система вписывалась в эту базу, сами брали на себя обслуживание и т. Д.), Мы будем сделать это и нанять подрядчиков для выполнения работы, где мы не можем освободить своих людей.
Я бы не стал навязывать клиентам какую-либо технологию против их интересов, и некоторые клиенты просто (из-за своей внутренней организации) извлекают выгоду больше, чем из-за инвестиций, необходимых для развертывания системы (опять же, скажем, у нас есть клиент, который уже у нас запущено несколько приложений .NET и есть персонал для их поддержки, мы не собираемся заставлять их нанимать людей и покупать лицензии на оборудование и программное обеспечение для запуска Java-приложения на стороне, и, конечно, обратное и быть правдой. На самом деле мы бы посоветовали им не делать этого, если они обратились к нам с просьбой).
источник