Tại sao Java không được sử dụng để phát triển ứng dụng web hiện đại? [đóng cửa]


393

Là một lập trình viên Java chuyên nghiệp, tôi đã cố gắng hiểu - tại sao lại ghét Java đối với các ứng dụng web hiện đại?

Tôi đã nhận thấy một xu hướng trong số các công ty khởi nghiệp web hiện đại, một tỷ lệ tương đối nhỏ trong số họ dường như đang sử dụng Java (so với mức độ phổ biến chung của Java). Khi tôi hỏi một vài điều về điều này, tôi thường nhận được câu trả lời như: "Tôi ghét Java với niềm đam mê". Nhưng dường như không ai có thể đưa ra một câu trả lời dứt khoát.

Tôi cũng đã nghe thấy cộng đồng khởi nghiệp web này đề cập tiêu cực đến các nhà phát triển Java - ít nhiều ngụ ý rằng họ chậm, không sáng tạo, cũ.

Do đó, về cơ bản, tôi đã dành thời gian làm việc để nhặt Ruby / Rails, để tìm hiểu những gì tôi đang thiếu. Nhưng tôi không thể tự suy nghĩ, "Tôi có thể làm điều này nhanh hơn nhiều nếu tôi đang sử dụng Java", chủ yếu là do mức độ kinh nghiệm tương đối của tôi.

Nhưng cũng bởi vì tôi chưa thấy bất cứ điều gì "thiếu" quan trọng từ Java, ngăn tôi xây dựng cùng một ứng dụng.

Điều này đưa tôi đến (các) câu hỏi của tôi :

Tại sao Java không được sử dụng trong các ứng dụng web hiện đại?

  • Nó có phải là một điểm yếu của ngôn ngữ?

  • Đây có phải là một định kiến ​​không công bằng về Java bởi vì nó đã tồn tại quá lâu (nó không được liên kết công bằng với các công nghệ cũ hơn của nó và không nhận được sự công nhận cho các khả năng "hiện đại" của nó)?

  • Là định kiến ​​tiêu cực của các nhà phát triển Java quá mạnh? (Java không còn "tuyệt" nữa)

  • Các ứng dụng được viết bằng các ngôn ngữ khác có thực sự nhanh hơn để xây dựng, dễ bảo trì hơn và chúng có hoạt động tốt hơn không?

  • Có phải Java chỉ được sử dụng bởi các công ty lớn, những người quá chậm để thích nghi với ngôn ngữ mới?


142
Tôi nghĩ bạn không chính xác: nó vẫn được sử dụng, nó chỉ mất đi yếu tố tuyệt vời.

41
@Graham Lee: Java đã bao giờ tuyệt chưa? Tôi phải bỏ lỡ điều gì đó. Chà, tôi đoán đó là cà phê lạnh, nhưng mát? Tôi nghĩ lý do chính là java, đặc biệt là các khung java doanh nghiệp đã và vẫn còn bị áp đảo. Bạn không thể xem chúng nhẹ, bạn chỉ sử dụng chúng vì bạn cần các tính năng phân phối / cân bằng / khả năng mở rộng của nền tảng và muốn sử dụng một khung cho giao diện được thực hiện với java, vì mục đích đồng nhất.
Falcon

20
Có lẽ, bởi vì nó không hiện đại ? : P Và Java không bao giờ thú vị , đơn giản vì nó đã ném phần hack ra khỏi lập trình.
back2dos

28
@Falcon Java đã trở lại tuyệt vời khi được giới thiệu lần đầu tiên, Sun đã làm rất tốt việc thổi phồng Java, cho dù sự cường điệu đó có hợp lý hay không không liên quan gì đến việc nó có tuyệt hay không, rất nhiều điều hay ho được thổi phồng mà không có lý do.
Mahmoud Hossam

11
@Falcon, bạn nên xem qua việc tạo các ứng dụng web với JSF 2.0 trong Java EE 6 và so sánh nó với kinh nghiệm của bạn. Bạn có thể ngạc nhiên.

Câu trả lời:


174

Các công ty khởi nghiệp hiện đại cần phải tung ra thị trường càng sớm càng tốt. Họ không cần mất khoảng sáu tháng để phát hành ứng dụng web Java.

Ví dụ, Twitter được xây dựng bằng Rails / Ruby nhưng một khi nó trở nên không thể quét được, họ đã chuyển sang JVM.

Chưa kể rằng quá trình phát triển không hiệu quả: code -> compile -> triển khai trong khi nó ở trong các khung như (Rails / Django / Grails): chạy thử máy chủ -> code -> thay đổi mọi thứ và xem điều gì sẽ xảy ra.

Tin tốt là JRebel cho phép bạn thấy các thay đổi mã ngay lập tức.


81
Play Framework cũng giống như Ruby on Rails, nhưng dành cho Java. Mã -> cập nhật trình duyệt của bạn.
Jonas

34
Chỉ cần cố gắng để thoát khỏi một số quan niệm sai lầm. Java EE không phải là điều duy nhất ở phía máy chủ Java như nhiều người nghĩ.
Jonas

22
Facebook cũng làm một cái gì đó tương tự. Cơ sở mã của họ là trong PHP, nhưng vì vấn đề về tốc độ và khả năng mở rộng, họ đã phải viết một trình biên dịch (HipHop) đã biên dịch PHP sang C ++, sau đó được biên dịch bằng g ++. Thật buồn cười khi mọi người nói về ruby ​​và PHP tuyệt vời như thế nào và tất cả các trang web được xây dựng xung quanh chúng, nhưng sau đó khi bạn nhìn vào mức độ kém hiệu quả của chúng, hầu hết các tổ chức lớn phải chuyển sang một thứ khác. Nếu tôi nhớ lại một cách chính xác, Craigs List có rất nhiều mã phụ trợ được viết bằng C / C ++ vì lý do này.
Kibbee

28
1) Sử dụng Eclipse, quá trình biên dịch diễn ra khi bạn gõ và bạn sẽ hiếm khi nhận thấy. Ngoài ra, chạy Tomcat trong Eclipse tôi có thể khởi động lại một ứng dụng trong một giây. Tôi hiếm khi bị cản trở bằng cách khởi động lại ứng dụng của mình 2) Không có viên đạn bạc nào, các bạn. Ruby hoặc bất kỳ ngôn ngữ nào không làm cho bạn nhanh hơn gấp 10 lần. Vấn đề với nhà phát triển Java thường làm tăng thời gian, nhưng nếu bạn biết bạn đang làm gì, bạn có thể làm việc trong một dự án trong <10 phút.
alex

5
Java và bất kỳ ngôn ngữ tĩnh nào khác, có hai lợi ích to lớn, gần như không phải tái cấu trúc miễn phí và khám phá API mà không cần tài liệu.
Eran Medan

136

Theo kinh nghiệm của tôi, Java cho các ứng dụng web là quá mức cần thiết cho các ứng dụng nhỏ. Một blog đơn giản với một bảng cơ sở dữ liệu chứa các mục blog, ví dụ, có thể được thực hiện trong một cái gì đó đơn giản hơn nhiều.

Tôi thường thấy Java làm tốt hơn nhiều trong các ứng dụng web lớn hơn (nghĩ rằng các ngân hàng và công ty bảo hiểm) giao tiếp với một số hệ thống khác (như back-end máy tính lớn và cơ sở dữ liệu và hệ thống xử lý hàng loạt dịch vụ web ngang hàng ... Tất cả trong cùng một ứng dụng).

Từ những gì tôi đã thấy, kiến ​​trúc của một ứng dụng web JavaEE thường chỉ cần nhiều hơn mức cần thiết cho các ứng dụng web nhỏ / đơn giản.


5
Đối với các ứng dụng "nhỏ", điều này thậm chí còn đúng hơn nếu bạn phải (vì đây là "tiêu chuẩn" và công ty sử dụng nó) làm việc với các máy chủ ứng dụng quái vật như Websphere, trong khi thường xuyên hơn không phải Tomcat là đủ tốt. .. Tại sao oh tại sao tôi phải làm việc với bảng điều khiển quản trị lộn xộn đó? Thở dài ...
Jalayn

7
@Jalayn: Theo kinh nghiệm của tôi, đó là vì họ chỉ muốn duy trì một chương trình máy chủ ứng dụng cho mọi thứ, thay vì quản trị viên WebSphere cho Đội A, Tomcat cho Đội B, Glassfish (hoặc một cái gì khác) cho Đội C ... và tôi có thể hiểu điều đó cảm thấy quá, nhưng vâng, nó cũng làm tôi bực bội.
Thất vọngWithFormsDesigner

3
Điều này đúng với Java EE, nhưng hiện tại có Play Framework sẽ làm cho các ứng dụng web Java của bạn nhẹ và hiệu quả như Ruby on Rails.
Jonas

9
Java 6 EE mới - đặc biệt là cấu hình web - cho phép một số ứng dụng web khá đơn giản.

4
@ ThorbjørnRavnAndersen Ứng dụng này có thể đơn giản, nhưng hiểu khung không phải và cũng không hiểu các công cụ chính như Ant hay Maven. Đường cong học tập của một người mới là rất lớn và đầy đủ các lớp từ viết tắt lồng nhau, sự nhầm lẫn giữa thông số kỹ thuật (ví dụ JAX-RS) và ẩn ý (ví dụ Jackson) và hơn thế nữa. Thật là phức tạp khi làm điều gì đó đơn giản nếu bạn thực sự muốn hiểu những gì bạn đang làm.
Craig Ringer

135

Tôi đã lập trình các ứng dụng web java trong 10 năm trước khi tôi chuyển sang python, hơn 4 năm trước. Tôi cảm thấy rằng tôi làm việc hiệu quả hơn khi sử dụng python và có thể hoàn thành nhiều việc hơn trong một khoảng thời gian ngắn hơn, và thành thật mà nói, tôi hạnh phúc hơn nhiều khi tôi phát triển trong python. Dưới đây là một số lý do tại sao tôi nghĩ python tốt hơn Java dựa trên kinh nghiệm cá nhân của tôi, khả năng của bạn rất có thể.

Khung web:

Khi tôi lần đầu tiên bắt đầu lập trình các ứng dụng web bằng Java, Struts mới xuất hiện và nó không tuyệt lắm, nhưng đó là thứ tốt nhất hiện có. Tôi đã tạo ra một loạt các ứng dụng struts và một vài trong các khung khác trên đường đi. Bất cứ khi nào một khung mới xuất hiện (Tapestry, Wicket, GWT, sọc, grails, AppFuse, Play, RichFaces, Spring, v.v.), tôi sẽ dùng thử và xem nó có tốt hơn không, và hầu hết mọi thứ chỉ tốt hơn một chút , và đôi khi không tốt hơn chút nào. Tôi phải nói rằng khung chơi là một bước đi đúng hướng.

Không bao gồm pin:

Một trong những phần khó chịu nhất của Java là thực tế là hầu hết các thư viện mà bạn sử dụng không được bao gồm trong chính java, bạn phải bao gồm rất nhiều libs của bên thứ 3 từ những nơi như apache commons. Nếu bạn sử dụng một cái gì đó như ngủ đông với bất kỳ thư viện lớn nào khác, bạn sẽ rơi vào địa ngục phụ thuộc Jar, nơi ngủ đông cần một phiên bản của một cái bình, và một cái gì đó cần một phiên bản khác. Nếu bạn tải các tệp jar theo thứ tự sai, bạn đã hết may mắn. Bạn cần phụ thuộc vào các công cụ như maven và ivy để quản lý các phụ thuộc của bạn và điều này chỉ mang lại nhiều phụ thuộc hơn vào dự án của bạn, điều này dẫn đến các dự án rất lớn. Tôi đã có một số tệp chiến tranh 100MB + tệp chiến tranh cho các ứng dụng web đơn giản nhất.

Quá nhiều lựa chọn:

Vì một số lý do, dường như có quá nhiều cách khác nhau để làm điều tương tự trong Java. Có hơn 38 khung web khác nhau cho java theo wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) và 23 ORM khác nhau ( http://en.wikipedia.org/wiki/List_of_object-relational_map Java ) chỉ để đặt tên cho một vài ví dụ. Nếu bạn nhìn vào các ngôn ngữ khác, họ có một số hợp lý hơn. Một số người nghĩ rằng có nhiều lựa chọn là một điều tốt, nhưng điều đó không dẫn đến nhiều nỗ lực lãng phí trong cộng đồng nhà phát triển, mọi người đều phát minh lại cùng một bánh xe và nếu bạn là người mới với ngôn ngữ bạn có quá nhiều lựa chọn để chọn từ.

Máy chủ ứng dụng:

Các ứng dụng web Java rất nặng và đòi hỏi nhiều tài nguyên để chạy. Họ đặc biệt đói ký ức. Giống như bất kỳ phần mềm nào, chúng có thể được điều chỉnh để giảm lượng tài nguyên của chúng, nhưng so với các ngôn ngữ khác, việc thiết lập ngoài hộp của chúng là rất kinh khủng. Trong quá khứ tôi đã sử dụng weblogic, websphere, Jboss, tomcat và jetty. Tôi chỉ sử dụng ba cái đầu tiên khi tôi buộc phải sử dụng EJB, nhưng ngay cả khi bạn không sử dụng EJB, chúng là các máy chủ ứng dụng lớn và đôi khi khó định cấu hình và chạy chính xác. Tomcat và Jetty tốt hơn nhiều và dễ dàng hơn để thiết lập, nhưng vẫn là tài nguyên.

Lưu trữ ứng dụng:

Nếu bạn không chạy máy chủ của riêng mình, thật khó để tìm thấy lưu trữ được chia sẻ cho các ứng dụng java của bạn với giá cả hợp lý. Lý do chính là vì các ứng dụng java đòi hỏi nhiều bộ nhớ hơn so với các ngôn ngữ khác, do đó, không có nghĩa là nhà cung cấp dịch vụ lưu trữ chia sẻ sẽ sử dụng RAM có giá trị của họ để chạy một trang java, khi họ có thể chạy 5 trang php ở cùng một nơi. Điều đó có nghĩa là có ít nhà cung cấp cung cấp dịch vụ lưu trữ java hơn, điều này có nghĩa là chi phí cao hơn để chạy trang web của bạn.

Thời gian phát triển:

Khi tôi phát triển trong java, tôi thấy mình chậm hơn nhiều so với những gì tôi có thể làm trong python. Tôi sẽ cần phải thực hiện một thay đổi, biên dịch, triển khai lại và sau đó kiểm tra, và điều này làm chậm quá trình lặp lại. Tôi biết có nhiều cách để làm điều này nhanh hơn, nhưng ngay cả khi tốt nhất, tôi cảm thấy chậm hơn nhiều so với những gì tôi có thể làm ở trăn.

Ngoài ra còn có rất ít mã soạn sẵn để làm điều tương tự trong python, vì vậy tôi cũng dành ít thời gian hơn để phát triển mã.

Java chỉ cảm thấy được thiết kế trong rất nhiều phần, Rất nhiều API và giao diện chỉ là cách phức tạp cho những gì bạn muốn làm. Và mọi người và anh trai của họ nghĩ rằng họ là một kiến ​​trúc sư java và điều này dẫn đến các hệ thống phức tạp lớn khó sử dụng và phát triển.

IDE:

Khi tôi đang phát triển Java, tôi cảm thấy bị mắc kẹt với IDE, tôi đã lạc lối mà không có nó. IntelliJ là IDE tốt nhất trên thị trường và thật khó để chuyển sang python vì không có gì giống với python. Vì vậy, thay vì IDE, tôi chỉ sử dụng textmate, đây chỉ là một trình soạn thảo văn bản bình thường. Ban đầu thật khó khăn, nhưng vì nó chỉ là một trình soạn thảo văn bản, nó là một ứng dụng thực sự nhanh và nhạy. Tôi có thể mở toàn bộ dự án của mình trong vài giây, trong khi đó khi tôi muốn mở một dự án trong IDE thì có thể mất một phút hoặc hơn, với một máy có hàng tấn RAM. Các nhà sản xuất của IntelliJ đã đưa ra một trình soạn thảo python gọi là pycharm, tôi đã mua nó khi nó ra mắt, và nó thật tuyệt. Nhưng điều tôi nhận ra là tôi không cần IDE cho python, tôi ổn với trình soạn thảo văn bản. Khi tôi quay lại làm việc trên các ứng dụng web Java mà thỉnh thoảng tôi phải làm, tôi cố gắng sử dụng trình soạn thảo văn bản, nhưng tôi vẫn chưa hoàn toàn làm chủ được điều đó. Cá nhân tôi cần IDE cho Java nhiều hơn bởi vì nếu tôi làm hỏng thứ gì đó thì sẽ mất nhiều thời gian hơn để biên dịch lại và triển khai lại, điều này làm tôi chậm lại.

ORM:

Khi tôi lần đầu tiên bắt đầu sử dụng Hibernate như một ORM, tôi đã nghĩ nó thật tuyệt, nó có vấn đề và nó không hoàn hảo, nhưng nó tốt hơn những gì tôi đã làm trước đây. Tôi hài lòng với nó, cho đến khi tôi thực hiện một ứng dụng với ORM của Django trong một dự án python và điều đó đã mở mắt tôi ra, đó là cách một ORM được cho là hoạt động. Sau dự án đó, tôi trở lại ngủ đông, và tôi cảm thấy thất vọng, và mong mỏi được quay trở lại ORM của Django. Một ORM trăn tuyệt vời khác là sqlalchemy, tương tự ORM của Django, nhưng hơi khác một chút. Tôi có kinh nghiệm hạn chế với ORM của ROR, nhưng từ những gì tôi nhớ, nó cũng khá tốt.

Mẫu:

Các hệ thống tạo khuôn mẫu web trong Java không tốt lắm và tôi nghĩ rằng tôi đã thử tất cả (gạch, freemarker, vận tốc, v.v.). Hầu hết trong số họ chỉ cung cấp chức năng cơ bản và là một nỗi đau để làm việc với. Về phía Python, hai mục yêu thích của tôi là các mẫu Django và Jinja2, chúng có mọi thứ tôi có thể cần trong một công cụ tạo khuôn mẫu và rất dễ sử dụng.


10
Tôi với bạn về nhiều điểm, nhưng có vấn đề với một số. Vòng lặp biên dịch / kiểm tra : Sử dụng mô-đun web động của Eclipse và / hoặc JRebel và nó đã biến mất; tuyệt quá. Độ nặng : JBoss AS 7 khá nhẹ và nhanh. và nếu bạn không muốn EE, bạn có thể sử dụng Tomcat hoặc Jetty mà hầu như không có ở đó. Kiểm tra : Arquillian là công cụ kiểm tra tốt nhất mà tôi đã sử dụng trong bất kỳ ngôn ngữ nào, mặc dù nó chỉ đủ trưởng thành để có thể sử dụng được. Địa ngục phụ thuộc : Chỉ cần sử dụng Maven; nó phải là một phần tiêu chuẩn và bắt buộc của JAva.
Craig Ringer

Lưu ý rằng tất cả các vấn đề trên thêm vào vấn đề "không bao gồm pin", đây là một vấn đề rất lớn. Cảm giác như Java EE là một khung công tác phụ mà bạn phải xây dựng khung công tác của riêng mình để sau đó xây dựng ứng dụng của bạn. Rất kém hiệu quả. Mọi công cụ cũng có lỗi khủng khiếp và JSF2 đơn giản là một công cụ phá hủy năng suất của nhà phát triển.
Craig Ringer

2
Tôi cũng nghĩ rằng bạn đã bỏ lỡ một điểm quan trọng: Đường cong học tậplỗi thực sự làm mọi thứ chậm lại.
Craig Ringer

@CraigRinger Tôi chưa sử dụng mô-đun web động của nhật thực hoặc JRebel, vì vậy bạn nói đúng, nó có thể biến mất.
Ken Cochrane

2
Nếu bạn thích IntelliJ, hãy thử PyCharm - nó dựa trên cùng một lõi.
Tamlyn

94

Start Ups muốn sự sáng bóng. Dù sáng bóng là gì: RoR, Groovy, Grails, OOP w / PHP, Foobar, Wibble, Narf, v.v.

Enterprise muốn ổn định, đáng tin cậy và có thể mở rộng: Java và .NET phù hợp với hóa đơn đó (khi được thực hiện chính xác).

Hợp đồng biểu diễn hiện tại: Dịch vụ tài chính. Nền tảng: ColdFusion (về cơ bản là Thư viện thẻ Java) và Java.

Hợp đồng biểu diễn trước:

  1. Dịch vụ kiểm tra giáo dục - ColdFusion
  2. Bảo hiểm rủi ro cao - ColdFusion và Java
  3. 401k - ColdFusion và Java
  4. Du lịch - Java với các ứng dụng ColdFusion nội bộ
  5. Chứng khoán - ColdFusion (phiên bản tiền Java)

Đây là tất cả các trang web có khối lượng lớn, bảo mật cao. Không ai ở bất kỳ công ty nào trong số này từng xem xét PHP, một số đã xem xét RoR và thấy quá nhiều vấn đề. Công ty 401k có một công ty chị em chạy một ứng dụng .NET với các nhà phát triển có thẩm quyền, ứng dụng này liên tục bị sập mỗi tuần. Cuối cùng họ đã chuyển đổi nó sang Java và đạt được sự ổn định.

Những người duy nhất xem thường Java là những người không có hoặc có ít kinh nghiệm thực tế với nó hoặc có liên quan đến việc triển khai kém và hiện đang rất ngại ngùng. Họ nhìn thấy sự sáng bóng và hình thể nếu tất cả những đứa trẻ tuyệt vời đang sử dụng nó, tại sao không phải là tôi?


23
"Công ty 401k có một công ty chị em chạy một ứng dụng .NET với các nhà phát triển có thẩm quyền, ứng dụng này liên tục bị sập mỗi tuần. Cuối cùng họ đã chuyển đổi nó sang Java và đạt được sự ổn định." Lol :), đã nghe nói về trường hợp ngược lại.
Den

12
Vâng tất nhiên bạn có. Có nhiều ứng dụng web hơn viết mã, bạn phải biết cách điều chỉnh máy chủ của mình, viết SQL tối ưu, v.v. Công ty đó có 2 nhà phát triển .NET và không có quản trị viên máy chủ thực sự. Công ty đã mua công ty tôi ở cùng cũng có ứng dụng đó trong thỏa thuận. Họ là một cửa hàng Java lớn và do đó có sẵn nhiều tài nguyên hơn để đảm bảo sự ổn định.
Adrian J. Moreno

48
Đối với tôi, có vẻ như bạn đã viết câu đó là nguyên nhân và kết quả. Chuyển đổi sang Java = tăng độ ổn định? Chúng ta đều biết rằng đó không phải là lý do tại sao. Ngoài ra, xin lỗi về tất cả trải nghiệm ColdFusion đó;)
Jordan

3
Quá công bằng, các nhà đầu tư có xu hướng muốn nhìn thấy hương vị của năm. Nhưng cá nhân tôi vẫn không thể nghĩ ra một lựa chọn tồi tệ hơn cho việc phát triển nguyên mẫu nhanh chóng ngăn chặn các nhà phát triển Java chất lượng rất cao mà không dễ tìm thấy.
Erik Reppen

9
Các nhà phát triển Java chất lượng rất cao không dễ tìm - Thật vậy.
luis.espinal

73

Một bổ sung cho câu trả lời của FrustratedWithFormsDesigner : Vì tôi đoán rằng câu hỏi của bạn có nhiều mục tiêu hơn đối với các trang web nhỏ hơn, có một khía cạnh quan trọng mà bạn cần xem xét đối với nhiều người: Hosting rất phổ biến đối với PHP nhưng khó hơn đối với các trang web Java hoặc ASP. Tuy nhiên, đây không phải là khiếm khuyết của những ngôn ngữ đó.


Tôi nghĩ rằng điều này đã thay đổi, tuy nhiên, bây giờ bạn có thể lưu trữ các ứng dụng web Java trên GAE miễn phí.
Mahmoud Hossam

+1 cho việc lưu trữ Java. Mặc dù ASP.Net không khó tìm và nó rẻ. Tôi trả 8 đô la một tháng cho dịch vụ lưu trữ chia sẻ ASP.Net của mình. Mặt khác, tôi muốn thử mở một trang web bằng Java và không thể tìm thấy một máy chủ chia sẻ chạy Java và phải sử dụng VPS không làm tôi hứng thú với một dự án học tập.
Jetti

9
+1 cho điều này. Việc lưu trữ nhiều trang web trên máy chủ cho PHP dễ dàng hơn nhiều so với Java và được thêm vào đó là việc tìm các giải pháp lưu trữ web giá rẻ cho PHP dễ dàng hơn nhiều so với Java.
Jonas

Bạn đúng @Mark, đã sửa.
sebastiangeiger

1
@Kibbee - Arvixe Đó là người tôi sử dụng. Tôi có kế hoạch PersonalASP Pro.
Jetti

70

Java hoàn toàn được sử dụng để phát triển ứng dụng web hiện đại. Đặc biệt một khi bạn có được kết thúc lớn hơn / phức tạp hơn / có thể mở rộng của phổ ứng dụng web.

Nếu bạn quan tâm đến các công cụ và khung hiện đại, hiệu quả, hãy xem:

Nhưng tôi nghĩ rằng việc phát triển web thực sự hiện đại nhất trên nền tảng JVM có thể được thực hiện bằng một trong các ngôn ngữ JVM mới thay vì sử dụng Java trực tiếp, với Java chỉ đơn giản là cung cấp xương sống về các thư viện cơ sở và cơ sở hạ tầng phía sau. Có rất nhiều sự phát triển web xảy ra trong Groovy ( Grails ), Scala ( Nângchơi ), JRuby ( JRuby trên Rails ) và Clojure ( Noir , Ring / Extive + rất nhiều khung tùy chỉnh) để đặt tên cho một số ít.

Với tất cả sự đổi mới diễn ra trong không gian ngôn ngữ JVM mới, cá nhân tôi nghi ngờ rằng Java cuối cùng sẽ trở thành "trình biên dịch lập trình phía máy chủ".


Vaadin là một công cụ tuyệt vời để tạo các ứng dụng mạng nội bộ và doanh nghiệp lớn. Tôi đoán nó không phù hợp lắm cho một startup. Đó là trừ khi bạn nắm lấy vẻ ngoài của nó, bởi vì quá khó để thay đổi nó.
khai mạc

7
Đã đồng ý; Java EE 6 thật tuyệt vời ngay khi bạn bỏ JSF2 và sử dụng thứ gì đó lành mạnh và hiệu quả. Đường cong học tập vẫn còn rất lớn .
Craig Ringer

1
Bạn có thể thêm Tapestry5 ( tapestry.apache.org ) vào danh sách các khung web Java hiện đại của bạn.
Neeme Praks

@CraigRinger JSF thật dễ dàng. Bình luận của bạn đọc như câu hỏi bản thân: a rant tôn giáo
jwenting

@jwenting Vâng, đã ba năm rồi , vì vậy nó đã được cải thiện một chút về tài liệu và các công cụ bên ngoài kể từ đó. Trên stack EE 6 khi tôi làm việc với nó, thật kinh khủng, moreso nếu hỗ trợ Glassfish 3 AS 7.
Craig Ringer

41

Google, Amazon hay LinkedIn có được tính là hiện đại không?

Java được sử dụng cho các ứng dụng web hiện đại. Nếu bạn nhìn khắp doanh nghiệp, đó là ngôn ngữ được sử dụng nhiều nhất cho các ứng dụng web (nội bộ).

Điều đó nói rằng, Java đã trải qua một giai đoạn là các tiêu chuẩn phát triển web đã cố gắng trở thành mọi thứ đối với mọi người (có thể vẫn còn làm). "Đừng lặp lại chính mình" là một phản ứng đối với địa ngục xml và chu kỳ xây dựng dài của phát triển web Java. Kết quả là, Java (EJB, Struts, JSF, v.v.) trở thành thứ được xem là điều mà tất cả các mô hình mới đang cố gắng khắc phục.

Java, ngôn ngữ dài dòng. Đó là một pro và một con (tuyệt vời để bảo trì, hút cho dev). Có một số tính năng ngôn ngữ hiện đại chưa được đưa vào Java có thể giảm đáng kể thời gian mã hóa (thuộc tính, sự kiện, đóng cửa, trình tạo, hiểu danh sách, v.v.). Vì vậy, nó có thể gây bực bội khi đến từ một ngôn ngữ hiện đại hơn. Điều đó nói rằng, họ rất khó để thêm vào một ngôn ngữ trưởng thành mà không trở thành tổ chuột mà C # đang trở thành.

Nhiều ngôn ngữ được sử dụng trong phát triển web hiện đại được gõ động. Điều này cho phép công cụ có thể tải lại mã một cách linh hoạt khi nó được viết (điều này khó thực hiện hơn trong một ngôn ngữ tĩnh - jrebel). Vì phát triển web cho vay để lặp lại nhanh, tải lại động là một chiến thắng rất lớn. Nó làm giảm đáng kể chu kỳ phát triển trên các dự án của Greenfield và giúp dễ dàng lấy UI và UX hơn (bản chất của bản dùng thử và lỗi).

Ngôn ngữ tĩnh cũng có vị trí của chúng. Đối với logic phụ trợ phức tạp, phải chạy trong nhiều năm, phải mở rộng mà không gặp sự cố, phải rất nhanh và phải hoàn toàn không có lỗi, các ngôn ngữ được nhập tĩnh (như Java hoặc thậm chí C) được ưu tiên.

Ngoài ra, khi số lượng / doanh thu của nhà phát triển tăng lên và các sản phẩm trưởng thành, khả năng những người có ý định tốt sẽ giới thiệu các lỗi skyrockets. Sự nghiêm ngặt và kỷ luật mà một dự án Java được thiết kế tốt (giao diện, mẫu và nước thánh cho những ma cà rồng php đó :)) thực thi giúp giảm rủi ro lâu dài. Trong khi, điều này cũng có thể đạt được thông qua thử nghiệm đơn vị, mạng lưới an toàn có được từ kiểm tra tĩnh (và các máy phân tích tĩnh như findbugs và clang) cung cấp mức độ bao phủ mã khó có thể sao chép bằng các thử nghiệm viết tay. Đừng hiểu sai ý tôi, nên có các bài kiểm tra đơn vị và kiểm tra chức năng, nhưng các tổ chức thực sự không bao giờ đạt được phạm vi bảo hiểm 100%. Đối với những gì họ kiểm tra, máy phân tích tĩnh làm.

Vì vậy, trong các dự án lớn (như được xác định nhiều hơn bởi kích thước nhóm hơn kích thước mã), trong đó có sự tương tác phức tạp giữa các đoạn mã được phát triển độc lập, các ngôn ngữ như Java vẫn được ưa thích. Ví dụ bao gồm các ứng dụng web lớn / phức tạp như các ứng dụng tại các nhà môi giới tài chính (ameritrade), trao đổi tài chính (Nasdaq, nyse, có thể london sau sự cố .net), ngân hàng trực tuyến (hầu hết tất cả), email (google), đấu giá (ebay) , Vân vân.

Từ góc độ hiệu suất và tỷ lệ, không có gì vượt qua nền tảng Java cho sự kết hợp giữa khả năng mở rộng và hiệu suất cho các ứng dụng web (tùy thuộc vào cách bạn đếm phân vùng ứng dụng của facebook). Twitter, chẳng hạn, đã phải viết lại một phần lớn cơ sở hạ tầng Ruby trong Scala trên máy ảo Java để đưa cá voi thất bại trở ra biển. Tôi đã nghe nói về các ví dụ lớn khác, nhưng họ trốn tránh tôi ngay bây giờ.

Nó cũng đáng xem xét bảo mật. Trong khi các plugin trình duyệt Java đã phải chịu một phần lỗ hổng bảo mật, thì chính nền tảng java là một trong những nền tảng an toàn hơn được tạo ra. Các ứng dụng web Java có tiếng là rất an toàn. Đó là các thực tiễn mã hóa, thư viện và kiến ​​trúc đã từ lâu không khuyến khích các lỗi khiến cho các cuộc tấn công như tiêm sql hoặc bộ đệm tràn ra. Trong khi các nền tảng web khác (đường ray) có danh tiếng bảo mật tốt, không có nền tảng nào vượt qua Java.

Tóm lại, hầu hết các ứng dụng web là đơn giản về mặt kỹ thuật. Nói một cách đơn giản, Java thường quá mức cần thiết (giống như ngày xưa khi chúng ta viết chúng bằng C :)). Mặc dù, nếu ứng dụng web phức tạp (phụ trợ hoặc cách khác) hoặc dự kiến ​​sẽ có hơn 100 nhà phát triển, Java rất khó để đánh bại.

-

Về lưu ý cá nhân, tôi sử dụng Grails rất nhiều vì nó mang lại cho tôi những điều tốt nhất của cả hai thế giới (điều tương tự có thể nói về JRuby mà tôi nghe thấy ngày càng trở nên phổ biến hơn trong thế giới Ruby).

BTW - Tôi thấy sự trỗi dậy của PHP thực sự gây trở ngại. PHP là một ngôn ngữ tương đương với khả năng đọc và VB về chất lượng của kết quả. Nó khuyến khích các thực tiễn khủng khiếp, bên cạnh không thể duy trì, các thư viện bên thứ 3 hiếm khi hoạt động như mong đợi và nó có một cú pháp sẽ đẩy Larry Wall lên ... à ... một bức tường. Giải thích duy nhất tôi có thể gợi ý là nó cho vay để học tăng dần (như VB). Nói cách khác, bạn có thể hoàn thành một cái gì đó hữu ích khi biết rất ít về lập trình / quản trị và bạn có thể mở rộng kiến ​​thức của mình một đoạn nhỏ tại một thời điểm. Có rất nhiều điều để nói về điều đó từ góc độ áp dụng. Tuy nhiên, đối với bất kỳ ai từng phải hỗ trợ hoặc thay thế một trong hàng tỷ ứng dụng VB được viết bởi "lập trình viên" trong thế giới doanh nghiệp / mfg, có lẽ bạn đang lắc đầu và lên kế hoạch nghỉ hưu. :)


3
Bạn có muốn nói rõ hơn về "tổ chuột mà C # đang trở thành" không?
XåpplI'-I0llwlg'I -

1
Tôi không chắc tại sao bạn nói '"Đừng lặp lại chính mình" là một phản ứng với địa ngục xml và chu kỳ xây dựng dài của phát triển web Java.' DRY nổi lên như một khái niệm trong cộng đồng Agile, hầu hết trong số họ đang sử dụng các ngôn ngữ khác ngoài Java vào thời điểm đó.
Jules

38

Chà, gần đây tôi đã gặp một anh chàng Java thực sự hào hứng với dự án Spring Data mới, bởi vì cần ít mã để có quyền truy cập CRUD cơ bản vào DB của bạn.

Tôi có thể xây dựng ứng dụng CRUD bằng Rails (không chỉ truy cập db, mà cả chế độ xem và bộ điều khiển) bằng một vài lệnh.

(Tắt đầu tôi: dự án mới, 1 lệnh giàn giáo cho mỗi thực thể, 1 lệnh để di chuyển cơ sở dữ liệu, 1 lệnh để khởi động máy chủ.)

Nó không liên quan gì đến ngôn ngữ, đó là tất cả về các công cụ. Và dường như các ngôn ngữ động có xu hướng có các công cụ và khung loại bỏ rất nhiều mã soạn sẵn. (Để bù đắp cho việc thiếu các IDE mạnh mẽ tạo ra bản tóm tắt cho chúng tôi.)

Ngoài ra tôi cảm thấy rằng các ngôn ngữ động có xu hướng làm cho việc viết các công cụ và khung như vậy dễ dàng hơn rất nhiều. Tôi có thể mò mẫm mã để nói, Padrino hoặc Rails (khung web ruby) dễ dàng hơn nhiều so với tôi có thể mò mẫm mã để nói Spring Roo. Điều này có thể là do thực tế là tôi biết Ruby nhiều hơn tôi biết Java.


24
Cá nhân tôi không thích ngôn ngữ động. Các ngôn ngữ tĩnh giúp tôi làm việc hiệu quả hơn khi tôi có thể thấy tất cả các lỗi loại nhanh trong IDE của mình và sử dụng các công cụ tái cấu trúc. Bạn nên xem Play Framework, đó là khung web Java được lấy cảm hứng từ Ruby on Rails và giúp bạn làm việc hiệu quả với Java.
Jonas

4
Một khung công tác mạnh mẽ, như đường ray cũng có nghĩa là nếu một cái gì đó được triển khai kém thì hầu hết mọi người không thể thay thế nó bằng một thứ khác, bởi vì thành phần đó quá chặt chẽ với khung. Trong khi với java, nếu tôi không thích Hibernate, tôi có thể sử dụng một cái gì đó khác như cayenne hoặc JPA chẳng hạn.
Coyote21

2
Là một người chiến đấu với Django, cho phép tôi chỉ nói: Coyote21 hoàn toàn đúng. Bạn có thể nhận CRUD cơ bản trong vòng năm phút, nhưng lần thứ hai bạn bắt đầu thêm logic nghiệp vụ (khi bản ghi này được cập nhật, một bản ghi phải được chèn vào bảng này và ...) cho CRUD, bạn đã gặp sự cố .
asthasr

Nếu bạn vào Rails nhưng cần Java, hãy xem Seam Forge. Coi chừng, nó sử dụng JSF2, rất tệ khi làm việc với nó, nhưng bản thân Forge của nó khá tốt.
Craig Ringer

bạn có thể xây dựng các ứng dụng CRUD trong Java bằng cách sử dụng Roo trong vài phút, tương tự với Grails (không chính xác là Java, nhưng vẫn là JVM) Play 1.0 có máy phát / giàn giáo, tôi tự hỏi nó đã đi đâu ...
Eran Medan

24

Java đã được định vị trong những năm gần đây là "doanh nghiệp". Đó là mặt khác của những gì một startup cần. Trong phát triển ứng dụng web, bạn cần 4 điều - truy cập cơ sở dữ liệu không đau, thao tác chuỗi tuyệt vời, đường cú pháp và quy trình lặp nhanh để thực hiện nhiều thay đổi nhỏ mà ứng dụng của bạn yêu cầu.

Hiệu suất, khả năng mở rộng và ổn định thấp hơn một chút trong danh sách ưu tiên.

Ngoài ra Java là ngôn ngữ rất khó sử dụng để mã hóa. Nó có khả năng mang tính cách mạng trong việc sử dụng chuỗi trong một câu lệnh chuyển đổi ngày hôm qua. Và javascript là ngôn ngữ rất tin tặc nên sau khi phát triển frontend của bạn, bạn cảm thấy rất hạn chế khi quay lại java.

Vì vậy, tôi cho rằng đây là những lý do webstartups tránh java.


12
truy cập db không đau? Spring JDBC hoặc Hibernate hoạt động tuyệt vời. Thao tác chuỗi lớn? Đừng nghĩ rằng thao tác chuỗi nhiều hơn 5% trong bất kỳ dự án nào. Cú pháp đường? Bạn thậm chí có ý nghĩa gì bởi điều đó. Quá trình lặp lại nhanh chóng? Java có nó (Tomcat bên trong Eclipse là không đau). Java chưa? Điều duy nhất còn thiếu là các lớp ẩn danh ngắn gọn / lambdas / v.v. Các tính năng "vui vẻ" trong các ngôn ngữ khác có xu hướng làm xáo trộn và làm cho mọi thứ không rõ ràng. Chuỗi trong chuyển đổi ... vâng, tôi phải thừa nhận rằng hút (tuy nhiên, hầu hết thời gian, bạn nên sử dụng enums).
alex

4
@ Alex: Syntax sugarJava thực tế có thể không được sử dụng cho DSL, ví dụ, cấu hình và các tuyến đường tập tin Play không tập Java, nó theo cú pháp nước ngoài mà không ít hơn nói django settings.py và urls.py của; không có danh sách hiểu; các kiểu dữ liệu quan trọng (ví dụ: bản đồ, danh sách) không được nhập theo mặc định; ngu ngốc một lớp mỗi tệp thực sự cản trở; và API Java có xu hướng dài dòng không cần thiết. Ngoài ra, bạn không thể sử dụng enum khi bạn chuyển đổi giữa các chuỗi bạn nhận được từ tham số GET / POST.
Lie Ryan

4
@alex Thú vị. Tôi có xu hướng sử dụng thuốc generic ở mọi nơi trong C # - mặc dù nhìn từ bên ngoài, điều đó có lẽ là do chức năng của lamdas tăng lên - Vì vậy tôi có thể có một cái IRepository<T>với IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Tôi tự hỏi nếu chúng sẽ trở nên phổ biến hơn trong Java khi nó có lambdas? Đây có thể là một điều thoải mái nhưng Java chỉ cảm thấy dài dòng - và rất giống như tôi đã được trao đủ bit để chế tạo 50 loại xe khác nhau mà không đảm bảo 2 phần nào sẽ khớp với nhau.
Cơ bản

3
Tôi không thể tin rằng hai người đã lập luận rằng Tomat trong Eclipse không gây đau đớn và làm cho việc phát triển Java hiệu quả. Tôi thấy rằng nó làm cho mỗi chu kỳ phát triển nhanh hơn nhiều, nhưng đòi hỏi phải bảo trì hàng ngày, bao gồm làm mới nhiều lần, xây dựng lại, làm sạch tomcat, triển khai lại, khởi động lại và đôi khi khởi động lại Eclipse và lặp lại các bước trước đó. Nếu xe của tôi cần bảo dưỡng nhiều như vậy, tôi sẽ không bao giờ đi làm.
Brandon

1
@Brandon Tôi sẽ thứ hai. Tôi chưa bao giờ, chưa một lần vật lộn với vấn đề cấu hình trong Node hoặc Python / Django. Tôi mất kiên nhẫn với RoR. Cơ sở mã Java phụ thuộc Ant / Mvn / Spring / Hibernate / eclipse của chúng tôi là một cơn ác mộng thức giấc trước khi bạn kịp nhận mã.
Erik Reppen

18

Tôi hiện đang làm việc trong một công ty có khá nhiều Nhà phát triển "Tôi ghét Java". Nó cũng làm tôi choáng váng. Tôi chắc chắn ghét tất cả các công nghệ có sẵn với Java. Điều này làm cho việc đưa ra quyết định quá khó khăn. Giống như khi bạn có quá nhiều sự lựa chọn, bạn không có lựa chọn nào khác. Bạn phải dành thời gian với 100 khung công tác để thực sự đưa ra khuôn khổ phù hợp với bạn. Kiến trúc Servelt tiêu chuẩn rất phức tạp đối với hầu hết các ứng dụng. Đây không phải là trường hợp của Ruby, Django và những thứ khác. Chúng là nhiều hơn một khung duy nhất hơn là ngôn ngữ.

Những khiếu nại lớn nhất tôi nghe được từ các nhà phát triển

  1. Cú pháp quá dài. Chỉ cần in một cái gì đó chúng ta phải viết System.out.print. Bạn không thể thực sự sử dụng một trình soạn thảo VI đơn giản như trình soạn thảo và viết ra một đoạn mã hoạt động trong vài giờ.
  2. Khung kiểm tra yếu. Mặc dù các khung kiểm thử rất giống nhau trong Java và Ruby, Ruby vẫn tiến một bước bằng cách làm cho mọi thứ dễ dàng có sẵn để thử nghiệm. Điều này đặc biệt đúng nếu bạn đang sử dụng DB rộng rãi trong ứng dụng của mình. Ngay cả nhiều khung Web cũng không nghĩ về việc thử nghiệm.
  3. Mẫu là một nỗi đau. Làm cho ngôn ngữ tương đối đơn giản thành một Noodle Soup.
  4. Không mát mẻ. Hầu hết các ứng dụng Java được viết trong các công ty lớn, có liên quan đến Quan liêu không phù hợp lắm với các nhà phát triển. Mọi người không nghĩ Google khi họ nghĩ Java. Google == Python. Nó cũng phải làm rất nhiều việc mà không có cuốn sách nào phát hành chỉ ra X trong Y ngày.
  5. Không thích biên dịch. Đối với hầu hết các nhà phát triển biên dịch là một hiện tượng cũ hàng thập kỷ. Nó có ý nghĩa trong những năm 80 với C nhưng máy tính hiện đại có thể làm được nhiều hơn thế. Họ không viết mã bằng các ngôn ngữ được biên dịch. Java là một trong số rất ít ngôn ngữ được biên dịch và sử dụng để viết các ứng dụng web.
  6. Quá nhiều khái niệm Oops. Mặc dù các nhà phát triển đã lặng lẽ chấp nhận tên miền Oops. Họ không thích nó đầy đủ. Họ không thích khi bạn viết một ứng dụng với 10 lớp với mỗi lớp chỉ làm một việc. Làm cho bạn mở 100 tệp và tưởng tượng sự tương tác trên 100 lớp, đôi khi có khung. Làm cho toàn bộ hoạt động lập trình là một việc vặt. Điều này có thể đúng với hầu hết các ngôn ngữ nhưng tôi đã thấy rằng các Nhà phát triển Java chú ý rất nhiều đến những gì một lớp làm. Đó là các Nhà phát triển Java, những người thường nghĩ ra một mã với 100 lớp. Điều này là tốt từ nhiều quan điểm nhưng các nhà phát triển không java ghét nó.

Vì vậy, tất cả trong tất cả Java áp đặt một đường cong dốc khi bắt đầu dự án, có nghĩa là quá nhiều tiền để cam kết. Thêm vào đó là một cộng đồng khổng lồ gắn liền với java, mỗi suy nghĩ theo những cách khác nhau và không ai thực sự dẫn đầu cả cộng đồng. Họ cũng không thấy các cuộc hội đàm và hội nghị được tiến hành bởi cộng đồng thể hiện tất cả những điều mới mẻ thú vị. Không có cuốn sách mới mát mẻ. Java có vẻ như sẽ đi xuống bởi vì nó được sử dụng để giải quyết quá nhiều vấn đề khác nhau vài năm trước.


(2) được giải quyết tuyệt vời bởi JBoss Arquillian ( arquillian.org ). Phần lớn phần còn lại là vấn đề về JSF2 hơn là vấn đề Java. Các vấn đề lớn nhất IMO đang tìm hiểu đường cong và sự nhàm chán to lớn của các khung công tác, nhưng nếu bạn tránh được JSF2, bạn có thể làm tốt.
Craig Ringer

5
Tôi yêu OOP. Tôi cũng biết OOP, đó là lý do tại sao tôi không đồng ý rằng phần lớn các nhà phát triển Java đang làm quá nhiều về nó. Bạn có thể viết một lớp nhưng nếu mã của bạn vẫn là một mớ hỗn độn spaghetti rối rắm, tất cả những gì bạn thực sự đã tìm cách viết mã thủ tục tào lao với các cấu trúc vô nghĩa bao quanh những gì cũng có thể là các hàm đơn giản hoặc cấu trúc tốt nhất.
Erik Reppen

2
"Mọi người không nghĩ Google khi họ nghĩ Java." ... Tôi chắc chắn nghĩ về Android và máy ảo Dalvik của họ (là máy ảo Java) khi tôi nghĩ về Google. Tôi cũng nghĩ về những thứ hay ho như GWT (thế hệ JavaScript tự động từ Java). Nếu có một công ty "cao" trên Java, thì đó là Google. Nhiều hơn Apple hay Microsoft. Cấp, Oracle và IBM thậm chí còn liên kết với Java nhiều hơn Google nhưng vẫn: hàng tỷ thiết bị Android chạy ứng dụng Java trên máy ảo Java là một điều khó nghĩ khi không thiết lập liên kết Google / Java rất mạnh.
Cedric Martin

Rất nhiều sự căm ghét đối với mẫu JSF2 @CraigRinger trong những bình luận này. :-) Điều gì về nó làm bạn khó chịu? Tôi thấy nó phức tạp để bắt đầu, nhưng một khi tôi đã đi, tôi thích nó. Tất nhiên, tôi đã sử dụng Spring trước đó, vì vậy mọi thứ khác sẽ giống như một sự cải tiến ... :-)
Brian Knoblauch

1
Tôi là một Nhà phát triển OOP trong Java và tôi không thể nói quá về lợi ích của OOP cho các nhà phát triển. Có, sẽ mất thêm một chút thời gian trong khi phát triển, nhưng tỷ lệ lỗi thấp hơn, dễ đọc và dễ duy trì mã hơn rất đáng giá. Chưa kể rằng kiểm tra đơn vị trở nên dễ dàng hơn với OOP được thực hiện đúng.
IntelliData

14

Các khung công tác phát triển web Java có khá nhiều đường cong học tập, chúng thường quá mức cần thiết cho những gì bạn cần và phần lớn sự thiếu quyết đoán cần thiết để khiến mọi thứ hoạt động chỉ là ... đau đớn ... để làm việc.

Tôi đã từng làm việc cho một công ty đã phát triển Spring / Java và tôi thấy khung công tác cồng kềnh là tốt nhất. Tôi không có nhiều điều thú vị để nói về khuôn khổ của Spring, ngoại trừ tôi có một người bạn đã từng phát triển Struts và anh ấy nghĩ Struts thậm chí còn tồi tệ hơn. Khung web không giống như làm các ứng dụng máy tính để bàn hoặc ứng dụng di động (ví dụ: android) và có rất nhiều ý tưởng trừu tượng cần một chút thời gian để thực sự nắm bắt (mặc dù, chắc chắn, nó mang lại cho bạn nhiều sức mạnh và khả năng nếu bạn 'là một chuyên gia và làm một cái gì đó thực sự phức tạp như một ứng dụng cấp doanh nghiệp). Tôi thích lập trình java cho thiết bị di động hoặc máy tính để bàn, nhưng java cho ứng dụng web? Không nhiều lắm.

Tôi chưa từng thực hiện bất kỳ chương trình cá nhân nào trong Ruby / Rails, nhưng người bạn của tôi đã từng làm Struts hiện đang làm lập trình web Ruby và xác nhận rằng những điều khó thực hiện trong lập trình web Java đòi hỏi ít mã và độ phức tạp hơn để đạt được Ruby. Chắc chắn có một đường cong học tập theo các quy tắc ngôn ngữ và cú pháp khác nhau, nhưng đối với các ứng dụng tạo mẫu, nó có một lợi thế về số lượng mã được yêu cầu để đạt được kết quả mong muốn. Như những người khác đã đề cập, khả năng mở rộng cũng là một vấn đề cần xem xét và một trong những lý do khiến các ứng dụng trưởng thành hơn không được nhìn thấy thường xuyên trong các ngôn ngữ hông hơn.


+1 cho khung quá mức cần thiết. Nó đang trở nên điên rồ, mùa xuân j2ee maven ant hibernate, bạn dành toàn bộ thời gian để viết xml config.
Richard

1
+1 cho khung. Không chỉ các khung công tác ban đầu cố gắng P ** s Poor (JSP, STRUTS), giờ đây chúng tôi có khoảng ba mươi để chọn không phải một trong số đó hoạt động tốt như RoR.
James Anderson

Đó không chỉ là các khung. Đó là mức độ phù hợp tục tĩu đối với những thứ không có ý nghĩa. Phơi bày nhiều tài sản có nghĩa là bạn đang làm sai. Tát một vanilla getter và setter trên đó chỉ thêm một lệnh gọi phương thức vô nghĩa và không thay đổi gì, nhưng không có nhà phát triển Java nào sẽ chỉ treo các thuộc tính ra khỏi một đối tượng như vậy, bởi vì cộng đồng củng cố rằng điều đó không đúng hơn những gì họ đang làm. Nhưng nghiêm túc, XML thay vì điều mã ... làm thế nào mà nó kéo dài hơn 5 phút?
Erik Reppen

14

Nó đi xuống chi phí và xu hướng. Khởi động Web 2.0 được tạo ra bởi một người có tầm nhìn dưới 30 tuổi, có nhiều tài năng hơn tiền bạc (tất nhiên tôi đang khái quát hóa nhưng đây là những gì bạn sẽ thấy "trung bình"). Anh ấy sẽ sử dụng một ngôn ngữ mà anh ấy quen thuộc vì anh ấy đang lập trình (cùng với một vài người bạn). Anh ta rất có thể là một lập trình viên tự học.

Java đã được nhắm mục tiêu như một môi trường doanh nghiệp (theo Java, ý tôi là ngôn ngữ, khung và các tiêu chuẩn). Có một loạt các công cụ đắt tiền mà IBM, Oracles và BEA của thế giới muốn bán doanh nghiệp.

Các bước để trở nên thành thạo với Java rất phức tạp và / hoặc tốn kém. Tôi biết phong cảnh đang thay đổi ở đó nhưng có quá ít quá muộn không?

Sau khi khởi động tăng lực kéo đến sự tăng trưởng. Tuyển dụng các nhà phát triển tài năng là khó khăn. Hầu hết các chương trình "trở thành lập trình viên trong sáu tuần" đều dạy Java (hoặc .NET) và thị trường đã bão hòa với "lập trình viên sáu tuần" (thật kỳ lạ là tôi đã thấy các nhà phát triển với sơ yếu lý lịch nói rằng kinh nghiệm 7 năm vẫn thể hiện kiến ​​thức của sáu lập trình viên tuần). Sử dụng một môi trường không "chính thống" không chính thống có thể là một bộ lọc tự nhiên cho các lập trình viên sáu tuần. Cần có sự cống hiến và đầu tư cá nhân để học Ruby hoặc Scala ngoài yêu cầu công việc. Đây là chỉ số lớn nhất đối với tôi về tiềm năng của một ứng cử viên.

Kiến thức đi kèm với kinh nghiệm nhưng một lập trình viên tận tâm / đam mê sẽ có được kiến ​​thức nhanh hơn (trung bình) so với người không có sự cống hiến / đam mê đó. Giống như một đứa trẻ thích chơi guitar sẽ trở nên tốt hơn nhanh hơn một đứa trẻ học bài vì cha nó đã tạo ra nó.


Tôi nghĩ rằng đây là một điểm thực sự tốt +1
sfrj

1
Tôi không đồng ý với đoạn nói rằng: Anh ta rất có thể là một lập trình viên tự học. Điều này là không đúng trong những ngày này, ngày nay hầu hết mọi người từ 30 tuổi rằng chương trình này là những lập trình viên có năng lực và có ít nhất một bằng cấp.
Coyote21

1
??? Tôi đang vẽ khởi động web nguyên mẫu. Tôi đã không nói bất cứ điều gì về họ có thẩm quyền. Bạn có thể tự học và có năng lực cùng một lúc. Tôi không chắc những gì bạn không đồng ý.
Michael Brown

1
Đây là câu trả lời của tôi. Java gần như là công nghệ web hiện tại duy nhất không được thiết kế để bất kỳ nhà phát triển có thẩm quyền nào cũng có thể chọn và sử dụng nó. Phần thứ hai trong câu trả lời của bạn là khá nhiều những gì Paul Graham đã viết trong The Python Pardox
user16764

14

Java quá phức tạp. Tôi làm rất nhiều công việc PHP và nó chỉ dễ dàng hơn và nhanh hơn trong hầu hết các tình huống. Khả năng chỉ SSH vào máy chủ mở tệp php giúp thay đổi lưu và được thực hiện là rất tốt. Một vài ứng dụng Java mà tôi đã làm việc luôn yêu cầu khởi động lại để thay đổi đơn giản nhất. (không nói rằng đó luôn là trường hợp tôi đã làm với). Ngoài ra lưu trữ PHP là giá rẻ và có sẵn.

Tôi cũng nghĩ rằng những gì bạn có ít nhất với PHP là rất nhiều nhà phát triển như tôi đã bắt đầu từ 14/15 năm trước với HTML tĩnh. Khi mọi thứ tiến triển, chúng tôi bắt đầu thêm PHP vào các trang web của mình vì nó dễ dàng, đơn giản và giá cả phải chăng. Trong những năm qua, ngôn ngữ đã phát triển và mở rộng khả năng của nó vượt xa những khởi đầu khiêm tốn và bây giờ cố gắng hết sức để trở thành thứ mà tôi nghĩ là rất nhiều thứ thực sự không phải vậy.

Mặt khác, hầu hết các nhà phát triển PHP mà tôi biết đều thấy Java khi con khỉ đột khổng lồ 800lb quá phức tạp này, gần giống như thoát ra khỏi chiếc xe tải bán 18 bánh để lái xe xuống cửa hàng tạp hóa và lấy một ổ bánh mì.

Tôi đã cố gắng học Java, những ấn tượng đầu tiên của tôi về việc nó rất dài và gây ra đường hầm ống cổ tay. Ngoài ra, việc bắt đầu còn lại cho tôi rất nhiều câu hỏi có vẻ dễ đối với một cựu chiến binh Java. OpenJDK, hay Sun? Tomcat, hoặc Glassfish, hay? Thêm vào đó, dường như mọi phần giới thiệu về sách Java bắt đầu cho bạn viết mã cho dòng lệnh. Tôi nghĩ rằng hầu hết mọi người ngày nay thấy rằng một lễ hội báo lại.


3
Tôi sẽ có nhiều lựa chọn hơn và phức tạp hơn một chút so với hơn 9000 phương thức dựng sẵn của PHP.
Kaleb Brasee

1
PHP rất dễ cài đặt.
Barfieldmv

9
nhưng nó chỉ khiến việc viết mã tốt trở nên khó khăn hơn ... dễ cài đặt hơn, dễ bắt đầu hơn, bớt nhàm chán không phải là tiêu chí bạn sử dụng để chọn ngôn ngữ. Lập trình tốt đòi hỏi kỷ luật, kiên nhẫn và nỗ lực ... đó là một dấu hiệu xấu nếu bạn không có những thứ đó trong khi lựa chọn ...
alex

Trừ khi cả hai đều hôi thối, nhưng một trong số đó là nhiều Pita để thiết lập hơn so với cái kia.
Erik Reppen

12

Nhóm của tôi và tôi hiện đang phát triển một ứng dụng web greenfield trong Java 6 + Sọc. Trong năm ngoái, tôi cũng đã làm việc trên một ứng dụng web Greenfield khác bằng cách sử dụng Java 6 + Stapler (một khung web có phần chưa được biết đến được phát triển bởi Kohsuke Kawaguchi của Hudson / Jenkins nổi tiếng).

Java hoàn toàn được sử dụng để phát triển web hiện đại. Chắc chắn nó không có sức hấp dẫn "gợi cảm" của Ruby hay các ngôn ngữ động khác, nhưng tôi không tin chắc rằng các ngôn ngữ động là một điều tốt khi một dự án bắt đầu mở rộng.

Các máy chủ ứng dụng Java hiện đại rất cạnh tranh với ASP.NET về hiệu năng và cả hai đều là những đơn đặt hàng có cường độ nhanh hơn bất kỳ VM ngôn ngữ động nào tôi biết.

Đừng làm cho tôi sai ... Tôi không nói rằng Java là luôn lựa chọn tốt nhất (không xa!) - nhưng không phải là nó luôn luôn là một sai hoặc lựa chọn "lỗi thời".


1
Tôi có xu hướng không đồng ý với "nhanh hơn". Về lý thuyết họ nên có nhưng có một số trang php lớn ngoài kia và gần như tất cả các giai thoại về các vấn đề hiệu suất liên quan đến MySQql hoặc các cơ sở dữ liệu cơ bản khác. Mặt khác, hầu hết mọi ứng dụng J2EE mà tôi đã tiếp xúc với điều chỉnh mở rộng cần thiết trước khi hiệu suất thậm chí có thể chấp nhận được.
James Anderson

1
@James: bạn có bất cứ điều gì ngoài những giai thoại mơ hồ để sao lưu điều đó không? Tất cả 10 trang web hàng đầu ngoài kia đều đang chạy trên các nền tảng được quản lý (Amazon trên Java, Twitter trên Scala IIRC, Google trên phần phụ trợ tùy chỉnh của Java và C ++) hoặc các trang web khác có cơ sở hạ tầng tùy chỉnh cao (Facebook và Wikipedia sử dụng PHP, nhưng cả hai đều có số lượng lớn mã gốc tùy chỉnh cho tốc độ). Java thường xuyên vượt trội so với các ngôn ngữ động trong điểm chuẩn. Tôi không nhiệt tình với Java, nhưng hiệu suất không phải là vấn đề của Java.
Daniel Pryden

Không có vấn đề về hiệu năng với chính Java "không hoàn toàn nhanh như C nhưng nhanh hơn bất kỳ thứ gì khác". Tuy nhiên J2EE, cộng với các khung, cộng với ORM, cộng với tiêm phụ thuộc, cộng với thiết kế quá mức gần như được đảm bảo không thực hiện; có quá nhiều tiềm năng cho những vướng mắc tiềm ẩn và những tương tác không lường trước được
James Anderson

1
@Basic: quan điểm của bạn là gì? Có rất nhiều thư viện và khung bị hỏng cho bất kỳ ngôn ngữ nào. Vâng, có rất nhiều tài liệu thô sơ và lỗi thời - nhưng điều đó cũng không phải là bất thường. Ngược lại, có một số thư viện, khung và công cụ tuyệt vời cho Java. Bạn có nghiêm túc cố gắng đề xuất rằng nên có một khung kết thúc cho mỗi ứng dụng không?
Daniel Pryden

1
@Basic: Ngược từ cái gì? Trong một năm rưỡi kể từ lần đầu tiên tôi viết câu trả lời này, tôi đã chuyển sang và hiện đang làm việc tại Google và tôi có thể đảm bảo với bạn rằng Java được sử dụng rất nhiều để phát triển ứng dụng web tại Google. Tất nhiên, nhu cầu của Google rất khác so với nhu cầu của nhiều công ty khác, nhưng Java hoàn toàn là một con thú khác khi bạn sử dụng đúng các thư viện và khung công tác - chỉ cần kiểm tra một số thứ mà Google có nguồn mở (Guava, Guice, GWT, Bộ đệm giao thức, v.v.).
Daniel Pryden

12
  1. Java phức tạp hơn để học so với PHP / Python / Ruby
  2. Hệ sinh thái Java rất phức tạp, rất lớn và khá khó hiểu với người mới bắt đầu
  3. Có nhiều khung công tác xấu trong lịch sử với danh tiếng tiêu cực liên quan đến java, bạn phải biết khung nào để tránh lãng phí thời gian vào
  4. Các công cụ xây dựng Java là cách phức tạp (maven & ant)
  5. Java không có hệ thống mô-đun dễ sử dụng (OSGI quá phức tạp)
  6. Java IDE như Eclipse trong khi rất mạnh mẽ với các tính năng tuyệt vời thì khó có thể định cấu hình để phát triển web hiệu quả mà không có nhiều kinh nghiệm.
  7. Nếu bạn đang sử dụng bất cứ thứ gì khác ngoài Tomcat hoặc Jetty làm máy chủ thì bạn sẽ thất vọng vì thời gian khởi động lâu của WebSphere / WebLogic / JBOSS
  8. Java EE giải quyết các vấn đề mà nhiều người không có như giao dịch phân tán

Một nhà phát triển mới bắt đầu phát triển chuyên nghiệp sẽ thấy Java là một Thứ tự cường độ khó hơn so với đường ray, python hoặc php để đi cùng để họ đi với những gì dễ học.

Đã nói tất cả những điều trên, tôi đã đưa ra quyết định sử dụng Java cho Khởi nghiệp của mình vì môi trường Phát triển Java được cấu hình đúng sẽ rất hiệu quả để làm việc. Ý tôi là được cấu hình đúng.

  1. Thời gian khởi động chưa đến 10 giây
  2. Không gian làm việc nhật thực được cấu hình đúng, với tất cả các khung được sắp xếp và cấu hình
  3. Lựa chọn tốt các thư viện (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, .... vv)
  4. Máy phát triển nhanh với SSD
  5. Đăng ký Safari của Safari

8
Hãy rõ ràng đi. Ngôn ngữ Java, không khó để học. Đó là tất cả các lớp tào lao được xây dựng xung quanh khi làm việc với Java để bù đắp cho những thiếu sót của nó (tính dài dòng, bảo vệ bạn khỏi chính bạn và các đồng đội của bạn bằng cách không linh hoạt khi tất cả thoát ra, số lượng thư viện vô lý dựa vào, v.v ...) đó là một PITA học.
Erik Reppen

2
@ErikReppen Rất đúng. Tôi đang phải làm việc trên một dự án Java nhưng có một nền tảng về .Net. Ngôn ngữ và cú pháp dễ dàng như bất cứ điều gì tôi đi qua để hiểu. Đó là sự dài dòng thực sự khiến tôi phát điên. Những gì tôi đã sử dụng trong 1 dòng hiện mất 5-10 và (thường) chỉnh sửa tệp cấu hình XML. Chưa kể rằng không dành hàng giờ đồng hồ để đọc, chọn khung "đúng" cho công việc là một cơn ác mộng - và đó là trước khi bạn phát hiện ra rằng kịch bản của bạn được coi là một trường hợp cạnh, không được hỗ trợ và nếu bạn không thích nó, viết lại nó Tôi muốn dành thời gian của mình để giải quyết các vấn đề lớn
Basic

"Java phức tạp hơn" - bất cứ ai cũng có thể nhớ các đơn đặt hàng tham số cho PHP strposhay in_arraykhông? Và giao diện XML DOM của PHP thật lố bịch (chuyển các thuộc tính thành chuỗi để truy xuất chúng?). OSGi hoàn toàn xuất sắc và không phụ thuộc vào ngôn ngữ.
jevon

@jevon: Các tài liệu PHP rất tốt và IDE của tôi sẵn sàng nhắc nhở tôi. Ngoài ra, SimpleXML.
DanMan

12

Khoảng 5 năm trở lại, tôi và một đồng nghiệp được giao nhiệm vụ lập trình cho một số dự án nội bộ. Một nhiệm vụ đủ đơn giản mà yêu cầu phân tích cú pháp lệnh.

Tôi đã đưa ra toàn bộ điều trong khoảng 80 dòng mã java và đồng nghiệp của tôi mất một tuần, khoảng 20 lớp java và nhiều dòng mã java khác để làm điều tương tự. Không cần phải nói, mã của anh đã được chọn.

Điều này làm tôi tự hỏi. Ở mọi nơi, sự phức tạp đã được đánh giá cao. (Tôi đã làm việc tại một trong những công ty sản phẩm phần mềm lớn nhất.) Java là công cụ được lựa chọn và các mẫu thiết kế là cách để viết mã.

Bây giờ, đó là suy nghĩ hay chỉ là sự kiêu ngạo từ chối sự đơn giản. Chà, tôi luôn nghĩ lẽ thường nên thắng thế. Cho dù đó là một doanh nghiệp hay một ứng dụng web đơn giản, các trường hợp sử dụng cơ bản đều giống nhau. Nó phải chính xác và có thể kiểm chứng.

Tôi không sử dụng java nữa vì nhiều lý do. Nhưng một trong những yếu tố - sự phức tạp, là suy nghĩ phổ biến trong hàng tấn các nhà phát triển java khi phát triển phần mềm.

Đối với việc mở rộng các ngôn ngữ động, JVM là kết quả của nhiều thập kỷ nghiên cứu. Có rất nhiều điều tương tự xảy ra với Ruby, v.v.

Scala là một ngôn ngữ mà tôi thấy cực kỳ thông minh và thực tế. Chơi! với Scala là tuyệt vời để phát triển ứng dụng web / doanh nghiệp như bất kỳ ngoài kia.

Đối với Ruby và Rails là điều mới mẻ sáng chói cho người khởi nghiệp, việc thuê một nhà phát triển Rails vững chắc là vô cùng khó khăn. Nó thực sự là một trở ngại cho bất kỳ sự khởi đầu nào trong khi rất nhiều nhà phát triển java sẽ có ý nghĩa kinh doanh hơn.


Tôi không phải là một người hâm mộ java nhưng "sự phức tạp" mà bạn đề cập đến có thể đã bị trừu tượng hóa. Trừu tượng là rất hữu ích cho cả kiểm tra và bảo trì (khi được sử dụng trong chừng mực). Thật khó để nói chắc chắn mà không thể so sánh mã
Cơ bản

11

Trong một cuộc phỏng vấn gần đây với, Joseph Snarr, một trưởng nhóm kỹ thuật của google plus đã giải thích cách ứng dụng sử dụng Java Servlets cho mặt sau và JavaScript ở mặt trước.

Vì vậy, để trả lời câu hỏi của bạn, Java vẫn được sử dụng để phát triển web rất hiện đại. Chỉ không dành cho những người khởi nghiệp đã nhận được rất nhiều báo chí gần đây.

Tôi nghĩ lý do mà rất nhiều người khởi nghiệp đang sử dụng các công nghệ khác là vì họ quyến rũ hơn và có một sự thúc đẩy nguồn mở công khai hơn đằng sau họ.


4
Các công ty khởi nghiệp sử dụng các công nghệ khác vì họ muốn hoàn thành nó ngay bây giờ. Không muộn. Và họ đã hoàn thành nó ngay bây giờ bởi 3 người chứ không phải 30.
Erik Reppen

Trích dẫn một người chỉ có thể cung cấp quan điểm và lựa chọn của anh ta nhưng không xác thực rằng bất cứ điều gì anh ta / cô ta chọn là / là quyết định đúng đắn.
DivKis01

9

Vì bạn đã đề cập đến phát triển web và Java, nhiều người có xu hướng quên rằng lúc đầu sử dụng Java Applet trong trình duyệt web không hoạt động tốt, không chỉ vậy, nhưng "hộp cát" cho các applet không được phát triển đầy đủ và có vấn đề về bảo mật với các Applet Java có thể chạy trong trình duyệt và truy cập dữ liệu máy cục bộ (còn gọi là vấn đề bảo mật phía máy khách). Chắc chắn Java đã vững chắc trong các ứng dụng phụ trợ và độc lập nhưng tôi nghĩ rằng việc kết hợp ngôn ngữ Java với các applet Java (chạy trên trình duyệt) cùng nhau tạo ra một số nhận thức về Java như một thành phần phát triển web. Tôi không nghĩ họ đã hồi phục từ đó.


9
Tuyệt đối không! Thật ra Java là một ngôn ngữ thống trị trong thế giới phía máy chủ. Applet dập tắt có thể thập kỷ trước.
Chiron

5
Flash đã làm những gì Applet đã cố gắng trở thành. Khởi động nhanh, tải nhanh, dung lượng bộ nhớ thấp.

4
Tôi biết nhiều người thậm chí không thể phân biệt được giữa Java và Javascript. Mặc dù chúng hoàn toàn không liên quan. Đây là một điều khác mang lại cho Java một tên xấu.
Kibbee

5
@Kibbee ... hoặc nó mang lại cho Javascript một tên xấu :)
Matthew Schinckel

9

Câu hỏi nên là "Tại sao Java không được sử dụng bởi các công ty mới khởi nghiệp hoặc cho các dự án nhỏ?". Java chắc chắn được sử dụng cho "các ứng dụng Web hiện đại". Tại Google, Java được sử dụng trên phần phụ trợ cho nhiều dịch vụ và đóng cửa được biên dịch JS hoặc GWT được sử dụng cho giao diện. Vấn đề là một trong những tốc độ so với quy mô. Các công ty khởi nghiệp cần có được sản phẩm khả thi tối thiểu. Họ thường là những nhóm nhỏ gồm 1-3 kỹ sư và đánh giá cao tốc độ lặp lại so với hiệu suất hoặc khả năng bảo trì. Chống lại các vấn đề về khả năng mở rộng hoặc vấn đề bảo trì mã nhóm là một vấn đề "bạn muốn có", đó là vào thời điểm bạn đạt đến giai đoạn đó, đó là dấu hiệu cho thấy việc triển khai ban đầu của bạn đã giúp bạn vượt qua giai đoạn ban đầu để có được khách hàng hoặc đầu tư. Bạn có thể đủ khả năng để viết lại ứng dụng tại thời điểm đó.

Một công ty như Google có thể chi trả cho sự xa xỉ trong việc xây dựng mọi thứ để mở rộng quy mô, mặc dù họ có thể lãng phí thời gian để thực hiện mở rộng quy mô cho thứ gì đó có thể không có người dùng, vì họ có thể hấp thụ được tổn thất.

Ít nhất, đó là ý kiến ​​của tôi, rằng nhiều công ty "tuyệt vời", "hiện đại", "hiện đại" xây dựng các ứng dụng nhỏ với các nhóm nhỏ trong đó tốc độ lặp và đơn giản là yêu cầu lớn nhất.


1
Nguồn của bạn nói rằng các công ty khởi nghiệp không sử dụng Java ở đâu? Vui lòng sao lưu giả định của bạn với một số sự kiện.
Walter

7

Các ứng dụng web truyền thống trên Java, mặc dù có cấu trúc tốt, nhưng rất xa so với "phát triển nhanh". Mặc dù tôi mới chỉ viết một ứng dụng web đầy đủ (Java / Tomcat / Struts), nhưng nó cực kỳ kén chọn, mất nhiều thời gian hơn dự kiến ​​để gỡ lỗi và thường gây đau đớn khi triển khai lớp logic nghiệp vụ. Để bảo vệ tiềm năng của Java, đó là ứng dụng web duy nhất tôi đã viết bằng Java (mặc dù tôi đã quen với việc lập trình các ứng dụng cấp hệ thống trong Java) và tôi tin rằng tôi có thể viết một ứng dụng web khác nhanh hơn lần thứ hai.

Phải nói rằng, tôi cũng đã viết các ứng dụng bằng PHP và C # và chúng chỉ hoạt động tốt hơn và dễ tha thứ hơn Java. Hơn thế nữa, Ruby on Rails được viết riêng để phát triển ứng dụng nhanh chóng, giống như Robbie đã nói, cho phép CRUD dễ dàng truy cập vào cơ sở dữ liệu. Vấn đề là hầu hết các trang web bạn sẽ tự phát triển không cần mức độ tùy chỉnh mà Java cung cấp (và yêu cầu bạn phải thực hiện). Ngoài ra, mọi đối tượng kết nối DB phải được viết bằng tay và không dễ để tạo mẫu. Có thể có một khung tốt hơn xung quanh, đặc biệt là một khung tận dụng các tính năng hỗ trợ ngôn ngữ động mới của Java 7 , nhưng tôi chưa thực hiện nghiên cứu này.


3
Bạn nên xem Play Framework, đó là khung web Java giúp bạn làm việc hiệu quả với Java và được lấy cảm hứng từ Ruby on Rails.
Jonas

2
@Jonas, xem xét viết một số bài đăng blog tốt giải thích tất cả điều này một cách chính xác.

@Jonas những gì Thorbjorn nói! Tôi sẽ cho nó đọc kỹ. :)
Brian

@ Thorbjørn: Tôi không có blog. Tóm lại: Với Play Framework, bạn chỉ cần lưu mã nguồn Java và sau đó cập nhật trình duyệt web. Mã được biên dịch tự động phía máy chủ bằng trình biên dịch Eclipse. JPA được sử dụng để truy cập cơ sở dữ liệu. Đây là một bài viết về nó Chơi! Khả năng sử dụng khung
Jonas

2
@ Thorbjørn & Brian: Xem video trên trang nhất của trang web khung chơi, nó giải thích nó rất độc đáo tôi sẽ nói.
Bjarke Freund-Hansen

7

Câu trả lời đơn giản: học đường cong đến năng suất cơ sở.

Các hệ thống dựa trên khung như RoR có xu hướng đặt "ma thuật" vào ngôn ngữ / cú pháp. Rất dễ dàng sử dụng cú pháp RoR cơ bản của bạn và tải ứng dụng lên.

Java là ngôn ngữ đầu tiên và các công cụ và khung xuất hiện sau đó. Vì vậy, bạn phải học Java trước, và sau đó bạn phải học Spring, hoặc Grails, hoặc siêu IDE của bạn, hoặc bất cứ điều gì. Ví dụ yêu thích của Ruby, nó không yêu cầu setters và getters. Thực tế là, các IDE Java cũng đã loại bỏ mã hóa thủ công ... nhưng nó vẫn nằm trong nguồn của bạn. Lợi ích của cách tiếp cận này là bên dưới khung, có một ngôn ngữ phù hợp mà tất cả các nhà phát triển Java có thể làm việc với.

Lợi ích này không rõ ràng đối với các công ty khởi nghiệp nhỏ, nơi thời gian là điều cốt yếu. Thông thường, họ đang làm rất ít mà họ không thể làm với khung bên ngoài. Vì vậy, họ có thể lấy hệ thống RAD mà họ lựa chọn và có một ứng dụng trực tiếp vào ngày hôm sau.

Nhưng nếu bạn nhìn vào Facebook và Twitter, khi họ mở rộng, họ đã tìm thấy những thứ không thể xử lý bằng các khung ngoài và vì vậy họ phải sử dụng các công nghệ cấp thấp hơn.

Cuộc chiến thần thánh này mà các nhà phát triển khung có rằng họ có thể làm bất cứ điều gì nhanh hơn là không có thật, họ có thể làm rất nhiều thứ họ cần đơn giản hơn và ít phải học hơn. Và đối với rất nhiều thứ, đó là "đủ tốt." Sử dụng những gì là đúng cho vấn đề.


6

Phụ thuộc vào cách bạn định nghĩa "phát triển ứng dụng web hiện đại". Nếu bạn đang nói về khởi động, các trang web quay vòng nhanh, bạn sẽ cần xem xét các ngôn ngữ và khung được thiết kế cho mục đích đó. Nếu bạn đang tìm kiếm sự phát triển web cấp doanh nghiệp ổn định, có thể mở rộng, bạn sẽ tìm kiếm các ngôn ngữ và khung hỗ trợ cho những lý tưởng đó. Trong cuốn sách của tôi, đó là hai mục tiêu rất khác nhau. RoR, Groovy, v.v., tốt cho cái đầu tiên và nói chung, Java thích hợp hơn cho cái sau.


6

Google App Engine hỗ trợ Java, để bạn có thể viết toàn bộ ứng dụng web của mình bằng Java, sử dụng Eclipse làm giao diện triển khai và IDE, với API Google được ghi chép hợp lý - vì vậy tôi sẽ không nói rằng nó không được sử dụng hoặc không sử dụng có thể sử dụng.


5

Khi khởi nghiệp, tôi làm việc vì chúng tôi đã chọn sử dụng cả Java và JRuby để triển khai API vì chúng bổ sung cho nhau.

Đối với cơ sở hạ tầng, phân phối quy trình và truyền thông, chúng tôi tận dụng sự mạnh mẽ của Java, trong khi để triển khai thực tế các điểm cuối API, chúng tôi đã chọn JRuby vì tất cả các cuộc gọi đều liên quan đến JSON và việc thao tác một cách trình bày lỏng lẻo (JSON) một cách lỏng lẻo ngôn ngữ -typed (Ruby).

Nếu chúng ta thấy một trong các lớp JRuby của chúng ta đang trở thành nút cổ chai, chúng ta chỉ cần thực hiện lại nó trực tiếp trong Java (về cơ bản là dịch theo từng dòng). Điều này có thể xảy ra khá thường xuyên với các lớp phải tính toán rất nhiều và trong bối cảnh này, JRuby hành xử giống như một ngôn ngữ tạo mẫu.

Chúng tôi đã triển khai trình tải lớp động của riêng mình, điều đó có nghĩa là chúng tôi có thể thay đổi các lớp Java một cách nhanh chóng mà không cần khởi động lại máy chủ và chúng tôi rất hài lòng với lựa chọn này. Vì vậy, đối số "bạn cần biên dịch và khởi động lại mỗi lần" không có trọng lượng lớn.

Điều quan trọng là tránh tất cả các công cụ Java EE - nó rất lớn, cồng kềnh và chống nhanh nhẹn.


5

Tôi vẫn có cảm giác rằng Java đang được sử dụng trong rất nhiều phát triển web. Nhưng đó thường là về sự phát triển của các công ty lớn, không có chủ yếu là công nghệ lớn, thường không cởi mở, sau đó các công ty mới khởi nghiệp phải có một lực kéo và thúc đẩy công việc của chính họ, cũng như quan tâm hơn đến công nghệ . Vì vậy, ngay cả khi nó được sử dụng trong nhiều trang web của công ty, có lẽ bạn sẽ không bao giờ biết, vì họ sẽ không thực sự quan tâm để nói công khai về ngăn xếp công nghệ của họ.

Điều đó nói rằng, bình luận tất cả các câu hỏi ban đầu ...

Nó có phải là một điểm yếu của ngôn ngữ? So với các ngôn ngữ khác như Python hay Ruby, Java dài dòng và có xu hướng cần nhiều mã hơn để làm những thứ tương tự. Nhưng đó không chỉ là khả năng của ngôn ngữ, mà cả cộng đồng xung quanh nó và loại nhà phát triển sử dụng các công cụ đó. Vì vậy, hầu hết các mô-đun và công cụ trên Python, Ruby, PHP, v.v. đều là nguồn mở và dễ tìm hơn so với trong thế giới Java, chỉ vì điều này tập trung hơn vào việc cung cấp (và tính phí) các dịch vụ. Ví dụ, cộng đồng Ruby thực sự định hướng phát triển web, vì vậy mọi nhà phát triển có thể sử dụng Ruby sẽ biết về các vấn đề và các công cụ có sẵn cho một dự án web. Điều đó không nhất thiết đúng với các nhà phát triển Java, có thể đã làm việc trên các loại hệ thống khác, như hệ thống báo cáo. Tất nhiên, bất kỳ nhà phát triển tốt sẽ bắt kịp,

Đây có phải là một định kiến ​​không công bằng của Java bởi vì nó đã tồn tại quá lâu (nó không được liên kết công bằng với các công nghệ cũ hơn của nó và không nhận được sự công nhận cho các khả năng "hiện đại" của nó)? Java không thực sự cũ và công bằng mà nói, nó đã được cải thiện rất nhiều. Đó là nền tảng phù hợp, mát mẻ khoảng 10 năm trước. Nhưng kể từ đó, đã có những nền tảng mới với những vấn đề mới hơn, như Ruby on Rails. Lĩnh vực cốt lõi của Java chủ yếu là thế giới doanh nghiệp, với các vấn đề khác nhau, vì vậy những người tìm kiếm các dự án mới bên ngoài đã tìm kiếm các công cụ khác nhau. Ngoài ra, lợi thế chính của thiết kế Java, là đa nền tảng, không còn phù hợp như ngày nay.

Là định kiến ​​tiêu cực của các nhà phát triển Java quá mạnh? (Java không còn "tuyệt" nữa) Điều đó cũng có một số sự thật trong đó. Java vẫn là ngôn ngữ để học "để có việc làm". Vì vậy, nếu bạn không quan tâm, nhưng chỉ muốn học một cái gì đó để kiếm tiền, bạn sẽ kết thúc việc học một chút Java và không quan tâm nữa để cải thiện. Một lần nữa, là rất nhiều về nhận thức và tầm nhìn. Có rất nhiều nhà phát triển Java tuyệt vời đang mã hóa mà không chia sẻ kiến ​​thức của họ, trong khi có rất nhiều nhà phát triển PHP, có thể không giỏi bằng, đang viết blog và hợp tác thành nguồn mở. Điều đó dẫn đến việc nghĩ rằng các nhà phát triển PHP tốt hơn Java, vì bạn có phản hồi nhất định về họ.

Các ứng dụng được viết bằng các ngôn ngữ khác có thực sự nhanh hơn để xây dựng, dễ bảo trì hơn và chúng có hoạt động tốt hơn không? Tôi muốn nói rằng họ nhanh hơn để xây dựng. Các nguyên tắc của các ngôn ngữ như PHP, Python hoặc Ruby làm cho chúng khá tốt để tạo ra phần mềm có thể thay đổi liên tục. Ví dụ: gõ động giúp dễ dàng thay đổi giao diện. Trong Java có một giao diện được xác định rõ là rất quan trọng, điều này dẫn đến các giao diện ổn định hơn (và khó thay đổi). Điều này rất quan trọng trong một startup mới, vấn đề chính là có được một sản phẩm trước khi bạn hết tiền. Về hiệu suất, rất dễ hiểu nhầm nhu cầu và cố gắng sử dụng các thủ thuật ma thuật để đạt được hiệu suất cần thiết, như "Java nhanh hơn Ruby. Thời gian" hoặc "MongoDB là quy mô web".

Có phải Java chỉ được sử dụng bởi các công ty lớn, những người quá chậm để thích nghi với ngôn ngữ mới? Chắc chắn, đã có một nhóm các nhà phát triển Java hiện có trong công ty, giúp dễ dàng sử dụng cùng một ngôn ngữ cho các dự án mới. Điều này được coi là "đặt cược an toàn", đặc biệt nếu cốt lõi của công ty không phải là công nghệ. Nhưng, dù sao, Java không CHỈ được sử dụng trên các công ty lớn, vẫn có rất nhiều công ty khởi nghiệp sử dụng Java cho những thứ hay ho (Ví dụ: FightMyMonster hoặc Swrve sử dụng Java rộng rãi), nhưng tôi nói rằng xu hướng chung trong khởi nghiệp cảnh là sử dụng các ngôn ngữ khác. Đó cũng là một cách để có được mọi người, vì hầu hết mọi người sẽ hào hứng hơn khi làm việc với Ruby, Python hoặc PHP, được coi là "thân thiện" và "vui vẻ" hơn


5

Điều này đúng, nhưng không phải vì Java và hệ sinh thái của nó. Đó là vì mọi người, khi sử dụng Java có xu hướng tạo ra những mớ hỗn độn lớn và gớm ghiếc.

Có đủ khung (spring-mvc, grails, play, v.v.) cho phép bạn xây dựng mọi thứ nhanh chóng. Thực tế là mọi người áp đảo hệ thống của họ là một vấn đề đi kèm với sự hiểu biết tăng lên mà mọi người có được khi họ làm việc với hệ sinh thái Java - bạn biết nhiều thứ hơn và bạn có sẵn chúng (có công cụ cho mọi thứ) và "mọi thứ trông giống như một móng tay".

Nếu bạn là "hacky", bạn có thể thực hiện khá nhiều điều tương tự với Java như với các ngôn ngữ khác và đây là một nghiên cứu chỉ ra rằng:

Nghiên cứu 49 lập trình viên: hệ thống kiểu tĩnh không ảnh hưởng đến thời gian phát triển ... http://www.cs.washington.edu/education/cifts/cse590n/10au/hanenberg-oopsla2010.pdf


3

Để thêm một chút vào những gì đã được nói, tôi nghĩ rằng rất nhiều điều phải làm với tốc độ bạn có thể đi từ không có gì (theo nghĩa đen) đến một ứng dụng web chức năng.

Nếu tất cả những gì bạn có ngày hôm nay là một ý tưởng, đi từ nơi bạn đang viết đến ứng dụng web của bạn gần như dễ dàng rơi xuống, cho dù bạn chọn nhà cung cấp dịch vụ lưu trữ hoặc cơ sở hạ tầng của riêng bạn (như hình ảnh EC2). Chọn Java, theo kinh nghiệm của tôi, thường là công việc nhiều hơn và thường cũng tốn nhiều chi phí hơn.

Ngoài ra, nếu bạn đi với Linux và PHP / Python / Ruby, các công cụ và nền tảng đều miễn phí và được thiết kế để hỗ trợ lẫn nhau. Với Java, đôi khi dường như hai thế giới (OS và Java) đôi khi dường như không hoạt động hài hòa với nhau.


Các đường cong học tập là hoàn toàn dọc. Bạn sẽ dành vài TUẦN đầu tiên để tìm ra các từ viết tắt là gì, các tiêu chuẩn liên quan đến việc triển khai của chúng như thế nào, mọi thứ được xếp lớp như thế nào, v.v ... Sau đó vài tuần tiếp theo sẽ tìm ra cách sử dụng các thư viện và khung. Sau đó vài tuần tiếp theo báo cáo lỗi trong đó ...
Craig Ringer

3

Ai nói không phải vậy?

Spring MVC + Spring Data JPA hoặc Mongo + Thymeleaf cho templating + coffee-maven-plugin cho Coffee to JS transpiling và bạn rất tuyệt.


Tôi hoàn toàn đồng ý với bạn +1
Arshad Ali

3

Nhiều người có thể liên kết sự phát triển ứng dụng web và Java với sự khủng khiếp của J2EE, đi kèm với các máy chủ ứng dụng J2EE quái dị từ các tập đoàn lớn màu xanh và đỏ, đã cân bằng nhiều tuần làm việc trước khi "Hello World" cơ bản trực tuyến.

Đúng, các thông số kỹ thuật và triển khai JEE gần đây có trọng lượng nhẹ hơn, nhưng tôi vẫn nghĩ ba lần trước khi đề xuất bất cứ điều gì như thế này cho một dự án phát triển nhanh chu kỳ ngắn.

Đây vẫn là cách phát triển ứng dụng web dựa trên tiêu chuẩn trong Java. Các lựa chọn thay thế, nhiều trong số đó được đề cập trong các câu trả lời khác, truyền tải một bức tranh hỗn tạp và khó hiểu hơn với quá nhiều sự lựa chọn.

Các ngôn ngữ khác mô tả một giải pháp chìa khóa trao tay duy nhất thay vì vô số. Điều này làm cho sự lựa chọn này có vẻ phù hợp hơn cho mục đích khi bạn có cá quan trọng hơn để chiên.


Java EE 6 có thể là "trọng lượng nhẹ" (ngoại trừ JSF2) nhưng nó vẫn là một đường cong học tập cực kỳ lớn, một đống khổng lồ các thông số kỹ thuật phức tạp và một hệ thống xếp lớp vô cùng phức tạp. Có thể nhẹ, nhưng chắc chắn không đơn giản.
Craig Ringer

2

Tôi nghĩ rằng nó được sử dụng nhiều hơn bạn nghĩ - việc sử dụng ngay dưới dòng nước. Có rất nhiều, rất nhiều viên ruby ​​trên đường ray bao quanh các dịch vụ java dày, lạ mắt. Đặc biệt là khi bạn bắt đầu đối phó với bất cứ điều gì tiếp cận dữ liệu lớn. . .

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.