- Trong khóa học lập trình 12 buổi dành cho học sinh THCS và THPT, để tập trung vào các khái niệm nền tảng hơn là cú pháp, tác giả đã chọn Forth, một ngôn ngữ nối ghép dựa trên stack ra đời năm 1970
- Sau khi trực tiếp thực hiện cấu trúc vào sau ra trước và các phép toán bằng đĩa giấy rồi mới chuyển sang máy tính, khóa học được thiết kế để học sinh hiểu bằng trải nghiệm cách trình thông dịch Forth hoạt động
- Với Easy Forth không cần cài đặt, bài tập cuối khóa là làm tranh vẽ, hoạt hình hoặc trò chơi; học sinh đã thay đổi luật chơi và màu sắc của Snake hoặc hoàn thành các tác phẩm ở mức pixel
- Forth có ít gánh nặng về cú pháp, nhưng người mới phải sớm làm quen với các cấu trúc cấp thấp như stack; vì vậy với lớp nhập môn, Scratch có thể là lựa chọn tốt hơn nhờ phản hồi trực quan tức thì
- Quan trọng không phải là ngôn ngữ cụ thể nào mà là một môi trường cho phép nhanh chóng thấy kết quả và tự khám phá; khi nguy cơ học hoặc duy trì kỹ năng theo kiểu phụ thuộc vào LLM ngày càng lớn, giáo dục lấy con người làm trung tâm càng cần thiết
Lý do chọn Forth
- Thay vì Python hay Scratch, tác giả chọn Forth, một ngôn ngữ nối ghép dựa trên stack, để thử một con đường giảng dạy ít người áp dụng
- Do thời lượng học hạn chế, mục tiêu là tránh gánh nặng dạy cú pháp để có thể tập trung vào các khái niệm nền tảng
- Python có thể đọc gần như giả mã với người đã có kinh nghiệm lập trình, nhưng với người học lần đầu thì vẫn khó hiểu
- Hai ứng viên là Forth và Haskell
- Forth hấp dẫn ở chỗ nó thực thi lệnh theo đúng thứ tự được viết ra, nên chỉ cần hiểu stack là có thể tạo chương trình
- Haskell phù hợp với khái niệm biến và hàm được học trong toán, giúp tránh sự nhầm lẫn của cách lập trình phổ biến vốn coi biến như một chiếc hộp chứa giá trị
- Cuối cùng Forth được chọn vì hai lý do
- Dễ tích hợp vào môi trường học tập tùy biến
- Trong phần trình diễn cuối khóa trên lớp, lập trình thủ tục được cho là dễ hiểu hơn lập trình hàm
- Việc dùng một ngôn ngữ ít nổi tiếng cũng giúp cả học sinh đã từng lập trình lẫn người mới bắt đầu đều có thể học điều mới mà không ai bị bỏ lại phía sau
Thiết kế chương trình 12 giờ học
- Lớp học diễn ra mỗi tuần 1 buổi, mỗi buổi 1 giờ, tổng cộng 12 buổi, và tác giả không kỳ vọng học sinh sẽ làm nhiều bài tập ngoài giờ
- Mục tiêu cuối cùng là tự làm một tranh vẽ, hoạt hình hoặc trò chơi trong môi trường Forth
- Sau khi kết thúc khóa học, tác giả muốn học sinh có một sản phẩm có thể nhìn thấy và lưu giữ
- Điều này nhằm tránh cảm giác đã học nhiều thứ kỹ thuật nhưng chẳng còn gì đọng lại trong tay
- Vì mỗi học sinh dùng một hệ điều hành khác nhau và một số thiết bị không thể cài phần mềm bên ngoài, nên cần có cách chạy mã trực tiếp trên máy của các em mà không phải tải hay cài gì thêm
- Ban đầu tác giả định tự triển khai Forth bằng Rust rồi nhúng vào website lớp học bằng WASM, nhưng việc sửa lỗi mất nhiều thời gian hơn dự tính nên kế hoạch thay đổi
- Tác giả chọn Easy Forth của Nick Morgan làm chương trình học kiêm trình thông dịch, đồng thời đưa slide từng buổi, kế hoạch giảng dạy và bản sao Easy Forth lên cổng thông tin trực tuyến
Bắt đầu từ khái niệm máy tính
- Ở buổi đầu tiên, lớp học bắt đầu từ lịch sử điện toán và câu hỏi máy tính là gì
- Tác giả cho xem nhiều thiết bị, trong đó có cả bàn tính, rồi hỏi liệu chúng có phải là máy tính không, sau đó định nghĩa máy tính là “mọi thứ dùng để tính toán số”
- Theo định nghĩa này, gần như bất cứ thứ gì cũng có thể là máy tính, kể cả chính học sinh
- Sau khi mở rộng nhận thức sẵn có của học sinh về phạm vi của máy tính, tác giả giới thiệu Forth, các lĩnh vực ứng dụng thực tế và những ứng dụng nhúng
- Easy Forth giả định người đọc đã biết ít nhất một ngôn ngữ lập trình và cấu trúc dữ liệu stack, nhưng học sinh thì chưa có kiến thức đó nên cần giải thích riêng
Hiểu data stack bằng đĩa giấy
- Trước khi dùng máy tính, tác giả trực quan hóa data stack — nền tảng của Forth — bằng đĩa giấy
- Các số cách nhau bằng khoảng trắng sẽ được đưa vào stack theo đúng thứ tự nhập
- Nếu nhập
1 2 3rồi in ra bằng. . ., kết quả sẽ là3 2 1vì phần tử vào sau được lấy ra trước - Stack là cấu trúc vào sau ra trước (Last-In First-Out), vận hành xoay quanh việc push phần tử lên trên và pop phần tử ở trên cùng ra
- Nếu nhập
- Mỗi học sinh được phát đĩa giấy để tự thực hiện các phép toán trong Forth
- Khi push số, các em viết số lên đĩa và đặt nó lên trên cùng
- Khi cộng, các em lấy hai đĩa trên cùng ra, cộng lại rồi đặt một đĩa mới ghi kết quả lên trên
8 6 +là thao tác đưa hai giá trị vào rồi cộng chúng để đặt14lên stack2 3 *là thao tác nhân hai giá trị để đặt6lên stack
- Qua việc lặp lại nhiều phép toán, học sinh trực tiếp đóng vai trình thông dịch Forth
- Sau khi hiểu rằng máy tính chỉ tự động hóa công việc này, lớp học mới chuyển sang thiết bị thật
Thực hành Easy Forth và tác phẩm cuối khóa
- Mỗi tuần lớp học đều theo nội dung Easy Forth để giải thích khái niệm, làm bài tập và hỏi đáp; toàn bộ quá trình diễn ra suôn sẻ, không có vấn đề đặc biệt
- Để có một dự án cuối khóa vừa hoàn thành trong 12 giờ vừa thể hiện được những gì đã học, tác giả dùng framework đồ họa của Easy Forth
- Học sinh có thể làm tranh vẽ, hoạt hình hoặc trò chơi
- Vì thời gian có thể không đủ để hoàn thành một trò chơi hoàn toàn mới, tác giả khuyến khích các em chỉnh sửa trò Snake tích hợp sẵn để tạo ra kết quả mang dấu ấn riêng
- Tác giả tách mã playground của Easy Forth ra một trang riêng và mở rộng nó để một bên hiển thị mã, bên còn lại là vùng đồ họa lớn
- Ở buổi học cuối, học sinh nhanh chóng nhận ra rằng chỉ cần thay đổi một chút mã Snake là luật chơi và màu sắc đã khác đi
- Dù chưa đến mức tái cấu trúc lớn, các em đã đủ quen để không còn sợ Forth và có thể tự khám phá, chỉnh sửa
- Tác giả cũng cho xem cách vẽ vật thể bằng đồ họa tích hợp và ví dụ về việc tạo từ mới để dễ vẽ các hình như đường thẳng
- Tất cả học sinh đều chọn làm tác phẩm riêng, và đa số tạo tranh ở mức pixel
- Sau khi khóa học kết thúc, môi trường này vẫn được giữ trực tuyến thêm một thời gian để học sinh nào muốn có thể tiếp tục thử nghiệm và học thêm
Những đánh giá rút ra từ việc dạy Forth
- Forth là một ngôn ngữ thú vị để giảng dạy, nhưng chưa thể khẳng định đó là lựa chọn tốt nhất
- Nó không có cú pháp rắc rối, nhưng người mới phải trực tiếp suy nghĩ về những thành phần hệ thống mà nhiều lập trình viên thường đặt bên dưới các lớp trừu tượng
- Stack là cấu trúc dữ liệu nền tảng của khoa học máy tính, nhưng không nhất thiết phải đặt ngay ở tuyến đầu của giáo dục nhập môn
- Điểm mạnh là có thể viết mã như một chuỗi các từ; những ngôn ngữ nối ghép ở mức cao hơn cũng có thể hữu ích cho giảng dạy
- Các ngôn ngữ như Factor hoặc những hướng tiếp cận hoàn toàn khác đều có thể là ứng viên
- Nếu chọn lại, tác giả có thể cân nhắc một phương tiện nhấn mạnh phản hồi trực quan rõ ràng và tức thì hơn là cấu trúc nội tại
- Scratch có thể dạy luồng điều khiển, biến, hàm... mà không cần chạm vào chi tiết cấp thấp, đồng thời cho phép di chuyển sprite rất dễ dàng
- Bản thân ngôn ngữ lập trình cụ thể nào không quá quan trọng; ngay cả trong khóa ngắn, học sinh vẫn có thể học Forth hiệu quả
- Mỗi học sinh có thể hợp với một mô hình tư duy khác nhau, nên rất khó tinh chỉnh hoàn hảo quá trình học cho từng em
- Quan trọng là có môi trường để tự chủ khám phá và kiểm tra kết quả nhanh chóng theo vòng lặp lặp lại
- Học sinh đã có được một trải nghiệm nhập môn cấp thấp giúp hiểu sâu cấu trúc dữ liệu nền tảng của khoa học máy tính
- Với người dạy, đây cũng là cơ hội cải thiện phương pháp giảng dạy theo đúng kiểu luyện tập lặp đi lặp lại mà học sinh được yêu cầu
Học tập lấy con người làm trung tâm trong thời đại LLM
- Khi lập trình ngày càng được dẫn dắt bởi tự động hóa mang tính xác suất, việc dạy con người tự lập trình lại càng trở nên quan trọng hơn
- Ngay cả người đã biết lập trình, nếu phụ thuộc vào LLM thì kỹ năng có thể bị mai một; còn với người chưa từng học bài bản từ đầu thì có thể sẽ không hình thành được kỹ năng đó
- Ngày càng nhiều người muốn học kỹ năng mới nhưng lại dùng LLM thay vì tài liệu có uy tín
- LLM có thể không chính xác, có xu hướng tâng bốc người dùng, và trong một số trường hợp còn có thể làm trầm trọng thêm bệnh lý tâm thần
- Với trẻ em đang trong giai đoạn học cách tương tác với thế giới, những đặc điểm này còn nguy hiểm hơn
- Cần tạo ra môi trường lấy con người làm trung tâm để bất kỳ ai, đặc biệt là trẻ em, đều có thể học các kỹ năng như lập trình bất kể xuất thân
- Cũng cần những người với nền tảng đa dạng sẵn sàng bỏ thời gian và công sức để chia sẻ tri thức, đồng thời dạy cách tiếp cận kiến thức bổ sung một cách an toàn
- Ngay cả khi không phải giáo viên chuyên nghiệp, mỗi người vẫn nên học cách dạy và tạo ra những không gian nơi tri thức có thể lưu thông tự do giữa con người với nhau
1 bình luận
Các ý kiến trên Lobste.rs
Easy Forth có vẻ là một tài liệu hay, và tôi khuyên mọi lập trình viên nên dành 10 phút để trải nghiệm Forth. Đây là một ngôn ngữ rất đơn giản để học, đồng thời vừa quen thuộc vừa làm đảo lộn cách tư duy; nó cũng dễ triển khai khi cần nhanh chóng tạo một ngôn ngữ bậc cao từ đầu
DOES>thì khôngViệc triển khai Forth khá thú vị, nhưng càng viết nhiều mã tôi càng bớt thích nó. Các từ gây nhiễu như
DUP,ROT,SWAPkhiến khó theo dõi luồng xử lý, và nó cũng có xu hướng khuyến khích dùng biến toàn cục, điều mà tôi không ưahttps://archive.ph/0ZOVa