Vài năm trước, một sinh viên nói với tôi: “Em ghét viết mã.” Điều này có vẻ rất tiêu cực với bất kì giáo sư nào dạy lập trình nhưng thực tế nó chỉ là một cách diễn đạt của một sinh viên thất vọng, người chưa có đủ kĩ năng lập trình. Chỉ khi họ thu được đủ kinh nghiệm và hiểu cái gì là sai và cái gì là đúng với công việc riêng của họ, họ mới có khả năng viết mã tốt hơn. Điều quan trọng cần làm là xoá bỏ nỗi sợ lập trình và cải tiến tin tưởng của sinh viên vào năng lực của họ để viết mã. Đây là một kĩ thuật đơn giản tôi đã dùng trong lớp của tôi.
Vào đầu môn học, tôi bảo sinh viên rằng ba chương trình đầu tiên sẽ không cho điểm. Điều đó có nghĩa là họ có thể phạm sai lầm và không thành vấn đề liệu chương trình của họ có chạy hay không. Điều đó làm giảm bớt cảm giác căng thẳng của sinh viên về việc học lớp lập trình máy tính. Điều tôi muốn từ họ chỉ là bản thân họ viết mã và thực nghiệm quá trình viết mã. Mặc dầu những chương trình này không được cho điểm nhưng họ phải chuyển qua chủ định nhận diện các sai lầm mà họ phạm phải để cho tôi có thể sửa cho họ trong lớp và giải thích tại sao chương trình của họ không làm việc.
Trong ba chương trình tiếp, thay vì sửa sai lầm của họ, tôi chỉ cho lớp các chương trình mẫu trên bảng và yêu cầu sinh viên sửa sai lầm riêng của họ. Họ kiểm lại chương trình riêng của mình, từng dòng một để nhận diện các sai lầm riêng của họ. Sau đó tôi kiểm chương trình của họ rồi thảo luận về các vấn đề chung tìm ra trong chương trình của họ. Trong chương trình thứ nhất, phần lớn sinh viên đều có khả năng sửa được lỗi cú pháp riêng của họ, một số có khả năng tìm ra sai lầm trong logic riêng của họ nhưng ở chương trình thứ hai và thứ ba, phần lớn có thể nhận diện ra mọi vấn đề mà họ đã phạm phải và bắt đầu hiểu tại sao chương trình của họ không làm việc.
Nói cách khác, họ học từ sai lầm riêng của họ. Đến lần này, tôi cũng để cho lớp biết rằng những chương trình đó sẽ không được cho điểm để xả bớt sức ép của họ nhưng tôi bảo họ từ giờ trở đi, nếu họ vẫn phạm cùng sai lầm lần nữa trong chương trình của họ, nó sẽ bị cho điểm và cộng vào điểm chung kết.
Khi lớp tiếp tục, phần lớn sinh viên học cách nhận ra sai lầm riêng của mình và có khả năng sửa chúng. Qua thời gian, ít người phạm sai lầm và họ trở nên ít thất vọng hơn khi kĩ năng lập trình của họ cải tiến lên. Vào lúc này, phần lớn sinh viên thu được tin tưởng vào năng lực viết mã của họ nên tôi để cho sinh viên kiểm chương trình lẫn cho nhau để sửa cho họ khi họ học thêm về cấu trúc và logic từ cách nhìn của người khác. Phần lớn sinh viên hiểu rằng bằng việc kiểm chương trình của bạn cùng lớp, họ có thể cải tiến kĩ năng viết mã riêng của họ.
Khi sinh viên cảm thấy thoải mái về lập trình, tôi tiếp tục xây dựng niềm tin của họ bằng việc cho các bài tập “Mini-hackathon” hàng tuần (bài tập lập trình tập trung cho một chủ đề) nơi họ được yêu cầu viết một chương trình nhỏ (xấp xỉ 100 tới 250 dòng mã) trong vòng nửa giờ. Bất kì ai kết thúc đầu tiên với kết quả đúng sẽ nhận được điểm thưởng. Kiểu thi đua này khuyến khích họ phát triển kĩ năng lập trình tốt hơn vì họ phải viết mã nhanh trong một thời gian cố định. Tôi có thể quan sát cách sinh viên làm việc khi họ làm việc để hoàn thành thách thức này.
Một số người dường như không thoải mái là họ có thể không có khả năng hoàn thành đúng thời gian đã phân, nhưng hoài nghi của họ nhanh chóng thay đổi khi họ ít tập trung vào thời gian và nhiều hơn vào kết quả. Sinh viên hài lòng nhất là những người đã từng nghĩ họ không bao giờ có thể làm được nó, nhưng tìm ra cách để hoàn thành thách thức này. Sau quãng năm hay sáu tuần, phần lớn sinh viên nói với tôi rằng viết mã đã trở thành tự nhiên như họ viết trong tiếng Anh vì họ thậm chí không nghĩ nhiều về cú pháp hay qui tắc thêm nữa.
Một sinh viên hài lòng giải thích: “Bây giờ em biết học qua hành nghĩa là gì. Đầu tiên em học làm nó rồi em học cái gì làm việc và cái gì không làm việc rồi em học làm nó ngay bằng việc áp dụng qui tắc rồi cách qui tắc có thể được thay đổi và tổng quát hoá. Đột nhiên nó trở thành một phần của suy nghĩ của chúng em và khả năng viết mã của chúng em.”
Tôi có thành công rất tốt với kĩ thuật này trong mọi lớp lập trình của mình, bất kể liệu đó là Java hay C++ hay Python. Khi sinh viên không cảm thấy bị căng thẳng bởi điểm hay thất bại, họ sẽ tập trung nhiều hơn vào học tập. Khi sinh viên được cho cơ hội học từ sai lầm riêng của họ, họ sẽ học tốt. Khi sinh viên được cho nhiều cơ hội hơn để thực hành, họ sẽ phát triển các kĩ năng của họ. Khi họ có kĩ năng, họ sẽ cảm thấy ổn hơn về bản thân họ, và thu được tin tưởng vào năng lực của họ. Học qua hành là về việc cho họ cơ hội để bản thân họ học nhưng tất nhiên, họ cần hỗ trợ và hướng dẫn từ thầy giáo.