it-swarm-vi.com

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

Là một lập trình viên chuyên nghiệp Java, tôi đã cố gắng hiểu - tại sao lại ghét Java cho 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ệ khá nhỏ trong số họ dường như đang sử dụng Java (so với mức độ phổ biến 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 một câu trả lời như: "Tôi ghét Java với một niềm đam mê." Nhưng dường như không ai thực sự 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 động web tương tự này đề cập tiêu cực đến Java nhà phát triển - í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â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 bản mẫu không công bằng của Java vì nó đã tồn tại quá lâu (nó không công bằng với các công nghệ cũ 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ó)?

  • Có phải bản mẫu tiêu cực của Java nhà phát triển quá mạnh không? (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?

393
Cliff

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 vui là JRebel cho phép bạn thấy mã thay đổi ngay lập tức.

174
Chiron

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ỏ. Ví dụ, một blog đơn giản với một bảng cơ sở dữ liệu chứa các mục blog 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 nhiều (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 (chẳng hạn như backframe và cơ sở dữ liệu và web ngang hàng- dịch vụ hệ thống xử lý hàng loạt nền ... 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.

136

Tôi đã lập trình Java ứng dụng web 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ể làm được nhiều việc hơn trong một khoảng thời gian ngắ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 thì Java dựa trên kinh nghiệm cá nhân của tôi, milage của bạn có thể rất.

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 cả tấn libs của bên thứ 3 từ các vị trí giống như Apache chung. 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 sẽ không gặp may. 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_mapping_software#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 thực sự 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 dấu chân tài nguyên của chúng, nhưng so với các ngôn ngữ khá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à cầu cảng. 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 vẫn 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 ở một mức giá hợp lý. Lý do chính là vì các ứng dụng Java cần nhiều bộ nhớ hơn so với các ngôn ngữ khác, do đó, việc nhà cung cấp dịch vụ lưu trữ chia sẻ chi tiêu có giá trị RAM chạy một Java site, 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, đ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 bằng 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 cùng.

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 như vậy đối 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ó một tấn RAM. Các nhà sản xuất của IntelliJ đã đưa ra một trình soạn thảo python được 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 Java các ứng dụng web mà tôi phải làm theo thời gian, 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 ORM 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 python ORM tuyệt vời khác là sqlalchemy, tương tự như 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ề phía Python, hai mục ưa 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.

135
Ken Cochrane

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.

Doanh nghiệp 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à a Java Thư viện thẻ) 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 w/ứ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ó thành Java và đạt được sự ổn định.

Những người duy nhất nhìn xuố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à bây giờ rất ngại ngùng. Họ thấy sự sáng bóng và hình dạng 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?

94
Adrian J. Moreno

Một bổ sung cho FrustratedWithFormsDesigner's answer: 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 cho nhiều người: Hosting có mặt khắp nơi cho PHP nhưng khó hơn đối với Java hoặc ASP trang web Tuy nhiên, đây không phải là khiếm khuyết của những ngôn ngữ đó.

73
sebastiangeiger

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ể sẽ được thực hiện bằng một trong 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/Phóng to + nhiều khung tùy chỉnh) để đặt tên nhưng 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ủ".

70
mikera

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 tất cả mọi người (có thể nói là vẫn làm). "Đừng lặp lại chính mình" là một phản ứng với địa ngục xml và lâu dài xây dựng chu kỳ của Java phát triển web. Kết quả là, Java (EJB, Struts, JSF, v.v.) đã được xem là điều tất cả các mô hình mới cố gắng vượt qua.

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.) có thể gây nản lòng 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 (giao diện, mô hình và nước thánh cho những ma cà rồng php đó) được thiết kế tốt sẽ giúp giảm thiểu 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 bắt nguồn 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ã được xây dựng 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 so với 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 lớn/phức tạp các ứng dụng web như các ứng dụng tại các công ty môi giới tài chính (ameritrade), trao đổi tài chính (Nasdaq, nyse, có thể là 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.v.

Từ góc độ hiệu suất và tỷ lệ, không có gì đứng đầu 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). Ví dụ, Twitter phải viết lại phần lớn của nó Ruby cơ sở hạ tầng trong Scala trên Java VM theo thứ tự để đưa con cá voi thất bại trở ra biển. Tôi đã nghe nói về những ví dụ lớn khác, nhưng chúng trốn tránh tôi ngay bây giờ.

Nó cũng có giá trị xem xét bảo mật. Trong khi Java plugin trình duyệt đã phải chịu một phần lỗ hổng bảo mật công bằng, 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. Java có tiếng là rất an toàn. 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 (Rails) có uy tín bảo mật tốt, không có gì 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 giản, Java thường là 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 :)). Tuy nhiên, nếu ứng dụng web phức tạp (phụ trợ hoặc theo 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.

-

Theo ghi chú 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 đang ngày càng trở nên phổ biến hơn trong thế giới Ruby) .

BTW - Tôi thấy sự gia tăng của PHP thực sự gây trở ngại. PHP vì ngôn ngữ là tương đương với Perl về 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 giúp đẩy Larry Wall lên ... à ... a tường. Lời 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ể thực hiện 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 chút. Tuy nhiên, có rất nhiều điều để nói về quan điểm áp dụng. Tuy nhiên, đối với bất kỳ ai 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. :)

41
user56365

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

Tôi có thể xây dựng CRUD ứng dụng bằng cách sử dụ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 tôi biết Ruby tốt hơn nhiều so với tôi biết Java.

38
Robbie

Java đã được định vị trong những năm gần đây là "doanh nghiệp". Đó là mặt khác của quang phổ 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ó mã hóa. Nó có khả năng mang tính cách mạng trong việc sử dụng chuỗi trong câu lệnh chuyển đổi chỉ mới ngày hôm qua. bạn trở lại Java.

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

24
Daniel Iankov

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 kho 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à các thứ. Chúng giống như một khung đơn 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 tra rất giống nhau trong Java và Ruby, Ruby 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 bạn. Thậm chí nhiều khung Web không nghĩ đến 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 Java ứng dụng đượ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. cũng để làm rất nhiều 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 Oops Khái niệm. 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 Các 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 giữa 100 lớp, đôi khi có khung. Làm cho toàn bộ hoạt động lập trình trở thành 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 Java Các nhà phát triển chú ý nhiều đến những gì một lớp làm. Đó là Java Các nhà phát triển thường đưa ra một mã với 100 'lớp. Điều này tốt từ nhiều khía cạnh 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à có quá nhiều tiền để cam kết. Thêm vào đây là một cộng đồng lớn 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 thảo luận và hội nghị do cộng đồng tiến hành thể hiện tất cả những điều mới mẻ thú vị. Không có cuốn sách hay mới nào. 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 trong vài năm trở lại đây.

18
arunmur

Các khung để thực hiện Java phát triển web 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 với.

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 pro 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 quá nhiều.

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 Ruby lập trình web và xác nhận rằng những điều khó thực hiện trong Java đòi hỏi ít mã và độ phức tạp hơn để đạt được trong 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ó lợi thế về số lượng mã được yêu cầu 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.

14
Jessica Brown

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, người có nhiều tài năng hơn tiền (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 cảnh quan đang thay đổi ở đó nhưng liệu có 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" 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ạ tôi đã thấy các nhà phát triển với sơ yếu lý lịch nói 7 năm kinh nghiệm vẫn thể hiện kiến ​​thức của một lập trình viên sáu tuần). Sử dụng môi trường không "enterprisey" không chính thống có thể là 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 a 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 tiềm năng cho ứng 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ó.

14
Michael Brown

Java quá phức tạp. Tôi thực hiện rất nhiều công việc PHP và nó 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 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à 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 PHP devs tôi biết đều thấy Java vì 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 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 cho Java book 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.

14
Cyrus

Nhóm của tôi và tôi là hiện tại đang phát triển ứ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 hoặc các ngôn ngữ động khác, nhưng tôi không tin rằng ngôn ngữ động là một điều tốt khi dự án bắt đầu mở rộng.

Modern Java máy chủ ứng dụng 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ỳ ngôn ngữ động nào VM tôi biết.

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

12
Daniel Pryden
  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 những khung công tác 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 rất khó đị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ẽ tìm thấy Java Thứ tự cường độ khó hơn Rails, 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ột được định cấu hình đúng Java Môi trường phát triển rất hiệu quả để làm việc. Ý tôi là 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 Eclipse đượ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
12
ams

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 Java lớp và nhiều dòng mã Java để làm cái 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 một tấn Java dev khi nói đến việc 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 cũng tuyệt vời để phát triển ứng dụng web/doanh nghiệp như mọi thứ 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 sự đa dạng của Java dev sẽ có ý nghĩa kinh doanh hơn.

12
Ar Wen

Trong một cuộc phỏng vấn gần đây với, Joseph Snarr, 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ỉ 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à 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 nguồn mở rộng rãi hơn Đẩy phía sau họ.

11
Greg Guida

Câu hỏi phải là "Tại sao không Java đượ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 "ứng dụng Web hiện đại". Tại Google , Java được sử dụng trê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à các 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ạy đua vớ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à một 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 vào 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.

9
cromwellian

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 Các ứng dụng 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 hoàn toàn đã phát triển và có vấn đề bảo mật với Java Các ứng dụng 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 rất 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 liên kết Java ngôn ngữ với Java applet (chạy trên trình duyệt) cùng nhau bị rối loạn một số nhận thức về Java là một thành phần phát triển web. Tôi không nghĩ họ đã hồi phục từ đó.

9
LocoTx

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 công tác xuất hiện sau đó. Vì vậy, bạn phải học Java trước, 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à, Java IDE 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 phương pháp này là bên dưới khung, có một ngôn ngữ phù hợp rằng tất cả Java nhà phát triển 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 lựa chọn RAD và có ứ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 đề.

7
Lucas McGregor

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 đã sử dụng để 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 một chút Vong 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 nhiều so với Java. Hơn thế nữa, Ruby on Rails được viết riêng để phát triển ứng dụng nhanh chó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à khung có lợi thế 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.

7
Brian

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 IDE và giao diện triển khai, với API Google được ghi lại một cách hợp lý - vì vậy tôi sẽ không nói nó không được sử dụng hoặc không sử dụng được.

6
Paul

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à Java là phù hợp hơn, nói chung, cho cái sau.

6
cdkMoose

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 của chúng tôi 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 điều khiển một cách biểu diễn được gõ 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 triển khai lại 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 thực hiện nhiều tính toán, 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 Java các lớp 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, "bạn cần biên dịch và khởi động lại mỗi lần "đối số không giữ nhiều trọng lượng.

Đ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
David Semeria

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 nó thường thuộc loại phát triển theo định hướng kinh doanh-không-chủ yếu là công nghệ lớn, mà Thông thường ít mở hơn 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 họ, cũng như quan tâm đến công nghệ hơn. Vì vậy, ngay cả khi nó được sử dụng trong nhiều trang web 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 ...

Đây có phải là điểm yếu của ngôn ngữ không? So với các ngôn ngữ khác như Python hoặc 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. là nguồn mở và dễ tìm thấy hơn 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ụ: = Ruby thực sự hướng đến 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ông cụ có sẵn cho dự án web. Điều đó không nhất thiết đúng với Java nhà phát triển, 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 giỏi nào cũng sẽ bắt kịp, nhưng nhận thức là trung bình = Java nhà phát triển ít lo lắng hơn về l kiếm được công nghệ mới và ngôn ngữ mới.

Đây có phải là một bản mẫu không công bằng của Java 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ũ của nó và không nhận được sự công nhận cho " "khả năng hiện đại)? Java không thực sự cũ và công bằng, nó đã được cải thiện rất nhiều. Đó là nền tảng phù hợp, tuyệt vời khoảng 10 năm Nhưng trước đó, đã có những nền tảng mới với những vấn đề mới hơn, như Ruby trên Rails. Lĩnh vực cốt lõi của Java chủ yếu là công ty thế giới, 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 đang tìm kiếm các công cụ khác nhau. Ngoài ra, lợi thế chính của Java thiết kế, là đa nền tảng, không liên quan như ngày nay là trước đây.

Có phải bản mẫu tiêu cực của Java nhà phát triển quá mạnh không? (Java không còn "tuyệt") Điều đó cũng có Một số sự thật trong đó. Java vẫn là ngôn ngữ để học "kiếm 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, rất nhiều về nhận thức và khả năng hiển thị. Có rất nhiều nhà phát triển tuyệt vời Java mã hóa mà không chia sẻ kiến ​​thức của họ, trong khi có rất nhiều PHP nhà phát triển, có thể không tốt bằng, đang viết blog và cộng tác vào nguồn mở. Điều đó dẫn đến việc 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 chúng 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 phần mềm có thể thay đổi liên tục. Ví dụ: Gõ động giúp thay đổi giao diện dễ dàng hơn. Trong Java có giao diện được xác định rõ là rất quan trọng, điều này dẫn đến giao diện ổn định hơn (và khó thay đổi). Điều này rất quan trọng trong một khởi động mới, vấn đề chính là phải có sản phẩm trước 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 trò ảo 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". Thực tế khó khăn hơn.

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 hiện có Java nhà phát triển trong công ty, giúp dễ dàng sử dụng cùng 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ệ Tuy nhiên, dù sao đi nữa, Java KHÔNG CHỈ được sử dụng cho các công ty lớn, vẫn có rất nhiều phần khởi động sử dụng Java cho nội dung thú vị (Ví dụ: - FightMyMonster hoặc Swrve sử dụng Java rộng rãi), nhưng tôi muốn nói rằng xu hướng chung trong bối cảnh khởi động là sử dụng các ngôn ngữ khác. cũng là một cách để thu hút 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à ngôn ngữ "thân thiện" và "vui vẻ" hơn so với làm việc với Java.

5
Khelben

Đ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à sự ghê tởm nặng nề.

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 điều 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 cái đinh".

Nếu bạn là "hacky", bạn có thể thực hiện 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 của 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

5
Bozho

Để 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 ứng dụng web của bạn gần như dễ dà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 là 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.

3
Matt Ryan

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.

3
Martin Spa

Nhiều người có thể liên kết Java và phát triển ứng dụng web 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.

3
Asgeir S. Nilsen

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 mực nước. Có rất nhiều, rất nhiều Ruby trên Rails bao bọc xung 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. . .

2
Wyatt Barnett

Java thật tuyệt, Java rất tuyệt và Java sẽ rất tuyệt trong tương lai. Tôi đang phát triển Ứng dụng web. Sử dụng Java.

Vấn đề chính với Java là nó cần một nhóm có quy mô trung bình 7-10 người để xem kết quả thực hiện. Các nhà phát triển của back end phải có kiến ​​thức về kiến ​​trúc ứng dụng từ khung ORM đến Ứng dụng để Lớp trình bày. Quá nhiều tùy chọn cho các nhà phát triển trên bảng và điều này đặt ra câu hỏi, có nên sử dụng ORM hay không? Sử dụng khung ORM nào? Sử dụng khung ứng dụng nào? Cách triển khai giao diện người dùng? điều này làm cho các nhà phát triển phải vật lộn và làm cho các kết hợp trở nên vô tận từ người dùng cuối để chọn công nghệ này với khung mà các nhà phát triển không quen thuộc. Tương tự với các plugin IDE; quá nhiều tùy chọn, rất nhiều tùy chọn dành thời gian cho việc cài đặt, định cấu hình và kiểm tra nếu phiên bản plugin này hoạt động với phiên bản IDE, v.v. Điều cuối cùng là lưu trữ; nhiều người đã phát triển Java Ứng dụng không được công khai vì không có lưu trữ web thích hợp cho Java ứng dụng web, gett ing một VPS với giá $ 80/tháng không phải là một lựa chọn cho quá nhiều nhà phát triển và hầu hết các ứng dụng cần nhiều hơn một VPS.

2
newphoenix

Tôi đang sử dụng rất nhiều Java, để tạo các ứng dụng web. Vì vậy, khi nói đến ngôn ngữ * itel * f, tôi chỉ tìm thấy một vấn đề (nhưng lớn) - thiếu hỗ trợ đa dòng. Điều này làm cho việc in/tạo khuôn mẫu trong thuần Java rất khó đọc.

Nhưng vấn đề thực sự là thiếu khung web tốt. Tôi đã làm việc với rất nhiều giải pháp, và không ai trong số chúng tôi có thể đặt tên tốt hay thậm chí là thỏa mãn.

Hầu hết trong số họ thực tế là lập trình XML. Trong JSF bạn tạo ra hàng tấn XML và nếu bạn muốn thay đổi một số tính năng chung, như sắp xếp lại các nhãn thành đầu các trường văn bản, bạn sẽ kết thúc trong việc thực hiện cùng một thay đổi ở nhiều nơi. Có, bạn đã bao gồm, nhưng so sánh chúng với bao gồm từ PHP ...

Ngoài ra, JSF mới bao gồm các tính năng "phụ" đã được biết đến với JavaScript khung năm trước ...

ZK tốt hơn một chút vì nó cho phép tạo các thành phần web trong mã Java, giúp việc sửa đổi dễ dàng hơn (nếu bạn sử dụng OOP đúng cách - kế thừa, v.v.). Tuy nhiên, mã này Java được thực thi ở phía máy chủ, đây là một vấn đề hiệu suất tuyệt vời - mỗi lần nhấp sẽ gây ra một gói được gửi đến máy chủ.

Chà, GWT là khung web tốt nhất mà tôi đã làm việc với. Nó cho phép lập trình đối tượng trong thiết kế web. Mọi phần tử trên màn hình được biểu thị bằng đối tượng Java, mang lại cho bạn sự linh hoạt hoàn toàn nhưng ... Thời gian biên dịch rất dài và Javascript được tạo ra không tối ưu, đơn giản là vì GWT không Không sử dụng đầy đủ các khả năng JavaScript (không hỗ trợ cho phản ánh, ít nhất là trong phiên bản tôi đang sử dụng và triển khai HashMap gây tử vong).

Bạn có thể sử dụng các mẫu, chẳng hạn như Vận tốc, nhưng như trên, chúng là phiên bản của người nghèo về các khả năng tạo khuôn mẫu được cung cấp bởi các ngôn ngữ như PHP.

Vì vậy, nó không ghét Java, nhưng thiếu sự hỗ trợ để viết các ứng dụng web mà người ta sẽ nhận được khi sử dụng PHP, Python v.v ...

1
Danubian Sailor

Vấn đề với Java là ngôn ngữ này được học ở trường, vì vậy đây là ngôn ngữ được các lập trình viên mới biết đến nhiều nhất. Vì vậy, nếu bạn muốn phân biệt chính mình với số đông, bạn phải học một ngôn ngữ mới ngôn ngữ, Java là ngôn ngữ của mọi người.

Lý do thứ hai là ở trường hoặc trong các công ty lớn khi bạn muốn xây dựng một ứng dụng web, giáo viên hoặc người đã có sẵn cung cấp cho bạn hàng tấn Java khung để giúp bạn xây dựng ứng dụng này nhanh hơn. Nhưng trên thực tế, theo cách này, bạn xây dựng ứng dụng web của mình mà không thực sự hiểu về web (HTTP, HTML, CSS, Javascript, v.v.). Xu hướng này ít thấy hơn với các ngôn ngữ khác như RoR hoặc Python, các nhà phát triển sử dụng các ngôn ngữ này có hiểu rõ hơn về web.

Vì vậy, những người thống kê muốn xây dựng các ứng dụng web hiện đại thích sử dụng RoR, PHP hoặc Python để thu hút những người phát triển web giỏi, những người hiểu web và không chỉ một ngôn ngữ lập trình.

1
Alexandre Vivien

Nếu theo "hiện đại", bạn có nghĩa là phổ biến (trong khi nhận được hầu hết báo chí) thì lý do Java không được sử dụng rất đơn giản - bởi vì tất cả "những đứa trẻ tuyệt vời" đang sử dụng Ruby (hoặc Python, hoặc Clojure, hoặc Scala, hoặc bất cứ điều gì "tuyệt" trong những ngày này).

Có một ý nghĩa sâu sắc hơn, những người này sử dụng Ruby hoặc Python để viết các ứng dụng web "hiện đại" của họ thường là những nhà cải tiến thực sự tuyệt vời. thích giải quyết các vấn đề gây phiền nhiễu theo những cách đơn giản và hiệu quả trong khi tiết kiệm thời gian và sức mạnh của não khi thực hiện nó. Một số người có thể nói đây là những phẩm chất của những lập trình viên giỏi.

Những người này thường tạo ra nhiều báo chí nhất xung quanh các dự án của họ, điều mà các công ty lớn hiếm khi làm. Có thể bằng cách làm nhiều nguồn mở, hoặc viết blog, hoặc bất cứ điều gì.

Vì vậy, lực hấp dẫn của những người này vào thế giới của các ngôn ngữ động, nơi họ được cung cấp những cách đơn giản hơn/nhỏ hơn/nhanh hơn/gọn hơn để giải quyết vấn đề là điều dễ hiểu. Đáng buồn thay, điều đó có nghĩa là cùng những người tuyệt vời Java nhà phát triển, trưởng thành và từ bỏ bandwagon Java vì nó gây khó chịu và khó sử dụng cho họ) giải quyết những vấn đề tương tự.

Nếu tạo một ứng dụng web đơn giản với MVC framework X, yêu cầu viết/chỉnh sửa chỉ 100 dòng mã trong Rails/Django và ngược lại, nó yêu cầu 10.000 dòng mã trong Java để thực hiện điều tương tự - rất rõ ràng tại sao điều đó có vẻ khó chịu.

Về tuyên bố của bạn "Tôi chưa thấy bất cứ điều gì quan trọng" thiếu "từ Java, ngăn tôi xây dựng cùng một ứng dụng." Câu hỏi là - nếu bạn có cùng số lượng kinh nghiệm trong Rails/Django/Dù thế nào ... hai ứng dụng này sẽ như thế nào Java và không phải Java so sánh với nhau, đo thời gian và nỗ lực và bất kỳ số liệu nào khác mà bạn có thể đưa ra.

1
Evgeny

Một câu trả lời thú vị được đưa ra bởi Dries Buytaert, người sáng lập drupal. Mặc dù tiến sĩ của ông là về Java, ông đã chọn php cho drupal và ông không hối hận vì đã làm như vậy. Bạn có thể đọc nó (và một số bình luận của anh ấy) tại đây: http://buytaert.net/why-php-and-not-Java

Sẽ rất khó để có được khối lượng tới hạn nếu Drupal được viết bằng Java.

0
johanvdw