1 điểm bởi GN⁺ 2024-09-28 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-09-28
Ý kiến trên Hacker News
  • Mỗi người học theo một cách khác nhau

    • Thích hiểu khái niệm cốt lõi trước rồi mới xem ví dụ
    • Nhiều tutorial hướng dẫn cầm tay chỉ việc như lắp ráp Lego
    • Muốn biết cách và lý do đưa ra quyết định
    • Khi tiếp cận thư viện hoặc framework mới, thường đọc phần giới thiệu trước và bỏ qua mẫu mã Getting started
    • Ở các phần nâng cao có nhiều thảo luận về khái niệm hơn nên thường khám phá phần đó trước
  • Kỹ năng viết và sự đồng cảm rất quan trọng

    • Viết code và xây dựng ứng dụng là hai việc khác nhau
    • Các nhà phát triển hướng ngoại quan tâm hơn đến kiến trúc và tài liệu hóa
    • Sự đơn giản là quan trọng
    • Viết ứng dụng giống như viết một bài luận
    • Framework cản trở khả năng tổ chức của nhà phát triển
  • Không phải ai cũng học từ ví dụ

    • Có người học từ tổng quát đến cụ thể
    • Những người này thường bị bỏ quên trong giáo dục K12
  • Code được viết cho con người

    • Điều quan trọng là hiểu bài toán một cách toàn diện, hợp tác với các bên liên quan và nghĩ ra các thuật toán hiệu quả
    • Viết code không khó
  • Trích dẫn từ Code Complete

    • "Một phần nhỏ của lập trình là viết chương trình để máy tính có thể đọc được, còn phần lớn là viết để những con người khác có thể đọc được"
  • Viết code là vì con người

    • Máy tính chỉ cần lệnh máy là đủ
    • Code là cách hình thức hóa suy nghĩ của con người
  • Ý kiến về sự phát triển của IDE

    • Intellisense cơ bản đã được cải thiện, nhưng khái niệm về coding không thay đổi nhiều
    • Việc tiếp cận các công cụ và thư viện mới trở nên dễ dàng hơn
    • Muốn giao công việc coding cho máy tính và tập trung vào sáng tạo
    • Cần công cụ tự động xử lý các chi tiết nhỏ của ngôn ngữ
    • Muốn hiển thị nhiều method cùng lúc trên màn hình
    • Muốn tự động xử lý việc chuyển đổi dữ liệu
  • Quảng bá bài blog

    • Đã viết một bài blog có tên "Move Fast & Document Things"
    • Chia sẻ văn hóa viết code
  • Ý kiến về cách học lập trình

    • Học bằng cách viết các chương trình nhỏ
    • Vì thiếu kiến thức nền tảng nên đã không thể ứng tuyển vào những công việc phát triển phần mềm tốt hơn
    • Việc luôn học những điều cơ bản là rất quan trọng
  • Tầm quan trọng của ví dụ và khái niệm cốt lõi

    • Cả ví dụ lẫn khái niệm cốt lõi đều quan trọng
    • Cần các khái niệm cốt lõi được định nghĩa rõ ràng và có tài liệu đầy đủ
    • Hướng dẫn Getting Started nên bao gồm ví dụ