Thách Thức Của Trừu Tượng Hoá(Abstraction) Trong Lập Trình Với AI
Abstraction (trừu tượng hóa) trong lập trình là khái niệm tập trung vào những khía cạnh quan trọng của một đối tượng hoặc một hệ thống, đồng thời che giấu đi những chi tiết không cần thiết. Mục tiêu chính của abstraction là làm cho việc sử dụng và quản lý các hệ thống phức tạp trở nên dễ dàng hơn bằng cách chỉ hiển thị những gì thực sự cần thiết.
Cách hiểu đơn giản:
– Abstraction giống như cách chúng ta lái xe ô tô: Bạn chỉ cần quan tâm đến vô lăng, chân ga, và phanh mà không cần biết chi tiết cách động cơ hoạt động bên trong.
– Trong lập trình, abstraction ẩn đi các chi tiết triển khai phức tạp, chỉ để lại giao diện hoặc hành vi mà người dùng cần tương tác.Các công cụ AI đang thay đổi nhanh chóng cách các lập trình viên viết mã. Khả năng của chúng rất ấn tượng, đặc biệt khi xét đến tình trạng mới mẻ của chúng. Tuy nhiên, AI sẽ không sửa được cái mà nhiều người coi là khiếm khuyết cơ bản của lập trình: sự khó khăn giữa vừa trừu tượng hoà và vừa dễ dàng kiểm soát, điều này góp phần vào “khủng hoảng phần mềm” hiện nay về phần mềm không đáng tin cậy.
Sự Hấp Dẫn và Rủi Ro Của Trừu Tượng
Trừu tượng là quá trình ẩn đi sự phức tạp bằng cách tạo ra các đại diện đơn giản hóa của hệ thống. Mặc dù điều này làm cho lập trình dễ dàng hơn, nhưng nó không tránh khỏi việc mất đi sự kiểm soát trực tiếp. Sự đánh đổi này rõ ràng trong suốt lịch sử của lập trình:
- Cuộc Cách Mạng Compiler: Sự chuyển đổi từ mã nhị phân cấp thấp sang ngôn ngữ cấp cao hơn đã được thực hiện nhờ vào các compiler. Compiler dịch mã mà con người có thể đọc được thành các chỉ thị máy. Điều này tăng tốc độ và hiệu quả lập trình nhưng giới thiệu một lớp trừu tượng tách biệt mã của lập trình viên khỏi chương trình chạy thực tế. Điều này khiến việc kiểm soát chi tiết và tối ưu hóa trở nên khó khăn hơn.
- Leaky Abstractions: Các thư viện và framework cung cấp các thành phần và chức năng xây dựng sẵn, đơn giản hóa các nhiệm vụ thông thường. Tuy nhiên, như Joel Spolsky đã nhấn mạnh, “tất cả các trừu tượng không tầm thường đều bị rò rỉ,” nghĩa là chúng cuối cùng cũng bộc lộ sự phức tạp ẩn bên dưới, thường vào những thời điểm không thuận tiện. Dựa vào các công cụ này có thể hạn chế tính linh hoạt và hiểu biết về các quá trình cơ bản.
Sự thúc đẩy liên tục hướng tới các mức độ trừu tượng cao hơn, mặc dù có lợi cho năng suất, tạo ra khoảng cách ngày càng xa giữa ý định của lập trình viên và thực thi thực tế của phần mềm. Điều này có thể dẫn đến hành vi không mong muốn, lỗi, và khó khăn trong gỡ lỗi.
AI: Thêm Một Lớp Khác Trên Tòa Tháp
Các công cụ AI, mặc dù mạnh mẽ, thường hoạt động như một lớp trừu tượng khác. Mặc dù chúng có thể tạo mã, tóm tắt dự án phức tạp, và thậm chí đề xuất các sửa lỗi, chúng vẫn là các hộp đen. Sự thiếu minh bạch này càng làm mờ đi mối liên hệ giữa hành động của lập trình viên và phần mềm kết quả. Tác động của AI lên cuộc khủng hoảng phần mềm trong lập trình không thể bị bỏ qua, vì nó làm nổi bật những hạn chế của việc chỉ dựa vào các công cụ tự động.
Sự theo đuổi một trừu tượng bao trùm toàn diện và hoàn hảo là không khả thi. Thay vào đó, nên tập trung vào việc điều hướng giữa các lớp trừu tượng một cách hiệu quả.
Các Cách Tiếp Cận Thay Thế
- Reversible Abstractions: Thay vì leo cao hơn nữa trên thang trừu tượng, nên tập trung vào việc làm cho các trừu tượng dễ điều hướng hơn. Một reversible abstraction sẽ cho phép lập trình viên dễ dàng chuyển đổi giữa đại diện cấp cao và các chi tiết nền dưới. Điều này có thể đòi hỏi việc suy nghĩ lại các khối xây dựng cơ bản của lập trình, như các hàm, để tích hợp dòng chảy thông tin hai chiều này.
- Managed Copy & Paste: Các nguồn đề xuất một phương pháp thú vị sử dụng chỉnh sửa cấu trúc và kiểm soát phiên bản để quản lý việc sao chép mã. Kỹ thuật này, gọi là “managed copy & paste,” theo dõi sự khác biệt giữa các đoạn mã đã sao chép, cho phép di chuyển chọn lọc các thay đổi và trừu tượng dần dần. Điều này giải quyết vấn đề phổ biến của việc sao chép và dán mã, trong khi thực tế, có thể dẫn đến sự không đồng nhất và khó khăn trong bảo trì.
Kêu Gọi Cho Một Mô Hình Mới
“Khủng hoảng phần mềm” làm nổi bật sự cần thiết của một sự thay đổi mô hình trong cách tiếp cận lập trình. AI cung cấp các công cụ có giá trị, nhưng việc giải quyết các thách thức của trừu tượng trong lập trình với các công cụ AI đòi hỏi nhiều hơn chỉ là tự động hóa. Đó là cần thiết để:
- Nhận thức các đánh đổi: Nhận ra rằng mỗi trừu tượng đều có cái giá của việc kiểm soát.
- Ưu tiên sự hiểu biết: Khuyến khích hiểu biết sâu sắc hơn về các hệ thống và quá trình nền, thay vì chỉ dựa vào các trừu tượng cấp cao.
- Chấp nhận tính linh hoạt: Phát triển các công cụ và kỹ thuật cho phép di chuyển linh hoạt giữa các mức độ trừu tượng khác nhau.
Bằng cách giải quyết các thách thức này, tương lai của phát triển phần mềm có thể hướng tới việc tạo ra các phần mềm không chỉ hiệu quả để tạo ra mà còn đáng tin cậy và dễ hiểu.
Tham khảo
https://www.youtube.com/watch?v=82JpGhctWpU
https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/
https://worrydream.com/LearnableProgramming/