Bạn sẽ chọn gì cho dự án giữa .NET và Java tại thời điểm này? [đóng cửa]


13

Bạn mới bắt đầu một dự án mới và bạn có hai công nghệ này để lựa chọn, Java và .NET. Dự án bạn đang làm không liên quan đến việc có các tính năng giúp bạn dễ dàng lựa chọn giữa hai công nghệ (ví dụ .NET có cái này tôi cần và Java không có) và cả hai đều hoạt động tốt với bạn (mặc dù bạn chỉ cần một khóa học). Đưa vào tài khoản:

  • Hiệu suất
  • Công cụ có sẵn (ngay cả công cụ của bên thứ 3)
  • Khả năng tương thích đa nền tảng
  • Thư viện (đặc biệt là thư viện bên thứ 3)
  • Chi phí (Oracle dường như cố gắng và kiếm tiền từ Java)
  • Quá trình phát triển (Dễ nhất / Nhanh nhất)

Ngoài ra, hãy nhớ rằng Linux không phải là nền tảng chính của bạn nhưng bạn cũng muốn chuyển dự án của mình sang Linux / MacOs. Bạn chắc chắn nên ghi nhớ những rắc rối đang xoay quanh Oracle và cộng đồng Java cũng như những hạn chế của Mono và Java. Sẽ được đánh giá cao nếu những người có kinh nghiệm trong cả hai có thể đưa ra một cái nhìn tổng quan và quan điểm chủ quan của riêng họ về cái mà họ sẽ chọn và tại sao.

java  .net  mono 

Không có đủ thông tin về các yêu cầu để trả lời hiệu quả câu hỏi này.
bụi đỏ

3
Mono là một nỗi đau (ví dụ như thời gian chìm). Ngay cả một nhà thiết kế WinForm cơ bản cũng không có.
Công việc

@Job thực sự, MonoDevelop có trình thiết kế GUI cho GTK #, vì WinForms chưa phải là nguồn mở.
Mahmoud Hossam

Có, nhưng Mono với thư viện của bên thứ 3 như thế nào? Họ có "chỉ làm việc" không? Và (có lẽ quan trọng nhất) các nhà cung cấp có hỗ trợ nếu bạn sử dụng chúng với Mono không?
TMN

Câu trả lời:


26

Quyết định quan trọng nhất (chỉnh sửa: kỹ thuật) là:

  • Tại thời điểm này, bạn có cam kết 100% sử dụng Windows làm nền tảng triển khai trong tương lai của mình không?

Nếu không, thì bạn nên đi với Java.


Kết luận từ Mono thường được sử dụng để nói "Có, .NET là đa nền tảng". Yêu cầu đó có giá trị như thế nào? là Mono chỉ là tùy chọn IFF bạn phát triển chống lại nó!

Bạn không thể mong đợi các ứng dụng .NET hoạt động tốt.


@Basic nói rằng đây là một bình luận nhiều hơn là một câu trả lời. Nói chính xác, tôi coi đó là một câu hỏi để đi đầu danh sách, bởi vì đây có lẽ là quyết định kỹ thuật quan trọng nhất bạn cần làm khi giao dịch với .NET. Như Basic nói rằng anh ta sẽ thử nghiệm chống lại Mono, sau đó là điều không nên, và tôi sẽ coi Java và .NET là khá phù hợp như nhau. Tôi có rất ít kinh nghiệm với .NET, nhưng có một chút về Java.

  • Hiệu năng - Java chạy khá tốt, nhưng vẫn có khá nhiều thời gian khởi động. Điều này là do JVM bắt đầu từ đầu khi được khởi tạo và truy cập ngẫu nhiên của tệp jar thư viện thời gian chạy khá chậm khi cần phải đọc từ đĩa. Các Java 6 gần đây có một quá trình nền để cố gắng giữ các tệp jar thư viện thời gian chạy trong bộ đệm của đĩa để truy cập nhanh khi cần.

  • Công cụ có sẵn. Có rất nhiều công cụ tồn tại và có rất nhiều Nguồn mở chất lượng cao. IBM có sẵn một số công cụ rất tiên tiến, nhưng họ cũng mất khá nhiều tiền cho chúng. Bạn có thể muốn xem MyEclipse, người kiếm sống từ việc kết hợp các phần tốt nhất trong thế giới Java và làm cho chúng có thể truy cập được với chi phí thấp, để xem những gì có sẵn. Netbeans có một trình soạn thảo GUI rất đẹp. JDeveloper có một trình gỡ lỗi Swing đẹp. Sun 6 JDK có VisualVM, một trình lược tả mức nhập cảnh đẹp, có thể phân tích các chương trình đã chạy (là một tính năng sát thủ).

  • Tương thích đa nền tảng. Rất tốt, có xu hướng xuất sắc. JVM là rất, rất đáng tin cậy và có thể dự đoán. Các vấn đề chỉ hiển thị khi sự khác biệt của hệ điều hành thấm vào - như phân tách tệp, độ nhạy trường hợp tên tệp và hành vi menu.

  • Thư viện. Có rất nhiều và rất nhiều trong số chúng có sẵn miễn phí và có thể sử dụng được, nhưng chủ yếu được viết bằng Java vì khá khó để lấy mã được viết bằng các ngôn ngữ không phải là JVM.

  • Giá cả. Java về cơ bản là có sẵn miễn phí. Những gì Oracle đang chỉ ra là các công cụ quyền lực - rất có thể đến từ JRocket - sẽ có giá. Cũng lưu ý rằng hỗ trợ dành cho ("Java dành cho doanh nghiệp") cũng có giá. Các nền tảng không phải là x86 là một giống đang chết dần, nhưng IBM có rất nhiều và IBM cung cấp một triển khai Java tuyệt vời cho chúng. Điều này có giá là một phần của hệ điều hành - rất có thể để áp dụng tốt hơn.

  • Quá trình phát triển. Java dành nhiều thời gian để nghiên cứu và lựa chọn công nghệ phù hợp và học nó, nhưng khi hoàn thành, tôi nghĩ có rất nhiều công nghệ phát triển khá nhanh. Phiên bản mới nhất của Java EE cung cấp cho việc viết các trang web rất mạnh bằng cách sử dụng Facelets có thể được tải lại ít nhất là nhanh như các trang PHP.

Tôi nghĩ rằng trừ khi bạn không thành thạo cả Java hay .NET, bạn sẽ tiết kiệm thời gian và tiền bạc bằng cách chọn công nghệ mà bạn và tổ chức của bạn quen thuộc nhất.


14
Ai đảm bảo rằng chương trình Java bạn viết trên Windows sẽ chạy ở bất kỳ nơi nào khác? Nó chỉ mất một cuộc gọi JNI duy nhất để phá vỡ sự đảm bảo đó. Vấn đề tương tự cũng xảy ra với CLI - nếu bạn sử dụng API không có biểu đồ chéo, bạn sẽ mất tính di động. Do đó, người duy nhất có thể đảm bảo tính di động là chính bạn - lập trình viên, bất kể bạn đang sử dụng khuôn khổ nào.
Đánh dấu H

3
@ Thorbjørn, bạn có tin tưởng Oracle trong môi trường hiện tại không?
radekg

12
+1 vì Thorbjørn nói rằng nếu bạn không cam kết 100% với Windows thì bạn nên đi với Java, không phải là bạn phải đi với Java. Và tôi đồng ý - vâng, Mono ở đó như một dự phòng, nhưng nếu các kế hoạch hiện tại của bạn không được cam kết với Windows, hãy tự cứu lấy nỗi đau và sử dụng công nghệ dự định chạy trên các nền tảng khác. Và tôi nói điều này như một nhà phát triển .NET và người đam mê .NET.
Carson63000

4
Tôi đã tự hỏi liệu có bất kỳ "kẻ hủy diệt đơn nhân" nào khác thực sự đã thử làm điều đó không ...

4
"Java về cơ bản là có sẵn miễn phí (...) các công cụ mạnh mẽ sẽ có giá (...) hỗ trợ miễn phí cũng có giá" . Chính xác là giống nhau cho .NET, phải không?
Konamiman

19

OK, hãy thử phá vỡ điều này:

Đưa vào tài khoản:

Công cụ hiệu suất có sẵn (ngay cả công cụ của bên thứ 3)

Cả hai nền tảng Java và .NET đều có sẵn nhiều công cụ kiểm tra hiệu năng tốt, tôi biết rằng trong không gian Java có rất nhiều công cụ nguồn mở miễn phí phù hợp với hầu hết các kịch bản. Tôi không thể nói cho phía .NET.

Khả năng tương thích đa nền tảng

Java có một lợi thế ở đây - dự án Mono (hoặc tương tự) được yêu cầu để .NET chạy trên một số nền tảng. Tôi không chắc chắn với Mono là 100% chống đạn và biểu diễn, một cái gì đó hy vọng người khác có thể hô vang.

Thư viện (đặc biệt là thư viện bên thứ 3)

Cả hai đều có sự hỗ trợ mạnh mẽ ở đây. Ban đầu, hệ sinh thái Java dẫn đầu (có nghĩa là một thư viện mã nguồn mở miễn phí cho mọi thứ bạn có thể nghĩ đến) nhưng tôi nói rằng .NET chắc chắn đã bắt kịp nơi nó quan trọng (NHiberante cho sự kiên trì, NUnit để thử nghiệm đơn vị để đặt tên cho hai cái cơ bản + Tôi chắc chắn có một xe tải số liệu nhiều hơn).

Chi phí (Oracle dường như cố gắng và kiếm tiền từ Java)

Tất cả các công ty đều cố gắng kiếm tiền ở một mức độ nào đó, nhưng trong trường hợp của Java tôi nghĩ rằng tuyên bố của bạn có một chút sai lệch. Java đã được mở nguồn từ phiên bản 6 (dự án OpenJDK) và Oracle đã cho thấy không có xu hướng kiếm tiền từ Java ngoài những gì Sun đang làm. Vì vậy, có họ bán máy chủ ứng dụng và tiện ích mở rộng cho JVM (cụ thể là tiện ích mở rộng quản lý), nhưng chính Java cốt lõi? Không và họ sẽ không bao giờ (điều này đã được tuyên bố công khai nhiều lần).

Tôi nghĩ rằng cả MS và Oracle đều được hưởng lợi ồ ạt nhờ doanh thu gián tiếp với các nền tảng repsepctive của họ.

Tổng chi phí sở hữu (TCO)? Tôi thậm chí sẽ không tham gia vào cuộc tranh luận này vì không có cách nào để chứng minh điều đó (rốt cuộc lập trình là một hoạt động sáng tạo của con người). Cá nhân tôi nghĩ rằng các hệ thống dựa trên Java có xu hướng có chi phí ban đầu thấp hơn vì bạn có thể sử dụng một ngăn xếp nguồn mở miễn phí từ trên xuống dưới trong hầu hết các trường hợp. Tuy nhiên, các doanh nghiệp lớn có xu hướng thích có hợp đồng hỗ trợ để có thể vô hiệu hóa lợi ích cụ thể đó.

Quá trình phát triển (Dễ nhất / Nhanh nhất)

Phụ thuộc vào những gì bạn đang cố gắng xây dựng! Cá nhân tôi cho rằng chúng thậm chí còn khá nhiều, mặc dù C # có một số tính năng bổ sung trong ngôn ngữ cốt lõi trên Java vào lúc này. Tuy nhiên, với (nhiều ngôn ngữ có thể tương tác với Java) trên JVM (Groovy, Scala, Clojure, v.v.), bạn có thể có tất cả các tính năng ngôn ngữ bạn muốn.

.NET có một lợi thế khác biệt trong việc xây dựng 'công cụ' giao diện web trong một thời gian (Phát triển ứng dụng nhanh nếu bạn muốn), nhưng tôi nghĩ rằng JEE6 và / hoặc Spring và các khung web / ứng dụng khác đã thu hẹp khoảng cách đó.

Ngoài ra, hãy nhớ rằng Linux không phải là nền tảng chính của bạn nhưng bạn cũng muốn chuyển dự án của mình sang Linux / MacOs. Bạn chắc chắn nên ghi nhớ những rắc rối đang xoay quanh Oracle và cộng đồng Java cũng như những hạn chế của Mono và Java. Sẽ được đánh giá cao nếu những người có kinh nghiệm trong cả hai có thể đưa ra một cái nhìn tổng quan và quan điểm chủ quan của riêng họ về cái mà họ sẽ chọn và tại sao.

Nếu bạn muốn chuyển sang Linux, UNIX và đặc biệt là Mac OS thì như đã nêu ở trên Java có một lợi thế.

Mong rằng sẽ giúp!


4

Có tính đến danh sách các điểm của bạn, tôi sẽ được chia và nó thực sự sẽ phụ thuộc vào những gì tôi cần xây dựng.

.Net thắng cho các khía cạnh này:

  • Hiệu suất
  • Quá trình phát triển (Dễ nhất / Nhanh nhất)

Java thắng cho các khía cạnh này:

  • Khả năng tương thích đa nền tảng
  • Thư viện (đặc biệt là thư viện bên thứ 3)

Đó là một sự thu hút cho các khía cạnh này:

  • Chi phí (Oracle dường như cố gắng và kiếm tiền từ Java)
  • Công cụ có sẵn (ngay cả công cụ của bên thứ 3)

.Net, cho tất cả các ý định và mục đích, là một ngăn xếp công nghệ nền tảng duy nhất. Vâng, có Mono, nhưng cho đến khi Mono tương thích 100% với việc triển khai Windows, nó không cung cấp trải nghiệm đa nền tảng thực sự. Tập hợp con duy nhất bạn có thể tin tưởng để hỗ trợ đa nền tảng là những gì sẽ phù hợp với Silverlight.

Điều đó nói rằng, .Net có hiệu suất nhận thức tốt hơn (đo thực tế TBD). Trong mắt người dùng, hiệu suất cảm nhận là điều duy nhất quan trọng. Sau khi đã phát triển Java trong hơn 12 năm qua và gần đây đang làm .Net, tôi có thể đánh giá cao sức mạnh của nền tảng này.

Mặt khác, Java có bộ IDE phong phú hơn nhiều để lựa chọn và chi phí cho các IDE ưu việt này thấp hơn nhiều so với chi phí của biến thể .Net. Mặt khác, chi phí cho các động cơ J2EE chuyên nghiệp dễ dàng làm giảm chi phí môi trường phát triển. Trong .Net, tôi có nhận thức về việc bị biệt danh cho đến chết. Trong Java có cách giải quyết với chi phí rất lớn - có thể dễ dàng bù đắp với thời gian của nhà phát triển thiết lập chúng. Ngoài IDE, đối với các công cụ quan trọng (profiler, bảo hiểm, v.v.), chi phí là bằng nhau.

Cuối cùng nó thực sự phụ thuộc vào nhu cầu . Nếu tôi sẽ triển khai trên Windows bằng mọi cách, thì .Net là không có trí tuệ. Tôi có khách hàng là các cửa hàng chỉ Windows. Nếu tôi đang triển khai trên Unix hoặc cần hỗ trợ các hệ thống không đồng nhất, thì Java là không có trí tuệ. Tôi thậm chí có thể triệt để và đề xuất một chồng công nghệ hỗn hợp. Rốt cuộc, chỉ vì máy khách yêu cầu máy chủ phải là Unix không có nghĩa là họ chạy nó trên máy tính để bàn của họ. Không phải mọi ứng dụng đều được thực hiện tốt nhất thành một ứng dụng web.


4

Hiệu suất - Ngay cả

Cả hai nền tảng hoạt động rất tốt cho hầu hết tất cả các ứng dụng.

Không thực sự nhiều để phân biệt chúng, mặc dù kinh nghiệm chủ quan của tôi là Java có lợi thế hơn một chút cho các ứng dụng chạy dài, trong khi .Net nhanh hơn cho thời gian khởi động ứng dụng.

Công cụ có sẵn (ngay cả công cụ của bên thứ 3) - Có thể tranh cãi

Phụ thuộc vào những công cụ bạn cần và những gì bạn quen thuộc.

.Net chắc chắn có một số công cụ tuyệt vời được cung cấp bởi Microsoft. Mặt khác, có các công cụ tốt tương đương trong thế giới Java, ví dụ như trong môi trường Eclipse, Netbeans of IntelliJ.

Khả năng tương thích đa nền tảng - Java win

.Net về cơ bản gắn liền với các nền tảng của Microsoft (Windows, Xbox, v.v.). Hoàn thành triển khai không có sẵn cho bất kỳ nền tảng không phải của Microsoft .

Mono là tốt, nhưng nó thực sự không cung cấp cho bạn khả năng đa nền tảng đầy đủ vì nó không hỗ trợ tất cả các thư viện .Net (ví dụ: bạn không thể mong đợi tất cả các công cụ GUI của Windows hoạt động chính xác, vì vậy trừ khi bạn chuyển sang bộ công cụ đa nền tảng như GTK # bạn sẽ không thể chạy ứng dụng của mình trên các nền tảng khác nhau)

Java thực sự di động. Không chỉ ngôn ngữ, mà quan trọng hơn nhiều là tất cả các thư viện Java đều có thể mang theo được. Cung cấp cho bạn dính vào các thư viện Java thuần túy (ví dụ: Xoay cho GUI), mã của bạn sẽ chạy ở bất cứ đâu bạn có môi trường thời gian chạy Java.

Thư viện (đặc biệt là thư viện bên thứ 3) - Java win

Có lẽ sức mạnh tốt nhất của nền tảng Java là hệ sinh thái rộng lớn của các thư viện, đặc biệt là các thư viện nguồn mở. Vài ví dụ:

  • Tất cả các thư viện và công cụ Apache
  • Tất cả các thư viện trong hệ sinh thái Eclipse rộng lớn
  • Tất cả các thư viện được đóng góp / duy trì bởi Google
  • JBoss và tất cả các công cụ doanh nghiệp liên quan được duy trì bởi Red Hat

Chi phí (Oracle dường như cố gắng và kiếm tiền từ Java) - Java giành chiến thắng nếu bạn đi nguồn mở, nếu không.

Bạn có thể có một ngăn xếp Java mã nguồn mở 100% miễn phí và không ràng buộc bạn với bất kỳ nền tảng độc quyền cụ thể nào. Điều này là miễn phí 100%.

Ngoài ra, bạn có thể mua IntelliJ IDEA, chạy Java trên Windows và sử dụng cơ sở dữ liệu độc quyền, trong trường hợp đó, nó khá giống với chi phí thông minh như một ngăn xếp Microsoft .NET thông thường.

Quá trình phát triển (Dễ nhất / Nhanh nhất) - Có thể tranh cãi

Điều này có thể phụ thuộc nhiều hơn vào trải nghiệm của các nhà phát triển của bạn với từng nền tảng thay vì quy định cụ thể của nền tảng.

.Net chắc chắn có một số công cụ tuyệt vời có thể giúp bạn làm việc rất hiệu quả cho các ứng dụng GUI đơn giản trên Windows. Không có gì đáng ngạc nhiên vì đây là "điểm ngọt" cho sự phát triển .Net.

Mặt khác, tôi thích ngăn xếp Java để phát triển phía máy chủ. Với các công cụ như Maven và tất cả các khả năng tích hợp / triển khai liên tục, bạn có thể thiết lập quy trình phát triển rất hiệu quả cho các ứng dụng phía máy chủ mạnh mẽ.

Ngôn ngữ C # khôn ngoan có một số lợi thế về năng suất so với Java. Nhưng mặt khác, nếu bạn đang phát triển trên nền tảng Java hiện nay thì xu hướng không phải là sử dụng chính Java mà thay vào đó sử dụng một trong những ngôn ngữ JVM mới như Scala, Groovy hoặc Clojure - nếu bạn làm điều đó thì bạn sẽ làm việc hiệu quả hơn rất nhiều hơn C # hoặc Java.


3

.Mạng lưới

Thật khó để trả lời câu hỏi này mà không chủ quan hay khoa trương (tôi có cảm giác tôi sẽ bị hạ thấp), nhưng .Net là một ngôn ngữ đang nổi lên và Java dường như bị sa lầy bởi các vấn đề pháp lý cũng như trở nên ít phổ biến hơn.

Ngoài ra .net ngày nay là một ngôn ngữ hiện đại và gắn kết hơn rất nhiều với sự hỗ trợ tuyệt vời cho đa lõi (Parallel.net) và lập trình không đồng bộ (phần mở rộng phản ứng), chưa kể LINQ mà tôi không thể sống thiếu. .Net cũng có một số công cụ miễn phí, nhưng Visual Studio Express, Sql Server Express, Web Matrix, v.v.

Đúng là java có một số lợi ích đa nền tảng. Bạn có một số tùy chọn cho .Net với mono, v.v.

Một lựa chọn khác nếu đa nền tảng thực sự quan trọng là sử dụng Silverlight, cá nhân tôi không thích "ứng dụng" của Silverlight nhưng ít nhất nó cũng hoạt động.

Crosspl platform là điểm đau, hãy tự hỏi bản thân xem nó có thực sự cần thiết hay không, ít nhất là tại thời điểm này.


Thích .Net không phải là một điều xấu. Tôi thực sự khá thích nó. Không có nghi ngờ rằng Java đang phải đối mặt với một cuộc khủng hoảng danh tính tại thời điểm này, đó là một sự xấu hổ - tôi cũng thích nền tảng đó. Tôi rất vui vì bạn đã thừa nhận hồ sơ theo dõi được cải thiện của Java cho đa nền tảng (+1). Một số khách hàng yêu cầu triển khai Unix, số khác yêu cầu triển khai Windows. Người dùng Java có thể phục vụ cả hai nền tảng, trong khi .Net thực sự bị giới hạn ở Windows. Điều đó nói rằng, có rất nhiều khách hàng Windows chỉ có ở đó.
Berin Loritsch

1

Trong tổ chức của chúng tôi, tại thời điểm này, chúng tôi sẽ chọn Java. Lý do rất đơn giản: nhóm Java của chúng tôi lớn hơn, nhiều kinh nghiệm hơn và có công cụ tốt hơn so với nhóm .NET của chúng tôi (người cũng bị ràng buộc đủ để bảo trì các hệ thống hiện có mà họ thiếu tài nguyên để thực hiện bất kỳ dự án mới lớn nào) .
Điều đó nói rằng, nếu có những lý do cấp bách để sử dụng .NET (ví dụ: yêu cầu của khách hàng, một số khách hàng có thể có một cơ sở phần mềm .NET được cài đặt lớn và muốn hệ thống mới của họ phù hợp với cơ sở đó, tự mình bảo trì, v.v.) làm như vậy và thuê các nhà thầu để thực hiện công việc mà chúng ta không thể giải phóng người của mình.
Tôi sẽ không ép buộc công nghệ đối với khách hàng vì lợi ích tốt nhất của họ và một số khách hàng chỉ đơn giản là được hưởng lợi (vì tổ chức nội bộ của họ) nhiều hơn một vì các khoản đầu tư cần thiết để triển khai hệ thống (một lần nữa, chúng tôi đã có một khách hàng đã có một số ứng dụng .NET đang chạy và có đội ngũ hỗ trợ, chúng tôi sẽ không cố gắng buộc họ thuê người và mua giấy phép phần cứng và phần mềm để chạy ứng dụng Java ở bên cạnh, và dĩ nhiên điều ngược lại cũng đúng. Thực tế chúng tôi khuyên họ đừng làm như vậy nếu họ đến với chúng tôi với tư cách là một yêu cầu).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.