BÀN VỀ FUNCTIONAL PROGRAMMING VÀ OOP PROGRAMMING – bài 2

Vậy là chúng ta đã biết về cả OOP và FP, giờ là câu hỏi quan trọng nhất: Tôi nên đi theo con đường nào?

Thật sự khi viết bài này (cả bài phần 1), tôi không có ý định chỉ ra OOP hay FP tốt hơn, và chọn con đường nào hay hơn. Chính tôi cũng không biết nếu chọn FP thuần túy thì bạn sẽ làm gì ngoài các ứng dụng chuyên về phân tích và xử lý số liệu, mà tôi tin là con số này sẽ rất ít so với phần còn lại.

👉 Thực chất, FP và OOP là hai phương thức tư duy về cách tổ chức các thành phần bên trong ứng dụng. FP cho phép đơn giản hóa việc xử lý các luồng dữ liệu, chia bài toán lớn thành các bài toán con giúp mô hình tổng thể trở nên đơn giản hơn. Nhờ vậy việc viết ra (implement) các đoạn code sử dụng FP trở nên dễ hiểu và ngắn gọn hơn. Ngược lại, OOP phát triển dựa trên các khái niệm từ thế giới thực, và có thể nói OOP khó hiểu và phức tạp hơn FP rất nhiều. Vấn đề là, hầu hết các bài toán ta cần xử lý đều là các bài toán từ thực tế, với các đầu vào, quan hệ, trạng thái cũng từ thực tế, đặc biệt nhìn từ góc độ phân tích, thiết kế và xây dựng kiến trúc hệ thống. Và cũng vì vậy, nếu không có kiến thức về OOP, bạn sẽ khó có thể thiết kế ra các hệ thống phức tạp như trên.

Khi xưa lúc chưa có OOP, người ta vẫn có thể viết ra phần mềm, nhưng thật sự các phần mềm khi đó về quy mô, yêu cầu còn rất đơn giản so với hiện tại. Cũng như các mô hình phát triển ứng dụng kiểu waterfall trước đây vẫn giúp tạo ta các ứng dụng hữu ích, những với các ứng dụng lớn hiện tại, áp dụng mô hình này gần như không khả thi.

Nhìn vào các ngôn ngữ phổ biến nhất hiện tại, ta sẽ thấy không có ngôn ngữ nào là OOP only, hay FP only, mà hầu hết sẽ hỗ trợ cả hai: C#, VB, Java, JS… tất cả đều có OOP và cả FP, những ngôn ngữ vốn thuần túy OOP như C# và Java giờ cũng đều có lambda, JS vốn khi ra đời chỉ là một ngôn ngữ cực kỳ đơn giản, giờ cũng hỗ trợ cả OOP lẫn FP. Nếu nói là chỉ theo OOP hay FP, vậy bạn đang sử dụng ngôn ngữ nào?

👉 Vậy cuối cùng, tôi nên theo con đường nào?Tôi nghĩ đây là một câu hỏi thừa, nếu muốn trở thành một người lập trình chuyên nghiệp, chẳng có lý do gì bạn không thành thạo cả hai. Một người thợ chặt cây nên biết dùng cả cưa và rìu, đừng tự đặt ra câu hỏi tôi nên thành thạo cái nào, vừa mất thời gian vừa tự hạn chế khả năng của mình.FP trong các ngôn ngữ hiện tại giúp bạn viết code rất nhanh và hiệu quả, nếu bây giờ bắt tôi viết C# mà không sử dụng lambda, chắc tôi sẽ thấy chán khi viết các đoạn lệnh tìm kiếm, sắp xếp dài dòng. Còn OOP, với nhiều ưu điểm đã nói đến trong các bài trước, sẽ giúp bạn thiết kế ra các chương trình hiệu quả. Cả FP và OOP đều có những ưu điểm riêng, bạn hãy cố gắng thành thạo cả hai và sử dụng chúng đúng chỗ.

👉 Nên nhớ, OOP là cả một phương pháp thiết kế, nếu đọc qua các design parttern bạn sẽ thấy tất cả đều dựa trên OOP – tôi sẽ vô cùng ngạc nhiên nếu bạn đặt mục tiêu sau này trở thành một software designer, hay một software architecturer, nhưng lại không có ý định tìm hiểu sâu về OOP.

BÀN VỀ FUNCTIONAL PROGRAMMING VÀ OOP PROGRAMMING – bài 1

Cách đây mấy hôm tôi có đưa ra một khảo sát xem mọi người sẽ theo hướng FP hay OOP, vì hay gặp cảnh tranh cãi giữa hai trường phái này. Và thường các cuộc tranh cãi đều không có hồi kết, đơn giản vì ai cũng có lý lẽ của mình, và quan trọng nhất là không có ai có thể đưa ra được những lý do xác đáng để bên kia tin theo.

Trong bài này tôi sẽ mặc nhiên coi các bạn đã hiểu về OOP, và sẽ nói một chút về FP (vì trong blog này chưa có bài nào nói về nó). Nếu như bạn chưa thực sự biết rõ cả OOP lẫn FP thì tất cả những lý lẽ đưa ra sẽ đều là cảm tính, do đó quan điểm đưa ra sẽ dễ trở nên phiến diện và không thuyết phục.

Nhớ tìm đọc lại các bài OOP nếu bạn vẫn chưa nắm rõ nhé ❤️.

ℹ️ Vậy Functional Programming là gì?

Continue reading “BÀN VỀ FUNCTIONAL PROGRAMMING VÀ OOP PROGRAMMING – bài 1”