Що б ви обрали для свого проекту між .NET та Java на даний момент? [зачинено]


13

Ви тільки починаєте новий проект, і ви маєте на вибір ці дві технології, Java та .NET. Проект, над яким ви працюєте, не передбачає функцій, які б полегшили вибір між двома технологіями (наприклад,. NET має це, що мені потрібно, а Java не має), і обидві повинні працювати для вас чудово (хоча ви лише потрібен один звичайно). Брати до уваги:

  • Продуктивність
  • Доступні інструменти (навіть сторонні інструменти)
  • Сумісність з платформою
  • Бібліотеки (особливо сторонні бібліотеки)
  • Вартість (Oracle, схоже, намагається і монетизує Java)
  • Процес розробки (найпростіший / найшвидший)

Також пам’ятайте, що Linux - це не ваша основна платформа, але ви хочете також перенести свій проект на Linux / MacO. Ви обов'язково повинні пам’ятати про неприємності, що обертаються навколо Oracle та спільноти Java, а також обмеження Mono та Java. Було б дуже вдячно, якщо люди, які мають досвід обох, можуть дати огляд та власне суб'єктивне уявлення про те, що б вони обрали і чому.

java  .net  mono 

Немає достатньої інформації про вимоги, щоб ефективно відповісти на це питання.
червоний бруд

3
Моно - це біль (наприклад, раковина часу). Навіть базового дизайнера WinForm немає.
Робота

@Job насправді MonoDevelop має дизайнер графічного інтерфейсу для GTK #, оскільки WinForms ще не є відкритим кодом.
Махмуд Хоссам

Так, але як Mono зі сторонніми бібліотеками? Вони "просто працюють"? І (можливо, найголовніше) чи надають постачальники підтримку, якщо ви використовуєте їх з Mono?
TMN

Відповіді:


26

Найбільш важливим (правильним: технічним) рішенням є:

  • Чи будете ви в цей час брати на себе зобов’язання на 100% використовувати Windows в якості майбутньої платформи розгортання?

Якщо ні, то вам слід перейти з Java.


Висновок Mono часто використовується, щоб сказати "Так, .NET - кросплатформна". Наскільки ця заява справедлива? було те, що Mono - це лише варіант IFF, який ти розробиш проти цього!

Ви не можете очікувати, що .NET-додатки працюватимуть нестандартно.


@Basic сказав, що це скоріше коментар, ніж відповідь. Якщо бути точним, я вважаю, що це питання, щоб перейти на перше місце у списку, тому що це, мабуть, найважливіше технічне рішення, яке вам потрібно зробити, працюючи з .NET. Як Базик каже, що він буде тестувати Mono, тоді це не вдається, і я вважаю, що Java та .NET досить однаково підходять. У мене дуже мало досвіду роботи з .NET, але зовсім небагато в Java.

  • Продуктивність - Java працює досить добре, але все ж має досить небагато часу запуску. Це тому, що JVM починається з нуля при ініціалізації, і випадковий доступ до файлу jar-файлу бібліотеки виконання досить повільний, коли потрібно читати з диска. Останні Java 6 мають фоновий процес, щоб спробувати зберегти файли jar-файлів бібліотеки виконання в кеш-диску, щоб доступ був швидким, коли це було потрібно.

  • Інструменти доступні. Існує безліч інструментів, і є багато доступних як високоякісний Open Source. У IBM є кілька дуже просунутих інструментів, але вони також забирають досить багато грошей. Ви можете поглянути на MyEclipse, який заробляє на життя, збираючи найкращі частини світу Java та роблячи їх доступними за низьку вартість, щоб побачити, що є. У Netbeans є дуже приємний редактор GUI. У JDeveloper є чудовий налагоджувач Swing. JDK Sun 6 має VisualVM, який є приємним профілером початкового рівня, який може аналізувати вже запущені програми (що є вбивчою особливістю).

  • Сумісність з платформою Дуже добре, схильне до відмінності. JVM дуже, дуже надійний і передбачуваний. Проблеми відображаються лише тоді, коли різниці операційної системи простежують у подібних розділових файлах, чутливості регістру імен файлів та поведінці меню.

  • Бібліотеки. Є багато, і багато з них є у вільному доступі та користуванні, але в першу чергу написані на Java, оскільки досить важко ввести код, написаний мовами, що не є JVM.

  • Вартість. Java в основному є у вільному доступі. Що вказує Oracle - це те, що електроінструменти - швидше за все, приходять від JRocket - будуть коштувати. Також зауважте, що розширена підтримка ("Java for Business") також має ціну. Платформи non-x86 - це померла порода, але IBM має багато, і IBM забезпечує відмінну реалізацію Java для них. Це оцінюється як частина операційної системи - швидше за все для кращого використання.

  • Процес розвитку. Багато часу з Java витрачається на дослідження та вибір відповідної технології та її засвоєння, але коли це зроблено, я думаю, що існує безліч технологій, які досить швидко розвиваються. Остання версія Java EE передбачає написання дуже потужних веб-сторінок за допомогою Facelets, які можна перезавантажити як мінімум так само швидко, як і PHP-сторінки.

Я думаю , що якщо ви не не кваліфіковані ні в одному Java або .NET, ви будете економити час і гроші, вибираючи технологію ви і ваша організація є найбільш знайомі.


14
Хто гарантує, що програма Java, яку ви пишете в Windows, працюватиме деінде? Щоб порушити цю гарантію, потрібен лише один заклик JNI. Це ж питання стосується CLI - якщо ви використовуєте неперехресний API платформи, ви втрачаєте портативність. Таким чином, єдина особа, яка може зробити гарантію портативності - це ви самі - програміст, незалежно від того, яку рамку ви використовуєте.
Марк Н

3
@ Thorbjørn, чи довіряєте ви Oracle у сучасному кліматі?
radekg

12
+1 , тому що Thorbjørn сказав , що якщо ви не 100% прихильний Windows , що ви повинні піти з Java, що не то, що ви повинні піти з Java. І я погоджуюсь - так, Mono є як резервна, але якщо ваші поточні плани не зобов’язані Windows, врятуйте себе від болю та перейдіть з технологією, яка мала запускатися на інших платформах. І я кажу це як розробник .NET і ентузіаст .NET.
Carson63000

4
Мені було цікаво, чи є хтось із "моно-існує-на-іншому" -зводних, хто насправді намагався це зробити ...

4
"Java в основному є у вільному доступі (...) електроінструменти будуть коштувати (...) розширена підтримка також приходить за ціну" . Точно те саме для.NET, правда?
Конаміман

19

Гаразд, спробуємо розбити це:

Брати до уваги:

Доступні інструменти для роботи (навіть інструменти сторонніх виробників)

І на платформах Java, і .NET є багато хороших інструментів тестування продуктивності, я знаю, що в просторі Java існує безліч безкоштовних інструментів з відкритим кодом, адекватних для більшості сценаріїв. Я не можу говорити за сторону .NET

Сумісність з платформою

Java має тут перевагу - для запуску .NET працює на деяких платформах потрібен проект Mono (або подібний). Я не впевнений, що Mono є 100-відсотковою і бездоганною, що, можливо, хтось інший може передзвонити.

Бібліотеки (особливо сторонні бібліотеки)

Обидва тут мають сильну підтримку. Спочатку екосистема Java провідна (тут буквально є безкоштовна бібліотека з відкритим кодом для всього, що ви можете придумати), але я б сказав, що .NET, безумовно, наздогнав там, де це важливо (NHiberante для наполегливості, NUnit для тестування одиниць). назвати два основних + я впевнений, що метричний вантажівка більше).

Вартість (Oracle, схоже, намагається і монетизує Java)

Всі компанії намагаються певною мірою монетизувати, але у випадку з Java, я думаю, що ваше твердження є дещо оманливим. Java була відкрита на основі версії 6 (проект OpenJDK), і Oracle не виявив бажання монетизувати Java за межами того, що робить Sun. Так так, вони продають сервери та розширення додатків до JVM (зокрема, розширення управління), але основна сама Java? Ні, і вони ніколи не будуть (про це публічно заявляли багато разів).

Я думаю, що і MS, і Oracle отримують велику користь за рахунок непрямих доходів завдяки їх ресепсивним платформам.

Загальна вартість власності (TCO)? Я навіть не збираюся вступати в цю дискусію, оскільки немає ніякого способу довести це (програмування - це творча діяльність людини все-таки). Я особисто думаю, що системи на базі Java, як правило, мають нижчу початкову вартість, оскільки ви можете використовувати безкоштовний стек з відкритим кодом зверху вниз у більшості випадків. Однак великі підприємства, як правило, вважають за краще укладати договори про підтримку, що може анулювати цю конкретну вигоду.

Процес розробки (найпростіший / найшвидший)

Залежить від того, що ви намагаєтесь побудувати! Я особисто стверджую, що вони майже однакові, хоча C # має деякі додаткові функції в основній мові над Java. Однак з (декілька взаємодіючих з Java) мов на JVM (Groovy, Scala, Clojure тощо) ви можете мати всі необхідні функції мови.

.NET мав явну перевагу в створенні «речей» на передньому кінці веб-сайтів (швидке розробка додатків, якщо ви хочете), але я думаю, що JEE6 та / або Spring та інші рамки веб / додатків значно закрили цей проміжок.

Також пам’ятайте, що Linux - це не ваша основна платформа, але ви хочете також перенести свій проект на Linux / MacO. Ви обов'язково повинні пам’ятати про неприємності, що обертаються навколо Oracle та спільноти Java, а також обмеження Mono та Java. Було б дуже вдячно, якщо люди, які мають досвід обох, можуть дати огляд та власне суб'єктивне уявлення про те, що б вони обрали і чому.

Якщо ви хочете перейти на Linux, UNIX і, зокрема, Mac OS, тоді, як зазначено вище, Java має перевагу.

Сподіваюся, що це допомагає!


4

Беручи до уваги ваш список пунктів, я був би розділений, і це дійсно залежатиме від того, що мені потрібно будувати.

.Net виграє за ці аспекти:

  • Продуктивність
  • Процес розробки (найпростіший / найшвидший)

Java перемагає в таких аспектах:

  • Сумісність з платформою
  • Бібліотеки (особливо сторонні бібліотеки)

Це нічия для цих аспектів:

  • Вартість (Oracle, схоже, намагається і монетизує Java)
  • Доступні інструменти (навіть сторонні інструменти)

.Net, для всіх намірів і цілей, є єдиним стеком технологій платформи. Так, Mono є, але поки Mono не на 100% сумісний з реалізацією Windows, це не забезпечує справжнього крос-платформного досвіду. Єдине підмножина, на яке ви можете розраховувати на підтримку крос-платформ, - це те, що б підходило в Silverlight.

З цього приводу .Net краще сприймає продуктивність (фактичні вимірювання TBD). В очах користувача сприймається продуктивність - це єдине, що має значення. Розвиваючись на Java протягом останніх 12+ років, і останнім часом займаюся .Net, я можу оцінити потужність платформи.

Java, з іншого боку, має набагато більш багатий набір IDE, і вартість цих покращених IDE набагато менша, ніж вартість варіанта .Net. З іншого боку, вартість професійних двигунів J2EE легко зменшує витрати на середовище розробки. У. Ні, я маю уявлення про те, що я помираю тьмяним. У Java є обхідні шляхи до величезних витрат - які можна легко компенсувати, коли час розробника їх налаштовує. Поза IDE, для інструментів, які мають значення (профілер, покриття тощо), витрати рівні.

Зрештою, це дійсно залежить від потреби . Якщо я все-таки буду розгортатись у Windows, тоді .Net - це не мозок. У мене є клієнти, які є лише магазинами Windows. Якщо я буду giong для розгортання в Unix або мені потрібно підтримувати гетерогенні системи, то Java - це не новатор. Я навіть можу бути радикальним і пропоную змішаний стек технологій. Зрештою, те, що клієнт вимагає, щоб сервер був Unix, не означає, що він працює на своїх робочих столах. Не кожну програму найкраще перетворити на веб-додаток.


4

Продуктивність - Рівна

Обидві платформи працюють надзвичайно добре практично для всіх застосувань.

Насправді їх не дуже багато, хоча мій суб'єктивний досвід полягає в тому, що у Java є невелика перевага для тривалого запуску програм, тоді як .Net швидше час запуску програми.

Доступні інструменти (навіть інструменти сторонніх виробників) - дискусійні

Залежить від того, які інструменти вам потрібні та які ви знайомі.

.Net, безумовно, має чудові інструменти, які надає Microsoft. З іншого боку, в світі Java є однаково хороші інструменти, наприклад, у середовищах Eclipse, Netbeans IntelliJ.

Сумісність з платформою - Java win

.Net принципово прив’язаний до платформ Microsoft (Windows, Xbox тощо). Повна реалізація недоступна для будь-яких платформ, що не належать Microsoft .

Моно є приємним, але насправді він не дає вам повних можливостей між платформи, оскільки він не підтримує всі бібліотеки .Net (наприклад, ви не можете очікувати, що всі графічні інтерфейси Windows працюватимуть коректно, тому якщо ви не перейдете на міжплатформний інструментарій, такий як GTK #, ви не зможете запускати додаток на різних платформах)

Java справді портативний. Не тільки мова, але набагато важливіше, що всі бібліотеки Java є портативними. Якщо ви будете дотримуватися чистих бібліотек Java (наприклад, Swing для GUI), ваш код буде працювати в будь-якому місці, де у вас є середовище виконання Java.

Бібліотеки (особливо сторонні бібліотеки) - Java win

Напевно, найкраща сила платформи Java - це величезна екосистема бібліотек, особливо бібліотеки з відкритим кодом. Деякі приклади:

  • Всі бібліотеки та інструменти Apache
  • Усі бібліотеки у величезній екосистемі Eclipse
  • Усі бібліотеки, надані та підтримувані Google
  • JBoss та всі пов'язані з цим інструменти для підприємств, що підтримуються Red Hat

Вартість (Oracle, схоже, намагається і монетизує Java) - виграє Java, якщо ви перейдете з відкритим кодом, інакше Навіть.

Ви можете мати 100% стек з відкритим кодом Java, який безкоштовний і не прив'язує вас до будь-якої конкретної фірмової платформи. Це на 100% безкоштовно.

Крім того, ви можете придбати IntelliJ IDEA, запустити Java в Windows та використовувати власну базу даних, і в цьому випадку це майже так само, як і у типового стеку Microsoft .NET.

Процес розробки (найпростіший / найшвидший) - дискусійний

Це, мабуть, більше залежить від досвіду ваших розробників з кожною платформою, а не від конкретного припису платформи.

.Net, безумовно, має кілька чудових інструментів, які можуть зробити вас дуже продуктивним для простих програм GUI в Windows. Не дивно, адже це "солодке місце" для розвитку .Net.

З іншого боку, я віддаю перевагу стеку Java для розробки на сервері. За допомогою таких інструментів як Maven та всіх можливостей безперервного розгортання / інтеграції ви можете встановити дуже ефективний процес розробки надійних додатків на сервері.

Мовний C # має деякі переваги продуктивності порівняно з Java. Але з іншого боку, якщо ви зараз розвиваєтеся на платформі Java, тенденція полягає не в тому, щоб використовувати саму Java, а натомість використовувати одну з нових мов JVM, таких як Scala, Groovy або Clojure - якщо ви це зробите, ви будете набагато продуктивнішими ніж C # або Java.


3

.Нет

Важко відповісти на це запитання, не будучи суб'єктивним чи вогнем (у мене таке відчуття, що я буду прихильним), але .Net - це мова на підйомі, і Java здається заваленою юридичними питаннями, а також стає менш популярною.

Також .net на сьогодні є набагато більш згуртованою та сучасною мовою з прекрасною підтримкою багатоядерного (Parallel.net) та асинхронного програмування (реактивні розширення), не кажучи вже про LINQ, без якого я не міг би жити. .Net також має ряд безкоштовних інструментів, але Visual Studio Express, Sql Server Express, Web Matrix тощо.

Це правда, що java має певні переваги у багатьох платформах. У вас є кілька варіантів для .Net з моно і т. Д., Які можуть бути зроблені для традиційних додатків або резервних компонентів, але деякі отримують іффі, якщо ви робите щось дуже спеціалізоване (і не давайте не обговорювати обговорення WPF).

Інший варіант, якщо кросплатформна форма дійсно важлива, - це перейти на Silverlight, я особисто не так зацікавлений у "програмах" Silverlight, але принаймні це працює.

Crossplatform є больовою точкою, запитайте себе, чи справді це дійсно потрібно, принаймні в цей момент.


Віддаючи перевагу .Net - це не погано. Мені це насправді дуже подобається. Безсумнівно, що Java наразі стикається з кризою ідентичності, що шкода - мені також подобається ця платформа. Радий, що ви визнали покращений досвід Java для крос-платформних (+1). Деякі клієнти потребують розгортання Unix, інші вимагають розгортання Windows. Люди з Java можуть обслуговувати обидві платформи, тоді як .Net дійсно обмежений системою Windows. Однак, там багато клієнтів лише для Windows.
Берін Лорич

1

У нашій організації в цей час ми обрали б Java. Причина цього проста: наша команда Java є більшою, досвідченішою та кращою, ніж наша команда .NET (яка також достатньо прив’язана до обслуговування існуючих систем, що їм не вистачає ресурсів для залучення будь-яких великих нових проектів) .
Однак, якщо існують нагальні причини використовувати .NET (наприклад, вимоги клієнтів, деякі клієнти можуть мати велику встановлену базу програмного забезпечення .NET і хочуть, щоб їх нова система вписалася в цю базу, взяла на себе обслуговування і т.д.) зробіть це і наймайте підрядників, щоб виконувати роботу там, де ми не можемо звільнити власних людей.
Я б не примушував жодної технології до замовника проти його найкращих інтересів, і деякі клієнти просто виграють (через внутрішню організацію) більше одних, ніж інші через інвестиції, необхідні для розгортання системи (знову ж таки, скажімо, у нас є клієнт, який вже працює кілька додатків .NET і має персонал, який їх підтримує, ми не збираємось намагатись наймати людей та купувати ліцензії на апаратне та програмне забезпечення для запуску Java-програми на стороні, і, звичайно, зворотній насправді ми б радили їм цього не робити, якщо вони звернулися до нас із проханням).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.