- Khóa học "Mathematics for Computer Science" của MIT OpenCourseWare cung cấp nền tảng toán học thiết yếu cho khoa học máy tính và kỹ thuật phần mềm
- Nội dung bao quát tổ hợp, lý thuyết đồ thị, toán rời rạc và tập trung vào việc nâng cao năng lực giải quyết vấn đề trong khoa học máy tính
- Tài liệu khóa học cung cấp đầy đủ ghi chú bài giảng, bài tập thực hành, lời giải, rất hữu ích cho việc học ứng dụng thực tế
- Khóa học này có thể áp dụng cho cả công việc thực tiễn lẫn nghiên cứu như thiết kế thuật toán, lý thuyết tính toán, kiểm chứng lỗi
- Mở miễn phí để bất kỳ ai cũng có thể truy cập, dựa trên chương trình chuẩn của MIT
Tổng quan khóa học
- "Mathematics for Computer Science" của MIT OpenCourseWare là khóa toán cốt lõi dành cho sinh viên khoa học máy tính và kỹ thuật điện
- Các nội dung chính gồm tổ hợp, lý thuyết đồ thị, cấu trúc rời rạc, xác suất, cung cấp nền tảng cho cơ sở logic của chương trình và phân tích thuật toán
Các lĩnh vực học tập chính
- Toán rời rạc: nhấn mạnh các cấu trúc toán học nền tảng của chương trình như số, hàm, tập hợp, logic
- Tổ hợp và xác suất: giúp hiểu hiệu quả, tính ngẫu nhiên, phân bố dữ liệu của thuật toán
- Lý thuyết đồ thị: đóng vai trò quan trọng trong cấu trúc dữ liệu và biểu diễn mạng, tìm đường đi và các bài toán tối ưu hóa
- Chứng minh tính đúng đắn của thuật toán: sử dụng suy luận logic và quy nạp toán học để bảo đảm độ tin cậy của chương trình
Tài liệu học tập
- Ghi chú bài giảng: được tổ chức có hệ thống, tập trung vào giải thích lý thuyết và ví dụ
- Bài tập thực hành: bao gồm các bài toán với nhiều mức độ khó khác nhau để nâng cao khả năng vận dụng khái niệm theo từng chương
- Lời giải: cung cấp phần giải thích để người học có thể tự giải rồi kiểm chứng kết quả
Ứng dụng và giá trị
- Đặt nền tảng cơ bản cho các lĩnh vực khoa học máy tính, thiết kế hệ thống, trí tuệ nhân tạo, kỹ thuật phần mềm
- Với truy cập miễn phí, mang đến cơ hội học tập rộng rãi cho người mới học lập trình, kỹ sư đang làm việc và nhà nghiên cứu
- Được xây dựng theo chương trình chuẩn của MIT, mang lại trải nghiệm học tập theo tiêu chuẩn toàn cầu
Ghi chú bổ sung
- Khi sử dụng các trang web bên ngoài, điều khoản sử dụng và giấy phép của các trang đó có thể khác với MIT OCW
- MIT OCW không chịu trách nhiệm đối với nội dung trên các trang web bên ngoài
1 bình luận
Ý kiến trên Hacker News
Thật đáng kinh ngạc khi bất kỳ ai cũng có thể học miễn phí các bài giảng đẳng cấp đại học hàng đầu thế giới, đặc biệt là một khóa toán chuyên sâu dài 31 giờ. Nhưng các chuỗi bài giảng dài thì lúc nào cũng rất khó theo hết. Tôi thường đi tìm các video ngắn chỉ giải thích nhanh khái niệm, nhưng rồi chúng lại thiếu chiều sâu và cuối cùng tôi cũng hay bỏ dở giữa chừng. Có lẽ động lực khi thật sự đăng ký học ở trường đại học là điều quan trọng. Không biết có ai từng tự mình hoàn thành trọn vẹn những khóa như thế này không, và mọi người duy trì sự đều đặn cùng khả năng tự quản lý như thế nào. Với các nền tảng học như Coursera, KhanAcademy, v.v., nhờ có deadline nên cũng tạo được một mức độ ép buộc nhất định, thành ra dễ có động lực hơn. Có lẽ tôi quen với kiểu học xoay quanh hạn chót. Nếu ai đang tìm các bài giảng ngắn vì khó tập trung hơn (dù có thể kém chiều sâu), tôi khuyên nên xem playlist YouTube của Professor Dave Explains
Tôi thích toán và đã học đến tận bậc tiến sĩ, nên cũng thuộc kiểu có khả năng tự quản lý khá tốt, nhưng ban đầu học chỉ bằng video bài giảng vẫn không hề dễ. Tôi cảm thấy phải đạt đến một ngưỡng kiến thức nền nhất định thì mới có thể tự học chủ động qua video bài giảng. Yếu tố quan trọng là tham gia chương trình cùng bạn đồng hành, và hơn hết là có một người cố vấn giàu kinh nghiệm. Tôi nghĩ rất khó để vươn tới mức có thể tự học toán nếu không có mentor. Nhất định cần ai đó sửa sai và chỉ đường cho mình. Có thể xem nó giống như giáo viên piano vậy. Một điều quan trọng khác là thời gian đầu tư. Nếu thật sự muốn nắm vững đại số tuyến tính, giải tích, vi tích phân, v.v. thì phải dành hơn 10 giờ mỗi tuần trong suốt một năm. Nếu chỉ bỏ ra có 2 giờ thì rốt cuộc chỉ còn lại một mức hiểu biết hời hợt, thiếu chiều sâu
Về câu hỏi liệu nguồn động lực có thật sự đến từ việc đăng ký học ở đại học hay không, tôi nghĩ trong đa số trường hợp, yếu tố đó là khoản chênh lệch thu nhập sau khi tốt nghiệp. Không giống sinh viên MIT thật sự, chỉ học khóa online sẽ không đưa bạn đến gần tấm bằng MIT, nên động lực sẽ yếu hơn. Nếu bạn quen với cách học theo deadline, thì một cách là tự đặt hình phạt cho bản thân hoặc cam kết với ai đó, để nếu không hoàn thành đến cùng thì sẽ phải trả giá. Tôi thực sự đã từng tự mình học xong cả khóa lẫn sách, và động lực của tôi là sự tò mò thuần túy, cùng với việc tôi không thích phải thừa nhận mình không biết, hay cư xử như thể mình biết dù thực ra không biết
Thời đại học, khoảng thời gian tôi học các môn CS nâng cao cùng giáo sư và bạn học là giai đoạn vui nhất trong đời. Sau khi tốt nghiệp thì bị công việc cuốn đi, và giờ không còn các bài tập được giáo sư chấm, kỳ thi hay phần hỏi đáp nữa nên việc học kiến thức mới trở nên khó hơn rất nhiều. Tôi đang nghĩ đến chuyện đăng ký một trường đại học online cho vui, và muốn biết liệu có chương trình nào vừa online, vừa rẻ, có các môn CS/ML nâng cao, lại cho phép tương tác thực sự với giảng viên hay không. Nếu ai có gợi ý thì tôi rất cảm kích
Khóa học này đã giúp ích rất nhiều cho dự án hiện tại của tôi (trình xem trước G-code và hệ thống mô hình hóa 3D cho OpenPythonSCAD). Tài liệu bổ sung tôi khuyên dùng là SICP(Structure and Interpretation of Computer Programs), Euclid's Elements online, Motion Mountain, và cả LibriVox, Project Gutenberg. Tôi cũng nhớ lại thời nhỏ đã kiếm sách để đọc qua đủ kiểu kênh, từ một giá sách nhỏ ở vùng quê, tháp sách trong nhà tù, cho đến trung tâm bách hóa của thị trấn cách 26 dặm
Khi theo khóa này, tôi thấy rất khó để hoàn thành một bài giảng trong một lần vì mình thiếu sự rèn luyện và thực hành toán học. Tôi phải tìm thêm lời giải thích ở các trang khác để bù nền tảng, rồi chia một bài giảng ra nghe trong vài ngày (hoặc vài tuần). Điều quan trọng là điều chỉnh kỳ vọng. Cần ngồi nghĩ kỹ ở những chỗ bị mắc, hoặc chờ một thời gian cho đến khi mình dần quen một cách tự nhiên. Hãy ghi lại ngắn gọn những gì đã hiểu và những gì chưa hiểu vào một file ghi chú đơn giản hoặc trên giấy, rồi kiên trì vài tháng, đến một lúc nào đó bạn sẽ thấy lối đi
Danh sách chủ đề bài giảng có thể xem ở trang MIT OCW, còn ghi chú bài giảng được cung cấp tại đây. Tôi không quá quen với toàn bộ khóa học, nhưng bài cuối cùng, 'Large Deviations' (độ lệch lớn), có một điểm khá đặc biệt. Cá nhân tôi thích bài 'State machines' (máy trạng thái), vì thay vì ví dụ biến Boolean khô khan, nó giới thiệu các ví dụ dễ hiểu hơn như trò xếp hình 15 ô và khái niệm bất biến. Giáo trình (PDF) ở đây. Các bài toán thực tế cũng khá hữu ích. Chẳng hạn, thay vì đại số Boole khô cứng, nó bàn về cách hình thức hóa điều kiện khiến hệ thống tệp bị khóa
Bài 'Large Deviations' là một chủ đề thú vị, nhưng thực ra trong ghi chú bài giảng lại không định nghĩa độ lệch lớn là gì. Có ví dụ về cận Chernoff (mũ) cho tổng các biến ngẫu nhiên IID, nhưng không trực tiếp dùng cụm từ độ lệch lớn nên hơi tiếc. Những loại cận này xuất hiện rất thường xuyên trong khoa học máy tính, đặc biệt là trong lý thuyết học gần đây
Các phần có vẻ khá độc lập với nhau. Tức là không biết có thể học theo bất kỳ thứ tự nào cũng được không. Tôi hỏi để chắc vì set theory (lý thuyết tập hợp) v.v. là nền tảng toán học
Không biết có ai từng chuyển hướng sự nghiệp nhờ OpenCourseware không. Tôi nghĩ thời kỳ MOOC, trái với cách quảng bá, trên thực tế lại phù hợp hơn với những người vốn đã có học vấn cao, tự giác học, hoặc học vì sở thích. Tôi không có ý chê bai gì, vì chính tôi cũng đang tranh thủ học điện toán lượng tử giữa công việc và việc nhà, nhưng nếu cứ như vậy thì chắc phải vài chục năm nữa mới may ra bắt kịp tiến độ
Tôi có chút dị ứng với tên khóa học kiểu 'Mathematics for Computer Science'. Từ trước đến nay tôi vẫn xem computer science là một phân ngành của toán học
Về mặt lý thuyết thì tôi đồng ý, nhưng trong ngành thực tế thì nhu cầu kỹ sư phần mềm lớn hơn nhiều so với nhu cầu người học toán, và cũng gần như không ai bước vào CS chỉ vì hứng thú toán học. Vì thế chương trình CS cũng mang tính thực dụng. Nó tập trung vào các nội dung cần cho việc vào big tech như thuật toán chủ đạo, cấu trúc dữ liệu, cách code Python, v.v.
Với mọi phân ngành con của toán học, việc có tên khóa học theo kiểu 'Mathematics for [phân ngành cụ thể]' cũng chẳng có gì lạ. Tôi chưa từng tự đặt tên khóa học, nhưng về nội dung thì nó cũng giống các môn 'Intro to' khác
Tôi định formalize khóa học này bằng Lean. Chưa rõ sẽ khó đến mức nào, nhưng nếu ai quan tâm thì có thể cùng tham gia ở repo github
Việc này cũng rất phù hợp với mục tiêu của sáng kiến CSLib. Hiện giờ tôi chỉ có bài đăng LinkedIn này làm liên kết liên quan
Tôi tò mò không biết làm việc này sẽ mang lại điều gì
Giá mà có cả sách bài tập giải thích/đáp án đi kèm thì tốt. Tôi không rõ phải kiểm chứng đáp án của mình như thế nào
Video bài giảng có thể xem trên MIT OCW, playlist YouTube
Tôi muốn biết có thể tìm phần giải thích/lời giải cho các bài tập của khóa này ở đâu
Các chủ đề bài giảng thì thú vị, nhưng tôi nghĩ phần lớn nội dung không hẳn là thứ mà một kỹ sư phần mềm bình thường bắt buộc phải biết. Khi mới đi làm lập trình, tôi nhận ra lượng nội dung toán học thực sự dùng trong công việc thực tế ít đến đáng ngạc nhiên. Tất nhiên, những bài giảng MIT kiểu này là dành cho nhà khoa học máy tính chứ không phải kỹ sư phần mềm. Ở các trường đại học Mỹ người ta phân biệt hai nhóm này khá rõ
Nếu bạn đụng đến vật lý hay robotics dù chỉ một chút thì nhận xét đó không còn đúng nữa. Không có toán thì bạn sẽ không hiểu được gì cả
Tôi đã làm kỹ sư phần mềm trong cả hai trạng thái: có kiến thức toán và không có kiến thức toán, và mức đóng góp cũng như hiệu quả ở hai trường hợp hoàn toàn khác nhau
Chủ đề đầu tiên là 'Predicates, Sets, and Proofs', mà ngay cả trong việc lập trình hằng ngày tôi cũng dùng predicates (mệnh đề vị từ) và tập hợp khá thường xuyên
Việc tôi không dùng không có nghĩa là người khác cũng không dùng. Kỹ nghệ phần mềm không thể tồn tại nếu thiếu khoa học máy tính
Dù trên thực tế không cần biết sâu mọi thứ, tôi vẫn nghĩ hiểu ở mức khái niệm là rất cần thiết để viết ra chương trình đúng theo đặc tả. Con người vốn có thể giải các bài toán thuật toán theo kiểu ad-hoc một cách bản năng, nhưng toán học mang lại cấu trúc và sự chặt chẽ cho tư duy, đồng thời giúp hệ thống hóa vấn đề để biến quá trình giải thành thứ có thể thực hiện gần như máy móc. Chỉ cần biết ít nhất lý thuyết tập hợp, logic, và đại số quan hệ thì bạn sẽ hiểu rõ hơn rất nhiều về cầu nối giữa lập trình và toán học. Sách tôi khuyên đọc là Introductory Logic and Sets for Computer Scientists của Nimal Nissanke, và Understanding Formal Methods của Jean-Francois Monin
Khoan đã... CS vốn dĩ là một bằng toán. Cái tiêu đề này nghe như toán học cho toán học vậy