3 kinh nghiệm học lập trình quan trọng
Nói tới kinh nghiệm thì mỗi người có những kinh nghiệm khác nhau. Những người giỏi thật sự thì có lẽ họ ít chia sẻ kinh nghiệm tối cao (vì đó là cái làm nên giá trị riêng mỗi người) mà thường họ chia sẻ những kinh nghiệm phổ biến. Bản thân tôi cũng vậy, nhưng trong bài viết này tôi chia sẻ những quan niệm hơi khác người một chút.
1. Nội lực trong ngành CNTT
Để học tốt trong ngành CNTT, bạn phải có đủ 5 yếu cốt căn bản cốt lõi sau
- Tư duy.
- Kỹ năng IT (biết nhiều phần mềm, cài đặt máy tính, dual-boot, diệt virus bằng tay, v.v).
- Kiến thức chuyên môn (lập trình, Toán học, Vật lý,…).
- Đam mê.
- Ngoại ngữ (tiếng Anh).
5 yếu tố trên gộp lại thành 1 thứ gọi là “cốt cách”, “tư chất”. Điều này giải thích một chuyện mà bạn thường hay thấy: có vài bạn học lập trình suốt 2 năm liền mà trình độ không bằng được vài bạn học lập trình trong…vài tháng. Đơn giản là sự khác nhau ở “tư chất” và sự cần cù kiên trì mỗi người.
Để giải thích 5 yếu tố trên vừa dễ mà vừa khó. Dễ là vì bạn nào đọc cũng hiểu cả. Khó là vì để cho bạn hiểu đúng được ý nghĩa sâu xa thì không phải đơn giản.
Bạn phải phát triển đồng đều 5 yếu tố “tư chất” ở trên. Mở rộng ra thì bạn không chỉ học lập trình mà còn phải học về Toán, Vật lý, biết nhiều về xã hội…
Bạn có thể hiểu như vầy: giả sử 4 yếu tố đầu tiên bạn rất giỏi, nhưng bạn không giỏi yếu tố cuối cùng (tiếng Anh). Vì vậy mà bạn không thể leo lên mức cảnh giới thượng thừa mà mãi mãi bị giới hạn ở 1 mức nào đó. Bạn chỉ đạt cảnh giới cao khi nội lực đầy đủ. Lấy hình trên minh họa chẳng hạn, với “minimum” là ngôn ngữ tiếng Anh.
Lưu ý: 5 yếu tố trên đây chỉ là “tư chất”, muốn phát huy được “tư chất” để đạt được thành công thì bạn phải rèn luyện, kiên trì và cần có nhiều yếu tố khác (thậm chí là cả may mắn). Nếu rèn luyện tốt tư chất thì bạn có thể học giỏi bất cứ lĩnh vực nào trong ngành CNTT chứ không phải riêng về lập trình.
2. Copy code
Thường thì đa số các bài viết chia sẻ kinh nghiệm họ đều nói rằng không được phép copy code của người khác, copy code là ngu, là gà, copy code là vô đạo đức, v.v. Dĩ nhiên tôi đồng ý hoàn toàn, vì “copy code” đối với đa số người là “lấy code của người khác mang về làm bài làm của mình”.
Còn với tôi, thì quan niệm “copy code” đúng với ý nghĩa thuần túy của nó: “copy một đoạn code từ tài liệu, sau đó dán vào bài của mình, chạy thử”.
Vậy thì điều đó có gì khác nhau ? Rất khác. Khi tôi tìm kiếm tài liệu, chạy thử code, để tiếp thu nhanh nhất thì tôi phải copy code thấy được kết quả ngay, dễ dàng hình dung ra vấn đề. Điều này rõ ràng tốt hơn việc “gõ code từ từ (không copy) để hiểu từng câu lệnh, gõ quá trời quá đất, chạy thử, ôi mẹ ơi 69 lỗi, thiếu thư viện tè le, biết vậy khỏi gõ code chi cho mệt người tốn sức”.
Khi tôi “copy code” thuần túy, tôi sẽ thấy ngay kết quả, điều đó tạo động lực và cảm hứng, từ đó bắt đầu chạy debug từ từ, dần dần hình dung ra vấn đề và hiểu được, sử dụng được. Đó là 1 trong những bí kíp tối thượng của tôi khi học lập trình.
3. Nhìn xa trông rộng
Nghe có vẻ khá là hoa mỹ nhưng thực tế là vậy.
Khi làm một đồ án (bài tập siêu lớn), các bạn của tôi thường hay nhào vào code ngay, code được chức năng nào hay chức năng đó để kiếm điểm. Còn tôi thì không.
Tôi dành đến gần 50% thời gian làm đồ án cho sự chuẩn bị, chuẩn bị về mọi thứ. Tôi học những công nghệ liên quan đồ án, tìm hiểu kĩ các hàm, code thử vài tính năng nho nhỏ để hiểu. Sau đó tôi bắt đầu lên ý tưởng, thiết kế hệ thống class (phương pháp lập trình Hướng đối tượng). Tôi phải thiết kế làm sao mà phải mở rộng được tối đa các chức năng. Ví dụ đồ án yêu cầu chức năng vẽ hình cơ bản, nhưng tôi thiết kế làm sao mà có thể dễ dàng mở rộng ra thành “vẽ hình phức tạp, vẽ hình mà chèn thêm được chữ”.
Giai đoạn đầu rất mệt, phải liên tục điều chỉnh cho hoàn thiện, nhưng bù lại khi cái lõi đã xong, thì giờ đến lúc tôi sướng, bạn tôi khổ. Bạn tôi khổ vì nhào vào code liền, giờ code như 1 đống rác đọc chả hiểu gì (xin lỗi, dùng từ hơi xúc phạm), vì code miễn sao ra đúng chức năng là ok nên “làm được trước đã rồi tính tiếp”. Và vì vậy bạn tôi thường sẽ bị bế tắc về sau. Còn tôi thì giai đoạn sau rất thoải mái, mở rộng tính năng tối đa, giựt điểm về ngon lành. Tôi cũng rất tự hào vì điểm đồ án #1 của tôi là cao nhất lớp (tiến độ 1, còn tiến độ còn lại thầy chưa chấm chưa biết).
Mấu chốt quan trọng ở đây là phải biết nhìn xa trông rộng, và nền tảng đó là cấu trúc dữ liệu và giải thuật, phương pháp lập trình Hướng đối tượng, tư duy Hướng đối tượng. Dùng các mẫu thiết kế Hướng đối tượng làm cho code của mình hay hơn, chuyên nghiệp hơn.