Viết mã cho máy tính đã khó, nhưng viết mã cho con người còn khó hơn
- Viết mã cho máy tính vốn đã khó, vì phải phân rã những mục tiêu kinh doanh lớn thành các chỉ thị logic nhỏ.
- Nhưng viết mã cho con người còn khó hơn. Đây là công việc kết hợp giữa khoa học máy tính và tâm lý học.
- Như lời Richard Feynman, hãy tưởng tượng vật lý sẽ khó đến mức nào nếu electron có cảm xúc. Điều này rất phù hợp để mô tả việc lập trình cho con người.
Khởi đầu chính là sản phẩm
- Lắng nghe phản hồi của người dùng là điều quan trọng, nhưng phần lớn phản hồi đến từ các power user thường xuyên sử dụng sản phẩm.
- Có tồn tại thiên lệch sống sót. Gần như không thể nghe được phản hồi từ những người dùng chưa bắt đầu.
- Các sản phẩm tiêu dùng đã tối ưu hóa quy trình onboarding trong thời gian dài. Công cụ dành cho nhà phát triển cũng nên như vậy.
- Cần xem quy trình onboarding là một phần của sản phẩm, giảm tối đa việc thiết lập để người dùng có thể sử dụng sản phẩm chỉ trong vài phút.
Con người học từ ví dụ, không phải từ 'khái niệm cốt lõi'
- Con người rất giỏi đối sánh mẫu. Trong khi đó, máy tính tuân theo logic nghiêm ngặt.
- Tài liệu của nhiều công cụ phát triển được viết như một chương trình máy tính. Cách đó không phù hợp với con người.
- Học qua ví dụ hiệu quả hơn. Ví dụ giúp người dùng hiểu công cụ tốt hơn.
Rơi vào cái bẫy của thành công
- Chế độ cơ bản của lập trình là sửa lỗi. Người dùng dành phần lớn thời gian để sửa lỗi.
- Điều quan trọng là dẫn dắt lỗi đi đến thành công.
- Cần biến lỗi thành cơ hội để hướng người dùng vào đúng lộ trình. Nên đưa code snippet vào xử lý ngoại lệ và cung cấp trợ giúp qua các thông báo cảnh báo.
Tránh quá tải khái niệm
- Việc phải hiểu những khái niệm mới tạo ra ma sát.
- 2-3 khái niệm thì ổn, nhưng học 8 khái niệm mới là một gánh nặng.
- Một framework lý tưởng là framework có thể cung cấp tính năng mạnh mẽ với ít khái niệm. Ví dụ, React mang lại khả năng mạnh mẽ chỉ với vài khái niệm đơn giản.
Nguyên tắc vịt về khái niệm
- Khi giới thiệu khái niệm mới, điều quan trọng là dùng thuật ngữ quen thuộc với người dùng.
- Ví dụ, nên gọi việc đánh giá một giá trị mới là 'hàm'. Điều này cho phép người dùng tận dụng mô hình tư duy sẵn có của mình.
Tính lập trình được
- Người dùng sẽ thực hiện những công việc sáng tạo trong codebase.
- Gần như mọi thứ trong framework đều cần phải 'lập trình được'.
- Nên cho phép gọi trực tiếp trong code thay vì chỉ qua CLI, và chuyển cấu hình thành SDK hoặc API.
Hãy thận trọng với phép màu, giá trị mặc định và cú pháp đường
- Cần giới thiệu các giá trị mặc định và tính năng mang tính "phép màu" một cách thận trọng.
- Nếu giá trị mặc định không áp dụng được trong hơn 97% trường hợp, hoặc "phép màu" không đúng trong hơn 99% trường hợp, thì nên tránh đưa vào.
- Viết code không phải là golf. Đừng nhắm đến việc viết ít code nhất có thể, mà hãy ưu tiên tính dễ đọc.
Viết mã cho con người là điều khó khăn
- Phần lớn mọi thứ nên là bất biến.
- Nên tránh 'scaffolding' (tạo sinh mã).
- Cần làm cho vòng phản hồi cực kỳ nhanh.
- Cần có quy trình loại bỏ để người dùng có thể xử lý dễ dàng.
- Nên dùng kiểm thử tự động cho các code snippet trong tài liệu và ví dụ.
Tổng kết của GN⁺
- Bài viết này nói về độ khó của việc viết mã cho con người và các cách giải quyết.
- Việc tạo ra các công cụ phát triển thân thiện với người dùng là rất quan trọng, và điều đó bắt đầu từ quy trình onboarding.
- Học qua ví dụ là hiệu quả, và dẫn dắt lỗi đi đến thành công là điểm cốt lõi.
- Khi đưa vào các khái niệm mới, cần dùng thuật ngữ quen thuộc với người dùng và cân nhắc tính lập trình được.
- Cần thận trọng khi đưa vào các giá trị mặc định và tính năng kiểu "phép màu", đồng thời ưu tiên tính dễ đọc.
1 bình luận
Ý kiến trên Hacker News
Mỗi người học theo một cách khác nhau
Getting startedKỹ năng viết và sự đồng cảm rất quan trọng
Không phải ai cũng học từ ví dụ
Code được viết cho con người
Trích dẫn từ Code Complete
Viết code là vì con người
Ý kiến về sự phát triển của IDE
Quảng bá bài blog
Ý kiến về cách học lập trình
Tầm quan trọng của ví dụ và khái niệm cốt lõi
Getting Startednên bao gồm ví dụ