3/2/2025
Chào mừng các bạn đến với môn Lập trình nâng cao. Sau môn Nhập môn lập trình, các bạn đã có thời gian làm quen với việc sử dụng C++ để viết những chương trình nhỏ giải những bài toán nhỏ. Ở môn học này, các bạn sẽ học C++ kĩ hơn một chút, xây dựng các chương trình có quy mô hơn một chút, học tập với kĩ năng giải quyết bài toán, cài đặt thuật toán, và chiến lược tổ chức chương trình. Xuyên suốt các nội dụng của môn học, bạn sẽ áp dụng vào một bài tập lớn xây dựng một phần mềm game. Game đó có thể có giao diện đồ họa và xử lý thông minh tùy theo các kĩ năng và kiến thức mà bạn tích lũy được. Hãy thử tưởng tượng đến lúc bạn có thể mang game đó ra chơi cùng các bạn của mình - sản phẩm phần mềm đầu tiên của bạn! Cái đích đó chắc chắn rất hay, con đường tới đích với nhiều bạn có thể vất vả, nhưng có thể cũng hay không kém. Chúng tôi sẽ giúp các bạn trên con đường đó.
Các bạn chịu khó đọc kỹ toàn bộ nội dung dưới đây nhé. Hướng dẫn học, thái độ học, chatGPT ..., đó là các thông tin quan trọng cần thiết cho cả học kỳ.
Tài liệu học
Tất cả các nội dung cần thiết cho môn học đều được cung cấp tại trang web này: thông báo, tài liệu học từng tuần, gồm slide, video bài giảng, bài tập... Các bạn có nhiệm vụ chủ động xem clip bài giảng, tự học và làm bài tập. Xem chi tiết tại menu Tài liệu tham khảo và Lịch học.
Liên lạc và trao đổi
Các trao đổi theo chủ đề và các thắc mắc về nội dung học cũng như điểm, bài tập, project... sẽ được thực hiện tại diễn đàn Piazza, tại đây các bạn có thể hỏi và trả lời nặc danh hoặc có thể trao đổi riêng với giáo viên. Diễn đàn này sẽ thay thế hoàn toàn việc liên lạc qua email.
Các bạn có trong danh sách lớp đã được ghi danh tại Piazza, email mời kích hoạt tài khoản đã được gửi đến email vnu của bạn (chú ý xem thư mục spam). Các bạn chưa có trong danh sách lớp cũng có thể tự đăng ký tại link trên.
Thực hành
Phần mềm: Bạn có thể dùng Code::Block hoặc VSCode, tuy nhiên các hướng dẫn về setup thư viện cho game chỉ được cung cấp cho Code::Block.
Bên cạnh hệ thống bài thực hành tại server của trường, các bạn chủ động dùng thêm cả hệ thống bài tập tại Hackerrank (C++, Data structure và Algorithms). Các bạn chủ động tự thực hành theo lịch học và các bài tự thấy đã đủ kiến thức, một số chủ đề cụ thể như linked list sẽ được kê tại các tuần học lí thuyết tương ứng. (Bạn không phải làm các bài cần đến các cấu trúc dữ liệu và thuật toán chưa học). Việc thực hành chăm chỉ sẽ giúp rất nhiều cho thi cuối kì cũng như luyện tập kĩ năng lập trình.
Ghi nhớ: đừng dùng AI sinh code khi bạn còn chưa thành thạo lập trình. Có thể xác định thời điểm có thể bắt đầu dùng AI là khi bạn không gặp khó khăn với các bài cỡ Medium tại Hackerrank. Nếu bạn bắt đầu quá sớm, bạn sẽ bị phụ thuộc AI, không bao giờ có thể tự viết code, cũng không bao giờ có đủ năng lực để có thể dùng AI hiệu quả.
Giờ online
Nội dung chi tiết được chỉ định theo từng tuần. Toàn bộ tài liệu xem tại đây. Các bạn chủ động tự học theo lịch. Các buổi meeting tại MSTeam sẽ có thông báo cụ thể.
Bài tập lớn
Là project lập trình game với chủ đề tự chọn (có thể sử dụng thư viện đồ họa SDL 2.0. Các bạn suy nghĩ và đăng ký chủ đề game tại danh sách này
Thái độ học tập
Chủ động: Học là nhiệm vụ và quyền lợi của bạn. Bạn gặp khó khăn? hãy tìm cách giải quyết và nếu cần thì đề nghị giúp đỡ. Bạn có thắc mắc? hãy hỏi.
Trách nhiệm: Học là việc của bạn, không ai làm hộ được. Nếu bạn không cố gắng, không ai giúp được bạn. Nếu bạn không chủ động, không ai thúc được bạn. Nếu bạn vừa yếu lại vừa lười, bạn sẽ trượt. Hãy chăm học ngay từ tuần đầu tiên. Nếu để đến cuối kì mới học, bạn sẽ trượt.
Trung thực: Đừng chép bài của người khác. Tôi không định giảng đạo đức, trung trực chỉ đơn giản là một trong các tiêu chí đào tạo. Ở môn học này, chép bài và cho chép bài sẽ bị đánh trượt. Ở nhiều trường đại học, chép bài sẽ bị đuổi học. Ở nhiều nước, ăn cắp bản quyền sẽ bị ra tòa.
Nghi ngờ: Đừng cả tin, sách có thể sai, giáo viên có thể sai, AI có thể sai. Tất nhiên, bạn có thể sai. Cũng như bug trong phần mềm, tìm và sửa nó sớm chừng nào thì cái giá phải trả càng thấp. Trốn tránh càng lâu thì sẽ phải trả giá càng cao. Hiểu nhầm, ngộ nhận của bản thân có thể coi là bug trong kiến thức, bạn phát hiện ra chúng sớm chừng nào, tốt chừng đó cho bản thân. Hãy thắc mắc! Khi tìm thấy cái gì đó sai, hãy mừng vì bạn đã tiến bộ thêm một bước!
Học như chơi: Việc học nên thú vị và say mê như chơi vậy thì mới hiệu quả. Nếu bạn không thích lập trình thì có hai lý do có thể: (1) bạn bị hổng, bị tụt lại nên nản. (2) bạn thực sự không hợp với công việc của lập trình viên. Nếu lý do là (1) thì nên cố gắng thật cao một thời gian để lấp lỗ hổng, xem khi bạn thạo hơn thì bạn có thích hơn không. Nếu lý do là (2), hãy xác định cho rõ ràng, nếu thực sự đây không phải cái bạn muốn thì hãy vì bản thân mà chuyển ngành để theo đuổi cái mình muốn làm, càng sớm càng tốt!
Dũng cảm: Hãy hỏi khi không biết, hãy thắc mắc khi thấy có vấn đề. Đừng sợ người khác đánh giá! Tại sao? Thứ nhất, trên đời này có hàng tỷ người, bạn làm tốt đến đâu cũng vẫn sẽ có người cười, thôi cứ để họ cười cho vui, còn bạn thì tập trung giải quyết vấn đề của bạn. Thứ hai, có thể đặt câu hỏi nghĩa là tư duy đã khá hơn rất rất nhiều so với tình trạng không thể hỏi. Hãy tự hào khi đặt câu hỏi. "No question is stupid!"
Còn AI thì sao? nên dùng như thế nào?
Nếu bạn biết cách dùng, chatGPT sẽ là công cụ tuyệt vời giúp bạn tiến bộ nhanh. Nếu bạn không biết dùng, hoặc dựa dẫm quá nhiều vào nó, bạn sẽ tự biến mình thành bù nhìn rơm.
Hãy thử hình dung một người biết bấm máy tính điện tử nhưng không hiểu được ý nghĩa của các phép cộng trừ nhân chia và không tự giải được toán đố của cấp 1. Bạn sẽ giống như vậy nếu bạn bắt đầu gen code từ AI trước khi bạn thật sự có khả năng tự viết code và thật sự hiểu code.
Vậy nên dùng AI như thế nào để có hiệu quả tốt nhất?
Hỏi AI các câu "nghĩa là gì?" "tại sao?" "là gì?". Ví dụ "What are segmentation faults?".
Yêu cầu AI tạo cho bạn các câu hỏi để bạn tự kiểm tra kiến thức. Ví dụ "Give me ten questions on C++ pointers."
Đừng để AI viết code cho bạn, cho đến khi bạn tự tin mình đã thạo lập trình (xấp xỉ việc coi kỳ thi cuối kỳ môn học này là việc đơn giản hoặc không gặp khó khăn khi làm các bài Medium tại Hackerrank).
Ghi nhớ điều này: (1) AI có thể sai. Hãy kiểm chứng các câu trả lời của nó bằng cách chạy thử code, tra cứu tài liệu. (2) Bạn hoàn toàn không được dùng AI khi thi cuối kì.
Chúc các bạn một học kỳ hiệu quả và vui vẻ!