Java проти C # - Перспективність продуктивності [закрито]


34

Якщо у вас є багаторічний досвід роботи з Java та багаторічний досвід роботи з C # і .NET, я би оцінив вашу думку щодо відмінностей продуктивності розробки програмного забезпечення між цими двома середовищами. Один із наших клієнтів розглядає можливість заміни існуючого програмного рішення. Оскільки для заміни знадобиться бл. Робота 10–15 чоловічих років, вибір для Java або .NET, виходячи з різниці в продуктивності між ними, може суттєво впливати на необхідні інвестиції та час на ринок.

Чи можете ви надати нам інформацію про продуктивність розробки програмного забезпечення між Java та C # /. NET? Я хотів би отримати відповідь так:

Мій досвід базується на X-річному досвіді роботи з Java та X-річному досвіді роботи з C # /. NET. Java на X% продуктивніша, ніж C # .NET або C # /. NET на X% продуктивніша, ніж Java, якщо взяти до уваги наступне.


24
Я думаю, тут важливим є і те, що ви робите. .NET може бути кращим для деяких типів проектів, а Java для інших.
Øyvind Knobloch-Bråthen

4
Що це за проект? Багато що залежить від наявних бібліотек для того, що ви намагаєтеся зробити. Я дуже віддаю перевагу мові C #, але я не стверджую, що .net кращий, ніж Java для будь-яких проектів.
CodesInChaos

7
ІМО є дуже важливим стратегічним рішенням і не повинен взагалі базуватися на продуктивності програміста. Якщо ви хочете досконало приємний інтерфейс Windows GUI, ви не можете вибрати Java, навіть якщо статистика стверджує, що вона на 7% продуктивніша. Якщо вам потрібен справжній продукт з крос-платформою без обмежень Mono, Java - ваша дитина, навіть якщо C # має кращий синтаксис.
користувач281377

2
@Edin: "Корпоративна програма" не дуже описує, який тип програми це ... Чи це лише робочий стіл, конфігурація клієнта / сервера, веб-служби, веб-сайти, можливі супутникові програми на мобільних пристроях тощо?
благоговіння

3
Це "Java", а не "JAVA"
Махмуд Хоссам,

Відповіді:


17

Мій досвід базується на 10-річному досвіді роботи з Java та 3-річному досвіді роботи з C # /. NET. Java на 0% продуктивніша, ніж C # .NET. Це ґрунтується на написанні додаткових сервісних додатків.
C # /. NET, можливо, на 5% продуктивніший, ніж Java для написання програм користувача. Але тоді я цього майже майже 5 років не робив на Java, і новий редактор інтерфейсу Netbeans міг би закрити прогалину.

Ви хочете збільшити продуктивність? CI (в ідеалі безперервна доставка) та автоматизовані тести. Продуктивність, здобута вибором мови / платформи / IDE для будь-якої основної мови / платформи / IDE, досить мала.


Ви мали на увазі сказати 0% для Java? Ви хочете сказати, що на 0% продуктивніше для додаткових сервісних програм або Java в цілому? Просто перевіряю.
Джон Онстотт

Якби ви попросили мене написати зворотній додаток (деякі правила, доступ до db і те, що у вас є), то оцінка буде ідентичною як для C #, так і для Java. Якщо ви попросили застосувати програму для кінцевого користувача Windows, я зробив би мою оцінку трохи більшою для Java, ніж C # (WPF / XAML та її підтримка MVVM через прив'язку, я думаю, дещо продуктивніше, ніж більш ручне прив'язування та побудова інтерфейсу в Java (як вимкнено) 5 років тому)).
млк

+1 за "Продуктивність, здобута вибором мови / платформи / IDE для будь-якої основної мови / платформи / IDE, досить мала".
Адам Яскевич

3
-1 за останнє речення. Для кожного (у реальному світі) проблемного класу ви можете вибрати дві загальноприйняті мови високого рівня, де збільшення продуктивності від однієї до іншої перевищує 100%. Якщо ви вибираєте між C # та Java, ви знайдете невелику різницю (хоча я б стверджував, що C # виявиться значно більш продуктивним у областях, придатних для функціонального програмування). Якщо вибір між C і OCaml, різниця залежить від вас.
back2dos

42

Я працював над проектами як в коледжі, так і в реальному світі ™, використовуючи Java і C # вже 5 років.

Руки вниз мені подобається використовувати C # більше через його стислість та використання синтаксичного цукру. Рідко ви знайдете Factory.GetFactory(OfFactory.GetFactory(Factory));код у C #. Простіше читати та слідувати за ними, оскільки синтаксис менший та більш лаконічний.

З ким ти будеш більш продуктивним? Це залежить від типу проекту.

Ви розробляєте настільний додаток для Windows? Тоді C # - найкращий вибір, оскільки його потужна IDE Visual Studio, а .NET Framework робить створення GUI дуже простим.

Чесно кажучи, я радий, що більше не використовую Java (минуло вже рік), бо пам’ятаю, яким жахливо був багатослівний код. Швидкий приклад - обробка виключень. Якщо ваш код може кинути виняток, ви повинні врахувати кожен можливий виняток. Це швидко перетворює тривіальний код на 20-й рядок + жахливість.

C # не є рукою, якщо ви вирішите залишити свій код відкритим, це вирішувати вам як розробнику.

C # також зробив багато доповнень за рік, які роблять його радістю користуватися. Лямбди, делегати, анонімна функція (a la Ruby), багато хороших дрібниць, які ви знайдете, коли будете їхати.


3
Я пам’ятаю, що на Java з uni, пункт, який я радий забути. Примусове поводження з виключеннями. так, це мало мету, але документація з кодом може сказати, чи методи викидають винятки, і це дає вам вибір, що робити.
JonWillis

5
ха-ха, я програміст Java, але мені сподобався ваш приклад код.
Чак Стефанський

6
If your code can throw an exception you must account for every single exception possible.Я не бачу недоліків у цьому, принаймні, це підвищує усвідомлення проблем ... хоча, я можу бути просто я.
Боббі

4
Перевірені винятки означають, що ви пишете код обробки помилок як частину основної реалізації, замість того, щоб зафіксувати його як задум. Це означає досить багато технічного обслуговування.

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

23

Я активно працював з Java (з 1996 р.) І .Net (з 2002 р.), І в 2010 році прийняв рішення співпрацювати з Java в моїй компанії, виходячи з того, що це буде найпродуктивніше середовище в цілому .

Зауважте, що я визначаю продуктивність розробки програмного забезпечення з точки зору вартості бізнесу, створеної на одиницю витрат / ресурсу, поступово (тобто потрібно дивитися на продуктивність всього життєвого циклу програмного забезпечення, включаючи розгортання та обслуговування, а не лише початкове кодування !!).

Ось ключові елементи моїх міркувань:

  • Синтаксис є другорядним фактором продуктивності - хоча Java, безумовно, багатослівна, і я віддаю перевагу синтаксису C #, він просто не має великого значення. Незалежно від того, чи розробити ваші розробники object.getSomeProperty()проти object.SomePropertyабо використовувати анонімний внутрішній клас проти лямбда, це просто не зробить помітних змін у конкурентній перевазі вашої компанії ....
  • Екосистема бібліотеки має вирішальне значення - розробляючи сучасний програмний продукт, ви не хочете розробляти безліч загальних компонентів з нуля. Екосистема Java має очевидну перевагу щодо кількості та якості бібліотек з відкритим кодом (особливо тих, що розроблені Apache, Google, Фондом Eclipse та RedHat / JBoss)
  • Гнучкість переносимості / розгортання - я знаю, що я можу розгорнути JVM на майже будь-якій платформі, включаючи великі дешеві кластери Linux. За допомогою .Net ви обмежені в середовищі Windows. З досягненням варіантів хмарного хостингу я вважав це досить важливою перевагою.
  • Scala і Clojure - це життєздатні варіанти розвитку JVM, якщо ви хочете розширених мовних можливостей. Це реалістичний варіант для розвитку на Java, але залишайте відкритим варіант для переходу до Scala або Clojure з часом. Якоюсь мірою це мови "наступного покоління", які, на мою думку, випереджають і Java, і C #, тому це переконувало мене, що платформа Java має гарне майбутнє з точки зору мовних інновацій. (Java 7 і 8 виглядали багатообіцяючими, але я не точно затамував дихання ....)
  • Витрати на технічне обслуговування насправді здавалися досить сприятливими для Java. У Java є простіший синтаксис, ніж C #, що означає більше багатослівності, але, з іншого боку, означає, що люди прагнуть писати більш підтримуваний код - просто важче написати "розумний код". Крім того, світ Java надає значно більшу вагу зворотній сумісності, ніж світ .Net, що стане перевагою в плані витрат на обслуговування протягом декількох років.
  • Незалежність постачальників - побачивши, як компанії в минулому спалювались від блокування постачальників, я відчув, що це було перевагою перейти до відносно більш відкритої екосистеми Java, а не домінуючого у світі .Net світу. Наприклад, я б скоріше мав вибір баз даних, а не натискання на використання SQL Server (і поштовх досить сильний, як через підтримку інструментів, так і типовий набір розробників .Net). Підтримка вашого незалежного постачальника інвестицій у продукт є, на мою думку, розумним довгостроковим кроком. Я судив (як правильно виявляється), що OpenJDK - це майбутнє Java, тому я буду ефективно будувати платформу з відкритим кодом.
  • Талант - це, звичайно, суб'єктивно, але мене більше вразили технічні можливості розробників у світі Java, ніж у світі .Net. Моє враження в середньому полягало в тому, що розробники .Net мали тенденцію робити все, що пропонував Microsoft, легкі інструменти або шаблони, тоді як розробники Java, як правило, більше піклувалися про пошук правильного рішення з точки зору інженерії програмного забезпечення. Це абсолютно суб'єктивно і, без сумніву, залежить від конкретної місцевості / ринку, і явно було багато людей, які не відповідали цій схемі, тому YMMV, звичайно.
  • Інструменти були приблизно рівні. У Microsoft є багато чудових, простих у використанні інструментів, які були б особливо привабливі для розробки в Windows. Однак я працюю в основному над розробкою на сервері, де я б стверджував, що інструменти Java мають перевагу. Зокрема, Maven виявився надзвичайно потужним інструментом в екосистемі Java, який, я все ще не думаю, має гідний еквівалент у світі .Net.

Тож, хоча було багато складних міркувань, загалом я дуже задоволений вибором, щоб перейти з Java, і зробив би той самий вибір сьогодні (станом на початок 2012 року).

Напевно, єдиний випадок, коли я б пішов з .Net, був би, якби я розробляв настільний додаток для Windows (де перевага .Net явно величезна).


9
+1: Чудова відповідь! Він узагальнює багато питань, які слід враховувати при оцінці продуктивності в цілому. Деякі синтаксичні цукру можуть зробити мову схожою на прохолодну та "сучаснішу", але є й інші важливі фактори, які впливають на продуктивність.
Джорджіо

3
+1 - спосіб більш вичерпної відповіді, ніж попередні.
NlightNFotis

1
Оскільки ви згадали про Scala та Clojure, ви можете також згадати F # теж ...
Mauricio Scheffer

2
Чудово! Ретельний аналіз. Тільки те, що я шукав. :)
xebo

9

У мене: Java 10 років, C # 8 років

Я голосую за Яву

  1. Немає блокування постачальника (ви можете змінити додаток / веб-сервери з Linux на Windows на Unix)
  2. Взаємодія / Взаємозамінність сторонніх пакетів, таких як JasperReports JFreeChart, JSF або Spring
  3. Більшість інновацій надходить саме звідси (Log4j, Ant, Spring, Hibernate, і далі)
  4. Працює на декількох серверах прикладних програм (типу A). Такі як JBoss, Tomcat, WebSphere, GlassFish, WebLogic

23
Які "нововведення" можуть бути в мові без лямбда?
SK-логіка

6
Були й інші рамки MVC перед ASP MVC (наприклад, MonoRail) ...
EricSchaefer

2
О BTW: Лямбда / закриття - це мовна особливість, ви говорите про рамки.
EricSchaefer

5
@ SK-логіка, вам не потрібні лямбдаси для написання шару O / R.

2
@ Джорджо, лямбдаси ідеально підходять до будь-якої мови з GC. В C ++ і C, звичайно, їм немає місця.
SK-логіка

6

Java: 5 років (безперервне)
C #: 7 років

Я не вірю, що ви зможете кількісно оцінити продуктивність. Це сильно залежить від індивідуального розробника та проекту. Використовуйте те, що знають ваші розробники.

Редагувати:
Давайте визначимо "типовий корпоративний додаток" як:

  • багатоярусна
  • клієнт / сервер
  • БД підтримується

І Java, і C # можуть це зробити. Це не стільки питання мови, скільки рамки / часу виконання. Знову ж таки, використовуйте те, що знають ваші розробники. Вони можуть вивчити нову мову та новий фреймворк, але для її отримання потрібен час. Це було б правдою для настільних додатків. Обидві мови можна використовувати з численними наборами інструментів GUI / lib, але всі вони мають різні підходи та філософії.


3
"Це дуже залежить від індивідуального розробника" ... саме тому він хотів думки від людей, які мають досвід в обох світах ... "та проекту". ... що вимагає відповіді, яка вказує на те, які проекти матимуть користь від різних технологій.
благоговіння

4
Це залежить не від цього розробника (він же), а від чортів, які повинні будувати проект. Так само було б простіше, якби він заявив, який проект він збирається будувати ...
EricSchaefer

@eric це типова корпоративна програма
Едін Даздаревич,

@Edin, Java має видання JavaEE з вбудованими функціями підприємства. Ви можете швидко розробляти додатки за допомогою цієї рамки. Однак це робить багато матеріалів від Magic, ви повинні відповідати її правилам. І якщо все порушиться, не очікуйте, що повідомлення про винятки будуть корисними, оскільки стеження величезна. Доступ до БД з неправильним іменем або БД вимкнено, трак стека настільки великий, що ви не бачите, що викликало початкову проблему.
JonWillis

5
Впевнені, що існує "типова корпоративна програма", візьміть ці дані з точки a, дозвольте користувачеві зіпсувати їх, а потім покладіть у пункт b. ;)
mezmo

6

Я маю 10+ років досвіду роботи з Java (з версії 1.1, справді!) Та 7 років досвіду роботи з .NET (переважно C #).

У вас є дуже хоча рішення, але в основному ви повинні спробувати розбитись на кілька сценаріїв:

Настільний додаток

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

Веб-додаток

Це дуже важке рішення прийняти, оскільки кожен має свою силу і слабкість. Ось декілька:

C #

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

Слабкість: для корпоративного застосування .NET не настільки зрілий, як Java. У вас не так багато постачальників, що будують корпоративне програмне забезпечення в .NET, як у вас є для Java.

Java

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

Слабкість: Oracle володіє Java (я знаю, не JCP), і це, безумовно, є ризиком, який слід враховувати. Їх наміри не дуже зрозумілі, і мені особисто не подобається, куди мова йде зараз (я знаю, що багато розробників Java мають подібні проблеми).

Застосування сервера

Це в основному ті ж аргументи, що і веб-додатки, але оскільки вам не доведеться надто турбуватися про користувальницький інтерфейс Java, у цьому випадку стає сильніше Але знову ж таки, якщо платформа здебільшого Windows .NET може бути кращим вибором.

Загальні міркування

В цілому, на мою думку, .NET має перевагу здебільшого через тісну інтеграцію Visual Studio 2010 (передає найкращий IDE там), MS SQL, Entity Framework, IIS тощо. Це все означає величезне підвищення продуктивності праці, і я маю багато досвіду, що підтверджує це. Також я працюю з переважно розробниками Java, які звернулися до .NET, і вони поділяють в основному ту саму думку.

Я думаю, що це також добре, що Microsoft сильніший за будь-який сенс. NET буде там деякий час. Тому, дивлячись на 10-15 років вперед, я відчуваю себе більш захищеним від .NET, ніж Java.


4

Я нещодавно закінчив студент університету, але мав комерційний досвід роботи з обома мовами, даючи в цілому близько 3-х років і 4-х років C # .Net (зверніть увагу. Net означає, що ви можете використовувати C #, VB.net, C ++ CLI, і J # і F #).

Я зараз заявлю, що моє загальне уподобання - це C # над Java, хоча обидва мають аналогічний синтаксис, мені подобається потужність. Ви повинні рішуче задуматися, що потрібно будувати? Це просто настільний додаток? Вам потрібен зв’язок з іншими клієнтами, так і іншими настільними комп'ютерами, мобільними телефонами, веб-сайтами?

** Дискусія про програму IDE, втрачену в результаті запитання в Stackoverflow, було закрито. Кінцевою суттю цього було те, що у Java є безліч безкоштовних IDE, але вони, на мою думку, не порівнюються з потужністю та доповненнями візуальної студії. Але зверніть увагу, що студія Visual коштує понад ліцензію.

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


11
1000 фунтів стерлінгів за ліцензію на VS? Якщо ви отримуєте підписки на MSDN, ви отримуєте набагато більше програмного забезпечення та інструментів, доступних за вартість. Я дуже сумніваюся, що хтось платить за роздрібну ціну полиці VS2010.
James Love

6
@Michael, я ніколи не намагався одержати розширення VS. Однак я використовую або пробував різноманітні плагіни для Visual studio. До них відносяться Resharper, CodeRush, Gallio, VisualSVN, AnkhSVN, testDriven.Net та багато інших.
JonWillis

2
@JonWillis погодився, там є безліч розширень. На вершині цього списку я також щодня використовую продуктивність Power Tools, CKS: Dev для SharePoint та WSPBuilder. Галерея (на visualstudiogallery.msdn.microsoft.com ) налічує пару тисяч, тому не може бути так складно написати більше розширень для VS (повний фреймворк насправді передбачений для цього, і є достатня підтримка спільноти) .
James Love

1
Для проекту, який планується на 10-15 чоловік роботи, початковою вартістю ліцензій VS є арахіс.
трепет

1
Visual Studio 2010 Professional без MSDN становить 550 доларів.
Борис Янков

3

При подібності в синтаксисі та інструментах підвищення продуктивності від C # або java не на порядок, щоб суттєво змінитись вашим робочим проектом на 10 - 15 років. Я б більш уважно придивився до таких питань, як:

  1. Які вимоги проекту та які мовні можливості відповідають цим вимогам (наприклад, крос-платформа та багатий клієнт Windows).
  2. Що я можу створити як проектний підхід / методологія, яка дасть змогу моїй команді продуктивно працювати.
  3. Що я можу зробити щодо робочого середовища, щоб переконатися, що я працевлаштовую, утримую та повною мірою використовую найкращу команду для важливого проекту.

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


3

Я перегортав назад і назад між Java та .NET, починаючи з Java 1.2 до 1.6 і .NET 1 до 4.0, протягом 10 років професійного досвіду (будучи програмістом C / C ++ до цього).

Свого часу, як .NET 2.0, я б сказав, що Java і C # будуть приблизно однакові, особливо для бек-енд роботи. Мовні конструкції були ще дуже схожі. .NET, мабуть, отримав перевагу в програмуванні настільного інтерфейсу через дизайнера WinForms у Visual Studio, а Java мала б перевагу в речах Web / Server, насамперед тому, що ви не застрягли в IIS.

Тепер, переходячи до .NET 3.5 і 4, я надаю перевагу продуктивності .NET, знижуючи руки. Це, в першу чергу, на мою думку, тому що .NET - це набагато швидша мова, що розвивається, оскільки МС може приймати мовні рішення відносно швидко, на відміну від натискання змін через політику JCP. Великі вдосконалення - це varключове слово, сукупність Linq, Методи розширення, оператор Nu-coalescing ??,dynamic і , ймовірно, набагато більше великий матеріал , який дійсно підвищує продуктивність праці.

Тепер, як сказано, «найпродуктивніша» мова для проекту майже завжди є тією, якою найбільше комфортно і досвідчено найбільше розробників. Крива навчання - це завжди найбільший вбивця продуктивності.


3

Одне, що я помітив, це багато C # /. NET магазинів мають "не винайдене тут" відношення та забороняють усі бібліотеки третьої сторони / з відкритим кодом, тоді як багато магазинів Java бажають використовувати бібліотеки з відкритим кодом. Крім того, здається, що для Java існує більше бібліотек. Навіть якщо ви подивитеся на якісь чудові бібліотеки сторонніх розробників у .NET, наприклад NHibernate, NPOI, Spring.NET тощо, вони є портами бібліотек Java і, отже, знаходяться за ними. Звичайно, схоже, що багато хто з цих нововведень прийшли спочатку на Java, а після цього був створений порт .NET. З точки зору бібліотеки, безумовно, здається, що Java перемагає в плані нових інноваційних відкриттів.

Але Microsoft все ж робить деякі офіційні бібліотеки, наприклад ASP MVC, LINQ тощо. Але часто, як у випадку з ASP MVC сторонніми бібліотеками, такими як Struts, Spring MVC тощо, для Java вже не було, і Microsoft запізнювалася на введенні веб-парадигми контролера перегляду моделей.

Звичайно, багато з цих бібліотек економлять багато часу і роблять вас більш продуктивними. Основна мова до основної мови C # та Java не так вже й відрізняються, і для мене це занадто близько для виклику. Увійдіть до армії сторонніх бібліотек і масштаб, безумовно, нахиляється до Яви. Ще з відкритим магазином багато цього нахилу врівноважується. Це просто багато .NET магазинів мають не вигадане тут ставлення, тоді як багато Java-магазинів - це все, що потрібно, щоб виконати роботу ... Це навіть вірно в компанії, в якій я працюю, команда .NET не отримує багато (завдяки управлінню), хоча команда Java має багато затверджених сторонніх бібліотек / утиліт. Також з .NET набагато більше корисних речей не є безкоштовними (наприклад, до NPOI, якщо ви хотіли працювати з офісними документами Microsoft, більшість рішень [без урахування автоматизації офісу] були безкоштовними.


"Тут не винайдено". Виходячи з яких підстав? Я працюю в поєднанні між C # і Java, і я здаюсь більшими зловживаннями з боку людей Java, наприклад, створюючи IConverter і впроваджуючи логіку для перетворення рядка в подвійний, і навпаки.
Джордж Сільва

З кількох причин я віддаю перевагу C # над Java, але я віддаю перевагу "перенесеним" Java в бібліотеки Java на C # над рідними C #, як правило, краще розробленими, перевіреними та застосованими в реальному світі.
umlcat

0

Я дуже задав собі це питання: що краще? C # або Java?

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

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

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