12 Jul, 2021
Lời khuyên cho sinh viên khoa học máy tính
Một sinh viên viết cho tôi: “Em là sinh viên năm thứ nhất trong Khoa học máy tính và em lo nghĩ vì một số bạn trong lớp em đã biết cách lập trình mà em thì không biết. Em sợ em có thể trượt. Xin thầy giúp cho.”
Đáp: Cuộc hành trình bao giờ cũng bắt đầu với bước đầu tiên. Ngay khi em đưa nỗ lực vào em sẽ làm tốt. Đừng so sánh bản thân em với người khác, nó bao giờ cũng gây ra phiền toái; thay vì thế nhìn vào bên trong bản thân em và hỏi “Mình phải đưa nỗ lực nào vào để vượt qua thách thức này?” Học lập trình giống như học ngôn ngữ mới, em phải học cú pháp, các qui tắc, cấu trúc và phong cách và em phải thực hành. Em sẽ phạm nhiều sai lầm và học từ chúng. Em càng viết mã nhiều, em càng phạm nhiều sai lầm, em sẽ càng lập trình giỏi hơn. Trong lập trình, tự em phải học mọi thứ. Em sẽ không học gì mấy nếu em phụ thuộc vào ai đó vì em phải phạm sai lầm để cho em có thể học được từ chúng. Em càng phạm nhiều sai lầm lúc bắt đầu, em sẽ càng ít phạm phải sai lầm về sau. Khi tôi dạy môn lập trình, tôi bảo sinh viên rằng tôi không cho điểm năm bài tập lập trình đầu tiên để cho phép sinh viên có thời gian học để cho họ không phải lo nghĩ về điểm. Tôi bảo họ: “Phạm sai lầm là được; nhận kết quả sai là được chừng nào các em còn đang học từ sai lầm của các em.”
Có những sinh viên vội vàng viết mã chỉ để chứng minh cho bạn bè rằng họ có thể lập trình. Tuy nhiên em cần học các khái niệm lí thuyết trước vì nó sẽ giúp cho em hiểu sai lầm của em. Phần lớn các bài tập đều được thiết kế để kiểm tra hiểu biết của em về các khái niệm lập trình, nếu em không hiểu những khái niệm này, em sẽ không phát triển các kĩ năng lập trình tốt. Cũng giống như học nói tiếng Anh, một số người có thể nói đúng và một số người có thể nói đầy lỗi ngữ pháp. Em cần đọc sách giáo khoa để hiểu khái niệm trước khi bắt đầu viết mã. Em học một khái niệm rồi viết mã về nó, kiểm thử nó, cho tới khi em hiểu nó trước khi chuyển sang khái niệm tiếp. Từng khái niệm đều được xây dựng trên các khái niệm khác cho nên em cần phát triển nền tảng vững trước, nếu không em có thể không đi xa hơn được. Em phải tổ chức chương trình bằng lập kế hoạch phần mã nào (Module) em cần viết trước, và thế rồi thực hiện và kiểm thử chúng từng cái mỗi lúc. Bằng việc đi theo một qui trình phát triển được xác định rõ, em sẽ phát triển một kỉ luật lập trình mạnh. Nếu em xây dưng mã của em từng module mỗi lúc rồi kiểm thử chúng, em có thể tìm ra nhiều lỗi sớm hơn là hoàn thành chương trình rồi mới tiến hành kiểm thử toàn diện. Viết chú thích cho mã của em ngay khi em viết nó cũng sẽ là dễ hơn, để cho khi em quay lại nó về sau, em dễ dàng nhớ em đã làm gì.
Ngày nay phần lớn các lớp công nghệ đều dùng phương pháp “học tích cực” nơi tài liệu là sẵn có trực tuyến trước khi tới lớp. Nhiều sinh viên tải xuống những tài liệu này và bỏ lớp vì họ nghĩ họ có thể tự học được. Đừng phạm sai lầm đó! Lớp máy tính là quan trọng bởi vì đó là chỗ em học từ sai lầm của người khác. Phần lớn các giáo sư sẽ mô tả các sai lầm chung, giải thích chúng, và sửa chúng trong lớp. Lớp học cũng là chỗ để hỏi các câu hỏi và nhận câu trả lời đúng từ giáo sư. Giáo sư thường cho các ví dụ trên lớp và việc học từ những ví dụ này là tốt hơn từ sách vở. Phần lớn các giáo sư, kể cả bản thân tôi, thường dùng các ví dụ này trong bài kiểm tra. Bằng việc dự lớp đều đặn, em sẽ học tốt trong những ví dụ này.
Để là người lập trình giỏi, em cần viết mã thường xuyên. Nếu em không viết, em có thể quên điều em đã học. Cho nên lời khuyên của tôi là “viết mã, viết mã, và viết nhiều mã.”
—English version—
Advice to Computer Science students
A student wrote to me: “I am a first year student in Computer Science and I am worrying because some of my classmates already know how to program but I do not. I am afraid that I may fail. Please help.”
Answer: A journey always starts with the first step. As long as you put in the effort you will do well. Do not compare yourself with others, it always causes vexation; instead looking within yourself and ask “What efforts should I put in to overcome this challenge?”. Learning to program is like learning a new language, you have to learn the syntax, the rules, the structure and styles and you have to practice. You will make a lot of mistakes and learn from them. The more you write code, the more mistakes you make, the better you will program. In programming, you must learn everything by yourself. You will not learn much if you are dependent on someone as you must make mistakes so you can learn from them. The more mistakes you made in the beginning, the less mistakes you will made later. When I teach programming course, I tell students that I do not grade the first five programming exercises to allow students time to learn so they do not have to worry about grades. I told them: “It is OK to make mistakes; it is OK to get wrong outputs as long as you are learning from your mistakes.”
There are students who are hurry to code just to prove to friends that they can program. However you need to learn the theoretical concepts first because it will help you to understand your mistakes. Most exercises are designed to test your understanding of the programming concepts, if you do not understand these concepts, you will not develop good programming skills. Just like learning to speak English, some can speak correctly and some can speak full of grammatical errors. You need to read the textbook to understand the concept before starting to write code. You learn one concept than write code about it, test it, until you understand it before go to the next. Each concept is built on top of others so you need to develop a strong foundation first, else you may not go further. You must organize your program by plan which pieces of code (Module) you need to write first, and then implement and test them one at a time. By following a well-defined process of development, you will develop a strong programming discipline. If you build your code one module at a time then test them you may find more bugs sooner than complete the program then conduct the comprehensive test. It would also be easier to write comment to your code as you write it, so that when you come back to it later, you easily remember what you did.
Today most technology classes are using the “Active Learning” method where materials are available online prior to coming to class. Many students download these materials and skip classes as they think they can learn by themselves. Do not make that mistake! Computer class is important because that is the place where you learn from others’ mistakes. Most professors will describe common mistakes, explain them, and correct them during the class. Classroom is also the place to ask questions and get correct answers from professors. Professors often give examples in class and it is better to learn from these examples than from books. Most professors, including myself, often use these examples on exams. By attending class regularly, you will do well in these exams.
To be the best programmer, you need to write code often. If you do not, you may forget what you have learned. So my advice is “write code, write code and write more code.”