Kiến Thức Mà Sinh Viên Học Lập Trình Có Thể Bỏ Sót
Hello anh em! Để làm tốt trong các dự án thực tiễn thì kỹ sư phần mềm cần có kiến thức khá rộng, và cũng phải đủ độ sâu nhất định (dù không cần phải quá sâu). Tuy nhiên, đa số sinh viên sau tốt nghiệp vẫn thiếu hụt những kiến thức ấy rất nhiều. Nguyên nhân vì:
- Không được học.
- Hoặc được học nhưng không dạy kỹ.
- Hoặc thầy dạy nhưng bản thân người học không ý thức được mình cần tiếp thu kỹ.
Thật ra đây cũng không phải vấn đề gì ghê gớm, vì sau khi tốt nghiệp các bạn vẫn có thể bổ sung hoặc học hỏi sau. Tuy nhiên, nếu có thời gian tìm hiểu thêm thì các bạn sẽ thuận lợi hơn trong việc tự học và trong sự nghiệp. Bài viết này sẽ gợi ý những mảng kiến thức mà dân lập trình cần trong công việc. Những bạn nào còn đang đi học hoặc có ý định làm lập trình viên thì lưu ý nhé.
Trước hết, đây là một số thứ liên quan đến lập trình mà sinh viên thường học nhiều ở trường:
- Cú pháp ngôn ngữ lập trình.
- Thư viện cơ bản của ngôn ngữ lập trình.
- Cấu trúc dữ liệu và giải thuật.
- Lập trình hướng đối tượng.
(Một số môn ví dụ như"cơ sở dữ liệu" hay "network" thì không phải thuần về lập trình nên mình không đề cập ở trên).
Nếu chỉ nói chung về cách dạy lập trình ở một học phần, thì sau đây là tuần tự các bước mà mà giảng viên ở trường hay tiến hành:
- Giới thiệu tuần tự các khái niệm tổng quát trong ngôn ngữ lập trình.
- Bảo học viên mở một phần mềm gì đấy trên máy (mà thầy đã cài sẵn hoặc học viên tự tải về)
- Gõ code vào -> Ctrl+S (save) -> click click gì đấy chạy chương trình.
Trình tự trên lặp đi lặp lại khi bạn học "nhập môn lập trình", "lập trình 2", "lập trình 3", "lập trình nâng cao" hay một cái môn nào đấy liên quan đến lập trình. Riêng phần "cấu trúc dữ liệu và giải thuật", bạn sẽ được học những cái cơ bản mà kỹ sư nào cũng phải sử dụng, cho đến những kiến thức khó hiểu mà hầu hết các mảng trong công việc không có cơ hội đụng đến.
Được học kỹ những phần ấy, thế nhưng có những cái quan trọng dù không mấy khó so với khả năng tiếp thu của các bạn, vẫn bị bỏ sót. Ví dụ, bạn có phân biệt được Editor
và IDE
, có biết Visual Studio là IDE
còn VSC không phải là IDE
? Hay bạn có phân biệt được toolchain
, SDK
với IDE
? Bạn có biết để build source code lớn hàng trăm file thì làm thế nào?
Đây là một số thứ khác liên quan đến lập trình mà một kỹ sư phần mềm nên biết nhưng có khả năng bị bỏ sót
- Phân biệt editor - toolchain - SDK - IDE, và công dụng của chúng.
- Quá trình biên dịch xảy ra thế nào?
- Làm sao để biên dịch chéo.
- Debug thế nào?
- Các build system được dùng để build những dự án lớn có hàng trăm hàng nghìn file mã nguồn diễn ra thế nào?
- Làm sao để xử dụng mã nguồn mở?
- Quá trình một phần mềm chạy như thế nào?
- Unittest là gì và làm sao để viết Unittest?
- Version Control System.
- Kiến thức cơ bản về bảo mật (security).
- Design Patterns là gì và áp dụng ra sao?
- Architecture Patterns là gì, có khác Design Patterns không? ...
Còn một số thứ khác nữa. Và chắc chắn là nếu bạn lăn lộn đủ lâu trong ngành, thì trước sau gì cũng tìm đến những kiến thức này (dù có thể không phải là tất cả). Lời khuyên của mình là những bạn muốn theo ngành lập trình nên bắt đầu tìm hiểu cơ bản những vấn đề trên qua các trang web, blog và những người đi trước.
Một số trang web mình thường vào để học hỏi thêm như:
- https://www.geeksforgeeks.org/
- https://www.w3schools.com/
- https://www.tutorialspoint.com/
- https://refactoring.guru/
- https://sourcemaking.com/
Để hiểu các kiến thức này thì cũng có nhiều cấp độ hiểu. Tuy nhiên hiểu ở cấp độ cơ bản cũng đủ để làm cho nền tảng lập trình của bạn thêm vững chắc. Và ở cấp độ cơ bản, thì nó chắc chắn dễ hơn những bài toán giải tích khó ở đại học hoặc trường cấp 3. Trong blog của mình, Coder Tiger (it's me) cũng sẽ lần lượt chia sẻ kiến thức về những mảng này ở cấp độ cơ bản, để giúp những ai theo đuổi ngành lập trình dễ tiếp cận hơn với chúng.
Tất nhiên, việc người mới học tự tìm hiểu cũng mất khá nhiều thời gian nếu không có người hướng dẫn. Nhưng Coder Tiger sẵn sàng hỗ trợ trong khả năng của mình. Nếu bạn có thắc mắc gì cứ thoải mái liên hệ mình nhé.
Enjoy!
Tái bút: Có bạn Lê Duy Quang góp ý mình rằng những trang web mình giới thiệu ở trên "kém chất lượng", và nên đọc những tài liệu chính thống của từng công nghệ, ví dụ những link sau:
- Git: git-scm.com/book (chính thức)
- Web: developer.mozilla.org, css-tricks.com
- Android: developer.android.com (chính thức)
- C++: learncpp.com, en.cppreference.com
- Các mẫu thiết kế game cơ bản: gameprogrammingpatterns.com
Thực ra trong 5 trang này, có 2 trang (Android và C++) mình cùng hay vào đọc khi làm việc. Ý kiến cá nhân của mình thì đúng là chịu khó đọc tài liệu chính thống của từng công nghệ thì sẽ chuẩn hơn. Tuy nhiên nội dung những trang này cực kỳ chi tiết, cực kỳ nhiều và cũng khó để tiếp thu. Trong khi đấy những trang mình đã giới thiệu trước đấy như GeeksForGeeks, TutorialsPoint, W3School lại tóm tắt những phần trọng tâm một cách dễ hiểu hơn hẳn (bù lại, sẽ có những cái không rõ ý hoặc chưa đúng). Các bạn khi đọc nhớ kết hợp nhiều nguồn để tự cân bằng nhé.
All rights reserved