Đọc "Tại sao Java vẫn sống sót một cách hoàn hảo ? Phần 1" tại đây nhé
Bài dịch từ Medium
Tôi viết bài này như một lời hồi đáp cho tác giả của: Tại sao Java đang chết dần ?. Tôi có để lại một bình luận dưới bài viết đó mà không ngờ rằng nhận được rất nhiều sự đồng tình, thậm chí nó trở thành "top comment". Vậy nên tôi nghĩ mình phải trình bày luận điểm đối nghịch của mình một cách đầy đủ và rõ ràng.
Tính bảo đảm
Không giống như nhiều công nghệ khác, Java vừa là ngôn ngữ vừa là nền tảng cung cấp cho bạn rất nhiều sự bảo đảm.
Đặc tả ngôn ngữ Java
Ngôn ngữ Java có "Đặc tả ngôn ngữ Java", cho chúng ta thấy cách các cấu trúc Java hoạt động và nên được sử dụng như thế nào. Tại sao điều này lại quan trọng? Bởi vì bạn có thể xác thực những gì mình đang làm và giải quyết các câu hỏi hoặc tranh chấp một cách chặt chẽ, có thể dự đoán được. Đối với các ngôn ngữ không có đặc tả, bạn không thể chắc chắn điều gì đang xảy ra: Bạn có thể tìm thấy một số thông tin trong sách hướng dẫn, blog hoặc tweet của người tạo ngôn ngữ, nhưng tất cả các thông tin này sẽ không một cơ sở mạnh mẽ để đảm bảo bất cứ điều gì
Tất nhiên, các đặc tả có thể có chất lượng khác nhau hoặc mức độ chi tiết khác nhau và do đó đôi khi có thể bỏ sót một vài điều. Tuy nhiên, một ngôn ngữ có đặc tả mang lại cho bạn mức độ tin cậy cao hơn nhiều rằng bạn đang làm mọi việc đúng hướng. Đặc tả của Java rất sâu sắc và chi tiết, không hề mơ hồ.
Các phiên bản Java tương thích ngược mạnh mẽ cho đặc tả và những "public" API Java . Có nghĩa là nếu bạn lấy code API Java công khai của phiên bản 1.3 được viết cách đây 20 năm và chạy nó ngày hôm nay trên Java 15, nó vẫn sẽ hoạt động bình thường. Nhưng, nếu bạn sử dụng Java API riêng tư, bao gồm các lớp và phương thức / trường không phổ biến, bạn có thể gặp rắc rối. Tôi nghĩ rằng đó là một điều dễ hiểu.
Java an toàn và bảo mật
Java an toàn và bảo mật - không hoàn toàn, nhưng hầu hết, và khá thực tế. Mã Java an toàn theo nghĩa là các DEV ít có khả năng mắc lỗi với nó hơn so với nhiều ngôn ngữ khác. Nó an toàn theo nghĩa là mã Java không có quyền truy cập trực tiếp vào hệ điều hành hoặc phần cứng và do đó thời gian chạy Java có thể giới hạn một cách an toàn những gì chương trình Java có thể và không thể làm.
Mã Java có tính "di động"
Điều này có nghĩa là bạn có thể biên dịch mã Java trên một nền tảng và chạy nó trên bất kỳ nền tảng nào mà Máy ảo Java được triển khai mà không cần biên dịch lại. “Viết một lần, chạy ở bất cứ đâu” - khẩu hiệu cũ của Java, vẫn còn tồn tại cho đến ngày nay 25 năm sau. Khả năng di động rộng cùng với khả năng tương thích ngược là sự kết hợp rất mạnh mẽ, khiến cácDEV tin tưởng rằng nỗ lực và kiến thức của họ sẽ không bị lỗi thời nhanh chóng. Tất nhiên, rất hiếm thôi, một số máy ảo chỉ cho phép các tập con của đặc tả ngôn ngữ Java do các lý do khác nhau như giới hạn phần cứng. Ví dụ: bạn có thể chạy mã Java trên vi điều khiển RAM 8kB, nhưng có những hạn chế mà bạn phải xem xét.
Mã Java dễ bảo trì
So với các ngôn ngữ như C ++, cú pháp của Java là một sự đơn giản hóa tuyệt vời; nó thiếu nhiều tính năng, tùy chỉnh và cấu trúc mạnh mẽ mà C ++ có. Đồng thời, so với các ngôn ngữ kịch bản, Java có nhiều “nghi thức” thoạt nhìn hơi thừa. Theo nghĩa này, Java cố gắng giữ cân bằng giữa độ phức tạp, sức mạnh và khả năng đọc để tối đa hóa khả năng bảo trì mã lâu dài. Khả năng bảo trì là gì? Tôi mô tả đây là thời gian cần thiết để DEV có kỹ năng trung bình áp dụng các thay đổi cho cơ sở mã hiện có (có thể là cơ sở mã cũ) dẫn đến mục tiêu của DEV và không phá vỡ bất kỳ điều gì khác. Thời gian cần thiết càng ít, khả năng bảo trì càng lớn.
Theo nghĩa này, Java là tốt. Một mặt, nó đủ mạnh để diễn đạt nhiều thứ mà các DEV cần, nhưng đồng thời không phức tạp như các ngôn ngữ mà người ta có thể tạo ra những mê cung đẹp đẽ, không thể giải quyết được bằng cách sử dụng các cấu trúc ngôn ngữ cực kỳ mạnh mẽ mà chỉ người tạo ra chúng mới có thể hiểu được. Mặt khác, Java buộc các DEV viết mã dài dòng hơn nhưng rõ ràng hơn so với các DEV code ngôn ngữ kịch bản, để tăng khả năng đọc và dễ hiểu sau một khoảng thời gian dài.
Java nhanh
Nếu bạn cố gắng nghiên cứu chủ đề này, bạn có thể sẽ tìm thấy hàng tá bài báo như “Java nhanh hơn X” và “X nhanh hơn Java” sẽ chứa đựng những tuyên bố và kết luận trái ngược nhau. Nếu bạn cố gắng tự mình thử nghiệm, bạn sẽ dễ dàng xây dựng các ví dụ trong đó Java chậm và Java nhanh chóng mặt - nhân tiện, thủ thuật tương tự bạn có thể làm với các ngôn ngữ khác. Có một nhận xét tốt về lý do tại sao Java bị coi là chậm trong quá khứ. Bây giờ nó hơi lỗi thời. Ví dụ: các chuỗi trong thời gian chạy Java mới nhất được xử lý tốt hơn nhiều so với bảy năm trước và tôi cũng không đồng ý với một số tuyên bố khác. Nhưng kết luận chung rằng, với mỗi phiên bản cập nhật, Java được tối ưu hóa để tăng hiệu suất của nó là đúng. Hãy nhớ ví dụ thứ ba từ phần Cú pháp của bài viết này, nơi mà tệp 1,2 Gb khổng lồ đã được xử lý? Với Java 8, trung bình mất mười giây trên máy tính xách tay của tôi, trong khi với Java 15, chỉ mất sáu giây với cùng cấu hình. Đây là một trong những "đảm bảo" quan trọng mà các nhà phát triển ngôn ngữ này cung cấp cho chúng ta: Java đủ nhanh cho nhiều tác vụ hiện nay và nó sẽ nhanh hơn trong tương lai.
Điều quan trọng cuối cùng cần nói về tính bảo đảm là: Chúng đã được thực hiện hơn 25 năm rồi và không có lý do gì mà chúng không tồn tại trong những năm tới.
Java triển khai các tính năng ngôn ngữ hiện đại một cách chậm rãi
Đúng. Nói chung, chậm chạp có phải là một điều xấu không? Hãy tự hỏi bản thân những điều sau. Nếu bạn đang đi xe đạp và thỉnh thoảng bắt gặp những vật cản trước mắt, bạn muốn làm gì hơn: tăng tốc hay giảm tốc độ? Tôi cá là bạn cũng chọn như tôi
Vậy tại sao Java lại áp dụng các tính năng với tốc độ chậm hơn so với một số ngôn ngữ khác? Vì sự đảm bảo, mà chúng ta đã thảo luận trong phần trước. Những đảm bảo này là bức tường thành, buộc các tính năng phải được thảo luận cẩn thận, sàng lọc hoặc chuyển đổi theo một cách nào đó, và ở đây sự chậm chạp là một người bạn tốt hơn nhiều so với sự vội vàng. Có một quy trình chính thức về cách áp dụng các thay đổi đối với ngôn ngữ Java, được gọi là Quy trình cộng đồng Java. Mục đích chính của quá trình này là xác nhận rằng các tính năng được đề xuất không phá vỡ sự đảm bảo. Và đôi khi nó không phải là một nhiệm vụ rõ ràng và nhanh chóng.
Java DEV cố gắng giữ cân bằng giữa đổi mới và đảm bảo, đây là một chiến lược khó hơn nhiều so với chiến lược “hãy thêm tính năng thú vị này vào ngôn ngữ của chúng tôi ngay bây giờ”. Nhưng nó mang lại nhiều lợi ích hơn về lâu dài vì đảm bảo bao hàm sự tin tưởng, đó là thứ có giá trị hơn cho tương lai hơn là một bộ tính năng thú vị. Có một bài nói chuyện tuyệt vời về chiến lược này và triết lý tổng thể về Java của Brian Goetz, xem tại đây nhé.
Ngoài ra, cần đề cập đến lịch cập nhật phiên bản Java. Cứ sáu tháng một lần vào tháng 9 và tháng 3, một phiên bản Java mới được phát hành đã hoàn toàn sẵn sàng để sử dụng và được cập nhật dần dần trong sáu tháng tiếp theo. Cứ ba năm một lần, một phiên bản như vậy sẽ trở thành bản phát hành hỗ trợ dài hạn (LTS) với các bản cập nhật dần dần trong ba năm tiếp theo. Bây giờ Java 15 là bản phát hành mới nhất và Java 11 là LTS hiện tại. Bản phát hành LTS tiếp theo sẽ là Java 17, được lên kế hoạch cho tháng 9 năm 2021. Mỗi phiên bản có thể bao gồm một số “tính năng xem trước”, không có đảm bảo về tính tương thích trong các bản phát hành trong tương lai. Mục tiêu của họ là cung cấp cho các nhà phát triển khả năng thử nghiệm những đổi mới gây tranh cãi và để lại phản hồi về chúng. Nếu một tính năng không được đánh dấu là bản xem trước, điều đó có nghĩa là nó được đưa vào nền tảng đầy đủ và sẽ có tất cả các đảm bảo mà Java cung cấp.
(còn tiếp)
Tham khảo lộ trình Java Spring Boot Full Stack 7 tháng của Techmaster
Bình luận