Nên dạy Coding cho trẻ với ngôn ngữ nào?
Cuối câu chuyện “Học STEM” bắt đầu từ đâu?, tôi đã tạm xác định được 2 nhiệm vụ cần triển trước là:
- #1. Nghiên cứu xây dựng chương trình tổng thể cho STEM education dựa trên các nguồn tham khảo và các công cụ hỗ trợ đã xác định;
- #2. Xem xét chi tiết việc đưa cái đám Coding và kỹ năng làm việc với máy tính vô chương trình STEM education.
Với thằng #1, tôi đã xác định được khung sườn cơ bản. Tuy nhiên phần chi tiết của nhiệm vụ này khá nhiều và đòi hỏi tôi phải nghiên cứu cập nhật liên tục nhiều nội dung (trong cái đống đó sẽ có các nội dung thuộc nhiệm vụ #2). Do vậy, trước mắt tôi sẽ tập trung múc thằng #2 – Coding (và các kỹ năng làm việc với máy tính) trước.
#1. Tại sao lại là Coding?
Trong nội dung kỳ trước, tôi đã tạm đúc kết cái thông tin “Đám Coding có vai trò quan trọng trong hành trình STEM education vì nhu cầu thực tiễn cũng như việc hỗ trợ rèn luyện kỹ năng giải quyết vấn đề”.
Khi tiếp tục đào sâu vô cái ý này, tôi bắt gặp một video khá thú vị Mitch Resnick: Let’s teach kids to code – YouTube. Nội dung của video khá hay nhưng tôi ấn tượng nhất cái đoạn khi một học sinh cám ơn ông Mitch Resnick vì đã hướng dẫn cách sử dụng Variables (biến số) trong trò chơi “Cá lớn ăn cá bé” với ngôn ngữ lập trình Scratch. Phần trích đoạn lời thoại đó như sau:
“… So then, each time the big fish eats the little fish, he will increment the score, and the score will go up by one. And it’s in fact working. And he saw this, and he was so excited, he reached his hand out to me, and he said, “Thank you, thank you, thank you.” And what went through my mind was, how often is it that teachers are thanked by their students for teaching them variables?… ”
Thật sự, suốt cả mấy chục năm đi học, tôi cũng không mấy lần được chứng kiến cảnh học sinh cảm ơn giáo viên vì bài giảng. Và đó thật sự đó chính là cái tinh thần chủ đạo của STEM education – trẻ sẽ tự biết trả lời cho câu hỏi kinh điển “Cái này học để làm gì?”.
Theo luồng câu chuyện này, tôi phát hiện ra nhóm nghiên cứu của ông Mitch Resnick là tác giả của ngôn ngữ lập trình Scratch và nhiều nghiên cứu/ hợp tác liên quan đến STEM education (ví dụ như cái LEGO) như đề cập trong Overview ‹ Mitchel Resnick — MIT Media Lab.

Và chuyện này dẫn tới chuyện khác, tôi mò mẫm tìm thử thông tin liên quan đến việc học lập trình với Scratch và tìm thấy các thông tin cho thấy lập trình đang được lăng xê lên như là một loại “văn chương mới” – tức là nó sẽ cũng sẽ giúp cho người viết sắp xếp suy nghĩ và trình bày ý tưởng. Theo quan điểm “cổ điển“, lập trình là để dành cho các đối tượng “đột biến“, không phải người thường. Nhưng thực tế, người ta (ai đó không phải là tôi) đã chứng minh cái quan điểm này sai toét.
Với lập trình, trẻ sẽ có thể sáng tạo và bày tỏ suy nghĩ với máy tính. Và thông qua đó, trẻ cũng sẽ luyện tập kỹ năng thiết kế, giải quyết vấn đề, sử dụng kiến thức toán học và ngôn ngữ trong các ngữ cảnh cụ thể (tức là kiểu gì cũng bổ béo, không chỗ này thì chỗ khác)
Dù vẫn có ý kiến cho rằng cho trẻ ở độ tuổi mẫu giáo (hay thậm chí tiểu học) học lập trình là đánh cắp tuổi thơ. Tuy nhiên nếu xét thực tế hiện nay, phần lớn trẻ dành khá nhiều thời gian để chơi game hoặc xem video trên thiết bị điện tử thì việc học các thứ liên quan đến Coding chắc chắc sẽ tốt hơn nhiều.
Vấn đề mấu chốt là mấy ông thiết kế chương trình (tức là tôi trong trường hợp này) phải biết phân bố thời gian hợp lý và xây dựng nội dung đủ “cuốn” cho trẻ thích thú với việc ngồi xuống học (thay vì dán mắt lên màn hình coi video/ chơi game).
Nói thì dễ rồi nhưng mà bây giờ dạy như thế nào đây?
#2. Rồi vậy dạy Coding với ngôn ngữ nào?
Để trả lời cho câu hỏi “Dạy như thế nào?” tôi sẽ cần bỏ ra nhiều công sức để nghiên cứu và thiết kế chương trình. Nhưng trước khi mần việc đó, tôi sẽ cần xác định xem sẽ triển việc dạy và học với ngôn ngữ nào.
#2.1 Tôi có lựa chọn nào khác ngoài Scratch?
Tiếp tục mạch câu chuyện ở trên, tôi bơi vào coi thử ngôn ngữ lập trình Scratch trước.
“… Scratch is the world’s largest coding community for children and a coding language with a simple visual interface that allows young people to create digital stories, games, and animations. Scratch is designed, developed, and moderated by the Scratch Foundation, a nonprofit organization.
Scratch promotes computational thinking and problem solving skills; creative teaching and learning; self-expression and collaboration; and equity in computing.
Scratch is always free and is available in more than 70 languages.…”
Theo người ta nói thì Scratch là nhân vật tai to mặt bự trong làng lập trình cho trẻ em với giao diện trực quan cho phép sáng tạo các thể loại game, animations. Đối tượng này được hậu thuẫn bởi tổ chức phi lợi nhuận Scratch Foundation nên nhìn chung là khá tín (mà thật ra tôi cũng chỉ mất thời gian tìm hiểu chứ có mua bán gì đâu mà lo). Thông tin ở đây cũng khẳng định một điều tôi đọc được trước đó là việc luyện tập kỹ năng lập trình (với Scratch hoặc các ngôn ngữ khác) sẽ hỗ trợ khả năng phân tích, giải quyết vấn đề, trình bày ý tưởng. Và điều quan trọng là Scratch sẽ luôn luôn cho phép tôi xài chùa.
Ở đây hiển nhiên tôi sẽ phụt ra một câu hỏi là ngoài Scratch (và Blockly | Google Developers đã xác định trong kỳ trước) ra thì tôi còn có thể dạy Coding với ngôn ngữ nào khác? Kết quả tôi tìm được trong Top Programming Languages 2022 – IEEE Spectrum như sau:

Lưu ý: Tất nhiên tôi sẽ không tìm thấy Scratch trong danh sách này vì đây là các ngôn ngữ lập trình của mấy ông developer chuyên nghiệp chứ không phải lập trình cho trẻ em.
Tôi soi thử một khóa “Introduction” với Python trong nội dung Introduction to Computer Science and Programming Using Python | edX. Dù được đánh giá “thân thiện hơn” với người dùng (so với đám ngôn ngữ còn lại như C, C++,…), tôi xác định ý tưởng dạy Coding với Python cho độ tuổi mầm non/tiểu học là không ổn.
Quay trở lại đánh giá 2 đại diện Scratch và Blockly, tôi phát hiện ra một thông tin đề cập trong Blockly Vs Scratch: A detailed comparison [2021] (codingnemo.com) là Scratch thực tế được xây dựng dựa trên công nghệ của Blockly với định hướng hỗ trợ giáo dục cho trẻ tốt hơn.

Lưu ý: Sratch hiện có cộng đồng người dùng lớn và khá nhiều tài nguyên hỗ trợ giảng dạy nên sẽ thuận lợi hơn so với Blockly
Rồi, thôi tôi chốt luôn sẽ triển việc dạy Coding với Scratch.
#2.2 Vị cứu tinh ScratchJr cho trẻ 5-7 tuổi
Sau khi chốt việc Coding với Scratch, tôi cay đắng nhận ra ngôn ngữ này chỉ phù hợp với trẻ 8 – 16 tuổi như đề cập trong Scratch – About (mit.edu).

Lúc này tôi có 2 lựa chọn là cố gắng tìm một ngôn ngữ lập trình khác hoặc thôi tạm nghỉ chờ con tôi đủ 8 tuổi rồi tính tiếp. Nhưng may mắn thay, ở phần Scratch Family cuối cái trang nói trên, tôi thấy một liên kết ScratchJr trong phần Scratch Family.
Theo đường link, tôi tìm được định nghĩa chính chủ ScratchJr – About:
“… ScratchJr is an introductory programming language that enables young children (ages 5-7) to create their own interactive stories and games. Children snap together graphical programming blocks to make characters move, jump, dance, and sing. Children can modify characters in the paint editor, add their own voices and sounds, even insert photos of themselves — then use the programming blocks to make their characters come to life. …”
Tôi tạm hiểu, ScrachJr là ngôn ngữ lập trình khởi đầu cho trẻ ở độ tuổi 5-7 sử dụng để sáng tạo các trò chơi và câu chuyện có khả năng tương tác. Với ScratchJr, trẻ sẽ có thể sử dụng các graphical programming blocks (chắc là các khối lệnh lập trình dạng đồ họa) để cho các nhân vật bay nhảy, hát hò các kiểu. Ngoài ra, ScratchJr còn có paint editor (cái này thì chắc là để vẽ vời chỉnh sửa kiểu Paint của ông Microsoft), thu âm giọng nói, âm thanh cũng như chèn ảnh của chính đương sự vào kết hợp với các khối lệnh lập trình.
Tức là, tôi có thể triển luôn việc dạy Coding với ScratchJr mà không cần chờ đợi nữa. Nhưng tôi còn hơi lấn cấn về mối quan hệ của Scratch vs ScratchJr và đây là câu trả lời.
“… ScratchJr was inspired by the popular Scratch programming language (scratch.mit.edu), used by millions of young people (ages 8 and up) around the world. In creating ScratchJr, we redesigned the interface and programming language to make them developmentally appropriate for younger children, carefully designing features to match young children’s cognitive, personal, social, and emotional development. …”
À, vậy ra ScratchJr là phiên bản “thu nhỏ” của Scratch vốn dành cho nhóm tuổi từ 8 đổ lên. Với phiên bản “thu nhỏ” này, phần giao diện (và khối lệnh lập trình) đã được thiết kế lại để phù hợp với khả năng nhận thức và “phong cách” của nhóm tuổi nhỏ hơn.
Việc này cũng được khẳng định trong nội dung ScratchJr: Coding for kindergarten | MIT News | Massachusetts Institute of Technology.
Và rồi, đoạn cuối trong phần giới thiệu nhưng cũng rất quan trọng:
“… ScratchJr is available as a free app for iPads, Android tablets, and Chromebooks. …”
Vâng, với ScratchJr, tôi cũng có thể “chơi chùa” thử trên iPads, Android tablets, Chromebooks. Và nếu thấy không ổn thì tôi rút lui không kèn không trống mà không mất mát gì (trừ thời gian).
Như vậy với phần Coding, tôi tạm chốt được như sau:
- Trẻ 5 – 7 tuổi: Dạy với ScratchJr;
- Trẻ 8 – 16 tuổi: Dạy với Scratch.
Nhiệm vụ kế tiếp của tôi sẽ là nghiên cứu tổng thể cách sử dụng ScratchJr trước khi đi vào thiết kế nội dung dạy chi tiết.
3 thoughts on “Nên dạy Coding cho trẻ với ngôn ngữ nào?”