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.