7/24/2021

Tổng quan cơ sở ngành khoa học máy tính - Viện CNTT&TT (Phần 3)


Chào các bạn, sau khoảng 2 tuần mình trầm cảm, rồi ốm, rồi lại trầm cảm thì nay mình lại tiếp tục lên đây xàm xí với các bạn chút. Ở bài viết này, mình sẽ nói về khối cơ bản về trí tuệ nhân tạo, là một xu hướng lớn hiện nay. Sắp tới mình sẽ có một số bài viết thêm, chi tiết về mảng này, hy vọng tạo động lực, hướng đi cho các bạn mới học( trong đó có mình :v ). Vì cũng chỉ là một newbie, mình sẽ cố hết sức viết đúng kiến thức trong tầm hiểu biết :D, mong nhận được ý kiến góp ý của mọi người.

Sau đây là hình minh họa cho 3 môn học tương ứng với mức độ bao quát trí tuệ nhân tạo(artificial intelligence ) > học máy(machine learning) > học sâu (deep learning)


1. Trí tuệ nhân tạo

Ở mức độ khái quát nhất, môn học cung cấp kiến thức nền tảng, thế nào là một trí tuệ nhân tạo, cần những yêu cầu như nào thì được gọi là một trí tuệ nhân tạo. Theo mình khái quát được, một trí tuệ nhân tạo sẽ cần đảm bảo được Hành động một cách hợp lý, tức là bên ngoài tác động vào chương trình trí tuệ nhân tạo (gửi request chẳng hạn, tác động làm thay đổi trạng thái bất kì ) thì nó phải tác động lại(gửi lại thông tin, hoặc hành động gì đó ), và quan trọng tác động đó phải hợp lí(đúng mục tiêu, đúng lợi ích...)
Trong một phần môn học bạn sẽ được học về các chiến luwcocj tìm kiếm. tại một thời điểm , ứng với một môi trường bên ngoài bất kì, trí tuệ nhân tạo (AI) có thể có nhiều lựa chọn hành động, và sau khi lựa chon theo một/rất nhiều hành động đó, môi trường ngoài lại có thể thay đổi, rồi lại hành động, rồi thay đổi,... tạo nên một đồ thị (từ trạng thái này sang trạng thái kia ). vì vậy, ta cần hcoj cách tìm kiếm để sao cho có thể đạt được mục tiêu (ít nhất là đạt được mục tiêu, rộng hơn thì có thể là thỏa mãn ràng buộc, chi phí tối ưu,...)

Ví dụ về bài toán hút bụi trong slide của thầy Khoát:



Cụ thể các Phương pháp thì có:


Phần còn lại các bạn sẽ được học về Logic, suy diễn , biểu diễn tri thức và cuối cùng là giới thiệu qua một số phần nhỏ của học máy (Bayes, KNN )

2. Học máy

Thay vì đi đưa ra quyết định hành động thì ở đây mình thấy thông thường là có tập data rồi tiến hành dự đoán.

Điều thực sự mà máy cần làm là từ tập x là tập data đã có, y là dự đoán cho từng data/ data đã có, tìm một cách nào đó tổng quan quy luật thành hàm f (model ) để khi cho vào một data mới ta có thể output được dự đoán từ data đó sao cho chính xác nhất .


Trong môn học bạn sẽ đi lần lượt về các khái niệm cơ bản, các vấn đề của học máy , các thành phần của học máy, về tiền xử lý dữ liệu, đánh giá hiệu năng hệ thống. Sau đó sẽ được đi sâu dần vào các thuật toán:


Hồi quy (hồi quy tuyến tính,.. )



Phân lớp (KNN - cái mà đã từng được học phần cuối môn AI , Naive-Bayes, cây quyết định ) 

Ví dụ về KNN:



Học về ANN (nền tảng cho học sâu )




Phân cụm (Kmean )


Trong môn này mình nghĩ cái bạn lãi nhất đó là những tiết học bảo vệ bài tập lớn vì khi đó các thầy sẽ chỉ ra vấn đề tồn đọng trong mô hình mà các bạn sử dụng, cách thức xử lí với data…

3. Học sâu

Như đã nói ở trên thì ANN là cơ sở cho các mô hình trong Deep learning, trong môn này các bạn sẽ được học cơ bản về các mô hình, tuy không phải là cập nhật mới nhất và chi tiết nhưng sẽ cho bạn nền tảng phát triển theo định hướng học sâu.

Đây là môn học không bắt buộc, không có trong các môn cơ sở cốt lõi ngành, thuộc module phân tích ứng dụng thông minh.


7/22/2021

Công cụ mô phỏng mạng OMNeT++ | Góc lên LAB học gì?


CNTT là một ngành nghề có tính ứng dụng rất cao vì thế viện CNTT&TT có rất nhiều các LAB nghiên cứu thuộc nhiều các lĩnh vực khác nhau như: LAB công nghệ phần mềm, LAB hệ thống thông tin, LAB khoa học máy tính, BKC LAB, ... Và các thầy/ cô trong LAB luôn luôn mở rộng cửa để chào đón các bạn sinh viên cùng tham gia. 

Bài viết này là bài viết đầu tiên tại series Góc lên LAB học gì? nên mình sẽ nói cụ thể và chi tiết hơn về những vấn đề ban đầu để mọi người hiểu được rõ hơn những vấn đề khi tham gia các LAB nghiên cứu khoa học của viện nha.

Đầu tiên là việc khi tham gia các LAB nghiên cứu thì mang lại những lợi ích gì? Lợi ích thì là vô cùng nhiều, khi tham gia các LAB cùng các thầy/ cô và các anh/ chị trên LAB các bạn được tiếp cận với các anh/ chị, các bạn, các thầy/ cô phải nói là rất giỏi và rất tâm huyết. Được học những kiến thức chuyên sâu về một lĩnh vực, được traing theo lộ trình, được tham gia vào các dự án nghiên cứu trong LAB, được có tên trong các bài báo khoa học,...

Tuy nhiên khi tham gia LAB các bạn sẽ mất thời gian để dành cho các công việc trên LAB, mất thêm thời gian để học các kiến thức trên LAB mà có thể trên lớp không học tới.

Làm thế nào để được lên LAB? Dĩ nhiên là không phải ai muốn lên LAB là sẽ được lên đâu. Có những LAB thì xét duyệt khá dễ nhưng cũng cần có 1 bảng điểm đẹp như LAB khoa học máy tính của cô Bình các bạn chỉ cần gửi mail cho cô kèm theo bảng điểm, nếu cô đọc qua thấy điểm cao, OK thì cô sẽ nhắn lại cho các bạn là hôm sau có thể lên LAB. Còn có 1 số LAB tuyển thành viên rất khắt khe như LAB của thầy Khoát phải trải qua bao vòng với lên được thành viên chính thức.

Các phòng LAB hay các không gian học tập và làm việc tại tòa B1 của viện đang được chỉnh sửa và hiện đại hơn rất nhiều, nhìn đã là thấy thích rồi, các bạn có thể theo dõi thầy Tạ Hải Tùng (Viện trưởng) thầy có đăng lên rất nhiều hình ảnh về các không gian học tập, làm việc mới trên LAB, nhìn là muốn được ngồi đây mãi rồi.





Ngoài việc lên LAB để có thể học hỏi thêm các kiến thức thì các bạn có thể chọn đi thực tập. Mình đã từng thấy một số người rất giỏi nhưng họ lại không chọn lên LAB mà lại chọn đi thực tập. Khi bạn đi thực tập thì bạn vẫn có đầy đủ lợi ích khi bạn tham gia LAB chỉ khác là kiến thức mà bạn học được tại các doanh nghiệp sẽ thực tế hơn là các công nghệ mà chính các doanh nghiệp đang sử dụng để kiếm ra tiền, còn kiến thức mà các bạn được học trên LAB sẽ hàn lâm hơn, mang tính nghiên cứu nhiều hơn.

OK! Lan man như vậy thôi, bây giờ mình sẽ vào chủ đề chính của bài viết này về OMNeT++.

OMNeT++ là một phần mềm mô phỏng mạng sử dụng C++, mục đích chính là mô phỏng hoạt động của mạng thông tin, ngoài ra do tính linh hoạt OMNeT++ còn được sử dụng trong một số lĩnh vực khác nữa.

Tại Bách Khoa thì không có môn học chính thức nào giảng dạy về OMNeT++ và thế dĩ nhiên nếu không thích các bạn có thể không đọc bài viết này. Nhưng các bạn cũng có thể tìm hiểu về OMNeT, biết đâu nó lại là hướng đi phù hợp với bạn.

OMNeT được các thầy/ cô trong LAB công nghệ phần mềm sử dụng để mô phỏng giao thức mạng, có rất nhiều các nghiên cứu của các thầy/ cô có sử dụng OMNeT các bạn có thể xem qua TẠI ĐÂY

LAB công nghệ phần mềm của thầy Nguyễn Khanh Văn mình thấy không tuyển sinh viên, hầu như là các sinh viên làm project I, II, III của các thầy trong LAB, sau đó sẽ được các thầy định hướng thêm để tham gia các nghiên cứu với các thầy/ cô thôi, vì thế mà LAB này mình thấy khá trầm và không nổi bật cho lắm.

Mình có một số tài liệu về OMNeT chính thống từ LAB, nếu muốn tìm hiểu về OMNeT các bạn có thể xem qua tài liệu này: TÀI LIỆU VỀ OMNET++

Những bài viết sau mình sẽ viết về một số LAB khác hoạt động sôi nổi hơn trong viện như là LAB của thầy Khoát hay LAB cô Bình nha.


7/13/2021

Thực tập kỹ thuật | Học phần thực tập


Rất nhiều bạn thắc mắc về học phần thực tập doanh nghiệp, về sự rắc rối của nó,... Bài viết này mình sẽ giải đáp một số thắc mắc để mọi người có cái nhìn rõ hơn về thực tập doanh nghiệp của viện CNTT & TT nha và nó cũng không rắc như mọi người nghĩ đâu.

Chuẩn bị

Đầu tiên là các bản phải chuẩn bị cho mình một bản CV nha, ngắn gọn thôi cũng được, nhưng CV nhớ phải nhét cái ảnh vào nha.

Tiếp theo là cái tinh thần thôi, đi thực tập theo trường này hầu như công ty đều không bắt buộc các bạn phải biết cái gì trước đâu dĩ nhiên là biết thì tốt thôi, vào đấy các bạn sẽ được dạy nha nên một số bạn lo không có kiến thức gì có thể đi thực tập không thì là  nha.

Đăng ký học phần, nguyện vọng

Nếu đầy đủ quy trình thì các bạn phải đăng ký học phần trên ctt trước, sau đó sẽ đăng ký nguyện vọng trên qldt. Việc đăng ký học phần trên ctt thì đăng ký bình thường như mọi học phần khác thôi, đăng ký đúng với mã học phần của môn học là được.


Sau khi kết thúc quá trình thực tập doanh nghiệp sẽ đánh giá điểm của các bạn qua hệ thống qldt và điểm được nhập vào ctt.

Đấy là quy trình đầy đủ, còn mình thấy viện mình rất là tạo điều kiện cho sinh viên. Các bạn có thể đăng ký nguyện vọng trên qldt để xin thực tập tại các công ty mà không cần phải đăng ký trên sis trước. Điểm thực tập của các bạn sau khi kết thúc sẽ được bảo lưu và sau này khi đăng ký học phần trên sis bạn có thể chọn điểm cao nhất trong 2 kỳ gần nhất được bảo lưu trên qldt làm điểm cho môn học thực tập kỹ thuật của bạn.

Để xem danh sách các công ty và đề tài của các công ty các bạn có thể xem tại mục DS Doanh Nghiệp trên quản lý đào tạo hoặc vào trực tiếp link https://qldt.hust.edu.vn/#company


Sau khi tìm được công ty có nguyện vọng phù hợp với bản thân thì bạn có thể đăng ký nguyện vọng tại https://qldt.hust.edu.vn/#dang-ky-nguyen-vong. Điền đầy đủ thông tin và chọn nguyện vọng, mỗi người có tối đa là 3 nguyện vọng và phải chọn tối thiểu là 2 nguyện vọng.

Có một số bạn đã đi thực tập thì sao? nếu các bạn đã đi thực tập rồi thì nếu doanh nghiệp có nằm trong hệ thống hợp tác của trường thì các bạn có thể đăng ký học phần ở kỳ tiếp theo rồi thương lượng với anh leader team bạn nhận các bạn trên hệ thống qldt của trường. Còn một số bạn thực tập ở doanh nghiệp không liên kết với trường thì lời khuyên của mình là thôi bỏ đi, các thầy/cô cũng bảo là có thể lấy điểm nhưng phải xin đủ loại giấy, nói chung rất rắc rối. Còn việc không đăng ký ở kỳ tiếp theo mà xin lấy điểm luôn vì đã thực tập tại công ty được không thì cái này mình cũng không nhớ rõ nữa, nhưng có lẽ cũng sẽ lại phải xin đủ loại giấy tờ, lời khuyên của mình là các bạn lên làm theo quy trình cho dễ. 

Từ kỳ trước thì mọi người đều nhận được mail từ viện là không phải tới đợt mới có thể đăng ký nguyện vọng mà bất cứ lúc nào cũng có thể đăng ký nguyện vọng thực tập ở các công ty nhưng có lẽ mình thấy nó mới chỉ dừng lại ở mức lý thuyết, các bạn vẫn đăng ký nguyện vọng theo các đợt trong năm mà thôi. Mà hầu như các công ty cũng tuyển theo đợt chứ chả công ty nào tuyển rải rác cả năm cả.

Về tính điểm của học phần

Điểm của học phần được cho bởi người phụ trách của bạn trên công ty và hoàn toàn không liên quan gì tới trường, trường chỉ ghi nhận điểm của các bạn mà thôi. Vì thế khi đi thực tập thì cố thân với các anh lead 1 chút để các anh cho điểm cao. Thực ra mình thấy trừ 1 số công ty thì hầu như các anh phụ trách đều đánh giá rất là thoáng vì các anh tính ra cũng còn khá trẻ chắc cũng thấu hiểu nỗi khát điểm của sinh viên chúng ta.

Hỗ trợ

Viện mình hỗ trợ rất tích cực vấn đề thực tập kỹ thuật cho sinh viên, các kỳ đều có những group Facebook riêng để giải đáp thắc mắc của các bạn và trước mỗi kì thực tập đều có các livestream, một buổi talk nhỏ để các bạn đặt câu hỏi.

Để nhận thông tin các group thực tập các kỳ thì các tham tham gia group SOICT - CNTT&TT của viện nha, các thông tin mình thấy các thầy/cô đăng lên đây khá nhiều.

Một số group hỗ trợ thực tập của các kỳ trước: 

Trợ cấp/ lương khi đi thực tập

Một số bạn lại đi thực tập thì kinh nghiệm là chủ yếu chứ lương lậu gì, nhưng theo mình thấy các bạn đi thực tập mà kiêu không có lương thì nói chung khá là nản (chúng ta cứ gọi là lương cho dễ nha chứ thực ra phải là trợ cấp mới hợp lý). Thế nên lời khuyên của mình là nên chọn công ty nào có trợ cấp mà đăng ký vì đầu tiên là nó thể hiện thực lực của công ty, tiếp là nó sẽ khiến mình có động lực hơn nhiều đấy. Các bạn check trong danh sách đề tài thực tập của từng doanh nghiệp nha.


Đánh giá

Sau khi kết thúc các bạn nhớ để ý thông báo trên group Facebook và đánh giá doanh nghiệp theo mẫu nha. Việc đánh giá nên trung thực để nhà trường cũng như các sinh viên khác có cái nhìn thiết thực về doanh nghiệp hơn.


Nếu các bạn còn gì thắc mắc thì hãy comment bên dưới nha, mình sẽ trả lời bằng tất cả những gì mình biết để giải đáp các thắc mắc của mọi người.

7/06/2021

Tổng quan cơ sở ngành khoa học máy tính - Viện CNTT&TT (Phần 2)


Trong bài viết này mình sẽ tiếp tục giới thiệu về một số phần nhỏ trong khối cơ sở ngành khoa học máy tính tại đại học bách khoa hà nội . link bài phần 1.

Sau đây mình sẽ điểm qua một số nội dung, keyword mà bạn sẽ được học mà theo mình là nên nắm chắc, các bạn có thể google để tìm hiểu. Những kiến thức cụ thể mình sẽ nói trong seri bài viết riêng về từng môn học, hy vọng được các bạn đón nhận trong tương lai.


Khối liên quan hệ thống máy tính 


Trong môn nguyên lý hệ điều hành bạn sẽ được học về các phần

    1. Tổng quan

  • Các khái niệm : Tiến trình(process), Luồng (thread), tài nguyên của máy tính, shell, system call

  • phân loại hệ điều hành : xử lý theo lô, theo thời gian, phân tán,..

  • tính chất mà một hệ điều hành cần có: tin cậy, an toàn, tổng quát theo thời gian,..

  • Cấu trúc, thành phần hệ thống : vấn đề về quản lý tiến trình, bộ nhớ, input/ output, quản lý file

    2. Quản lý tiến trình

  • về tiến trình: bài toán điều phối(dùng hàng đợi), thao tác, hợp tác(bài toán sản xuất, tiêu thụ), truyền thông(đệm, socket)

  • về luồng

  • về điều phối CPU: khái niệm trưng dụng tài nguyên, các thuật toán điều phối (SJF, FCFS, RR, )

  • tài nguyên găng và điều độ tiến trình- khái niệm và công cụ xử lý(khóa trong, test and set, đèn báo, monitor )

  • bế tắc và xử lí bế tắc :khái niệm, 4 điều kiện, phương pháp phòng ngừa(tác động 1 trên 4 điều kiện), phòng tránh(chuỗi an toàn), nhận biết và khắc phục(chỉ ra bế tắc và xử lý)

    3. Quản lí bộ nhớ

  • Tổng quan : bộ nhớ, chương trình, liến kết địa chỉ (logic- vật lí) 

  • Chiến lược tuản lí bộ nhớ: phân chương cố định, phân chương động, phân đoạn chương trình, phân trang

  • Bộ nhớ ảo, đổi trang 

    4. Quản lí file 

  • các khải niệm tổng quan , cách tổ chức tài nguyên trên đĩa(vật lí- logic )

  • các khái niệm FAT,NTFS, EXT3,..


Tiếp đến là trong môn Kiến trúc máy tính 

    1. Giới thiệu 

  • CPI

  • time CPU

  • bài tập so sánh thời gian time CPU

    2. logic số, mạch cộng 

    3. Thanh ghi, bus

  • bus address

  • databus

  • bài tập xác định bus đánh địa chỉ tối thiểu

    4. Số học máy tính

  • bài tập : biểu diễn -77 dưới dạng 8bit ?

    5. MISP

  • yêu cầu hiểu lệnh mips

  • bài tập viết chương trình bằng mips

    6. Bộ xử lí 

  • chu trình load lệnh

  • hazard

    7. Bộ nhớ máy tính

  • sự liên quan thanh ghi- bộ nhớ chính- cache- bộ nhớ ngoài

  • tổ chức bộ nhớ cache, chiến lược thay thế bộ nhớ trong cache

  • bài tập tính số bit trên địa chỉ, nằm ở băng nhớ nào,..

    8. .. mấy chương cuối hình như không thi.

Bài cung cấp cho các bạn khá nhiều keyword và khá hoa mắt rồi, các bạn có thể ghé trang Kiến trúc máy tính hoặc Nguyên lý hệ điều hành để lấy tài liệu về tự đọc nhé, tương lai thì mình sẽ có bài chi tiết viết về những môn này (cụ thể hơn là hướng dẫn giải bài tập ) nhưng bao giờ viết thì mình chưa biết :>



7/04/2021

Tổng quan cơ sở ngành khoa học máy tính - Viện CNTT&TT (Phần 1)


Tiếp theo chủ đề review tổng quan về ngành khoa học máy tính đại học bách khoa, trong bài viết này, mình sẽ đi sâu hơn về một khía cạnh là cơ sở cốt lõi ngành. Trong chủ đề này, mình sẽ dùng hướng tiếp cận top down, đi từ tổng quát nhất tới cụ thể từng môn học, giúp các bạn có định hướng, bức tranh tổng quan  về những phần kiến thức mình đã, đang và sẽ được học. 


Như đã viết trong phần trước, cơ sở cốt lõi ngành bao gồm 20 môn với khoảng 50 tín chỉ, chiếm từ ½ tới ⅓ toàn bộ khối lượng học tập, sau đây là sơ đồ biểu diễn một số liên quan tới các môn học. đây được lây từ chương trình học của mình, sẽ có thể thay đổi qua các khóa. bạn có thể lấy đây làm cơ sở đề điều chỉnh chương trình học cho cân đối (một số lời khuyên mình đã có đề cập trong bài đầu tiên ), theo ý bạn muốn( sinh viên vào  năm 2 trường đã cho đăng kí học phần và đăng kí môn học).




Khối giao tiếp cơ bản



Bao gồm các môn như Làm việc nhóm và kỹ năng giao tiếp, Technical Writing and Presentation,Quản trị dự án CNTT. Giống như tên của nó, các môn này  chủ yếu đề cập tới các vấn đề liên quan làm việc nhóm, viết báo cáo, lập kế hoạch, quản trị 


Khối liên quan tới lập trình, tư duy lập trình, tư duy logic



Các môn học ở đây là cơ sở đề các bạn biết code và rèn luyện kỹ năng tư duy giải quyết vấn đề bằng lập trình. Ở cảm nhận cá nhân, những môn này khá khó và cần luyện tập rất nhiều để có thể thành thạo. ở bài viết này mình sẽ liệt kê các keyword mà các môn học có liên quan tới nhau (cùng một hàng là các keyword liên quan tới nhau giữa các môn )


Toán Rời Rạc 

Cấu trúc dữ liệu và giải thuật 

Kỹ thuật lập trình 

Thuật toán ứng dụng 

Đồ thị, các khái niệm liên quan 

   

thuật toán liên quan đồ thị, biểu diễn đồ thị bằng danh sách kề, ma trận khoảng cách...

thuật toán duyệt đồ thị BFS,DFS

cấu trúc dữ liệu: ngăn xếp (stack), hàng đợi (queue )

 

lập trình các bài toán liên quan duyệt đồ thị

thuật toán tìm đường đi ngắn nhất trên đồ thị, tìm kiếm trên đồ thị 

   

dạng toán khá khó trong các bài test của môn học 

đồ thị 

cấu trúc dữ liệu : cây.các thuật toán liên quan duyệt cây. Cây bản chất dược định nghĩa đệ quy ( liên quan stack )

   

2 môn này có phần này chung nên bạn có thể nên chuẩn bị tâm lý là thầy cô sẽ bảo là “chắc là môn kia dạy rồi nhỉ :D ” và bỏ qua mặc dù có thể môn kia các bạn không được học hoặc học qua loa :v

   
 

Độ phức tạp thuật toán, định lý thợ 

đánh giá tối ưu thuật toán 

đánh giá tối ưu thuật toán, thường thì một bài có thể có nhiều cách giải, nhưng sẽ tính điểm dựa theo độ phức tạp

 

Giải thuật liến quan tìm kiếm, sắp sếp

Giải thuật liến quan tìm kiếm, sắp sếp

Giải thuật liến quan tìm kiếm, sắp sếp

   

những tiết thực hành ở môn này là bước đệm cho tư duy giải bài lập trình trong môn thuật toán ứng dụng để bạn đỡ bỡ ngỡ. 

 
 

cấu trúc dữ liệu: ngăn xếp (stack), giải thích đệ quy. 

giải thích của đệ quy, cách đệ quy hoạt động,

lập trình các thuật toán : duyệt toàn bộ, chia để trị, nhánh cận, quay lui 

   

Tối ưu code  (tối ưu vòng lặp , các kĩ thuật liên quan biến)

giảm độ phức tạp=> tăng điểm 

   

kỹ năng debug, phát hiện lỗi sai, gỡ lỗi, test  

debug chương trình

(thật sự đây là một phần stress nhất nếu bạn có í định học môn này một cách nghiêm túc ) 

Thuật toán tham lam 

   

thuật toán tham lam.. mặc dù có thể không cho bạn được full điểm nhưng có ít nhất thì không bị mất hết điểm câu đó. trong môn này chỉ cần hơn nhau 1 điểm/ 400 điểm  là thứ hạng của bạn có thể up lên vài chục trên tổng số vài trăm sinh viên.

 

cấp phát bộ nhớ , con trỏ 

con trỏ , con trỏ hàm 

tối ưu code (tránh bị tràn bộ nhớ )

 

HASH => sau này dùng cho môn An toàn thông tin 

   
 

Cấu trúc dữ liệu cây(Btree) => sau này nhắc đến trong môn hệ điều hành , database 

   


Trên là một số liệt kê của mình về các phần liên quan, những phần sau mình xin phép cắt đi vì nếu viết thì sẽ khá dài cho một bài blog. Mình sẽ viết từng khối  trong một bài riêng. Sau loạt bài tổng quan về từng khối này, mình sẽ viết loạt về cụ thể từng môn, ủng hộ mình nhá <3, like fanpage chẳng hạn, để lại cho mình bình luận góp ý, mình hứa sẽ tiếp thu và thay đổi. 


Khối liên quan tới hệ thống máy tính


bao gồm 2 môn nguyên lý hệ điều hành và kiến trúc máy tính. 



Khối liên quan lập trình phần mềm 



Cơ sở dữ liệu(thực chất thì cái này dùng rất nhiều trong  mảng khác chứ không phải mỗi công nghệ phần mềm ),Nhập môn công nghệ phần mềm,Phân tích và thiết kế hệ thống(có thể liên quan tới cả  môn quản trị dự án công nghệ thông tin), Lập trình hướng đối tượng(là một nguyên lí, quy tắc,... để bạn lập trình nhiều mảng khác )


Khối liên quan trí tuệ nhân tạo , phát triển ứng dụng thông minh



Đây có thể nói là trend hiện nay, phổ cập trí tuệ nhân tạo :D. rất khó, thằng bạn mình (dẫu biết là trong chúng ta ai cũng có thằng bạn, ông anh,... để mỗi lần khó lại lôi ra :D nhưng đây là bạn mình thật) đã nghiên cứu về nó trong thời gian rất lâu và mình cảm thấy bạn là một người cực kì giỏi về mảng này(đặc biệt là giỏi về toán cơ bản, linh vực này cần thật sự nhiều toán cơ bản ) nhưng cuối cùng vẫn không qua được phỏng vấn lab DSLab( lab uy tín nhất của trường về Machine Learning), khá đáng tiếc :(. vì vậy nếu xác định theo hướng này thì bạn cần nghiêm túc ngay từ năm nhất với các môn toán cơ bản, có thể liên hệ vào lab qua thầy chủ nhiệm khoattq@soict.hust.edu.vn nếu lab có tuyên thành viên. 


Khối liên quan bảo mật thông tin, logic mạng



Ngoài review ra thì mục đính cao hơn  của trang là cung cấp cho các bạn nguồn cảm hứng, tạo động lực học tập, định hướng cho các bạn con đường lập trình với sinh viên khoa học máy tính đại học bách khoa nói riêng và tổng quan ngành lập trình nói chung(đối với các bạn bên ngoài trường), trả lời cho các bạn câu hỏi : tôi cần gì để có thể trở thành một lập trình viên ?

Cuối cùng, với mỗi nội dung mình viết hiện tại đang chỉ là một số keyword cơ bản nhất, các bạn có thể tự tìm hiểu bằng cách tra google với từ khóa đó + viblo. đay là một trang blog mình thấy đọc khá dễ hiểu. 


Good Luck, 

longpt


Thuật toán có thực sự quan trọng? | Blogging


Thuật toán là gì? Theo wiki, trong toán học và khoa học máy tính, một thuật toán, còn gọi là giải thuật, là một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính.

Vậy học thuật toán để làm gì? Và tại sao gần như mọi trường đại học và điển hình tại Bách Khoa Hà Nội thì thuật toán là môn học không thể thiếu? Cùng nghe về chia sẻ của mình nha, nếu bạn có những ý kiến khác thì hãy comment để mọi người cùng biết nha.

Tại sao cần dùng thuật toán?

Bạn chỉ cần search trên Google là 'Tại sao cần dùng thuật toán' thì sẽ ra cả tá bài viết viết về vấn đề này, hoặc tiêu biểu bạn có thể xem bài viết Đôi chút về cấu trúc dữ liệu và thuật toán, bài viết này mình sẽ tóm gọn lại nhanh vấn đề nha.

Thuật toán không giúp code của bạn ngắn hơn mà thậm chí nó phải dài hơn. Nhưng hiệu quả là vấn đề không phải bàn cãi, thuật toán giúp chương trình của bạn chạy nhanh hơn, với những thuật toán tối ưu chương trình của bạn còn có thể chạy nhanh hơn rất nhiều nữa. 

Học thuật toán sẽ giúp các bạn có một tư duy tốt hơn và có thể là tốt hơn rất nhiều để giải quyết vấn đề.

Am hiểu về thuật toán sẽ là một điểm cộng khi tham gia phỏng vấn. Với bạn nào mà muốn theo đuổi lập trình Game hay muốn làm việc tại 1 số tập đoàn lớn như VNG, Viettel, Samsung thì thuật toán là thứ không thể thiếu nay. Phỏng vấn đầu vào là thuật toán, tại Samsung nếu bạn muốn làm các chức vụ cao hơn thì bạn phải thi các cuộc thi về thuật toán nữa nha,... Vậy nếu các bạn có những định hướng về hướng đi giống như trên thì hãy học thuật toán ngay đi nha. 

...

Không học, không giỏi thuật toán có được không?

Mình không hề master thuật toán, và cũng không phải là fan cuồng thuật toán vậy nên nhận xét thật lòng thì không giỏi thuật toán chả sao, chúng ta vẫn có thể trở thành thành lập trình viên giỏi trên các lĩnh vực của mình.

Không cần thuât toán bạn vẫn sẽ đưa ra được cái giải pháp của mình, tuy nhiên nó có thể không tối ưu với vôn thuật toán hạn chế của lập trình viên nhưng nó chắc cũng sẽ là một giải pháp.

Nếu bạn là một lập trình viên viết những web thiên về nội dung. blog hay những app với những xử lý logic đơn giản có lẽ những djikstra, quick sort,... cũng không có nhiều đất dụng võ.

Bây giờ một số thuật toán kinh điển đều đã được cài đặt sẵn và xây dựng thành các thư viện và đã được tối ưu, kiểm thử lỗi,... nên lập trình viên muốn dùng chỉ cần gọi ra và sử dụng.

Có nhiều phần mềm, sự hiểu biết về thiết kế, tổ chức dữ liệu sẽ quan trọng hơn rất nhiều so với những thuật toán hay được sử dụng trong phần mềm.

Vậy thuật toán có thực sự quan trọng không?

Những người đọc bài viết này của mình chắc đa số đều là sinh viên Bách Khoa và chắc chắn dù muốn hay không thì các bạn đều phải học, thậm chí là cày ngày, đêm để còn qua môn cấu trúc dữ liệuthuật toán ứng dụng hay là để thi tuyển vào samsung,...

Một số bạn thì so sánh rằng, các trường như FPT họ không học thuật toán mà học thẳng trực tiếp các framework, thư viện, những thứ thực tế cần dùng hơn. Nhưng mình xin đính chính lại là FPT có học toán rời rạc, cấu trúc dữ liệu,... nha chỉ là họ học khá là nhẹ nhàng hơn so Bách Khoa mà thôi, nhưng cũng vì thế mà một người anh của mình tại FPT cũng từng nói với mình rằng là thật tiếc rằng ngày đó anh không được tiếp cận đồ thị sớm hơn khi còn học tại trường.

Không nhắc về các trường đại học nữa, vậy thì một số trung tâm, hệ thống đào tạo lập trình viên thì sao? Như APTECH. Nhưng cũng xin đính chính tiếp với các bạn, những lập trình viên mà APTECH đào tạo ra họ là những người thợ code, khi họ học thì họ thực hành là chủ yếu, code ngày code đêm và trình độ code của họ chắc chắn là hơn sinh viên đại học như chúng ta. Tuy nhiên, chúng ta không phải là những thợ code, chúng ta không thể chỉ biết code, chúng ta là những kỹ sư mà kỹ sư là phải giải quyết các vấn đề chứ không chỉ đơn giản là bạn được vứt cho một loạt mẫu có sẵn và code theo những mẫu này như những người thợ code thực thụ.

Vậy kết luận lại thì thuật toán cần không? Thuật toán cần, phải học, ít nhất là phải học để biết nhưng không phải là tất cả. Đó là những suy nghĩ của mình về vấn đề khá nan giải này. Còn bạn nghĩ gì thì hãy comment cho mọi người cùng biết nha.

6/28/2021

Tổng quan ngành khoa học máy tính - Đại học Bách Khoa Hà Nội


Chào các bạn,hôm nay dựa trên hiểu biết sơ bộ của một sinh viên cuối năm 3, mình xin phép viết một bài review qua về ngành khoa học máy tính nói chung và ngành khoa học máy tính ở trường đại học bách khoa hà nội nói riêng.

Bài viết mang tính chất giới thiệu là chính, sẽ không mang tính học thuật, phù hợp với những bạn đang có ý định thi tuyển vào ngành,hình dung xem mình sẽ được học gì, hoặc một số bạn năm nhất, năm hai của ngành có thêm định hướng cho tương lai sắp tới. Về phần chi tiết môn học, tài liệu đã có blog viết riêng, các bạn search trong trang nhé.

Tổng quan chương trình đào tạo 

Sau đây là hình minh họa cho các khối kiến thức lớn mà bạn phải học( bao gồm B1: cơ bản B2: sâu hơn vào ngành). Trong đó TC- tín chỉ là đơn vị tính gần như tương đương với thời gian(số tiết, số giờ tự học) để hoàn thiện môn học. 



Khối kiến thức cơ bản

Giống như tất cả các ngành học khác, bạn vẫn phải trải qua 1-2 năm để học các khối kiến kiến thức cơ bản, bao gồm khối toán và khoa học cơ bản: mình sẽ viết một số thứ mình còn đọng lại và đôi khi gặp lại tới bây giờ , đừng chê ít nhé :))

Tin học đại cương

dậy bạn biết viết “hello world” về lập trình C 

Toán rời rạc

thuật toán tìm đường đi ngắn nhất, đồ thị, tư duy logic.

Giải tích I,II,III

cung cấp kiến thức cơ bản về đạo hàm, tích phân, gradient,.. 

Đại số

cung cấp kiến thức về ma trận, sau này dùng nhiều trong tính toán deep learning.

Xác suất thống kê

phân phối gauss, xác suất có điều kiện.

Nhập môn các phương pháp tối ưu

tìm nghiệm tối ưu của một hệ các ràng buộc. trước kia bạn học bất phương trình 2 ẩn 2 phương trình thì giờ nó phức tạp hơn, mở rộng hơn  

Vật lý đại cương I.II

ý nghĩa của entropy, kiểu cách đo độ biến động của một hệ.


sau đó là một số môn khác cũng khá là bổ ích mà bạn sẽ quan tâm nếu cần học bổng :

Lý luận chính trị 

Giáo dục thể chất 

Giáo dục Quốc phòng - An ninh

Tiếng Anh (khi đầu vào tiếng anh gà mờ )

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

Lý luận TDTT

Đường lối quân sự

Tiếng Anh 1

Tư tưởng HCM

Bơi lội

Công tác quốc phòng-An ninh

Tiếng Anh 2

Những NLCB của CNML I

3 môn tự chọn nào đó(bóng bàn, bóng rổ, chạy, nhảy , cầu lông, bóng đá...)

QS chung và KCT bắn súng AK

 

Những NLCB của CNML II

     

Đường lối CM của ĐCSVN

     


Đi vào cốt lõi ngành 

Cũng như phân trước, mình sẽ đưa ra một số nhận định của mình về những môn mình đã học:


Nhập môn CNTT và TT

bản nâng cấp của tin đại cương với một phần tìm hiểu về ngành công nghệ thông tin 

Technical Writing and Presentation

dạy bạn cách viết report, mail 

Cấu trúc dữ liệu và thuật toán

không phải ngẫu nhiên mà môn học này được dạy từ khá sớm. mình nhấn mạnh tầm quan trọng của nó. môn học cung cấp kiến thức về cấu trúc dữ liệu (hàng đợi, ngăn xếp, cây, danh sách liên kết  ), thuật toán đệ quy, duyệt cây, các thuật toán sắp xếp đi cùng với đó là độ phức tạp thuật toán . môn học cho bạn  nền tảng cơ bản về lập trình cho bạn .

Kiến trúc máy tính

dậy bạn thực sự cpu nó làm gì ? tại sao dùng cache lại nhanh ? và lí do tại sao bạn phải lắp 2 thanh ram giống nhau 

Kỹ thuật lập trình

kỹ thuật viết code sao cho không bị mắng, khi gặp lỗi thì tìm cách debug ra sao ?  test một chương trình thế nào để biết nó đúng 

Nguyên lý hệ điều hành

cách mà máy tính có thể hoạt động một cách trơn tru khi bạn bắt nó làm cả tá thứ sẽ được một phần trả lời trong câu hỏi này. bên cạnh đó cũng sẽ giúp bạn backup nghề cài win dạo.

Mạng máy tính

cách mà dữ liệu có thể truyền đi lại trong mạng, cơ chế làm sao mà nó có thể chịu lỗi khi mất dữ liệu, cách bảo mật tin khi truyền đi 

Cơ sở dữ liệu

dậy bạn truy vấn sql

Lập trình hướng đối tượng

mình cảm thấy môn này và cấu trúc dữ liệu là 2 môn khó và rất quan trọng. trả lời cho câu hỏi gần như chắc chắn bạn phải trả lời khi phỏng vấn job liên quan java: hãy trình bày 4 tính chất của lập trình hướng đối tượng. mà dù trong môn này không được học, nhưng mình đề xuất khi học môn này nên đọc thêm về design pattern, sẽ cực kì thực tế và cho bạn một nguồn cảm hứng học lập trình .

Phân tích và thiết kế hệ thống

để cho chuẩn thì công việc trước khi code của một coder thì phải viết tay sơ đồ luồng thực thi, đoạn code này xử lí gì, nó mang trách nhiệm gì, nso chuyển data tới những đâu,... tất cả sẽ được thiết kế trong một bản thiết kế riêng mà chưa cần thiết phải code. 

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

kiến thức nền tảng cho học máy và học sâu, nói qua về thuật toán “thông minh” hơn mấy thuật toán trong cấu trúc dữ liệu và giải thuật

Project I,II,III

hên xui 

Thuật toán ứng dụng

môn học của tư duy, còn đối với mình là một phần may mắn nữa.

Nhập môn công nghệ phần mềm

là sự kết hợp Lập trình hướng đối tượng, Phân tích và thiết kế hệ thống. nơi mà bạn hoàn thành cho mình được một project hoàn chỉnh đầu tiên.

Nhập môn Học máy và khai phá dữ liệu

Nhập môn Trí tuệ nhân tạo nhưng ở một lĩnh vực sâu hơn.

Nhập môn an toàn thông tin

cho bạn cái nhìn bao quát nhất về an toàn thông tin. trả lời cho câu hỏi : bạn là ai trong không gian mạng 

Quản trị dự án CNTT

môn học cho các quản trị dự án tương lai, dạy về cách đàm phán với khách hàng, hợp đồng, lập lịch cho nhân viên. có rủi ro thì phải làm thế nào .

Làm việc nhóm và kỹ năng giao tiếp

kỹ năng trong giao tiếp ứng xử trong nhóm 


Tự chọn theo modun 


bạn có thể đi theo các hướng như : xử lí dữ liệu lớn (kiểu đề xuất quảng cáo), học sâu(mấy cái nguy hiểm như xử lí ngôn ngữ tự nhiên ), hoặc code web. thôi bài đã dài. mình xin phép hẹn buổi sau :v


Tổng kết 

  • lời khuyên cho các bạn nếu muốn học ngành này mà không nản thì nên đăng ký học sớm các môn code nhiều như Cấu trúc dữ liệu và thuật toán,Lập trình hướng đối tượng, Kỹ thuật lập trình, Thuật toán ứng dụng.

  • sẽ có một số môn liên quan tới nhau, nếu thật sự tryhard thì nên học cùng một kì, áp lực sẽ giúp bạn phải học một cách thật chăm chỉ để đáp ứng yêu cầu môn học. nếu làm được điều này, bạn sẽ ít rơi vào tình trạng: “? học cái này để làm gì ”

  • trong quá trình học khối kiến thức cơ bản, thường là 1-2 năm đầu, mình có một vài lời khuyên cho các bạn về một số hướng bổ trợ để đỡ nản cũng như giải trí quá nhiều :v 

    • Một là, bạn có thể đăng ký trước môn học kỳ sau, những môn chính trị, thể chất gối vào những kì sau. ưu điểm là sẽ định hướng được mình hóc j, còn nhược điểm là thường các bạn sẽ coi thường những môn phụ.
    • Hai là, bạn xác định cho mình một hướng học trước mà không cần quá nhiều kiến thức chuyên ngành, mình nghĩ là học web, hoắc là học học máy( liên quan nhiều tới toán cơ bản, sẽ có hứng thú hơn khi biết kiến thức toán mà mình học được dùng cho việc gì )
    • Ba là, có thế học tiếng anh, nó rất cần thiết cho việc học sau này của bạn, không chỉ những có thể thăng tiến mà nó cũng giúp bạn tiếp xúc với nguồn tài liệu chất lượng bằng tiếng anh.

Good Luck,

longpt