JavaRush /Blog Java /Random-VI /Nghỉ giải lao #131. Vai trò của Java trong phát triển ứng...

Nghỉ giải lao #131. Vai trò của Java trong phát triển ứng dụng web và di động. Lập trình chức năng - ưu và nhược điểm

Xuất bản trong nhóm

Vai trò của Java trong phát triển ứng dụng web và di động

Nguồn: DZone Java là một trong những ngôn ngữ lập trình được sử dụng nhiều nhất. Nó được sử dụng tích cực trong việc phát triển các ứng dụng doanh nghiệp, web và di động. Java có ứng dụng trong các ngành công nghệ hàng đầu, từ Khoa học dữ liệu đến AR/VR. Mặc dù phát triển doanh nghiệp bằng Java là trường hợp sử dụng phổ biến nhất của ngôn ngữ này, các ứng dụng web và di động cũng được coi là một trong những lĩnh vực sử dụng Java. Nghỉ giải lao #131.  Vai trò của Java trong phát triển ứng dụng web và di động.  Lập trình hàm - ưu và nhược điểm - 1Chúng ta hãy xem tại sao việc phát triển Java lại trở nên phổ biến trên web và thiết bị di động trong hai thập kỷ qua. Một trong những lý do chính để sử dụng Java cho web và thiết bị di động là vì đây là ngôn ngữ lập trình hiệu suất cao. Nó đảm bảo rằng các ứng dụng của bạn có thể chạy nhanh chóng và không có bất kỳ lỗi xử lý nào. Ngoài ra còn có những lý do khác:

1. Nguồn mở

Là một ngôn ngữ lập trình nguồn mở, Java có một số lợi thế. Đầu tiên, nó làm giảm chi phí của quá trình phát triển ứng dụng. Thứ hai, các nhà phát triển dễ dàng thay đổi ngôn ngữ và cập nhật ngôn ngữ thường xuyên vì đây là nguồn mở. Ngoài ra, Java có cú pháp dễ đọc giúp dễ dàng phát triển ứng dụng cho web và thiết bị di động. Cuối cùng, các nhà phát triển có thể sử dụng cơ sở mã ngôn ngữ hiện có và cải thiện nó.

2. Đa nền tảng

Một lợi ích khác của việc lập trình bằng Java là nó là ngôn ngữ đa nền tảng. Các nhà phát triển có thể viết mã trên Windows và chạy nó trên macOS và Linux. Nguyên tắc “viết một lần, chạy khắp nơi” được áp dụng ở đây. Điều này giúp các nhà phát triển làm việc trên các hệ thống khác nhau dễ dàng hơn và đơn giản hóa quá trình thử nghiệm trên các máy khác nhau. Ví dụ: nhà phát triển có thể kiểm tra xem chương trình có chạy chính xác trên các kích thước màn hình và hệ điều hành khác nhau hay không.

3. Thân thiện với thiết bị di động

Java là một công nghệ phổ biến cho các ứng dụng di động. Các nhà phát triển ứng dụng Android chủ yếu sử dụng ngôn ngữ Java vì nó dễ triển khai, có tính năng bảo mật và khả năng đa nền tảng. Android yêu cầu một ngôn ngữ mạnh mẽ để mở rộng quy mô ứng dụng, nhưng Java cung cấp khả năng mở rộng quy mô đáng kinh ngạc. Nó cũng đơn giản hóa quá trình thử nghiệm các ứng dụng Android. Tất cả điều này cho thấy đây là ngôn ngữ lập trình năng động và đáng tin cậy để tạo các ứng dụng di động.

4. Công cụ và thư viện

Một trong những ưu điểm quan trọng nhất của Java là khả năng tương thích với nhiều công cụ khác nhau. Các khung như Spring, Hibernate, Struts, Spark và các khung khác giúp đơn giản hóa đáng kể quá trình phát triển. Tất cả những công cụ này cung cấp nhiều tính năng khác nhau để tạo các ứng dụng tương tác và năng động. Các thư viện như Apache Commons, Java Standard Libraries, Maven, Jackson, v.v. cho phép các nhà phát triển thêm chức năng mà không cần viết mã từ đầu.

5. Cộng đồng tích cực

Có hơn 7,6 triệu nhà phát triển Java trên thế giới. Họ liên tục cập nhật ngôn ngữ lập trình và thêm các tính năng mới vào đó. Vì Java được cập nhật 6 tháng một lần nên các nhà phát triển có cơ hội học hỏi nhanh chóng và tạo ra những sản phẩm tốt hơn. Bạn cũng có thể sử dụng cộng đồng Java để tìm câu trả lời cho nhiều câu hỏi khác nhau.

Sự trỗi dậy của Java trong phát triển ứng dụng web

Kể từ khi được Sun Microsystems sáng tạo vào năm 1995, ngôn ngữ Java đã trở thành một trong những ưu tiên trong ngành lập trình. Ngày nay, các công ty trên khắp thế giới sử dụng ngôn ngữ lập trình này để tạo ra các ứng dụng web. Google, Netflix, Spotify và Pinterest chỉ là một số công ty sử dụng Java trong nền tảng công nghệ của họ. Các chuyên gia ước tính rằng hơn 60% các công ty làm việc trong lĩnh vực CNTT sử dụng Java dưới hình thức này hay hình thức khác. Hơn nữa, nó vẫn là ngôn ngữ lập trình phổ biến do được áp dụng trong các lĩnh vực phát triển web khác, cụ thể là điện toán đám mây, truyền thông xã hội, phát triển doanh nghiệp, AR, VR, v.v. Đây là ngôn ngữ lập trình tuyệt vời và mạnh mẽ để sử dụng trong các doanh nghiệp hiện cần kiến ​​trúc dựa trên đám mây. Khi kết hợp với JavaScript, Java cho phép bạn tạo các ứng dụng web hiệu suất cao có thể chạy trên mọi nền tảng.

Sự trỗi dậy của Java trong các trường hợp sử dụng hiện đại

Ngoài phát triển web và phát triển di động, Java còn tạo được dấu ấn trong thế giới công nghệ hiện đại. Ngày nay, Java là ngôn ngữ lập trình cực kỳ hữu ích cho các ứng dụng khoa học. Nó cung cấp một môi trường an toàn, nhanh chóng và di động cho máy tính khoa học. MATLAB là một trong những thư viện phổ biến nhất dành cho các ứng dụng khoa học dựa trên Java.
  • Java cũng hữu ích trong việc phát triển front-end và back-end của các ứng dụng khoa học. Bạn có thể sử dụng Struts và Java Server Pages để phát triển front-end và Java Core để phát triển back-end các ứng dụng khoa học.

  • Java cũng hữu ích cho việc phân tích dữ liệu. Nó cho phép các nhà phát triển tạo ra các giải pháp phân tích dữ liệu bằng nhiều thư viện và công cụ khác nhau. Ngày nay, Java đã tìm thấy ứng dụng trong phân khúc Internet of Things. Đây là công nghệ chủ chốt trong các hệ thống nhúng như thẻ thông minh và cảm biến. Vì vậy, các công ty sử dụng ngôn ngữ lập trình này trong ngành tự động hóa gia đình. Ngoài ra, nó còn được sử dụng tích cực trong việc phát triển công nghệ thiết bị phát trực tuyến và Smart TV.

  • Nền tảng dữ liệu lớn Hadoop được viết bằng Java. Bởi vì nó là ngôn ngữ mã nguồn mở và hướng đối tượng nên nó là nền tảng cho các ứng dụng Dữ liệu lớn. Các ngôn ngữ lập trình như Scala có thể dễ dàng chạy trên Máy ảo Java và giúp việc phân tích dữ liệu lớn trở nên dễ dàng hơn.

  • Chơi game là một ngành mới nổi và phát triển nhanh chóng, trong đó Java được sử dụng rộng rãi cho nhiều ứng dụng chơi game khác nhau. Ví dụ: nó cung cấp hỗ trợ cho jMonkeyEngine, công cụ phát triển trò chơi 3D nguồn mở lớn nhất. Ngoài ra, Máy ảo Dalvik (DVM) chủ yếu được hỗ trợ bởi Java và được sử dụng để tạo các trò chơi tương tác cho Android.

Lập trình chức năng - ưu và nhược điểm

Nguồn: Dev.to Bất chấp sự hoài nghi truyền thống của tôi đối với các công nghệ xa lạ, tôi nhận ra lợi ích của lập trình chức năng. Dưới đây là danh sách gần đúng các ưu điểm mô tả mô hình lập trình này. Nghỉ giải lao #131.  Vai trò của Java trong phát triển ứng dụng web và di động.  Lập trình hàm - ưu và nhược điểm - 2

Đồng thời an toàn

Cách tiếp cận chức năng khuyến khích sự đồng thời an toàn, nghĩa là khả năng chạy các công việc trong các luồng riêng biệt mà không gây ra xung đột luồng hoặc xung đột sửa đổi. Lý do là không giống như cách tiếp cận đối tượng, bạn không chia sẻ một đối tượng có trạng thái có thể thay đổi trong quá trình xử lý. Có lối vào và lối ra, lối vào không thay đổi vì bạn. Trong Java, ngay cả khi bạn sử dụng các đối tượng “an toàn theo luồng”, bạn không thể đảm bảo rằng chúng sẽ có cùng giá trị khi phương thức của bạn được gọi. Trong ví dụ bên dưới, chúng ta có thể thấy rằng một vòng lặp xử lý từng phần tử một có thể dễ dàng được xử lý song song bằng cách sử dụng hàm lambda bên trong một luồng.
for( String item : items ) {
   process(item);
}
Và bây giờ nó trở thành:
items.parallelStream().forEach( item -> process(item) );

Vào/ra nhanh

Lập trình chức năng hỗ trợ một cách tiếp cận khác với đa luồng. Điều này có nghĩa là chúng tôi không còn có các luồng riêng biệt chờ phản hồi I/O chẳng hạn như lệnh gọi cơ sở dữ liệu nữa. Tức là chúng tôi tối đa hóa việc sử dụng CPU và băng thông. Đối với các ứng dụng hiệu suất cao thì đây là một lợi thế rõ ràng. Điều này được thực hiện với ý tưởng rằng lệnh gọi hàm có thể trả về Tương lai, đây không phải là kết quả thực tế của lệnh gọi mà là một lời hứa sẽ trả về kết quả vào một thời điểm nào đó trong tương lai. Tại một thời điểm nào đó trong tương lai, giá trị trả về sẽ nhận được để chạy hàm. Điều này có nghĩa là các luồng bộ xử lý không đợi cơ sở dữ liệu hoặc lệnh gọi REST hoàn tất và có thể thực hiện tác vụ khác.

Sự ngắn gọn trong cách diễn đạt

Các nhà phát triển phần mềm muốn có khả năng diễn đạt những ý tưởng phức tạp một cách duyên dáng. Lập trình chức năng cho phép bạn thực hiện điều này một cách chính xác. Ví dụ: các cấu trúc phổ biến như vòng lặp for có thể được thay thế bằng các luồng, chúng trừu tượng hóa các hoạt động chung cho các vòng lặp được sử dụng. Không còn nghi ngờ gì nữa, việc bổ sung các hàm và luồng Lambda vào Java đã mở rộng khả năng thể hiện những ý tưởng mà trước đây không thể thực hiện được.

Tại sao không trở thành chức năng?

Chỉ cần nhắc lại điều trên: có rất nhiều lợi ích đối với lập trình hàm, vì vậy bài viết này không cố gắng khái quát hóa mọi thứ thành một trường hợp và nói rằng bạn chắc chắn nên lập trình hàm hoặc ngược lại. Quyết định này phải được đưa ra với sự hiểu biết rõ ràng về lý do của quá trình chuyển đổi và các vấn đề tiềm ẩn.

Luôn luôn khó hiểu bằng trực giác

Khi viết mã, bạn có đang cố gắng giao tiếp với máy tính không? Nếu việc giao tiếp với máy tính rất quan trọng đối với bạn, tại sao không viết mã máy? Tất nhiên, việc này rất khó nên ngôn ngữ máy tính đã được phát minh để làm việc đó dễ dàng hơn. Chúng cũng cho phép các lập trình viên tạo ra các biểu thức mà các lập trình viên khác có thể hiểu được. Khi phần mềm ngày càng lớn hơn và phức tạp hơn, chúng ta cần các chiến lược để quản lý sự phức tạp. Chúng tôi đạt được điều này thông qua sự trừu tượng hóa và ẩn giấu thông tin. Lớp bạn sử dụng trong Java để gửi email khá phức tạp, nhưng giao diện của lớp này rất đơn giản. Nó ẩn việc triển khai chi tiết, chỉ tiết lộ cho chúng ta phần bên ngoài của điều khiển. Các đặc điểm ngôn ngữ như dấu ngoặc nhọn và dấu ngoặc vuông cho chúng ta biết cấu trúc như câu lệnh điều kiện và vòng lặp. Bây giờ chúng ta mới chuyển các vòng lặp, hay đúng hơn là đệ quy và các điều kiện thành các hàm:
for( String item : items ) {
    System.out.println(item);
}
Hóa ra:
items.foreach( item -> System.out.println(item) );
Cách tiếp cận phát trực tuyến và lambda chắc chắn ngắn hơn. Bạn có thể thể hiện chức năng tương tự với ít mã hơn. Vấn đề là chúng ta hiện đang ẩn hành vi thực tế bên trong các phương thức mà chúng ta cần biết. Các vòng lặp trong Java sử dụng từ khóa. Mặt khác, các hàm lambda có thể triển khai nhiều dạng đệ quy khác nhau và chỉ có tên ở đây mới cho biết chức năng của nó. Ví dụ:
boo.fooble( item -> System.out.println(item) );
Bạn không thể chỉ đọc mã để hiểu cấu trúc nữa. Điều này gây khó khăn cho việc theo dõi luồng thực hiện. Một tính năng khác là chuỗi hàm, trong đó kết quả của một hàm là đầu vào của hàm tiếp theo mà không gán biến trung gian.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Điều này có thể có ý nghĩa đối với tác giả của đoạn mã này vì dường như anh ta đã viết mọi hàm và biết chức năng của nó. Tuy nhiên, đối với những người mới làm quen với code, điều này không cho bạn biết nhiều về các tham số, quy trình hoặc giá trị trả về của từng hàm. Nhưng nếu bạn viết điều tương tự vào thứ gì đó có chỉ định loại, bạn sẽ nhận được:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Đây có thể không phải là một sự so sánh hoàn hảo, vì các tham số và hàm ẩn danh không giống nhau, nhưng vấn đề ở đây là một câu dài có kết quả và tham số không xác định sẽ khó đọc nếu không hiểu sâu hơn về chức năng của các hàm được mô tả bên dưới. Và do đó, có thể lập trình chức năng vừa có tính biểu cảm cao trong các đoạn mã ngắn đáng ngạc nhiên, nhưng lại không thể hiểu được đối với những người mới sử dụng phần mềm. Mục đích của các lớp và giao diện là ẩn dữ liệu, tạo ra các đoạn mã có thể sử dụng lại mà không yêu cầu nhà phát triển phải hiểu hoặc thậm chí có thể xem cách triển khai. Chúng tồn tại để các nhà phát triển có thể làm việc trên các hệ thống lớn, phức tạp mà không phải đau đầu. Đây là một cách thuận tiện để tổ chức mã được liên kết với các thực thể cụ thể. Tuy nhiên, tôi có ít hiểu biết về cách lập trình chức năng giúp cấu trúc các dự án lớn phức tạp. Có lẽ có những lý do chủ quan cho việc này.

Để gây ấn tượng với người khác bằng kỹ năng của bạn

Một số nhà phát triển phần mềm không tự tin về kỹ năng của mình đến mức họ cố gắng gây ấn tượng bằng cách viết mã phức tạp không cần thiết. Là một nhà phát triển cấp cao, tôi không đặc biệt ngưỡng mộ những nhà phát triển phần mềm khác đang cố gắng viết mã thông minh. Tất nhiên, điều này không chỉ áp dụng cho lập trình chức năng; điều tương tự có thể xảy ra với bất kỳ phong cách viết mã nào. Nhưng tôi đã nhận thấy một sự tự phụ trí tuệ nhất định trong số những người ủng hộ lập trình chức năng. Vấn đề là các nhà phát triển phần mềm không làm việc trong chân không. Code “thông minh” này sẽ cần phải được duy trì, nếu khó hiểu thì sẽ khó đọc, khó thay đổi và khó debug. Khi quản lý nhóm, chúng tôi có mọi người ở mọi cấp độ, vì vậy điều thông minh nhất cần làm là viết mã theo cách mà mọi người tham gia đều có thể hiểu được. Đây là lý do tại sao chúng tôi có tên biến dài rõ ràng, vì vậy chúng tôi giới hạn độ dài của các phương thức. Mã "thông minh" sẽ mất thêm thời gian, vì vậy viết nó không thông minh lắm. Tôi tin rằng lập trình hàm sử dụng những lập luận tương tự về các biểu thức ngắn gọn và mạnh mẽ mà Perl đã đưa ra từ nhiều năm trước. Những người ủng hộ Perl tự hào về tính biểu cảm của nó, cách họ có thể viết những chương trình rất mạnh mẽ chỉ bằng vài dòng mã. Đó là sự thật. Vấn đề là chúng rất khó hiểu. Có lẽ lập trình chức năng đã rơi vào cái bẫy tương tự.

Vì nó là mốt mới

Luôn có một công nghệ hoặc mô hình mới “nóng”. Các công nghệ, ngôn ngữ và cách tiếp cận mới không ngừng xuất hiện. Chúng ta phải liên tục thử thách bản thân và học hỏi những điều mới. Trở thành một nhà phát triển phần mềm có nghĩa là nâng cao công nghệ. Nhưng với tư cách là nhà phát triển phần mềm, chúng ta phải tự đánh giá xem mình cần những công nghệ nào để tạo ra sản phẩm. Học một công nghệ mới phổ biến chỉ vì nó phổ biến không phải là cách sử dụng thời gian khôn ngoan. Điều này không có nghĩa là bạn không nên học lập trình chức năng, mà đúng hơn là bạn nên đánh giá ưu và nhược điểm của mô hình này đối với ứng dụng bạn đang viết.

Bởi vì đây là con đường đúng đắn duy nhất

Nhiều lần trước đây, tôi đã thấy các nhà phát triển quảng bá cách tiếp cận này hoặc cách tiếp cận kia như là cách duy nhất đúng. Nhưng như một người bạn đã nói với tôi, những công việc khác nhau đòi hỏi những công cụ khác nhau. Ví dụ, cá nhân tôi sử dụng Python và PyTorch cho trí tuệ nhân tạo, mặc dù có nhiều công cụ và công nghệ khác, mỗi công cụ đều có ưu điểm và nhược điểm riêng. Có nhiều lý do chính đáng để coi lập trình chức năng như một lựa chọn cho các dịch vụ cần khả năng mở rộng đáng kể. Điều này là do sự an toàn đồng thời được cung cấp bởi phương pháp này. Nhưng bạn cũng nên nhận thức được chi phí và rủi ro tiềm ẩn. Một vài năm trước, tôi đã có trải nghiệm tương tự với việc tiêm phụ thuộc và Spring được coi là tốt nhất cho công việc. Khi tôi hỏi những người ủng hộ mùa xuân nó mang lại lợi ích gì, họ không cho tôi câu trả lời rõ ràng. Bây giờ tôi đang thấy điều gì đó tương tự với một số người theo chủ nghĩa lập trình chức năng thuần túy, những người dường như đang tham gia vào một loại chiến dịch tôn giáo nào đó hơn là đánh giá khách quan về công nghệ. Nhân tiện, việc chèn phần phụ thuộc là một ý tưởng tuyệt vời và giờ đây tôi có thể xác định rõ ràng lợi ích của nó. Tương tự như vậy, tôi nghĩ mối quan tâm của tôi về lập trình chức năng liên quan đến cách nó được sử dụng, hơn là liệu nó có phải là một cách tiếp cận hữu ích và hợp lệ hay không.

Phần kết luận

Mục đích của bài viết này không phải là đưa ra câu trả lời rõ ràng cho câu hỏi liệu bạn có nên lập trình chức năng hay không. Vấn đề là cách bạn đánh giá bất kỳ công nghệ hoặc phương pháp tiếp cận mới nào. Điều chính: đừng để cái tôi của bạn cản trở đánh giá khách quan của bạn. Phát triển phần mềm không phải là bằng chứng về khả năng trí tuệ hay phẩm chất cá nhân của bạn. Đó là về việc tạo ra giá trị trong thế giới thực. Nếu lập trình chức năng giúp ích cho bạn thì hãy sử dụng nó.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION