Trên trang 839 của phiên bản thứ hai, Steve McConnell đang thảo luận về tất cả các cách mà các lập trình viên có thể "chinh phục sự phức tạp" trong các chương trình lớn. Lời khuyên của ông lên đến đỉnh điểm với tuyên bố này:
"Lập trình hướng đối tượng cung cấp một mức độ trừu tượng áp dụng cho các thuật toán và dữ liệu cùng một lúc , một loại trừu tượng mà phân rã chức năng đơn thuần không cung cấp."
Cùng với kết luận của mình rằng "giảm độ phức tạp được cho là chìa khóa quan trọng nhất để trở thành một lập trình viên hiệu quả" (cùng một trang), điều này dường như là một thách thức đối với lập trình chức năng.
Cuộc tranh luận giữa FP và OO thường được đóng khung bởi những người đề xuất FP xung quanh các vấn đề phức tạp xuất phát từ những thách thức của sự tương tranh hoặc song song. Nhưng đồng thời chắc chắn không phải là loại lập trình viên phần mềm phức tạp duy nhất cần chinh phục. Có lẽ tập trung vào việc giảm một loại phức tạp làm tăng nó rất nhiều trong các khía cạnh khác, như vậy trong nhiều trường hợp, mức tăng không đáng giá.
Nếu chúng ta chuyển các điều khoản so sánh giữa FP và OO từ các vấn đề cụ thể như đồng thời hoặc tái sử dụng sang quản lý sự phức tạp toàn cầu, cuộc tranh luận đó sẽ như thế nào?
CHỈNH SỬA
Sự tương phản tôi muốn nhấn mạnh là OO dường như gói gọn và trừu tượng khỏi sự phức tạp của cả dữ liệu và thuật toán, trong khi lập trình chức năng dường như khuyến khích để các chi tiết triển khai của cấu trúc dữ liệu "lộ" hơn trong suốt chương trình.
Xem, ví dụ, Stuart Halloway (một người ủng hộ Clojure FP) ở đây nói rằng "quá đặc điểm kỹ thuật của các kiểu dữ liệu" là "hậu quả tiêu cực của phong cách OO thành ngữ" và ưu khái niệm một AddressBook như một vector đơn giản hay bản đồ thay vì một đối tượng OO phong phú hơn với các thuộc tính và phương thức bổ sung (không vectơ & không ánh xạ). .