- Dạy gì trong các lớp đầu tiên của KHMT?
Như đã viết, ba phương pháp dạy lập trình cơ bản hiện nay là (1) ngôn ngữ thủ tục trước (C/Pascal/Basic/…), (2) ngôn ngữ hướng đối tượng trước (C++/Java/Smalltalk/…), và (3) ngôn ngữ hàm trước (Scheme/Lisp). Việc chọn lựa phương pháp nào trong ba phương pháp này nên đồng nhất với 3 mục tiêu đã liệt kê, trong đó cá nhân tôi cho rằng mục tiêu số 1 là quan trọng nhất: truyền tải cho sinh viên cái thần của KHMT. Chữ “thần” này rất rộng, và có lẽ mỗi cá nhân tiếp xúc với KHMT sẽ có cảm nhận và cách hiểu khác nhau về nó.
Đối với sinh viên mới bước vào ngành, ta cần phát triển cho họ các mô hình nhận thức (cognitive models) trong não về các khái niệm cơ bản của KHMT. Thay vì định nghĩa cụ thể, ta xét một vài ví dụ về cảm nhận cá nhân với KHMT:
- Trong bài chung qui chỉ tại Cantor, tôi có viết sơ bộ về ý nghĩa của khái niệm tính toán (computation), một trong những đóng góp sâu sắc nhất của KHMT cho kho tàng tri thức của nhân loại. Tính toán không bị ràng buộc bởi một mô hình cụ thể nào đó (như mô hình máy Turing, mô hình RAM/Bus/CPU, …). Không ít các nhà khoa học tin rằng các quá trình sinh học và vật lý là các quá trình tính toán, thiên nhiên có các thuật toán của nó. Không phải ngẫu nhiên mà KHMT đang vươn cánh tay non trẻ của nó sang sinh học, vật lý, kinh tế, toán học, với các phân ngành phát triển cực nhanh những năm gần đây như computational biology, computational physics, quantum computing, computational game theory, computational chemistry, computational neuroscience, … Giải Nobel Kinh Tế 2005 được trao cho các game theorists, khoảng 30/40 năm nữa sẽ có Nobel kinh tế cho một computational game theorist, tôi tin chắc là như thế! Còn Nobel vật lý liên quan đến tính toán có lẽ sẽ đến sớm hơn nữa. Chú ý rằng các phân ngành kể trên không đơn thuần là ứng dụng máy tính vào một khoa học khác. Rất nhiều các quá trình của tự nhiên về cơ bản là quá trình tính toán, và chúng ta mới chỉ bắt đầu khám phá các quá trình tính toán trong tự nhiên.
- KHMT không phải là Java, C++, hay lập trình web. Thật đáng buồn khi một sinh viên máy tính nghĩ về ngành máy tính bằng ánh mắt của một lập trình viên. Lập trình có thể là công việc ta phải làm hàng ngày, nhưng mỗi chúng ta cần phải hiểu rằng lập trình chỉ là một phương pháp bổ củi để hiện thực hóa các ý tưởng thiết kế tuyệt đẹp, các thuật toán sâu sắc, hay các hacks thông minh. Bổ củi và khắc gỗ hiển nhiên là khác nhau.
- Cũng thật đáng buồn nếu tầm nhìn của dân máy tính bị gói gọn từ Bill Gates sang Steve Jobs, từ IBM đến Oracle, hay từ search engines đến spreadsheets. Khi nghĩ đến Vật Lý ta không chỉ liên tưởng đến CEO của các công ty làm máy tăng tốc hạt, các xưởng sản xuất bom nguyên tử, hay làm vật liệu bán dẫn. KHMT còn rất trẻ so với Vật Lý, nhưng KHMT cũng có một câu chuyện cực kỳ truyền cảm để kể. Ảnh hưởng về mặt khái niệm của KHMT đến xã hội và các ngành khoa học khác nhiều không kể xiết.
Trở lại với ba kiểu dạy lập trình. Kiểu 1 và 2 có ưu điểm là các ngôn ngữ C/C++/Java được dùng rất phổ thông trong thực tế. Lập trình hướng đối tượng minh họa rất tốt nhiều khái niệm quan trọng như data abstraction, information hiding, inheritance, vân vân. Khuyết điểm lớn nhất của dạy kiểu 1 hay 2 là sinh viên thường phải lọ mọ trong mớ hỗn độn các cú pháp, các hàm, lớp, cấu trúc phức tạp của các ngôn ngữ này. Sự phức tạp không cần thiết của các cấu trúc cơ bản làm giảm đáng kể sự nhạy cảm về tầm quan trọng của ý tưởng. Thường thì các chương trình chập chững trong C/C++/Java được viết theo kiểu chắp vá, ý tưởng về thuật toán rất lộn xộn là vì lý do này.
Cá nhân tôi cho rằng kiểu 3: dạy ngôn ngữ hàm trước – đặc biệt là Scheme – là phương pháp hay nhất hiện có. Quyển Structure and Interpretation of Computer Program của Hal Abelson và Jerry/Julie Sussman là một trong những quyển sách cơ bản về KHMT hay nhất mà tôi biết. (Chú ý rằng quyển này bây giờ miễn phí trên web!) Các đề tài sâu sắc của KHMT được minh họa bằng Scheme, ngôn ngữ rất đơn giản về cú pháp nhưng rất hùng mạnh về khả năng biểu cảm các khái niệm. Khuyết điểm lớn nhất của phương pháp dạy Scheme trước là nó “thích” các sinh viên thông minh hơn.
Các phân tích ở trên cũng được áp dụng cho việc xác định các đề tài dạy trong lớp giới thiệu ngành. Có lẽ không cần phải viết gì thêm.

10 Comments
Lần đâu tiên tôi học lập trình bằng Lisp (tương tự như Scheme) thấy rất khoái, nhất là khi đọc những đoạn code viết bằng Lisp rất đẹp của thầy advisor và vài hủ lisp khác. Đúng là “coding” theo đúng nghĩa của từ này. Rất tiếc tôi không được học nó hồi undergrad. C++ cũng hay, mấy cái trò object-oriented cũng phức tạp ra trò. Java có lẽ là ngôn ngữ xấu xí, luộm thuộm nhất, mặc dù popular.
Với những người thích test với những con số và dữ liệu, nên làm quen với matlab để nghịch ngợm với những thuật toán thông minh. Lập trình bằng matlab cũng có cái thú là đôi khi chỉ một vài dòng lệnh với ma trận đa chiều có thể mô tỏa được cả một thuật toán khá phức tạp. Cũng tiếc là tôi được không biết matlab cho đến năm cuối của undergrad.
Người viết: XLN
Co bac nao dung R o day khong? R la mot ngon ngu pho bien cua cac bac lam thong ke. Thiet ke cua R thi lai co nhieu diem giong nhu Lisp/Scheme. http://www.r-project.org/
R tuong doi la kho dung (mostly command-line-oriented), nen nhung nguoi lam thong ke “choi boi” thuong tranh va chon e.g. Matlab Stat Toolbox/SPSS/SAS. Khi nao roi (e.g. sabbatical), toi dang dinh viet mot cai Eclipse plugin cho R. Eclipse la mot moi truong lam computing kha la tot, co the lam Java/C(++)/Python/Scheme/Latex, etc. Tu truoc den nay toi dung emacs rat nhieu, nhung tu khi chuyen sang Eclipse thi bi “cam hoa” luon va khong quay lai nua (chu nhung khi phai lam Lisp).
Toi dong y voi bac NQH la quyen Abelson/Sussman rat hay.
Người viết: Vu Ha
Em không có biết R, nhưng mà em biết Eclipse. Đúng là dùng Eclipse sướng mê mẩn, chạy nhanh hơn MS Visual Studio, mà lại free. Em hay dùng để viết Perl/C++/Java, chưa thử Latex bao giờ cả.
Người viết: Bach Hung nguyen
Peter Denning và Andrew McGettrick vừa có bài mới trong tờ CACM về chương trình đào tạo KHMT. Ý chính là cần thêm “innovation” vào lõi của chương trình đào tạo.
Người viết: NQH
Da.o này các công ty Intel, AMD, Nvidia tài trợ cho việc thay đổi chương trình dạy ở undergrad (bỏ sequence , dạy parallel , dạy funstion programming)
bên intel
http://software.intel.com/en-us/blogs/2011/05/18/the-first-thing-we-do-lets-kill-all-the-object-oriented-programming/
http://software.intel.com/en-us/videos/stop-teaching-sequential-programming-forum-at-super-computing-08-education-forum-pt1/
http://existentialtype.wordpress.com/2011/03/15/teaching-fp-to-freshmen/
nvidia tài trợ một loạt các lớp dạy parallel-cuda (penn, stanford, cmu, mit…)
anh Hưng comment gì vụ này không
Tôi hoàn toàn đồng ý với xu hướng này!
Theo tôi ngôn ngữ lập trình đẹp nhất là ngôn ngữ gần với ngôn ngữ tự nhiên nhất. Hơn nữa nếu sinh viên học ngôn ngữ lập trình song song, hay hàm mà không nắm rõ nguyên tắc cơ bản sử lý tuần tự hay thủ tục của CPU có thể sẽ là một thiếu sót. Theo tôi hiểu thì các chương trình giảng dạy mới đề cặp ở trên không phải là bỏ OOP mà là chuyển OOP sang các năm sau thay vì năm nhất.
Em thấy có 1 thực tế là chương trình ĐH ở VN mình nói chung có nhiều vấn đề. Không biết anh Hưng và các GS Việt ở nước ngoài đã có hoạt động gì để góp ý cải thiện chưa?
Nhiều người bảo do lý do chính trị nên khó để thay đổi cái gì đó ở ĐH. Em nghĩ thực ra vẫn có thể cải thiện được. Ví dụ về chuyện học chính trị, cứ chấp nhận SV sẽ vẫn học mấy môn chính trị đó đi, chẳng sao cả, cùng lắm thì mất thêm 1 kỳ nữa, nghĩa là thay vì học 4 năm thì học 4 năm rưỡi. Bây giờ nhiều trường vẫn 5 năm, 4 năm rưỡi chả sao cả. Mà thực ra cũng ko cần đến 4 năm rưỡi. Với kiểu học tín chỉ thì SV hoàn toàn có thể đăng ký mỗi kỳ 1 môn chính trị thêm vào chương trình chính, sau 4 kỳ chẳng hạn thì cũng học hết thôi. Học mấy môn đó, theo em nhớ, chẳng có gì mất thời gian cả, chẳng có gì khó khăn cả. Đến buổi thì đi nghe, ko thích nghe thì ngồi đó thư giãn cho vui cũng được, cả năm chả cần đọc gì, cuối năm thì ngồi học cho thuộc mấy chục câu trong đề cương, đi thi thì nhớ lại mà chép cho đủ ý là dc, kiếm 5 điểm mà qua không có gì là khó cả. Nói chung hầu như ko hề mất thêm thời gian bao nhiêu, nên việc đăng ký thêm mỗi kỳ 1 môn chính trị là OK.
Em nghĩ những người như anh Hưng, đã từng theo học ĐH ở VN, giờ có kinh nghiệm về hệ thống ĐH ở nước ngoài, rất nên góp ý cho Bộ GD để họ triển khai cho các ĐH các vấn đề có thể thay đổi. Rõ ràng anh sẽ có cái nhìn tốt hơn hẳn những người chỉ làm việc ở trong nước. Anh cũng có lợi thế hơn những người đi du học từ sớm, không có kinh nghiệm, không “va vấp” với thực tế về hệ thống giáo dục, cả phổ thông và đặc biệt là ĐH ở VN. Nếu những người như anh mà tập hợp lại được thành 1 đội ngũ cố vấn thì tốt quá, ko biết Bộ GD họ đã nghĩ đến việc này chưa?
Tôi nghĩ về mặt lý tưởng thì tốt nhất là bộ GD nên trả quyền quyết định khung chương trình về cho từng khoa. Do nhân vật lực khác nhau, chẳng thể nào có một chương trình cho tất cả. Buffalo không thể dạy như MIT. Nếu có một số môn bắt buộc từ bộ, thì phải ít thôi.
Về cơ chế quan liêu khi thiết kế thang chương trình, tình cờ là tối hôm qua tôi mới vừa được nghe kể. Bộ giao cho một nhóm các giáo sư đầu ngành thiết kế khung chương trình, do GS X làm chủ xị. Các GS khác đếch góp ý gì cả, đến lúc gần “nghiệm thu”, GS X buộc phải tự mình viết nhí nhoáy một cái khung nộp lên. Xong. Chuyện có thật 100%.
Em nghĩ phần lớn các trường sẽ không đủ tầm nhìn để thiết kế một chương trình tốt nếu không có sự tư vấn của một đội ngũ cố vấn có uy tín (như em nói ở trên). Mà đội ngũ ấy thì chỉ có thể làm việc với Bộ và tư vấn cho Bộ để rồi Bộ triển khai cho các trường chứ đội ngũ này không thể làm việc với từng trường được (vì điều kiện nhân lực, thời gian).
Nhưng mà nghĩ lại thì thấy cũng khó.