30 Jun, 2021
Cải tiến kĩ năng viết mã
Một sinh viên viết cho tôi: “Bạn gái của em học cách viết chương trình chỉ trong vài ngày rồi cô ấy viết thẳng mã ngay nhưng em phải mất ba tuần chỉ viết được vài dòng mã. Chúng em hiện đang học JavaScript và với em dường như cứ mãi mãi chỉ hiểu những điều cơ bản. Làm sao người khác có thể học các thứ nhanh thế còn em lại chậm quá? Em bối rối và thậm chí còn ghen tị với cô ấy. Có kĩ thuật nào nhờ đó em có thể cải tiến việc lập trình của em cho nhanh hơn không?
Đáp: Mọi người học các thứ một cách khác nhau. Chừng nào em đang học cái gì đó, không thành vấn đề nhanh hay chậm thế nào. Có thể bạn gái của em có nền tảng vững mạnh hơn ở trường trung học cho nên cô ấy có thể học các thứ nhanh hơn nhưng em cần biết rằng chính vấn đề là chất lượng chứ không phải tốc độ. Với lí do này điều quan trọng là học qua hành rồi suy ngẫm về công việc của em và cải tiến nó. Em có thể hội tụ vào viết vài câu lệnh một lúc và chắc chúng là đúng rồi em sẽ thấy dễ học cấu trúc của ngôn ngữ hơn vì nó có liên quan tới kinh nghiệm thực tại. Một trong những cách tốt nhất để giữ cho mã nhất quán và có tổ chức là gộp nhóm chức năng với nhau. Chẳng hạn, thay vì tống mọi JavaScript của em vào một tệp main.js, em có thể gộp nhóm chúng vào trong các tệp tách biệt dựa trên tính chức năng, rồi gắn chúng lại một khi em đạt tới bước dựng.
Sau khi viết mã, em nên để thời gian kiểm điểm lại công việc riêng của em hay đề nghị bạn khác kiểm điểm nó lại cho em. Việc kiểm mã là đưa mã của em cho vài người bạn xem để cho em có thể giải thích điều em đã viết, tại sao em làm nó theo cách đó và dựa trên ý kiến phản hồi của họ, em học cách viết tốt hơn. Mục đích của kiểm điểm mã là để tìm ra lỗi và học cải tiến kĩ năng viết mã của em. Tất nhiên, nếu em không muốn xem mã của em, em có thể dùng các công cụ như jslint hay SCSSlint để kiểm mã của em để tìm lỗi. Cách khác để cải tiến kĩ năng viết mã của em là đọc mã của người khác, xem xét cấu trúc dữ liệu và thuật toán của họ và tự hỏi bản thân em tại sao họ làm theo cách đó? Bằng việc kiểm điểm mã tốt, em sẽ học nhiều và khá hơn với mã riêng của em và sẽ tạo khả năng cho em viết tốt hơn trong tương lai.
Việc học ngôn ngữ lập trình yêu cầu thực hành; em càng viết nhiều mã kĩ năng của em càng tốt hơn. Khi em đã làm nó đủ lâu, em sẽ biết mọi cấu trúc của ngôn ngữ đó và nó sẽ trở thành dễ hơn. Về căn bản, em học làm chọn lựa nào từ tri thức riêng của em cũng như các ngoại lệ. Bằng việc có những kĩ năng này thì em có thể viết mã chất lượng cao nhanh hơn. Vài năm trước, một người bạn nhạc sĩ nói với tôi rằng việc học ngôn ngữ lập trình là tương tự như chơi nhạc cụ. Bạn bắt đầu chậm để chắc rằng bạn học mọi điều cơ bản rồi bạn học chơi tương ứng để phát triển kĩ năng của bạn trước khi bạn có thể chơi cùng người khác trong ban nhạc. Anh ấy bảo tôi rằng sau khi bạn đã chơi đủ lâu, bạn biết mọi kiểu nhạc thì bạn có thể chơi chúng theo cách khác và là một nhạc sĩ giỏi.
Lời khuyên cuối cùng của tôi: Đừng so sánh bản thân em với người khác, đặc biệt với bạn gái. Cứ là bản thân em nhưng kính trọng người khác vì em vẫn còn đang học và trưởng thành.
—English version—
To improve coding skills
A student wrote to me: “My girlfriend learns how to program in just few days then she write code right away but it takes me three weeks just to write a few lines of code. We are currently learning JavaScript and for me it seems to be taking forever just to understand the basics. How can others learn things so fast and I am too slow? I am so embarrassed and even envy with her. Is there any technique by which I can improve my programming faster?
Answer: People learn things differently. As long as you are learning something, it does not matter how fast or slow. Maybe your girlfriend has stronger foundation in high school so she may learn things faster but you need to know that it is the quality that counts, not the speed. For this reason it is important to learn by doing then reflect on your work and improve it. You may focus on writing few sentences at a time and make sure they are corrected then you will find it easier to learn the structure of a language because it relates to an actual experience. One of the best ways to keep code consistent and organized is to group functionality together. For example, rather than dumping all your JavaScript into one main.js file, you may want to group them into separate files based on functionality, then concatenating them once you reach your build step.
After write code, you should take time to review your own work or ask other friends to review it for you. The code review is to show your code to few friends so that you can explain what you have written, why you do it that way and based on their feedbacks, you learn how to write better. The goal of code review is to find errors and learn to improve your coding skills. Of course, if you do not want others to see your code, you may use tools such as jslint or SCSSlint to check your code for errors. Another way to improve your coding skills is to read others’ codes, examine their data structures and algorithms and ask yourself why they are doing that way? By review more good code, you will learn more and get better with your own code and will enable you to write better in the future.
Learning programming language requires practice; the more you write codes the better is your skills. When you have been doing it long enough, you will know all the structures of that language and it will become easier. Basically, you learn which choices are made from your own knowledge as well as the exceptions. By having the skills then you can write high quality codes faster. Few years ago, a musician friend told me that learning programming language is similar to playing an instrument. You start slow to make sure that you learn all the basics then you learn to play accordingly to develop your skills before you can play with others in a band. He told me that after you have played long enough, you know all types of music then you can play them in different ways and be a good musician.
My last advice: Do not compare yourself with others, especially with your girlfriend. Be yourself but respect others as you are still learning and growing.