it-swarm-vi.com

Java so với C # - Phối cảnh năng suất

Nếu bạn có một số năm kinh nghiệm làm việc với Java và một số năm kinh nghiệm làm việc với C # và .NET, tôi sẽ đánh giá cao ý kiến ​​của bạn về sự khác biệt về năng suất phát triển phần mềm giữa hai môi trường này. Một trong những khách hàng của chúng tôi đang xem xét thay thế giải pháp phần mềm hiện có của họ. Vì việc thay thế sẽ cần khoảng 10 - 15 năm làm việc, một lựa chọn cho Java hoặc .NET, dựa trên sự khác biệt về năng suất giữa họ , có thể ảnh hưởng đáng kể đến đầu tư cần thiết và thời gian tiếp thị.

Bạn có thể cung cấp cho chúng tôi, một dấu hiệu cho thấy sự khác biệt về năng suất phát triển phần mềm giữa Java và C # /. NET? Tôi muốn nhận được câu trả lời như sau:

Kinh nghiệm của tôi dựa trên kinh nghiệm X năm làm việc với Java và kinh nghiệm X năm làm việc với C # /. NET. Java hiệu quả hơn X% so với C # .NET hoặc C # /. NET có năng suất cao hơn X% so với Java nếu bạn tính đến những điều sau đây.

34
Edin Dazdarevic

Kinh nghiệm của tôi dựa trên 10 năm kinh nghiệm làm việc với Java và 3 năm kinh nghiệm làm việc với C # /. NET. Java hiệu quả hơn 0% so với C # .NET Điều này dựa trên việc viết các ứng dụng dựa trên dịch vụ back-end.
[.__.] C # /. NET có thể hiệu quả hơn 5% so với Java để viết ứng dụng người dùng. Nhưng sau đó tôi đã không làm điều này trong gần 5 năm trong Java và trình soạn thảo UI Netbeans mới có thể đã thu hẹp khoảng cách.

Bạn muốn tăng năng suất? CI (lý tưởng là Giao hàng liên tục) và kiểm tra tự động. Năng suất đạt được nhờ lựa chọn ngôn ngữ/nền tảng/IDE trên bất kỳ ngôn ngữ/nền tảng/IDE chính nào là khá nhỏ.

17
mlk

Tôi đã làm việc cho các dự án cả ở trường đại học và trong Thế giới thực ™ bằng cách sử dụng Java và C # trong 5 năm nay.

Tôi rất thích sử dụng C # hơn vì nó ngắn gọn và sử dụng cú pháp đường. Bạn sẽ hiếm khi tìm thấy mã Factory.GetFactory(OfFactory.GetFactory(Factory)); trong C #. Nó dễ đọc và làm theo hơn vì cú pháp nhỏ hơn và cô đọng hơn.

Cái nào bạn sẽ làm việc hiệu quả hơn? Điều đó phụ thuộc vào loại dự án.

Bạn đang thiết kế một ứng dụng máy tính để bàn cho Windows? Thì C # là lựa chọn tốt nhất vì nó mạnh mẽ IDE Visual Studio và .NET Framework giúp việc tạo GUI rất đơn giản.

Thành thật mà nói, tôi rất vui vì tôi không sử dụng Java nữa (bây giờ đã hơn một năm rồi) bởi vì tôi nhớ cách mã hóa khủng khiếp phải có. Một ví dụ nhanh là xử lý ngoại lệ. Nếu mã của bạn có thể ném ngoại lệ bạn phải tài khoản cho mỗi ngoại lệ duy nhất có thể. Điều này nhanh chóng biến mã tầm thường thành 20 dòng + quái dị.

C # không phải là nắm tay, nếu bạn chọn để mã mở, điều đó sẽ do bạn là nhà phát triển quyết định.

C # cũng đã thực hiện rất nhiều bổ sung trong năm qua làm cho nó một niềm vui để sử dụng. Lambdas, đại biểu, chức năng ẩn danh (a la Ruby), rất nhiều điều tốt đẹp nhỏ bạn sẽ tìm thấy khi bạn đi cùng.

43
Sergio

Tôi đã làm việc rộng rãi với cả Java (từ năm 1996) và .Net (từ năm 2002) và năm 2010 đã đưa ra một quyết định đi với Java trong công ty của tôi trên cơ sở rằng nó sẽ là môi trường năng suất cao nhất nói chung.

Lưu ý rằng tôi xác định năng suất phát triển phần mềm theo giá trị doanh nghiệp được tạo trên mỗi đơn vị chi phí/tài nguyên, trên cơ sở từ đầu đến cuối (nghĩa là bạn phải xem năng suất của toàn bộ vòng đời phần mềm bao gồm triển khai và bảo trì, không chỉ là mã hóa ban đầu !!).

Dưới đây là các yếu tố chính trong lý luận của tôi:

  • Cú pháp là một yếu tố nhỏ trong năng suất - trong khi Java chắc chắn dài dòng và tôi thích cú pháp của C #, đơn giản là nó không quan trọng lắm. Cho dù nhà phát triển của bạn nhập object.getSomeProperty() so với object.SomeProperty Hoặc sử dụng lớp bên trong ẩn danh so với lambda đơn giản sẽ không tạo ra bất kỳ sự khác biệt đáng kể nào đối với lợi thế cạnh tranh của công ty bạn ....
  • Hệ sinh thái thư viện rất quan trọng - phát triển một sản phẩm phần mềm hiện đại, bạn không muốn phát triển nhiều thành phần phổ biến từ đầu. Hệ sinh thái Java có lợi thế rõ ràng về số lượng và chất lượng của các thư viện nguồn mở (đặc biệt là các thư viện được phát triển bởi Apache, Google, Quỹ Eclipse và RedHat/JBoss)
  • Tính linh hoạt/khả năng triển khai - Tôi biết rằng tôi có thể triển khai JVM trên hầu hết mọi nền tảng, bao gồm các cụm Linux lớn giá rẻ. Với .Net, bạn bị giới hạn trong môi trường Windows. Với những tiến bộ trong tùy chọn lưu trữ đám mây, tôi đánh giá đây là một lợi thế khá quan trọng.
  • Scala và Clojure đều là các tùy chọn khả thi để phát triển trên JVM nếu bạn muốn các tính năng ngôn ngữ nâng cao. Đây là một tùy chọn thực tế để phát triển trong Java nhưng hãy tiếp tục mở tùy chọn để chuyển sang Scala hoặc Clojure theo thời gian. Ở một mức độ nào đó, đây là những ngôn ngữ "thế hệ tiếp theo" mà tôi nghĩ là đi trước cả Java và C #, vì vậy điều này trấn an tôi rằng nền tảng Java có một tương lai tốt về đổi mới ngôn ngữ. (Java 7 và 8 có vẻ đầy hứa hẹn, nhưng tôi không thực sự nín thở ....)
  • Chi phí bảo trì thực sự có vẻ khá thuận lợi đối với Java. Java có cú pháp đơn giản hơn C #, có nghĩa là có độ chi tiết cao hơn nhưng trên flipside có nghĩa là mọi người có xu hướng viết mã dễ bảo trì hơn - đơn giản là khó viết "mã thông minh". Ngoài ra, thế giới Java đặt trọng tâm tương thích ngược lớn hơn nhiều so với thế giới .Net, đây sẽ là lợi thế về chi phí bảo trì trong nhiều năm.
  • Độc lập với nhà cung cấp - đã từng thấy các công ty bị đốt bởi khóa nhà cung cấp trong quá khứ, tôi cảm thấy đó là một lợi thế khi đi với hệ sinh thái Java tương đối cởi mở hơn là do Microsoft thống trị. Thế giới mạng. Ví dụ: tôi muốn có sự lựa chọn cơ sở dữ liệu hơn là sử dụng SQL Server (và Push khá mạnh, thông qua cả hỗ trợ công cụ và kỹ năng điển hình của các nhà phát triển .Net). Giữ cho nhà cung cấp đầu tư sản phẩm cốt lõi của bạn độc lập là, theo quan điểm của tôi là một bước đi dài hạn thông minh. Tôi đã đánh giá (chính xác như hóa ra) rằng OpenJDK sẽ là tương lai của Java vì vậy tôi sẽ xây dựng một cách hiệu quả trên nền tảng nguồn mở.
  • Tài năng - tất nhiên đây là chủ quan, nhưng tôi ấn tượng với khả năng kỹ thuật của các nhà phát triển trong thế giới Java hơn là trong thế giới .Net. Ấn tượng của tôi về trung bình là các nhà phát triển .Net có xu hướng làm bất cứ điều gì Microsoft cung cấp các công cụ hoặc mẫu dễ dàng cho, trong khi các nhà phát triển Java có xu hướng quan tâm nhiều hơn đến việc tìm giải pháp phù hợp từ quan điểm kỹ thuật phần mềm. Điều này là hoàn toàn chủ quan và không nghi ngờ gì phụ thuộc vào địa phương/thị trường cụ thể và rõ ràng có nhiều cá nhân không phù hợp với mô hình này, vì vậy YMMV tất nhiên.
  • Công cụ là về cấp độ. Microsoft có rất nhiều công cụ tuyệt vời, dễ sử dụng, đặc biệt hấp dẫn để phát triển trên Windows. Tuy nhiên, tôi đang làm việc chủ yếu về phát triển phía máy chủ, nơi tôi cho rằng các công cụ Java có Edge. Đặc biệt, Maven đã được chứng minh là một công cụ cực kỳ mạnh mẽ trong hệ sinh thái Java mà tôi vẫn không nghĩ rằng có một sự tương đương khá trong thế giới .Net.

Vì vậy, trong khi có rất nhiều cân nhắc phức tạp, nhìn chung, tôi khá hài lòng với lựa chọn đi cùng với Java và sẽ đưa ra lựa chọn tương tự ngày hôm nay (Tính đến đầu năm 2012).

Có lẽ trường hợp duy nhất bây giờ tôi đi với .Net sẽ là nếu tôi đang phát triển một ứng dụng máy tính để bàn chỉ dành cho Windows (trong đó lợi thế .Net rõ ràng là rất lớn).

24
mikera

Tôi có: Java 10 năm, C # 8 năm

Tôi bỏ phiếu Java cho

  1. Không có nhà cung cấp khóa (bạn có thể thay đổi ứng dụng/máy chủ web từ linux sang windows sang Unix)
  2. Khả năng tương tác/Có thể hoán đổi cho các gói của bên thứ ba, chẳng hạn như JasperReports JFreeChart, JSF hoặc Spring
  3. Hầu hết sự đổi mới đến từ đây (Log4j, Ant, Spring, Hibernate, và trên và trên)
  4. Hoạt động trên nhiều máy chủ ứng dụng (giống như A). Chẳng hạn như JBoss, Tomcat, WebSphere, GlassFish, WebLogic
9
pat

Tôi có hơn 10 năm kinh nghiệm với Java (kể từ phiên bản 1.1, thực sự!) Và 7 năm kinh nghiệm với .NET (chủ yếu là C #).

Bạn có một quyết định rất mặc dù nhưng chủ yếu là bạn nên cố gắng chia thành một vài tình huống:

Ứng dụng máy tính để bàn

Nếu bạn đang phát triển một ứng dụng máy tính để bàn, bạn phải đi với nền tảng chính mà bạn sẽ làm việc. Nếu đó là một nền tảng của Microsoft sử dụng .NET, không có giải pháp nào tốt hơn nền tảng được phát triển bởi chính tàu mẹ. Nếu đó là kịch bản Linux hoặc Đa nền tảng, hãy xem xét Java hoặc chuyển sang giải pháp dựa trên web.

Ứng dụng dựa trên web

Đây là một quyết định rất khó khăn để đưa ra bởi vì mỗi người đều có điểm mạnh và điểm yếu riêng. Đây là một vài:

C #

Sức mạnh: Hiện tại có nhiều động lực hơn để xây dựng các tính năng mới vào ngôn ngữ và nền tảng/khung. Tất cả mọi thứ đến từ một nhà cung cấp và chắc chắn đây là một lợi thế. Bạn cũng có thể sử dụng một số thành phần rất mạnh như DevExpress chẳng hạn (Java thậm chí không tiến gần đến mức có gì đó giống như những gì nhóm DX đã kết hợp trong nhiều năm qua và điều này thể hiện sự tăng năng suất rất lớn).

Điểm yếu: Đối với ứng dụng doanh nghiệp .NET không hoàn thiện như Java. Bạn không có nhiều nhà cung cấp xây dựng phần mềm doanh nghiệp bằng .NET như bạn có cho Java.

Java

Sức mạnh: Trưởng thành hơn (đã được giải thích) và có một cộng đồng lớn với một số dự án nguồn mở tuyệt vời có thể giúp đỡ. Một số .NET được gọi là các dự án nguồn mở thực sự chỉ là một bản sao của các dự án từ Java.

Điểm yếu: Oracle sở hữu Java (Tôi biết, không phải JCP) và đó chắc chắn là một rủi ro cần được xem xét. Ý định của họ không rõ ràng lắm và cá nhân tôi không thích ngôn ngữ đang diễn ra ngay bây giờ (tôi biết rất nhiều Java nhà phát triển có mối quan tâm tương tự).

Ứng dụng phía máy chủ

Về cơ bản, đó là các đối số tương tự như các Ứng dụng dựa trên web nhưng vì bạn không phải lo lắng quá nhiều về UI Java trở nên mạnh hơn trong trường hợp này. Nhưng một lần nữa, nếu nền tảng chủ yếu là Windows .NET có thể là một lựa chọn tốt hơn.

Cân nhắc chung

Nhìn chung, theo tôi, .NET có lợi thế chủ yếu là do sự tích hợp chặt chẽ của Visual Studio 2010 (tốt nhất IDE ngoài kia), MS SQL, Entity Framework, IIS, v.v. Tất cả điều này thể hiện sự tăng năng suất rất lớn và tôi có rất nhiều kinh nghiệm chứng minh điều đó. Ngoài ra, tôi làm việc với hầu hết Java nhà phát triển đã chuyển sang .NET và họ chia sẻ về cơ bản cùng quan điểm.

Tôi nghĩ đó cũng là một điểm tốt khi Microsoft mạnh hơn bao giờ hết có nghĩa là .NET sẽ ở đó trong một thời gian. Vì vậy, khi nhìn về phía trước 10 - 15 năm tôi cảm thấy an toàn hơn với .NET so với Java.

6
Alex

Java: 5 năm (không liên tục)
[.__.] C #: 7 năm

Tôi không tin rằng bạn có thể định lượng năng suất theo cách đó. Điều đó phụ thuộc rất nhiều vào từng nhà phát triển và dự án. Sử dụng những gì nhà phát triển của bạn biết.

Chỉnh sửa :
[.__.] Hãy định nghĩa "ứng dụng doanh nghiệp điển hình" là:

  • nhiều tầng
  • khách hàng/máy chủ
  • DB ủng hộ

Cả Java và C # đều có thể làm được điều đó. Đây không phải là vấn đề của ngôn ngữ, mà là về khung/thời gian chạy. Một lần nữa, hãy sử dụng những gì nhà phát triển của bạn biết. Họ có thể học một ngôn ngữ mới và Cả hai ngôn ngữ đều có thể được sử dụng với nhiều bộ công cụ GUI/libs, nhưng tất cả đều có cách tiếp cận và triết lý khác nhau.

6
EricSchaefer

Tôi là một sinh viên mới tốt nghiệp đại học, nhưng đã có kinh nghiệm thương mại với cả hai ngôn ngữ, tổng cộng khoảng 3 năm Java và 4 năm C # .Net (lưu ý .net có nghĩa là bạn có thể sử dụng C #, VB.net, C++ CLI và J # và F #).

Bây giờ tôi sẽ nêu sở thích chung của tôi là C # trên Java, trong khi cả hai đều có cú pháp tương tự tôi thích sức mạnh của khung .Net so với khả năng tương thích chéo của hệ điều hành Java. Bạn phải mạnh mẽ xem xét, những gì bạn cần xây dựng? Đây chỉ là một ứng dụng máy tính để bàn? Bạn có cần kết nối với các khách hàng khác, vì vậy các máy tính để bàn, điện thoại di động, trang web khác?

** Thảo luận về IDE bị mất khi câu hỏi tại Stackoverflow đã bị đóng. Kết thúc của nó là Java có nhiều IDE miễn phí nhưng theo tôi thì không so sánh được với sức mạnh và addons của visual studio. Nhưng lưu ý rằng Visual studio có giá trên mỗi giấy phép.

Bạn cần xem xét những kỹ năng mà nhóm phát triển của bạn đã có, vì điều này sẽ có tác động ban đầu. Cái nào nhanh hơn ở đây và cũng không có người dùng có kinh nghiệm trong cả ngôn ngữ/khung. Mà tôi đoán mang đến điểm mà bạn không được xem xét ngôn ngữ, vì ngôn ngữ chỉ là cú pháp, mà là các công cụ và khuôn khổ mà ngôn ngữ đang sử dụng.

4
JonWillis

Tôi đã lật qua lại giữa Java và .NET, bắt đầu bằng Java 1.2 lên đến 1.6 và .NET 1 lên đến 4.0, khoảng 10 nhiều năm kinh nghiệm làm việc chuyên nghiệp (là lập trình viên C/C++ trước đó).

Đã có lúc, như .NET 2.0, tôi sẽ nói rằng Java và C # sẽ giống nhau, đặc biệt là đối với công việc back-end. Các cấu trúc ngôn ngữ vẫn rất giống nhau. .NET sẽ có có lẽ đã đạt được Edge trong lập trình UI trên máy tính để bàn, vì nhà thiết kế WinForms trong Visual Studio và Java sẽ có Edge trong Web/Server, chủ yếu là do bạn không bị mắc kẹt với IIS.

Bây giờ chuyển sang .NET 3.5 và 4, tôi cung cấp năng suất Edge cho .NET, thực tế. Theo tôi, điều này chủ yếu là vì .NET là ngôn ngữ phát triển nhanh hơn nhiều, vì MS có thể đưa ra quyết định ngôn ngữ tương đối nhanh chóng, trái ngược với việc thúc đẩy thay đổi thông qua chính trị của JCP. Những cải tiến lớn là từ khóa var, toàn bộ Linq, Phương thức mở rộng, toán tử kết hợp Null ??, dynamic, và có lẽ nhiều thứ tuyệt vời hơn thực sự giúp tăng năng suất.

Bây giờ, điều đó nói rằng, ngôn ngữ "năng suất cao nhất" cho một dự án hầu như luôn là ngôn ngữ mà các nhà phát triển nhất cảm thấy thoải mái và có kinh nghiệm nhất. Các đường cong học tập luôn là kẻ giết người năng suất lớn nhất.

3
rally25rs

Một điều mà tôi nhận thấy là nhiều cửa hàng C # /. NET có thái độ "không được phát minh ở đây" và cấm tất cả các thư viện nguồn mở/bên thứ ba trong khi nhiều cửa hàng Java sẵn sàng sử dụng các thư viện nguồn mở. Ngoài ra, dường như có nhiều thư viện có sẵn cho Java. Ngay cả khi bạn xem một số thư viện bên thứ ba thú vị trong .NET, ví dụ: NHibernate, NPOI, Spring.NET, v.v. chúng là các cổng của thư viện Java và do đó đứng sau chúng. Có vẻ như nhiều sự đổi mới này xuất hiện đầu tiên cho Java và sau một thời gian, một cổng .NET đã được tạo. Từ góc độ thư viện, dường như chắc chắn Java chiến thắng về những khám phá sáng tạo mới.

Tuy nhiên, Microsoft vẫn tạo ra một số thư viện chính thức, ví dụ: ASP MVC, LINQ, v.v. Nhưng thường thích với ASP Các thư viện bên thứ ba MVC như Struts, Spring MVC, v.v. đã được phát hành cho Java và Microsoft đã muộn khi nhập mô hình web của bộ điều khiển xem mô hình.

Tất nhiên, nhiều thư viện trong số này tiết kiệm rất nhiều thời gian và giúp bạn làm việc hiệu quả hơn. Ngôn ngữ cốt lõi với ngôn ngữ cốt lõi C # và Java không khác nhau và đối với tôi nó quá gần để gọi. Ném vào đội quân của các thư viện bên thứ ba và quy mô chắc chắn nghiêng về phía Java. Vẫn với một cửa hàng mở rất nhiều sự cân bằng nghiêng ra. Chỉ có rất nhiều cửa hàng .NET không được phát minh ở đây trong khi rất nhiều cửa hàng Java là bất cứ điều gì cần thiết để hoàn thành công việc ... Điều này thậm chí đúng trong công ty tôi làm việc. Nhóm NET không nhận được nhiều (do quản lý) trong khi nhóm Java có nhiều thư viện/tiện ích bên thứ ba được phê duyệt. Ngoài ra với .NET, nhiều thứ tốt hơn không phải là miễn phí (ví dụ trước NPOI nếu bạn muốn làm việc với các tài liệu văn phòng của Microsoft, hầu hết các giải pháp [không tính tự động hóa văn phòng] đều không miễn phí. Trong khi đó Java đã có POI từ năm 2001 Tôi không nghĩ NPOI ra đời cho đến năm 2008, thật khó để nói dựa trên trang web của dự án npoi.

3
Cervo

Với sự tương đồng về cú pháp và công cụ, mức tăng năng suất từ ​​C # hoặc Java không phải là một thứ tự lớn để tạo ra sự khác biệt đáng kể cho dự án làm việc 10 - 15 năm của bạn. Tôi sẽ xem xét chặt chẽ hơn tại các vấn đề như:

  1. Các yêu cầu của dự án là gì và khả năng ngôn ngữ nào đáp ứng các yêu cầu đó (ví dụ: đa nền tảng so với máy khách Windows phong phú).
  2. Những gì tôi có thể áp dụng như một phương pháp/phương pháp dự án sẽ cho phép nhóm của tôi làm việc hiệu quả.
  3. Tôi có thể làm gì về môi trường làm việc để đảm bảo tôi sử dụng, giữ lại và sử dụng đầy đủ đội ngũ tốt nhất có thể cho một dự án quan trọng.

Tôi cho rằng, theo tôi, tiền đề đằng sau câu hỏi, rằng "sự khác biệt về năng suất giữa (C # và Java) có thể ảnh hưởng đáng kể đến đầu tư cần thiết và thời gian tiếp thị" là không đúng. Tôi không nghi ngờ sẽ có một số khác biệt nhưng nó sẽ không đáng kể.

3
AlexC

Tôi đã tự hỏi mình câu hỏi này rất nhiều: cái nào tốt hơn? C # hoặc Java?

Tôi sẽ cho bạn một lời khuyên và lời khuyên này là kết luận cho nghiên cứu của tôi: Không ai trong số họ tốt hơn, chỉ có ngôn ngữ bạn biết rõ và bạn có thể thực hiện nhiều ứng dụng hấp dẫn là tốt nhất.

Học cách lập trình và sau đó rèn luyện bản thân rất nhiều bằng một ngôn ngữ và khi bạn trở nên hoàn hảo trong việc viết mã với nó, hãy nghĩ về các ngôn ngữ khác và tin tôi, bạn sẽ học các ngôn ngữ khác như một miếng bánh.

0
Salah