Một số môn học ở khoa công nghệ thông tin - Đại học Khoa học Tự nhiên

Số là mình chỉ đi học mà không có đi làm thêm nhiều nên rãnh rỗi sinh nông nỗi. Hễ có môn gì hay hay là chui vô học ké. Thường thì ít môn học ké mà mình có làm bài tập hay đồ án lắm, đi học là hết ngày rồi, còn làm bài tập mấy môn học chính nữa. Do học nhiều nên kiến thức nó cũng loạn xà ngầu, nay rãnh rỗi nên viết bài để hệ thống hóa lại những gì mình đã học, cũng là để xem lại mình đã học và biết những gì rồi. Cũng gần như là hồi kết cho mấy năm đi học, học lâu quá rồi đâm ra ngán.
Bài này viết theo cảm xúc cá nhân, nên sẽ không phải là một thứ gì đó hữu ích lắm cho các bạn tham khảo khi chọn môn học ở trường mình. Nếu cần chọn môn học thì bạn nên lên moodle của mấy năm trước xem thử, với đọc đề cương học phần tóm tắt sẽ có cái nhìn bao quát hơn.
Trước tiên là nói về kiến thức loạn xạ của mình, mình dự thính hầu như các chuyên ngành của trường, trừ mạng máy tính. Lý do ở đây không nó khó hay mình không thích, mà là do giờ học của chuyên ngành này khá nghịch so với các chuyên ngành còn lại. Mạng máy tính thì mình chỉ học cơ bản với một vài kiến thức ở môn mạng máy tính nâng cao. Các chuyên ngành còn lại là: công nghệ phần mềm, hệ thống thông tin, khoa học máy tính, công nghệ tri thức, thị giác máy tính. Mình chủ yếu theo học các môn khoa học máy tính. Kiến thức thì nhiều quá, với lại đã học khá lâu nên không thể nhớ hết mà không động lại tài liệu. Tất nhiên, nếu bạn muốn hỏi kiến thức về một môn học thì mình có cách để tìm lại nhanh chóng, nhờ bác google, chi tiết thì không nhớ rõ nhưng về bao quát thì khá ổn. Nếu xét theo 5 mức ngu dốt thì có thể xem như mình ở mức 1, tức là "mình biết là mình không biết vấn đề đó", nhưng mình biết vấn đề đó có tồn tại, khi nào cần có thể tìm hiểu.
Mình cố gắng trình bày bài viết này theo trình tự thời gian của môn học và theo chuyên ngành cho các bạn dễ nắm và hình dung được quá trình học trong trường. Điều lưu ý nữa là mình k2014 nên những khóa sau sẽ có một số điểm khác biệt mà mình không đề cập trong này, muốn biết khác gì thì hỏi trực tiếp hoặc lên văn phòng khoa, hỏi thầy cô. Trong lúc viết cũng còn tùy vào cảm hứng nên sẽ có đôi chút lạc đề. Nôi dung sẽ được cập nhật từ từ từng môn, tùy theo độ rãnh.

Phần 1 Các môn đại cương

Mình khá tiếc khi học mấy môn toán không thực sự kĩ càng. Ban đầu cũng nghĩ chỉ học để biết thôi, chứ không nghĩ bây giờ - khi vô chuyên ngành - lại cần. Hầu hết các môn đại cương chứa kiến thức nền, do đó mình không đề cập chi tiết nội dung mà chỉ viết một số điều mình cảm thấy ấn tượng. Bạn có thể tham khảo thêm trong giáo trình hay đề cương học phần tóm tắt.

Xác suất thông kê

Đây là môn mình rất tiếc khi học không kĩ, bây giờ phải ngồi cày lại. Giang hồ gọi nó với một cái tên rất thân thiện là xác chết thống kê, bởi không ít anh chị chết ở môn này. Hồi xưa khi học nó thì thấy quá là bình thường, chỉ có phần kiểm định là thấy mơi mới so với hồi học cấp THPT. Đến khi học môn Thị giác máy tính, phân tích thông kê dữ liệu nhiều biến thì mới đụng tới một vài khái niệm, không mới nhưng chưa được dạy trong môn này là eigen value, eigenvector, hệ số tương quan. Ứng dụng của nó có thể thấy trong thuật toán PCA.

Đại số tuyến tính

Đây là một môn rất cần trong xử lý ảnh, vì ảnh bản chất là ma trận các pixel. Các công cụ tính toán trên ma trận rất hữu ích cho xử lý ảnh. Phần xử lý ma trận trong thực tế có nhiều cái hay, không giống như tính toán lý thuyết. Đặc biệt là với ma trận siêu lớn.

Giải tích

Tương tự như đại số tuyến tính, môn cũng có ứng dụng trong xử lý ảnh, một ví dụ mà mình ấn tượng nhất là việc lấy đạo hàm ảnh. Hồi học giải tích thấy nó quá ư là bình thường, nhưng khi học tới xử lý ảnh thì việc lấy đạo hàm làm mình vô cùng ngạc nhiên thích thú.

Pháp luật đại cương

Môn này mình chỉ nhớ mỗi luật là lương thử việc ít nhất 85% so với lương chính thức.

Automata và ngôn ngữ hình thức

Môn này mình thích là do thầy Thanh Phương dạy. Nhìn chung những môn thầy dạy rất khó mà rất hay, do đó ít người đi học. Môn này khóa 2014 đăng kí học được 2 người, còn lại là khóa trước. Vì môn này ít người học nên dẫn đến môn Trình biên dịch không được mở, khá tiếc! Về nội dung, môn học này học về máy trạng thái DFA, NFA. Ứng dụng của nó như trong máy rút tiền, máy bán nước. 1011 detector trong môn Lý thuyết mạch số là một DFA.

Logic toán lập trình hàm

Tên là vậy nhưng dạy chưa tới, chỉ dừng lại ở mức lập trình logic với prolog. Môn này nói về logic mệnh đề và logic vị từ. Trong đó logic vị từ là nền tảng cho prolog.
Prolog là ngôn ngữ lập trình được thiết kế đơn giản mà hiệu quả nên việc lập trình cũng có những kĩ thuật nhỏ để không bị lặp vô hạn. Những kĩ thuật được học là việc tổ chức các câu lệnh để tránh những vòng lặp vô hạn đó, cũng như đạt được một tốc độ tương đối tốt. Hướng lập trình này thích hợp cho hệ suy diễn, logic. Việc lập trình khá thú vị, mình đưa vào nó một tập luật suy diễn rồi hỏi nó một câu, dựa vào đó nó sẽ trả lời là Đúng hoặc Sai.
Ví dụ mình chỉ cần mô tả: (1) Là người ai cũng phải chết (2) Bọn trẻ trâu là người; thì khi mình hỏi Bọn trẻ trâu có chết không? kết quả sẽ là Có. Môn này thầy dạy bao buồn ngủ luôn. Thường khi đi học mình rất ít ngủ, mà môn này ngủ trong lớp hơi bị nhiều, phần vì trời nóng, phần vì nội dung trùng lắp một phần với môn Toán rời rạc.

Hệ điều hành

Môn này học về hoạt động của hệ điều hành như bộ nhớ, tổ chức tập tin trên ổ đĩa, quản lý tiến trình, quản lý tài nguyên. Điều ấn tượng đầu tiên là xử lý deadlock, starvation. Một số khái niệm như lock, semaphore được dùng để lập trình đa luồng (multithread) hay trong việc đọc ghi trong cơ sở dữ liệu. Trong môn học này, mình cũng biết thêm về việc giao tiếp giữa các tiến trình, tiểu trình, các tiến trình trên các máy khác nhau (RPC).
Có một điều trong sách nói sai (do sách được viết lâu quá rồi). Đó là việc giao tiếp giữa hai tiến trình trên hai máy tính. Trong sách cho rằng sử dụng lock là không phù hợp cho điều này do việc quản lý lock. Tuy nhiên, do sự xuât hiện của Redis, việc này trở thành khả thi khi Redis sử dụng server script là Lua, đóng vai trò như lệnh test and set mà yêu cầu của lock cần có. Phần kiến thức về Redis mình sẽ viết trong một bài khác.
Một điều mình khá thích thú nữa là giao tiếp giữa các tiến trình qua shared object như shared memory, message passing như socket. Trong phần này, thầy Dũng có nói đến một ứng dụng thức tế khá thú vị là khi một chương trình sử dụng bộ nhớ RAM để chứa thông tin lớn phục vụ truy xuất nhanh, điển hình như trong các web bán hàng, cần truy xuất thông tin sản phẩm nhanh nhất có thể. Việc lưu dữ liệu trên RAM không khó, nhưng vấn đề đặt ra là làm sao để có thể khôi phục lại dữ liệu cho tiến trình đó khi nó crash mà không phải load lại data từ ổ cứng lên RAM? Vô học lớp thầy để biết thêm ha.

Mạng máy tính

Môn này hay nhưng lâu rồi không đụng lại nên quên gần hết. Điều thích nhất là học với thầy Cường rất vui, hầu như ngày nào cũng cười.

Cơ sở dữ liệu

Hồi bữa học môn này vui lắm, học thầy này mà kiểm tra với thầy kia, toàn fail. Môn này học các mô hình về dữ liệu từ mô hình mức quan niệm (học về mô hình thực thể kết hợp entity relationship) đến mô hình mức cài đặt (học về mô hình quan hệ), cuối cùng là mô hình mức vật lý. Phần phụ thuộc hàm và dạng chuẩn cũng khá thú vị. Còn SQL là bắt buộc phải biết rồi. Cách thiết kế db khi học lên cơ sở dữ  liệu nâng cao khá thú vị, đôi lúc phá vỡ những quy tắc đã học, mình nghĩ anh em có điều kiện nên học môn cơ sở dữ liệu nâng cao để biết thêm.

Nhập môn lập trình

Môn này giúp mình làm quen với lập trình, được dạy về cách đặt tên hàm, tên biến, tổ chức chương trình, một số kĩ thuật xử lý trên mảng. Môn này kiến thức căn bản quá nên cũng không biết viết gì. Chỉ nhớ là hồi đó cày đêm cày ngày, có khi mất cả buổi tối để sửa có một lỗi nhỏ tí xíu, mà nhìn hoài không ra. Như bữa lỗi đơn giản từ '\n' thành '\0', mà mất tới 6h mà không tìm ra, sau đó nhờ bạn coi mới thấy, không ngờ sai đúng chỗ mình không nghĩ là sai. Đúng là người trong cuộc không sáng suốt bằng người ngoài cuộc.
Thích nhất là phong cách dạy của thầy Phạm Minh Tuấn.

Kĩ thuật lập trình

Tiếp nối với Nhập môn lập trình, môn này dạy về một số kĩ thuật cao cấp hơn như đệ quy, quy hoạch động (dynamic programming), kĩ thuật sử dụng con trỏ, cách code sao cho mã nguồn không cứng nhắc cùng một số vấn đề khác.
Điều mình nhớ nhất là tính kích thước của vùng nhớ đã cấp phát trong việc sử dụng con trỏ. Thay vì phải lưu và truyền biến chứa số lượng cấp phát của con trỏ, mình có thể dùng hàm của hệ điều hành hay tự viết (việc tự viết thì nó dùng kĩ thuật khá thú vị, đọc sách sẽ rõ).

Nhập môn trí tuệ nhân tạo

Môn này tổng quan những thứ mà trước khi mới học thấy nó rất hay ho, sau này khi học sâu rồi thì thấy nó chuối hơn xíu. Đầu tiên là cây quyết định, logic vị từ.

Phương pháp luận sáng tạo

Học được mỗi vector ì tâm lý với thang bloom. Mấy bữa sau, do chuyển sang lớp khác nên phải bỏ môn này, khá tiếc.



Nay viết tới đây thôi, hôm khác viết tiếp bổ sung

Comments

Popular Posts