Học lập trình thế nào?
Cần có 9 điều tâm niệm cho mọi cấp độ lập trình dưới đây. Quan điểm chung: Thật là dễ, ai cũng học được. Nhưng giỏi là nghệ thuật, luôn có những đỉnh cao cần vươn tới.
1. Bài giảng đầu tiên về lập trình rất quan trọng. Mỗi ngành, mỗi bộ môn đều có cái "thần" của nó. Nắm được cái "thần" học sẽ rất dễ, nắm sai mất nhiều công mà vẫn không tiến lên được, có khi càng nhồi nhét càng ngu. Ở Việt Nam, các thầy thường không có kinh nghiệm lập trình, học qua sách vở đi dạy ngay, đề tài nghiên cứu để thành danh lại ở những kỹ năng khác. Một số thầy lại chỉ có kinh nghiệm hạn chế, chưa có kinh nghiệm trong những bài toán lập trình lớn và phức tạp, thấy cây mà không thấy rừng, chỉ thấy khó khăn. Do đó nhìn chung, đa số học sinh đều sợ lập trình, không biết cách tự học. Một số biết một vài thủ thuật, nhưng không tiến lên được, có người 2,3 năm mới thấy, có người 5 năm, có người 10 năm sẽ thấy không tiến lên được nữa, đều biến thành rác thải nhân lực, chỉ có một con đường làm lãnh đạo hay quản lý,(sẽ lợi cho bản thân và phá xã hội nhiều hơn :-))
2. Trước tiên, nguyên tắc của lập trình không có gì khó, chỉ cần tư duy đúng cách để nói cho máy hiểu và thực hiện, muốn vậy phải nắm được năng lực của máy. Tất nhiên nắm được kiến trúc máy tính thì học lập trình sẽ rất tốt, nhưng đợi học xong tinh túy của môn này thì quá lâu, mà biết đâu lúc đó phương pháp tư duy và ý thích lại thành "nhà kiến trúc máy tính". Vì vậy, bước đầu chỉ cần nắm được ba nguyên lý đơn giản. Một là tổ chức bộ nhớ, lưu giữ dữ liệu: trước hết khái niệm địa chỉ, register, cache, RAM, đĩa cứng. Hai là xử lý vòng lặp. Ba là điều kiện, if... then....
Khoan hay để ý tới cú pháp lập trình. Mọi việc trên đời có thể thực hiện nhờ 3 nguyên lý này đều có thể lập trình. Tất nhiên trừ các thao tác tâm linh, liên tưởng, sáng tạo,... đều có thể lập trình. Không loại trừ liên tưởng sáng tạo, sẽ là rất nhiều dữ liệu và nhiều thao tác xử lý (tuy chưa chứng minh được) và cũng có thể tâm linh cũng là thao tác của một siêu máy tính nắm ngoài 3 vấn đề trên.
3. Như vậy lập trình trước hết là 3 vấn đề: lưu trữ biểu diễn số liệu (trong máy tính), (dùng năng lực của máy tính) xử lý dữ liệu, và hiện thị dữ liệu (trên máy tính). Ngược với cách dạy bottom up và chán ngắt hiện nay với các bài toán vừa hiển nhiên vừa vô bổ kiểu như nhân hai ma trận,...., bước đầu nên rèn luyện cách phân một bài toán có vẻ không liên quan gì tới số liệu nhưng phải xử lý cả 3 vấn đề trên. Thí dụ cho 2 tam giác hay hai vòng tròn bất kỳ, tô màu phần giao của chúng bằng màu vàng trên màn hình máy tính.
3. Với trình độ cao hơn 3 vấn đề trên được chuyên môn hóa thành 3 yêu cầu tối thiểu với lập trình viên: xử lý chuỗi, cơ sở dữ liệu và giao diện đồ họa. Trong 3 tháng luyện 3 kỹ năng này đủ kỹ năng tối thiểu để làm việc tại bất cứ công ty nào. Tuy nhiên, không phải kỹ sư CNTT nào cũng "sạch nước cản" 3 kỹ năng này. Mặc dù tôi nghĩ có thể dạy sinh viên khoa ngữ văn cũng làm được 3 kỹ năng này bằng Python, thậm chí Java không khó khăn trong các bài toán của họ.
4. 3 kỹ năng tối thiểu này hoàn toàn có thể thực hiện ở trình độ cao nhất không ngoài 3 thao tác ở mục 2 (biểu diễn dữ liệu (dùng biến), vòng lặp và điều kiện). Như vậy thực tế lập trình chỉ là thành thạo 3 thao tác trong 3 kỹ năng trên mà thôi. Có khó không? Không hề khó, cứ làm nhiều khắc nhanh và giỏi.
5. Điểm khó nhất là gì? Khó nhất của viết chương trình là thực hiện đủ 3 yêu cầu: a) Đủ chức năng (tuân thủ, xử lý chính) b) Mạnh mẽ (hiệu năng, xử lý ngoại lệ) c) Quản lý (dễ đọc, tổ chức, sử dụng lại). Thực tế đa số lập trình viên chỉ biết a). Biết được b) ngày nay đã có thể làm trưởng dự án. Rất hiếm người biết c). Nhưng nếu chú trọng luyện từ đầu không hề khó, thậm chí hiển nhiên. Có điều không có thầy nào dạy, trong môi trường làm việc cũng không ai biết nên không thành kỷ luật. Do đó lập trình viên Việt Nam toàn học lỏm lẫn nhau, không khá được.
6. Cuối cùng lập trình có thể ổn, nhưng ứng dụng vẫn không ai dùng được. Nếu chỉ giỏi lập trình thuần túy chỉ 2-3 năm là hết cái để học, không có gì lý thú. Đó là cách đào tạo giết nhân tính, giết lòng yêu nghề, sáng tạo của lập trình viên. Đa số lập trình viên thấy nghề của mình là bổ củi, máy móc, nặng nề, khó nhọc và chán ngắt. Khó nhọc là vì chán. Thực ra không nghề gì dễ học bằng lập trình. Trong thực tế: lập trình viên giỏi sau khi thành thao kỹ năng, sẽ thấy rằng khó nhất là việc a) Phân tích nghiệp vụ b) Thiết kế chức năng c) Thiết kế hệ thống. Các khâu này năng lực trình bày, viết, nghe là quan trọng. Đặc biệt phân tích nghiệp vụ phụ thuộc vào văn hóa, hiểu biết, tri thức, lương năng. Rèn luyện năng lực này không bao giờ có điểm dừng. Nên đưa ra các bài tập và các ví dụ về phân tích nghiệp vụ để gây cảm hứng từ sớm.
7. Phải nói đến các công cụ: IDE (môi trường phát triển), UML (công cụ thiết kế), SVC (quản trị code), debugger (tìm lỗi). Quan trọng nhất là việc dùng debugger để đọc code của người khác, hoàn thiện kỹ năng viết code của mình và cải tiến code. Thành thạo làm chủ được debugger có nghĩa là biến thành pháp sư hô mưa gọi gió được trong ngành lập trình.
8. Cuối cùng, mỗi lập trình viên dù ở ngành nào, nhưng muốn đi xa đều nên nếm trải kinh nghiệm lập trình nhúng, lập trình mobile, lập trình hệ điều hành, lập trình socket (networking) và GUI. Lập trình nhúng cho lập trình viên ý thức tối ưu và tiết kiệm bộ nhớ. Lập trình mobile là khuyến khích sáng kiến, lập trình. Lập trình socket là để hiểu các giao thức. Lập trình GUI để lập trình viên tư duy hướng người dùng. Điều quan trọng là trong môn lập trình đừng coi đây là các nội dung chính, mà nên coi như các bài tập thực hành, cốt lấy kinh nghiệm không cần nhớ và nhồi sọ.
9. Lời khuyên: lập trình viên nên dành ngày 15-30p để đọc thêm về công nghệ mới. Đọc bất cứ cái gì. Sau đó ghi lại chừng 5 câu về điều đã đọc. Ghi bất cứ cái gì và thế nào. Gạch đầu dòng hoặc vẽ sơ đồ cũng được (càng tốt). Một năm sẽ có chừng 1500 điều thông minh. Có được 3000-5000 điều thông minh sẽ "mặt mày sáng sủa, nói chuyện dễ nghe, cuộc đời đầy tươi sáng". Khi nào bạn có được 5000 câu ghi chép thông minh mà thấy đời chưa tươi sáng, xin mời đến gặp tôi, ta sẽ nói chuyện tiếp.
Cần có 9 điều tâm niệm cho mọi cấp độ lập trình dưới đây. Quan điểm chung: Thật là dễ, ai cũng học được. Nhưng giỏi là nghệ thuật, luôn có những đỉnh cao cần vươn tới.
1. Bài giảng đầu tiên về lập trình rất quan trọng. Mỗi ngành, mỗi bộ môn đều có cái "thần" của nó. Nắm được cái "thần" học sẽ rất dễ, nắm sai mất nhiều công mà vẫn không tiến lên được, có khi càng nhồi nhét càng ngu. Ở Việt Nam, các thầy thường không có kinh nghiệm lập trình, học qua sách vở đi dạy ngay, đề tài nghiên cứu để thành danh lại ở những kỹ năng khác. Một số thầy lại chỉ có kinh nghiệm hạn chế, chưa có kinh nghiệm trong những bài toán lập trình lớn và phức tạp, thấy cây mà không thấy rừng, chỉ thấy khó khăn. Do đó nhìn chung, đa số học sinh đều sợ lập trình, không biết cách tự học. Một số biết một vài thủ thuật, nhưng không tiến lên được, có người 2,3 năm mới thấy, có người 5 năm, có người 10 năm sẽ thấy không tiến lên được nữa, đều biến thành rác thải nhân lực, chỉ có một con đường làm lãnh đạo hay quản lý,(sẽ lợi cho bản thân và phá xã hội nhiều hơn :-))
2. Trước tiên, nguyên tắc của lập trình không có gì khó, chỉ cần tư duy đúng cách để nói cho máy hiểu và thực hiện, muốn vậy phải nắm được năng lực của máy. Tất nhiên nắm được kiến trúc máy tính thì học lập trình sẽ rất tốt, nhưng đợi học xong tinh túy của môn này thì quá lâu, mà biết đâu lúc đó phương pháp tư duy và ý thích lại thành "nhà kiến trúc máy tính". Vì vậy, bước đầu chỉ cần nắm được ba nguyên lý đơn giản. Một là tổ chức bộ nhớ, lưu giữ dữ liệu: trước hết khái niệm địa chỉ, register, cache, RAM, đĩa cứng. Hai là xử lý vòng lặp. Ba là điều kiện, if... then....
Khoan hay để ý tới cú pháp lập trình. Mọi việc trên đời có thể thực hiện nhờ 3 nguyên lý này đều có thể lập trình. Tất nhiên trừ các thao tác tâm linh, liên tưởng, sáng tạo,... đều có thể lập trình. Không loại trừ liên tưởng sáng tạo, sẽ là rất nhiều dữ liệu và nhiều thao tác xử lý (tuy chưa chứng minh được) và cũng có thể tâm linh cũng là thao tác của một siêu máy tính nắm ngoài 3 vấn đề trên.
3. Như vậy lập trình trước hết là 3 vấn đề: lưu trữ biểu diễn số liệu (trong máy tính), (dùng năng lực của máy tính) xử lý dữ liệu, và hiện thị dữ liệu (trên máy tính). Ngược với cách dạy bottom up và chán ngắt hiện nay với các bài toán vừa hiển nhiên vừa vô bổ kiểu như nhân hai ma trận,...., bước đầu nên rèn luyện cách phân một bài toán có vẻ không liên quan gì tới số liệu nhưng phải xử lý cả 3 vấn đề trên. Thí dụ cho 2 tam giác hay hai vòng tròn bất kỳ, tô màu phần giao của chúng bằng màu vàng trên màn hình máy tính.
3. Với trình độ cao hơn 3 vấn đề trên được chuyên môn hóa thành 3 yêu cầu tối thiểu với lập trình viên: xử lý chuỗi, cơ sở dữ liệu và giao diện đồ họa. Trong 3 tháng luyện 3 kỹ năng này đủ kỹ năng tối thiểu để làm việc tại bất cứ công ty nào. Tuy nhiên, không phải kỹ sư CNTT nào cũng "sạch nước cản" 3 kỹ năng này. Mặc dù tôi nghĩ có thể dạy sinh viên khoa ngữ văn cũng làm được 3 kỹ năng này bằng Python, thậm chí Java không khó khăn trong các bài toán của họ.
4. 3 kỹ năng tối thiểu này hoàn toàn có thể thực hiện ở trình độ cao nhất không ngoài 3 thao tác ở mục 2 (biểu diễn dữ liệu (dùng biến), vòng lặp và điều kiện). Như vậy thực tế lập trình chỉ là thành thạo 3 thao tác trong 3 kỹ năng trên mà thôi. Có khó không? Không hề khó, cứ làm nhiều khắc nhanh và giỏi.
5. Điểm khó nhất là gì? Khó nhất của viết chương trình là thực hiện đủ 3 yêu cầu: a) Đủ chức năng (tuân thủ, xử lý chính) b) Mạnh mẽ (hiệu năng, xử lý ngoại lệ) c) Quản lý (dễ đọc, tổ chức, sử dụng lại). Thực tế đa số lập trình viên chỉ biết a). Biết được b) ngày nay đã có thể làm trưởng dự án. Rất hiếm người biết c). Nhưng nếu chú trọng luyện từ đầu không hề khó, thậm chí hiển nhiên. Có điều không có thầy nào dạy, trong môi trường làm việc cũng không ai biết nên không thành kỷ luật. Do đó lập trình viên Việt Nam toàn học lỏm lẫn nhau, không khá được.
6. Cuối cùng lập trình có thể ổn, nhưng ứng dụng vẫn không ai dùng được. Nếu chỉ giỏi lập trình thuần túy chỉ 2-3 năm là hết cái để học, không có gì lý thú. Đó là cách đào tạo giết nhân tính, giết lòng yêu nghề, sáng tạo của lập trình viên. Đa số lập trình viên thấy nghề của mình là bổ củi, máy móc, nặng nề, khó nhọc và chán ngắt. Khó nhọc là vì chán. Thực ra không nghề gì dễ học bằng lập trình. Trong thực tế: lập trình viên giỏi sau khi thành thao kỹ năng, sẽ thấy rằng khó nhất là việc a) Phân tích nghiệp vụ b) Thiết kế chức năng c) Thiết kế hệ thống. Các khâu này năng lực trình bày, viết, nghe là quan trọng. Đặc biệt phân tích nghiệp vụ phụ thuộc vào văn hóa, hiểu biết, tri thức, lương năng. Rèn luyện năng lực này không bao giờ có điểm dừng. Nên đưa ra các bài tập và các ví dụ về phân tích nghiệp vụ để gây cảm hứng từ sớm.
7. Phải nói đến các công cụ: IDE (môi trường phát triển), UML (công cụ thiết kế), SVC (quản trị code), debugger (tìm lỗi). Quan trọng nhất là việc dùng debugger để đọc code của người khác, hoàn thiện kỹ năng viết code của mình và cải tiến code. Thành thạo làm chủ được debugger có nghĩa là biến thành pháp sư hô mưa gọi gió được trong ngành lập trình.
8. Cuối cùng, mỗi lập trình viên dù ở ngành nào, nhưng muốn đi xa đều nên nếm trải kinh nghiệm lập trình nhúng, lập trình mobile, lập trình hệ điều hành, lập trình socket (networking) và GUI. Lập trình nhúng cho lập trình viên ý thức tối ưu và tiết kiệm bộ nhớ. Lập trình mobile là khuyến khích sáng kiến, lập trình. Lập trình socket là để hiểu các giao thức. Lập trình GUI để lập trình viên tư duy hướng người dùng. Điều quan trọng là trong môn lập trình đừng coi đây là các nội dung chính, mà nên coi như các bài tập thực hành, cốt lấy kinh nghiệm không cần nhớ và nhồi sọ.
9. Lời khuyên: lập trình viên nên dành ngày 15-30p để đọc thêm về công nghệ mới. Đọc bất cứ cái gì. Sau đó ghi lại chừng 5 câu về điều đã đọc. Ghi bất cứ cái gì và thế nào. Gạch đầu dòng hoặc vẽ sơ đồ cũng được (càng tốt). Một năm sẽ có chừng 1500 điều thông minh. Có được 3000-5000 điều thông minh sẽ "mặt mày sáng sủa, nói chuyện dễ nghe, cuộc đời đầy tươi sáng". Khi nào bạn có được 5000 câu ghi chép thông minh mà thấy đời chưa tươi sáng, xin mời đến gặp tôi, ta sẽ nói chuyện tiếp.
Nguyen Ai Viet
No comments:
Post a Comment