Tư duy lập trình

 

1. Nghề của tôi là CNTT, chuyên sâu về phần mềm và hệ thống, vì vậy đáng lẽ tôi phải cổ động toàn thể xã hội học lập trình. Cũng như ông bán Phở ắt phải mong muốn toàn xã hội ăn Phở, thầy thuốc chuyên khoa ung thư phải muốn toàn xã hội ... ung thư.... Ấy chết, nhầm, muốn xã hội ai cũng được chữa khỏi bệnh ung thư.

2. Tuy vậy với tư cách là nhà sư phạm, đúng hơn là ham mê sự nghiệp dạy các con, tôi muốn các con và bố mẹ các con hiểu chính xác những từ ngữ mà công nghiệp giáo dục đang quảng cáo. Hôm nay ta nói về cụm từ "tư duy lập trình". Vậy thì nó là gì? chúng ta có thực sự cần nó hay không? tại sao lại phải có tư duy đó từ trẻ?

3. Có người giải thích (đúng hơn là tẩy não) với tôi, "tư duy lập trình" bao gồm cả "tư duy phân tích", "tư duy hệ thống", "tư duy trừu tượng", "tư duy toán học", "tư duy sáng tạo" và "tư duy ứng dụng". Tôi cho rằng nếu tôi có nhiều thời gian hơn sẽ được biết thêm nhiều loại tư duy nữa. Tóm lại, "tư duy lập trình" bao gồm mọi thứ tư duy. Nếu như vậy, cái gọi là "tư duy lập trình" ấy quá đáng học, không phải từ tiểu học, mà đáng lẽ phải học từ mới lọt lòng.

4. Tuy vậy, tất cả các tư duy đó không thể đạt được bằng cách học lập trình, cho dù dạy khéo và mở rộng thế nào. Hơn thế nữa, cho dù mọi người đều cần biết lập trình, thì học lập trình lúc nào vẫn là câu hỏi. Quan điểm của tôi, trẻ 3 tuổi không thể tập tạ, trẻ tiểu học không nên quá chú trọng tính toán. Hơn thế nữa, mỗi thời một khác, cách nghĩ các con phải thể hiện tài năng đặc biệt từ sớm có thể đã lạc hậu.

5. Lập trình đơn giản chỉ là việc chuyển ngữ về việc thực hiện một quy trình công việc thành ngôn ngữ của máy, để máy lần lượt thực hiện các bước trong quy trình đó thay người. Học lập trình và học thiết kế ra quy trình công việc là hai chuyện khác nhau, cũng như bổ củi và kiếm củi. Đã là chuyển ngữ thì sẽ có một số quy tắc cần nắm vững, để cho máy hiểu thì cần chính xác, bớt tưởng tượng và cảm xúc càng tốt. Lập trình là kỹ năng, làm nhiều quen tay, và có thể học rất nhanh, trong vòng 1 tuần là thành thạo các nguyên tắc cơ bản của bất cứ ngôn ngữ nào. Giỏi thì 2-3 ngày, kém thì 2-3 tuần. Để hiểu ý tưởng chính chỉ 15 phút với 3 quy tắc: i. Kiểu dữ liệu ii. Vòng lặp và phân nhánh, iii. Đưa dữ liệu vào, lấy dữ liệu ra (in-out). Tất cả những thứ như giao diện, cơ sở dữ liệu, chuỗi, hướng đối tượng, chỉ là những thứ giúp thức hiện i, ii và iii dễ dàng hơn mà thôi.

6. Như vậy, nếu có "tư duy" phổ quát nào đó có thể có ích thì đó là "tư duy quy trình", giúp biến các chuỗi thao tác dài dằng dặc thành các thao tác lặp đi lặp lại và sắp xếp theo một trật tự logic. Tất nhiên điều đó có thể đạt được, thậm chí tốt hơn, không cần học lập trình. Ngược lại nếu quy giản hóa "tư duy quy trình" thành "tư duy lập trình" sẽ có hại, bởi "quy trình hóa" trong thực tế còn nhiều thứ khác mà lập trình không có. Tương tự "phân tích", "toán học", "trừu tượng", "ứng dụng" trong lập trình đều bị quy giản hóa đến mức có thể tập nhiễm những rãnh mòn tư duy có hại. Các bạn hãy thử thuyết phục những loại người khác nhau trong xã hội thay đổi thói quen, bạn sẽ thấy làm điều đó với dân lập trình là khó nhất. Một cô bé sinh viên báo chí là người đầu tiên chỉ cho tôi thấy điều đó. Cô bé dùng chữ "đó là một hội không có hy vọng, vừa kiêu ngạo vừa cố chấp, kiểu gì ấy".

7. Bây giờ chúng ta nói về "tư duy thiết kế". Học lập trình xong, mọi lập trình viên đều sẽ mất một giai đoạn để lĩnh hội lại một cách khó khăn về việc thiết kế. Vốn thiết kế không phải là cái gì quá phức tạp (cố nhiên ở mức thiên tài thì cái gì cũng khó). Các quy tắc thiết kế cơ bản nhất đều là common sense, nhưng trở nên khó khăn đối với lập trình viên. Khó điều hòa nhất trong công ty phần mềm là quan hệ giữa lập trình viên và thiết kế, mặc dù không to tiếng như giữa lập trình viên và kiểm thử viên. Điều đó có nghĩa là "tư duy lập trình" không tự động bao gồm "tư duy thiết kế", thậm chí có thể cản trở lẫn nhau. Hai tư duy này khác nhau ở chỗ lập trình luôn quan tâm tới "làm gì" và "làm thế nào", trong khi thiết kế luôn bị ám ảnh bởi "tại sao lại làm thế". Tư duy thiết kế cần nhiều phân tích đa dạng hơn, trong khi lập trình nếu có phân tích thì chỉ là phân tích một chiều.

8. Đặc biệt "lập trình" không liên quan tới "hệ thống". Thậm chí rất nhiều lập trình viên giỏi không cần đếm xỉa tới hệ thống. Lý do là lập trình luôn cố đạt tới tối ưu địa phương, có thể làm mất hài hòa tổng thể.

9. Nói như vậy không có nghĩa là tôi muốn cấm trẻ con học lập trình. Nếu chúng say mê, và nếu chúng ta không lẫn lộn say mê với ảo giác say mê do người lớn gây ra, thì trẻ làm gì cũng tốt, kể cả câu cá, đá cầu. Tuy nhiên lý do phải là say mê chứ không phải là vì các loại "tư duy" nêu trên. Ngược lại, nếu được lựa chọn, trẻ có rất nhiều thứ có thể học, ích lợi và thú vị hơn nhiều.


Jun 05, 2024

1 0 | A- A A+ | SHARE_ON_FACE_BOOK_LABEL