Java sẽ bắt kịp với C #? [đóng cửa]


17

Hôm nay tôi đã đăng một câu hỏi hỏi về ngôn ngữ C # hoặc Java nào sẽ tốt hơn cho tôi để học. Tôi đã có một số câu trả lời tuyệt vời. Một điều xuất hiện là có lẽ Java hiện đang đứng sau C # với các tính năng mới. Tôi thấy một số liên kết web và hầu hết chỉ ra những gì C # có và những gì java không có.

Vì vậy, câu hỏi của tôi cho tất cả các bạn là Java sẽ bắt kịp với C # một lần nữa? Và nếu bạn đoán nó sẽ đứng ở đâu sau 5 năm nữa. Nó sẽ có tất cả những thứ mà bây giờ có thể thiếu? Java 7 thì sao?


7
-1, giả định và giả thuyết. Sẽ thay đổi thành +1 nếu tiêu đề thay đổi thành "Java có đứng sau C # không và nếu có, làm thế nào để bắt kịp?"
Nicole

2
Java và C # có bắt kịp Scheme không? Hãy cho tôi biết khi bạn nhận được các chức năng hạng nhất ẩn, đóng và tiếp tục.
Dietbuddha

5
@dietbuddha: Tôi không thích xả rác mã của tôi với ), cảm ơn bạn rất nhiều.
Josh K

1
@JoshK bạn muốn điền nó với; và phải? LISP dường như sử dụng rất nhiều dấu ngoặc đơn vì mọi hàm đều sử dụng chúng và bạn lồng rất nhiều hàm trong đó.
YuriAlbu Stew

Câu trả lời:


32

Các tính năng ngôn ngữ là một phần rất nhỏ của những gì làm cho Java và C # tick. Cuối cùng, đây là một phần của hệ sinh thái J2EE và .NET lớn hơn.

Cả hai đều có thế mạnh riêng và sẽ phát triển lớn hơn trong 5 năm tới.


19
+1 cho "Các tính năng ngôn ngữ là một phần rất nhỏ tạo nên Java và C # tick"
Craige

1
Vâng, các API và thư viện theo nhiều cách có ý nghĩa hơn nhiều.
Michael K

2
Đồng ý, nhưng các câu hỏi là về ngôn ngữ chứ không phải hệ sinh thái;)
Philippe

1
Tôi thực sự ghét bỏ phiếu +1 cho các câu trả lời rất ngắn, nhưng bạn đang ở một cái gì đó ở đây. Rất thích nhìn thấy bạn mở rộng câu trả lời này.
Nicole

3
Các câu hỏi cho biết: "ngôn ngữ C # hoặc Java nào sẽ tốt hơn cho tôi để học" và "nó sẽ đứng ở đâu sau 5 năm nữa" cả hai khía cạnh này phụ thuộc nhiều hơn vào hệ sinh thái sau đó là ngôn ngữ.
Shamit Verma

16

Tôi sẽ nói cho đến khi Oracle đi vào hình ảnh. Điều đó thật đáng buồn, bởi vì tôi thực sự rất thích bước nhảy vọt trong các tính năng mà Java và C # đã có trong sáu năm qua hoặc lâu hơn.


2
Tại sao bạn nghĩ rằng Oracle sẽ phá hoại Java?

2
Tôi chỉ không nghĩ rằng văn hóa doanh nghiệp ở đó có cùng sự nhanh nhẹn mà Sun có trong việc kết hợp các tính năng.
Jesse C. Choper

8
@Glenn, vụ kiện giữa Oracle và Google cho tôi thấy rằng họ không "lấy" nguồn mở và điều đó có nghĩa là các công ty lớn ít có khả năng chọn Java để phát triển trong tương lai. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena

Oracle có thể không chính xác "vít Java", nhưng JVM. Ngay bây giờ họ có dự án kết hợp hai triển khai JVM mà họ đã mua được JRockit từ BEA và HotSpot cho Sun. Trong khi họ đang ở đó, họ hoàn toàn bỏ qua dự án Da Vinci Machine.
vartec

2
Tôi đang trộn lẫn trên Oracle. Bộ đồ Android là một loại tắt, nhưng chúng đóng góp cho nhân Linux và họ là nhà phát triển chính của hệ thống tập tin Btrfs. Oracle dường như "có được" nguồn mở tốt hơn Microsoft, nhưng điều đó không nói nhiều.
jonescb

6

Là một ngôn ngữ, tôi không mở rộng Java để thêm đổi mới với tốc độ đáng kể, chủ yếu là vì những người trong cộng đồng nguồn mở đang ở trên đỉnh cao có nhiều khả năng tập trung vào các ngôn ngữ JVM mới hơn, như Scala, Clojure, Groovy, JRuby và JPython.

Ngoài ra, cam kết của Java về khả năng tương thích ngược có nghĩa là việc thêm các tính năng ngôn ngữ vốn đã khó hơn so với thời kỳ đầu của ngôn ngữ.


5

Dấu hỏi lớn ở đây là Oracle. Sun thực sự đã làm mọi thứ chậm lại đối với Java trong hơn nửa thập kỷ qua. Hy vọng của nhiều người trong cộng đồng Java là Sun sẽ loại bỏ Java hoặc bán nó cho ai đó sẽ đặt nhiều tài nguyên và nỗ lực. Trong khi Oracle chắc chắn có thể làm điều đó, đó là một công ty lớn với rất nhiều nhóm có lợi ích riêng của họ. Tôi đoán, và chỉ là, một phỏng đoán, là Oracle sẽ để Java trì trệ và sử dụng nó chủ yếu như một công cụ cho các vụ kiện bằng sáng chế.

Có lẽ họ sẽ bán nó cho Google với số tiền lớn và mọi người sẽ rất vui. Nó nằm trong tay các phòng họp và luật sư thay vì các kỹ sư và nhà thiết kế phần mềm.

Về mặt tốt của mọi thứ, ngay cả khi không có cải tiến, Java là một ngôn ngữ tốt và có một hệ sinh thái tốt đẹp xung quanh nó. Trong khi cá nhân tôi thích C # và thế giới .net, Java vẫn là một lựa chọn tuyệt vời. Đi về phía trước, thời gian sẽ trả lời nhưng cho đến bây giờ, Java hoàn toàn không tệ. (Thư viện ngày và thời gian bị loại trừ ... wow, là những thứ xấu xí và lộn xộn)


1
Hiện tại có thư viện của bên thứ ba để khắc phục các vấn đề ngày / giờ.
Michael K

1
Oracle đã sử dụng Java cùng với PL / SQL làm ngôn ngữ cho các chương trình sống trong cơ sở dữ liệu, ít nhất là 10g. Oracle sử dụng Java rất nhiều. Điều này có nghĩa là họ sẽ đưa Java theo hướng tôi thích hay không, nhưng họ sẽ không giết nó.
David Thornley

4

Không có gì để bắt kịp, vì vậy câu hỏi không có ý nghĩa.

Chỉ vì Java không sao chép chính xác C # không có nghĩa là nó "kém hơn" theo một cách nào đó, nó chỉ khác. Cũng có thể hỏi khi nào C # sẽ "bắt kịp" với Cobol.


23
Tôi không đồng ý. C # và Java tương tự nhau theo nhiều cách, nhiều hơn so với C # và COBOL. Tôi nhớ một ngày đọc rằng "C # là thứ Java nên có". Tóm lại, tôi tin rằng C # và Java đang cạnh tranh trực tiếp và đã làm việc với cả hai tôi phải nói rằng tôi có rất nhiều tính năng của C # trong Java, nhưng không phải là cách khác ...
Philippe

Bạn có tìm thấy tình huống mà bạn có thể sử dụng C # hoặc Java không? Tức là tình huống mà nhà phát triển có thể đưa ra lựa chọn. Thông thường, một cửa hàng sẽ có sở thích / định kiến ​​/ thiên vị và sự lựa chọn giữa các ngôn ngữ trên cùng một hệ sinh thái. Ví dụ: giữa Java và Scala hoặc giữa C # và F #
Shamit Verma

2
Tôi không đồng ý với tất cả các quyết định thiết kế mà C # đưa ra, nhưng giống như Java, họ có ý định đặt ra về việc thay thế C ++ và với ví dụ về Java trước họ, họ đã cố tình thêm một số tính năng quan trọng mà Java bỏ qua. Vì vậy, nếu bạn nghĩ rằng các tính năng đó là tốt, thì Java phải "bắt kịp" với C # Cụ thể, khả năng tạo các đối tượng nội tuyến sao cho mọi thứ hướng đối tượng đều KHÔNG PHẢI được tạo ra và tôi nghĩ là const. Đại biểu là một tính năng mới mà họ tích hợp, không phải là chúng không thể được xây dựng dưới dạng cấu trúc dữ liệu thư viện. Tôi muốn nói rằng cả hai phải bắt kịp với C ++!
Dov

@Philippe, đừng để bị cuốn vào ví dụ phản biện của anh ấy. Anh ta có thể nói một cách dễ dàng "Khi nào C # sẽ bắt kịp Java?". Quan điểm của ông vẫn cho rằng không có lý do khách quan nào khiến Java đứng sau C #; đó là tất cả sở thích cá nhân.
jonescb

Không ai nói về sao chép, nhưng C # có một số tính năng thiết yếu mà Java chỉ đang xem xét triển khai NGAY BÂY GIỜ (như lambdas, được mô phỏng với việc triển khai đối tượng xấu xí).
YuriAlbu Stew

4

Câu hỏi liệu C # hay Java có đi trước người khác hay không là tranh luận, nhưng thay vì tập trung vào các tính năng ngôn ngữ của người này hay người kia, tôi muốn tập trung vào những gì liên quan đến việc phát triển ngôn ngữ. Có một thực tế mà tôi không nghĩ ai sẽ tranh cãi: Java cũ hơn C #.

Các vấn đề với việc thay đổi cách ngôn ngữ hoạt động:

  1. Nếu bạn phá vỡ tính tương thích ngược, bạn sẽ làm phiền rất nhiều nhà phát triển
  2. Nếu bạn chọc giận các nhà phát triển của mình, họ chuyển sang ngôn ngữ khác hỗ trợ họ tốt hơn. Do đó, không có lý do để tiếp tục làm việc với ngôn ngữ.
  3. Java đã sớm đưa ra một số quyết định thiết kế với một áp lực để đưa ngôn ngữ ra thị trường. Hy vọng là quay trở lại và điền vào một số khoảng trống. Những quyết định đó vẫn gây khó chịu cho ngôn ngữ vì những người bảo trì không muốn vi phạm điểm đầu tiên.
  4. Java đã thổi bùng lên rất nhiều lãnh thổ mới và đã chứng minh một lần và mãi mãi rằng một ngôn ngữ được thu gom rác có thể được coi trọng - và hoạt động đủ tốt cho hầu hết mọi người.
  5. C # đến sau và học được rất nhiều bài học mà Java vấp phải - vì vậy họ có thể tránh được một số hạn chế kỹ thuật mà Java có vì điểm 3.
  6. Các tính năng ngôn ngữ mới phải giải quyết một vấn đề thực sự một cách hợp lý. Không phải mọi tính năng ngôn ngữ đều có ý nghĩa trong ngữ cảnh của ngôn ngữ mà bạn đang cố gắng thêm nó vào. Đây là lý do tại sao, mặc dù có sự tương đồng, Java và C # sẽ tiếp tục là các ngôn ngữ khác nhau.

Vậy, C # có nhiều tính năng ngôn ngữ hơn Java không? Tôi nghĩ vậy. Chúng có hữu ích không? Tôi nghĩ vậy. Điều đó có nghĩa là C # tốt hơn hay trưởng thành hơn Java? Điều đó tôi không đồng ý. Họ khác nhau, đơn giản và đơn giản. Java sẽ không bao giờ có tất cả các tính năng của C # vì C # sẽ không bao giờ có tất cả các tính năng của Java.

Một trong những tính năng của Java, khả năng viết chương trình trên Windows và triển khai nó trên Unix hoặc Mac, sẽ không bao giờ xảy ra trực tiếp bởi sự hỗ trợ của Microsoft. Lý do tại sao bạn hỏi? Không phải vì Microsoft xấu xa (dù điều đó có đúng hay không tôi không thực sự quan tâm). Đó là bởi vì họ đã học được một bài học mà Sun chưa bao giờ làm: viết một lần chạy bất cứ nơi nào hàng hóa hóa các hệ điều hành và phần cứng. Nếu bạn quan tâm đến việc kiếm tiền từ việc bán hệ điều hành của mình, bạn không muốn biến nó thành chuyện nhỏ để trao đổi mà vẫn có một ứng dụng hoạt động. Nếu bạn đã làm điều đó, bạn không thể kiếm được bất kỳ lợi nhuận nào từ hệ điều hành vì luôn có các tùy chọn rẻ hơn.


Tại sao vấn đề là Mono không được điều hành bởi MS? Mono hoạt động thực sự tốt. Đừng đánh giá thấp nó.
Kugel

Đây không phải là một cuộc khai thác trên Mono, nhưng không phải tất cả các API .NET đều được hỗ trợ trực tiếp. Trong khi họ đang tiến bộ, và đã đi một chặng đường dài, có những hạn chế - đặc biệt là trong các ứng dụng máy tính để bàn. Không chắc chắn Mono đã đến gần như thế nào hoặc nếu nó hợp pháp có thể đến để thực hiện Winforms hoặc WPF. Tuy nhiên, đối với công việc nghiêm ngặt của máy chủ, tôi khá chắc chắn rằng nó tương thích. Gần đây không nhìn vào nó.
Berin Loritsch

Tôi nghĩ rằng "khả năng viết chương trình trên Windows và triển khai chương trình này trên Unix hoặc Mac, sẽ không bao giờ xảy ra trực tiếp bởi bộ phận hỗ trợ của Microsoft" đã bị từ chối ngay bây giờ
JoelFan

Tại thời điểm tôi viết câu trả lời, nó đã không. Vậy C # có Microsoft viết thời gian chạy và thư viện hoạt động trên Mac và Unix không? Mono không trực tiếp từ Microsoft, mặc dù có thể có một số nhà phát triển Microsoft đang làm việc với nó. Tôi vẫn còn nghi ngờ về một ứng dụng máy tính để bàn được xây dựng trên WPF hoạt động cho Linux. Phía máy chủ chỉ có thể là OK.
Berin Loritsch

1

Java thực sự không cần "tính năng" mới hơn C hay C ++. Nó là một ngôn ngữ được thiết kế tốt để phát triển hướng đối tượng. Các bổ sung có thể được thực hiện là trong việc tạo các thư viện để thực hiện một loạt các nhiệm vụ. Điều tương tự cũng xảy ra với C # - hầu hết các tính năng đang được thêm vào để làm cho ngôn ngữ làm được nhiều thứ hơn. Cá nhân tôi nghĩ rằng hầu hết các tính năng đó không cần thiết - con trỏ trong OO thực sự rất nhiều lông tơ trừ khi bạn làm việc ở cấp độ phần cứng (tại thời điểm đó có lẽ tốt hơn để sử dụng một cái gì đó như C). Bên cạnh đó, việc chạy trong VM được cho là khiến việc truy cập trực tiếp vào phần cứng trở nên khó khăn, nếu không nói là không thể.

Unix bắt đầu xu hướng tạo ra các mô-đun làm một việc rất tốt. Tôi nghĩ rằng cả Java và C # đều vượt quá khả năng của creep. Tốt hơn là tạo ra một lõi dễ mở rộng hơn là một "ngôn ngữ" đa năng khổng lồ giống như một khung. Đối với tôi , Java phù hợp với yêu cầu này tốt hơn C #.


7
Ngôn ngữ không có lambda thích hợp không phải là ngôn ngữ có thể sử dụng. Nếu một tính năng đó được thêm vào Java, tôi sẽ đồng ý với các đối số còn lại của bạn. Không có điều đó, Java hoàn toàn không thể mở rộng, nó hầu như không thể sử dụng được.
SK-logic

2
@Craige Cá nhân (ý kiến) Tôi không thích có các tính năng tổng hợp. Tôi muốn ngôn ngữ tránh xa tôi - rất tối thiểu.
Michael K

1
@Michael - Tôi không thể kết nối giữa ngôn ngữ aa có các tính năng cú pháp và ngôn ngữ cản trở bạn. Chỉ vì một ngôn ngữ đã nói các tính năng, không có nghĩa là bạn phải sử dụng chúng. Lấy ví dụ phương thức getter và setter của C #. 90% thời gian, điều đó sẽ giúp bạn tiết kiệm hàng trăm dòng mã dự phòng. Bạn vẫn có thể tự viết nếu bạn muốn.
Craige

1
@Craige, nếu ngôn ngữ có các tính năng, ít nhất các công cụ của bạn phải biết về chúng. Và sức mạnh của hệ sinh thái Java chủ yếu nằm ở các công cụ của nó, điều này hoàn toàn có thể là do sự đơn giản tối giản của ngôn ngữ.
SK-logic

1
@SK, tôi không hiểu làm thế nào bạn có thể nói rằng một ngôn ngữ với lambda không thể sử dụng được. C không có lambdas và C ++ đưa chúng vào C ++ 0x và mọi người đã sử dụng các ngôn ngữ này trong nhiều thập kỷ. Chỉ vì bạn thích lập trình chức năng mà không làm mất hiệu lực lập trình mệnh lệnh.
jonescb

1

Không có gì sai với nhiều tính năng mà C # đang thêm, nhưng với tốc độ thay đổi ngôn ngữ, họ có ý thức gây khó khăn nếu không muốn Mono theo kịp. Nếu vậy, thì tôi nói rằng chúng ta đang chờ C # bắt kịp Java về phạm vi các hệ thống mà nó có thể triển khai. Nó không đủ để chỉ chạy trên Windows.


0

Tôi sẽ không bắt đầu một diễn đàn thảo luận, nhưng tôi nghĩ rằng Java đã ở đây rất lâu trước C # và đối với vấn đề đó, C # có vẻ giống như một bản sao hơn java.

Đối với phần mềm trả lời câu hỏi của bạn: Java và C # là các ngôn ngữ khác nhau do đó bạn không thể so sánh chúng chỉ bằng các tính năng của chúng. Những gì bạn có thể làm trong Java bạn không thể làm trong C # và ngược lại.

Vì vậy, cuối cùng điều này giống như bắt đầu một chủ đề Windows vs Linux.

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.