Năm rồi tôi có cơ hội nói chuyện, mentor 1-1 với hơn tá bạn sinh viên CS/IT, các bạn junior engineer. Câu hỏi thường gặp nhất từ các bạn trẻ là “Nên học gì, học như thế nào để chuẩn bị tốt nhất cho việc tốt nghiệp?”. Bài này để tổng hợp những góc nhìn cá nhân của tôi về vấn đề này.
Disclaimer: Nội dung bài viết hướng đến các bạn sinh viên học ngành CS/IT và các bạn fresh grad/ junior engineer, các ngành khác tôi ko dám lạm bàn.
“Knowledge isn't free. You have to pay attention”
Trước khi bàn đến chuyện trồng cây gì, nuôi con gì, điều quan trọng nhất, trước hết, các bạn nên chuẩn bị cho mình một thái độ và cách học tập đúng đắn. Lên lớp, nghe giảng, làm bài tập nhóm, làm assignment đầy đủ có đảm bảo cho bạn một công việc “tốt” sau khi tốt nghiệp không? Câu trả lời là không. Phương pháp giáo dục phổ thông ở VN đã tạo ra những sinh viên thụ động, những kẻ từ chối chịu trách nhiệm cho sự học của chính mình. Đây là thứ cần được “unlearn”. Ở môi trường đại học, đặc biệt giữa bối cảnh cuộc cách mạng công nghệ đang tạo ra những thay đổi chóng mặt, bài giảng của giáo sư chỉ là một phần nhỏ của việc học.
Trải nghiệm cá nhân của tôi tại FPTU gần 7 năm về trước là nhiều môn học bị mắc kẹt giữa 2 thái cực đại học và trường nghề: kiến thức trên giảng đường chưa đủ sâu để xây dựng cho sinh viên một nền tảng vững vàng, nhưng cũng chưa đủ cập nhật, chưa đủ hands-on để theo kịp những gì đang diễn ra ở industry.Theo tôi, đại học chỉ nên tập trung cung cấp kiến thức nền và bổ sung bằng các tài liệu mở rộng, tạo môi trường phù hợp để sinh viên tự học. Phần còn lại, sự chủ động nên thuộc về người học:
Học kiến thức cơ bản thật đàng hoàng (cái gì là cơ bản thì xem mục 4).
Luôn đặt câu hỏi tại sao lại thế, nếu thế thì như thế nào? Tại sao lại là 3-way handshake mà không phải là 2-way handshake, 4-way handshake? Tại sao phải đẻ ra mutex, semaphore rồi spin-lock, sao không xài 1 cái thôi cho tiện? Tại sao hash-map lại có runtime trung bình là O(n)? Binary search hoạt động hiệu quả trên sorted array, thế có cách nào đạt được runtime tương đương trên sorted linked-list không?
Đừng thụ động thầy đọc trò chép như hồi phổ thông. Tôi từng email hỏi đáp qua lại hàng chục phiên với thầy dạy Đại số tuyến tính ở FPTU, hồi ấy chưa có ChatGPT.Dive Deep
Chủ động học thêm từ Internet. Chúng ta đang sống ở thời đại mà việc học chưa bao giờ rẻ và dễ dàng tiếp cận đến thế. Các khóa học của các trường đại học đẳng cấp thế giới (MIT, Stanford, Harvard) được phân phối miễn phí trên Youtube/ Coursera/ MIT Opencoursewave. Còn gì hạnh phúc hơn khi được làm học trò của các huyền thoại như Gilbert Strang, Andrew Ng. Đó là chưa kể tới hằng hà các pháp sư Ấn Độ, hay gần đây là Gemini, ChatGPT.
Làm side project. Học cái gì thì làm side project về cái đó. Ví dụ, học về Database thì thử tự cài đặt 1 cái data storage đơn giản, học về Cache thì thử cài đặt 1 cái Key-Value Cache, học compiler thì thử tự tạo ra một ngôn ngữ lập trình. Học Deep Learning thì thử cài đặt Neural Network từ hư không (from scratch). Và làm ơn, tránh xa mấy side project tầm thường kiểu CRUD.
Tóm lại, theo tôi, 3 thứ quan trọng cần có ở một sinh viên học IT/CS: sự chủ động, sự chủ động, và sự chủ động.
Chi phí cơ hội và ROI
Có 2 khái niệm trong kinh tế học mà tôi rất ưng:
Chi phí cơ hội (Opportunity Cost): giá trị của những lợi ích mà một cá nhân, doanh nghiệp hoặc nhà đầu tư bỏ lỡ khi lựa chọn một phương án thay vì phương án khác.
ROI (Return On Investment): tỷ lệ thu hồi vốn đầu tư, đây là chỉ số giúp doanh nghiệp đo lường hiệu suất hay lợi nhuận thu được từ một khoản đầu tư.
Cuộc đời sinh viên, về cơ bản là khá nhàn. Tôi hi vọng các bạn luôn cân nhắc đến 2 khái niệm trên khi lựa chọn làm hoặc không làm một việc gì đó:
tham gia 1 câu lạc bộ vô thưởng vô phạt hay lập đội thi hackathon với đám bạn.
mở rộng network trên Linkedin hay follow thêm 1 Tiktoker.
lướt newsfeed facebook hay tìm hiểu xem cái newsfeed được design như thế nào.
cày điểm để đạt thủ khoa ra trường hay dành thời gian phát triển thêm kỹ năng mềm.
dành 1000h cày lập trình thi đấu để thi ICPC (spoiler: 98% bạn không đọ nổi đám chuyên tin đâu) hay dành 800h làm những việc khác: side project, đóng góp phần mềm mã nguồn mở.
đọc manga hay đọc research paper.
vân vân và mây mây …
Quyền được chọn sai
Ngành công nghệ thông tin rất rộng, gồm nhiều nghề nghiệp khác nhau bên trong: Backend, Frontend, Mobile, Security, AI/ML, Data Engineering, SRE, Network Engineering, QA, v..v. Đại học giống như một cái sandbox để các bạn thử mình với tất cả những chuyên ngành này với chi phí tối thiểu. Tin tôi đi, khi đi làm rồi, bạn sẽ không muốn rẽ ngang từ backend sang frontend hay ngược lại đâu.
Vì vậy, hãy dấn thân và thử nghiệm với các mảng trên thông qua các kỳ thực tập hay các side project, các kỳ hackathon; để khi tốt nghiệp các bạn có một cái nhìn rõ ràng hơn về con đường phía trước.
Tứ kỵ sỹ khải huyền
Học lập trình giống như xây nhà vậy, nhà muốn cao thì phải có một cái móng thật chắc. Những môn học nền tảng thường được các trường đại học dạy vào năm 1, năm 2 của chương trình học (tiếc rằng nhiều bạn sinh viên vẫn còn đang xõa sau quá trình ôn thi đại học vất vả). Tôi thường gọi những món này là Tứ kỵ sỹ khải huyền:
Cấu trúc dữ liệu và giải thuật
Hệ điều hành
Mạng máy tính
Cơ sở dữ liệu
Và một vài kỵ sỹ khác nữa, thí dụ như Toán (cho bạn nào thắc mắc Học toán để làm gì?). Nắm vững nhưng môn học này thì năm 3, năm 4 và kể cả sau này đi làm, thăng tiến sự nghiệp sẽ dễ dàng hơn. Một ngày đẹp trời nào đó, rất có thể nhà tuyển dụng sẽ yêu cầu bạn giải thích cơ chế hoạt động của B-Tree trong Database Index.
Sách, tài liệu, course, paper, định hướng cụ thể cho từng môn, có lẽ tôi để dành cho một post khác.
Thế còn AI thì sao?
Sự ra đời của các công nghệ GenAI mở ra muôn vàn khả năng cho người học, nhưng đồng thời cũng tạo ra cái bẫy phụ thuộc nguy hiểm. Các bạn sinh viên nên tránh lạm dụng GenAI vào việc làm assignment, code project hay viết luận. Những công việc này được thiết kế ra để bạn tự làm, phạm sai lầm, hiểu sâu bản chất bài học, tăng cường khả năng phân tích logic - những thứ mà GenAI còn “chưa” đạt tới.
Con người đã thua trong cuộc chiến "học nhớ" so với máy tính nhưng trong cuộc chiến "học hiểu" chúng ta vẫn còn nhiều cơ hội chiến thắng.
Richard Feynman từng nói "Nguyên lý đầu tiên của tư duy là đừng tự huyễn hoặc bản thân, bởi chính chúng ta là kẻ dễ bị chúng ta lừa dối nhất". Tự đánh giá nghiêm túc khi nào bản thân hiểu sai, hiểu thiếu, sẵn sàng đầu tư học hỏi sâu hơn để hiểu rõ và giải quyết vấn đề triệt để vẫn là khả năng của chỉ riêng loài người.
- Trích từ bài viết của anh Ned Nguyễn Techlead @Google. Đọc toàn bài ở đây nhé.Tôi đồ rằng, sự rỗng tuếch của các con nghiện xài GenAI sẽ sớm bị bóc trần khi đối mặt với những tình huống face-to-face, ví dụ như phỏng vấn live coding với nhà tuyển dụng, hay tệ hơn là phỏng vấn trên bảng trắng (whiteboard interview).
Về chủ đề này, đã có nhiều bài phân tích hay từ các chuyên gia:
Yêu trường, nên tôi học đại học ngót nghét 6 năm (2013-2018), tôi hi vọng bài viết mang lại nhiều giá trị cho các bạn trẻ.
Tết rồi thì đọc gì?
Cuối bài, xin phép giới thiệu một vài bài đọc hay ho mà tôi va phải trong tuần:
Bitcask - A Log-Structured Hash Table for Fast Key/Value Data
Unveiling the Efficiency and Simplicity of SIEVE: A Game-Changing Cache Eviction Algorithm
Happy new year!
https://teachyourselfcs.com/ là một nguồn tốt cho cả sinh viên IT lẫn không IT. Cả tứ kỵ sĩ đều góp mặt đầy đủ trong này :)
a có thể recommend 1 vài paper được không ạ, theo như e thấy các paper a hay đọc là về distributed system ạ