Lạm bàn về thiết kế chương trình đào tạo KHMT (3)

  1. KHMT: bắt đầu như thế nào?

Như đã viết, một CT đào tạo KHMT có hai phần chính: phần lõi (core) là phần bắt buộc, và phần tự chọn (elective) để sinh viên cá nhân hóa theo sở thích (và đôi khi, nhu cầu thị trường).

Phần tự chọn, như đã phân tích, là một trong các thành tố trụ cột của các nguyên tắc 1, 2, và 4. Phần tự chọn làm CT “dẻo” hơn, cho sinh viên sự độc lập tự chủ trong hướng nghiệp. Mặt khác, phần này cũng làm phức tạp hóa vai trò của người thầy. Ở Mỹ thì mỗi sinh viên đại học đều có một giáo sư hướng dẫn (advisor) với vai trò chủ yếu là hướng dẫn sinh viên chọn các lớp elective sao cho phù hợp với khả năng, sở thích của sinh viên cùng với các yêu cầu hiện tại của công nghệ. Vai trò này không giống với vai trò hướng dẫn nghiên cứu sinh, dù rằng chúng có phần giao khác rỗng. Để làm tốt việc hướng nghiệp cho sinh viên, các giáo sư hướng dẫn và các cơ cấu tổ chức khác trong khoa, trong trường (như các chương trình internship, co-op, …) cần có sự phối hợp nhịp nhàng nhưng không được cứng nhắc. Làm tốt công việc này đòi hỏi người thầy phải tâm lý, có cái nhìn thoáng và rộng, và nếu có thể – có nhiều quan hệ với các công ty để giới thiệu sinh viên.

Quay trở lại với hai phần chính của CT. Tài liệu CS2001 có liệt kê rất cụ thể những đơn vị nào là đơn vị lõi của KHMT. Chú ý rằng “lõi” không đồng nghĩa với “sơ cấp”. Có nhiều đơn vị lõi không thể nào dạy ở các lớp bắt đầu của CT. Một CT KHMT ở Mỹ thường được chia thành 3 giai đoạn:

  • Giai đoạn giới thiệu: các lớp bắt đầu, giới thiệu ngành, thường học trong 2 năm đầu của CT 4 năm.
  • Giai đoạn chuyển tiếp: các lớp năm 2 và năm 3, thường dùng để đóng móng kiến thức nền.
  • Giai đoạn nâng cao: các lớp năm 4, dùng cho chuyên môn hóa.

Trục giai đoạn và trục lõi/tự chọn vuông góc với nhau. Giai đoạn nào cũng có thể có phần lõi và phần tự chọn. Tuy nhiên, thường thì phần tự chọn nằm ở giai đoạn chuyển tiếp và giai đoạn nâng cao để tránh phức tạp hóa quá mức cho sinh viên mới vào ngành.

Trong phần này của bài viết, ta đi sâu vào giai đoạn giới thiệu. Đây là giai đoạn có nhiều cách tiếp cận nhất và gây nhiều tranh cãi nhất trong giới chuyên môn. Trước khi bàn thảo cụ thể các tranh cãi này, ta hãy thống nhất xem mục tiêu của giai đoạn giới thiệu là gì? Theo quan điểm cá nhân tôi, giai đoạn này có các mục tiêu sau đây:

  • Mục tiêu 1: truyền tải cho sinh viên cái tinh thần của ngành KHMT, bào gồm các khía cạnh kỹ thuật, khoa học, xã hội, và lịch sử của KHMT
  • Mục tiêu 2: làm bộ lọc, loại bớt khỏi CT các sinh viên vốn không thích hợp cho việc học KHMT
  • Mục tiêu 3: chuẩn bị kiến thức cho sinh viên qua giai đoạn chuyển tiếp

Bàn thêm một chút về mục tiêu số 2. Không phải ai cũng có khả năng làm một kỹ sư/khoa học gia máy tính, tương tự như không phải ai cũng có khả năng là nhà văn, nhà toán học, kiến trúc sư, v. v. Có lẽ chính xác hơn thì phải nói là “không phải ai cũng có thể viết văn tốt, giải toán khó, và thiết kế giỏi”. Điểm này khá tinh tế, tôi không muốn viết quá nhiều, để các bạn thảo luận thiêm thì có lẽ hay hơn.

Xin đơn giản hóa một cực của mệnh đề này bằng: “không phải ai cứ học mãi rồi sẽ thành một lập trình viên khá”. Đào tạo những người vốn không thể là lập trình viên tốt sẽ có các hậu quả khó chịu: phần mềm viết đầy bugs, chạy sai thiết kế, hoàn tất chậm, v.v. (Các lập trình viên tốt có thể sẽ nói: chính bọn lập trình viên dỏm làm chúng tôi có nhiều việc để làm J, điều này có thể không xa sự thật, nhưng không phải là mục tiêu của CT đào tạo.) Viết các chương trình tốt thật sự là một nghệ thuật! Và dĩ nhiên không phải ai cũng làm nghệ sĩ được.

Hiện nay ở Mỹ có 6 phương pháp chính để thiết kết giai đoạn giới thiệu của CT:

  1. Ngôn ngữ thủ tục trước (imperative first). (Chú thích: tôi không rõ dịch “imperative language” thành “ngôn ngữ thủ tục” có chính xác không, xin góp ý. Đây là các ngôn ngữ như kiểu Pascal, C, …)
  2. Ngôn ngữ hướng đối tượng trước (objects first).
  3. Ngôn ngữ hàm trước (functional first).
  4. Giới thiệu chiều rộng trước (breadth first).
  5. Giải thuật trước (algorithms first).
  6. Phần cứng trước (hardware first).

Người ta đã tranh luận rất nhiều về việc có nên dạy lập trình trong lớp đầu tiên của KHMT không, và khi bắt đầu dạy lập trình thì chọn cái nào trong ba phương pháp 1, 2, 3.

Dạy lập trình trước có nhiều lợi điểm, bao gồm:

  • Lập trình là một kỹ năng mà bất kỳ sinh viên KHMT nào cũng phải học, phù hợp với mục tiêu 3.
  • Trong một số trường hợp, khó giới thiệu các đề tài bề rộng của KHMT nếu sinh viên không biết gì về lập trình.
  • Dạy lập trình trước thì các sinh viên không có khả năng lập trình sẽ chuyển ngành khác, đỡ tốn thời gian của họ, phù hợp với mục tiêu 2; Nếu không dạy lập trình, để sang một, hai năm sau, sinh viên nào không có khả năng lập trình sẽ bị mất một năm để khám phá ra KHMT không phải dành cho họ.

Ngược lại, lập trình trước cũng có các khuyết điểm, bao gồm:

  • Nó làm cho người mới học bị “dội”, tưởng rằng KHMT chỉ có lập trình, không truyền tải được cái “thần” của ngành như mục tiêu 1 yêu cầu. Điểm này tương tự như môn giải tích (calculus) trong toán học. Giải tích là công cụ rất quan trọng, nhưng dạy giải tích từ đầu có thể làm chán các sinh viên vốn thích có cái nhìn phóng khoáng hơn về môn Toán.
  • Về mặt kỹ thuật, dạy lập trình rất dễ làm sinh viên bị vướng víu bởi các lỗi cú pháp, sa lầy vào phần cơ của một ngôn ngữ nào đó.
  • Có thể làm sinh viên nghĩ rằng lập trình là cách duy nhất để giải quyết các vấn đề thực tế bằng máy tính. Điều này đặc biệt quan trọng cho các sinh viên không phải chuyên ngành KHMT, chỉ lấy một lớp giới thiệu KHMT để biết nó là gì.

Giới thiệu chiều rộng trước thì phục vụ mục tiêu 1 tốt, nhưng không phục vụ mục tiêu 2 và 3 tốt bằng. Các phương pháp “thuật toán trước” và “phần cứng trước” cũng có các giới hạn và lợi ích của chúng, tuy nhiên tôi không thích chúng nên không bàn thêm.

Tài liệu CS2001 khuyên rằng ta nên có 3 lớp cho giai đoạn khởi đầu, trong đó có một lớp giới thiệu bề rộng, và hai lớp lập trình. Ngoài ra, cần phải yêu cầu sinh viên học một lớp toán rời rạc trong năm đầu tiên. Tôi hoàn toàn đồng ý với lời khuyên này.

Lần tới tôi sẽ thảo luận 2 câu hỏi: (1) dạy gì trong lớp giới thiệu bề rộng, và (2) dùng phương pháp nào (1, 2, 3) cho hai lớp lập trình? Dĩ nhiên, câu trả lời cho hai câu hỏi này phải phù hợp với ba mục tiêu kể trên của giai đoạn giới thiệu.

Chủ đề : Giáo dục. Bookmark the permalink. Trackbacks are closed, but you can post a comment.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>