
Chào các bạn!
Mình là Đào Đức, sinh năm 1992. Hiện tại mình đang là CV CNTT_Phát triển phần mềm tại Bệnh viện Đa khoa Quốc tế Vinmec - hệ thống bệnh viện trực thuộc tập đoàn Vingroup. Ngoài ra, mình còn tham gia giảng dạy lập trình.
Trong bài viết này, mình xin chia sẻ kinh nghiệm của bản thân về những kiến thức nền tảng căn bản cần thiết của một lập trình viên. Đây là những kiến thức mà theo mình thì dù bạn muốn theo đuổi bất kì mảng nào trong ngành lập trình (web, game, mobile, AI, data…) thì đều cần phải nắm vững. Kiến thức cơ bản vững chắc chính là nền tảng để các bạn có thể học hỏi và phát triển liên tục trong một ngành có tốc độ thay đổi chóng mặt như CNTT nói chung và lập trình nói riêng.
1. Tư duy lập trình cơ bản.

Thường khi mới học lập trình, các bạn sẽ được học hoặc được khuyên học một ngôn ngữ lập trình cơ bản nào đó. Mục đích của việc này là để các bạn có cái nhìn, kiến thức tổng quan, cũng những hình thành những tư duy lập trình cơ bản. Những kiến thức, tư duy này có mặt trong mọi ngôn ngữ, mọi công nghệ hay mảng lập trình mà các bạn sẽ học, sẽ làm sau này:
Biến, hằng, biểu thức, kiểu dữ liệu, các toán tử.
Cấu trúc điều kiện (if, if…else, swith…case)
Cấu trúc lặp (for, while, do…while…)
Mảng
Hàm → đấy là tư duy cực kì quan trọng trong lập trình. Khi làm một việc gì đó, các bạn cần xác định các yếu tố đầu vào (input), cách thức triển khai và kết quả đầu ra (output). Hàm cũng chính xác là như thế. Mình đặc biệt nhấn mạnh tầm quan trọng của tư duy về hàm trong lập trình! =)))
Chuỗi (string) → hiểu bản chất chuỗi là mảng của các kí tự (character) và thành thạo các thao tác cơ bản với chuỗi (cắt chuỗi, nối chuỗi và các xử lý nâng cao…)
Làm việc với file
Các bạn có thể bắt đầu việc học tư duy lập trình cơ bản này với bất kì ngôn ngữ nào mà các bạn cảm thấy hứng thú. Trước đây, mình làm quen với lập trình bằng Pascal, nhưng sau lên đại học thì bắt đầu lại từ đầu với C, và đến h, khi đi dạy thì mình cũng dạy C đầu tiên. Ngoài các phần cơ bản ở trên mình nêu, C có một phần nâng cao rất hay nữa về con trỏ. Tuy khó nhưng nếu hiểu được thì đó thực sự là nền tảng vững vàng cho các bạn bước tiếp trên con đường học code =)). Ngoài ra, còn rất nhiều ngôn ngữ lập trình thú vị khác để bắt đầu như Python, JavaScript… Theo mình, các bạn nên chọn các ngôn như có cú pháp đơn giản để việc khởi đầu dc hứng khởi nhất!
2. Cấu trúc dữ liệu và giải thuật

Đây là một môn chuyên ngành khá khó và là ác mộng của nhiều sinh viên ngành code =)). Quan điểm của mình là các bạn không nhất thiết phải giỏi môn này, nhưng cần phải học để rèn luyện và nâng cao khả năng tư duy logic. Qua môn đầu tiên mình nói ở trên, các bạn mới chỉ có tư duy logic cơ bản thôi, cần phải liên tục rèn luyện và nâng cao nữa. Môn này sẽ giúp các bạn làm điều đó. Môn này có một số kiến thức cơ bản sau:
Đệ quy
Các cấu trúc dữ liệu cơ bản: LinkedList, Stack, Queue, Tree.
Một số giải thuật cơ bản: Tìm kiếm (search - line searh, binary search…) và sắp xếp (sort - selection sort, merge sort, quick sort…)
Mỗi cấu trúc dữ liệu cũng sẽ có các giải thuật thao tác tương ứng (ví dụ: thêm, sửa, xóa). Khi các bạn thành thạo các kiến thức này, tư duy lập trình của các bạn chắc chắn sẽ được nâng cao hơn rất nhiều.
3. Lập trình hướng đối tượng.

Các công nghệ lập trình phổ biến đều được phát triển dựa trên một ngôn ngữ lập trình hướng đối tượng nào đó. Khi đi phỏng vấn, nhiều khi các bạn cũng sẽ được hỏi sâu về tư duy lập trình hướng đối tượng này. Vì vậy, đây là môn bắt buộc cần nắm vững. Hiện tại, có rất nhiều các ngôn ngữ hướng đối tượng đang được sử dụng, nhưng theo mình, các bạn nên bắt đầu bằng C# hoặc Java vì đây là 2 ngôn ngữ hướng đối tượng đầy đủ, chặt chẽ và phổ biến nhất. Qua đó, việc học của các bạn sẽ dễ dàng hơn (dễ tìm tài liệu, dễ đặt ra các câu hỏi và tìm dc câu trả lời phù hợp, cộng đồng hỗ trợ cũng đông đảo…). Ngoài ra, đây là 2 ngôn ngữ cũng đang được sử dụng trong các công nghệ được tuyển dụng phổ biến hiện nay như web backend, game, mobile… Trong lập trình hướng đối tượng, ngoài những kiến thức cơ bản của lập trình như bao ngôn ngữ khác, có một vài các kiến thức riêng cần nắm vững như sau:
Class, object, constructor.
Thừa kế và đa hình.
Abstract class và interface.
Namespace (C#) or Package (Java). Các ngôn ngữ khác cũng sẽ có các khái niệm tương đương.
Quản lý exception
Collection, generic (List, Set, Map…)
SOLID
Lập trình đa luồng
4. Lập trình mạng cơ bản.

Tất cả các sản phẩm phần mềm được tạo ra ngày nay, về cơ bản là đều hoạt động dựa trên một hệ thống mạng nào đó (LAN, PAN, WAN hay Internet…). Nếu ko có mạng thì làm sao các bạn post facebook, xem tiktok, chơi game hay thậm chí là đọc bài viết này =))). Vì vậy, đã làm lập trình thì phải hiểu về lập trình mạng. Những kiến thức cơ bản cần nắm vững của môn này như sau:
Khái niệm mạng máy tính là gì.
Các dạng thức điện toán (điện toán tập trung, điện toán phân tán, điện toán đám mây)
Các thiết bị cơ bản trong hệ thống mạng (modem, rounter, switch, dây mạng…)
Mô hình OSI → hơi mang tính lý thuyết nhưng rất cần để hiểu được bản chất của hệ thống mạng.
Các giao thức phổ biến: TCP, UDP
Kiến trúc Client - Server
Bảo mật cơ bản: SSL/TSL, mã hóa cơ bản.
Lập trình Socket
Có thể sử dụng ngay một ngôn ngữ lập trình hướng đối tượng đã học ở mục 3 để thực hành về các phần lập trình mạng.
5. Hệ quản trị cơ sở dữ liệu quan hệ.

RDBMS hay có thể nói ngắn gọn là học SQL (mặc dù SQL chỉ là một phần của môn học này) =))) Tất cả mọi sản phẩm CNTT nói chung và lập trình nói riêng đều có nền tảng cơ bản là DATA (dữ liệu). Vì vậy, nếu là lập trình viên thì phải biết cách làm việc với dữ liệu. Có nhiều cách để lưu trữ và quản lý dữ liệu (quan hệ, phi quan hệ…) nhưng phổ biến nhất hiện tại chính là dạng bảng quan hệ và để tạo ra cũng như thao tác dc với dữ liệu dạng này thì cần thành thạo SQL (Structure Query Language - Ngôn ngữ truy vấn có cấu trúc).
Hiện nay, có rất nhiều RDBMS dc sử dụng phổ biến như MySQL, MS SQL Server, PostgreSQL, Oracle… Các bạn có thể chọn 1 cái bất kì. Cá nhân mình thì MySQL là một lựa chọn tốt vì nó là mã nguồn mở, dễ cài đặt và cũng rất phổ biến. Vậy học môn này thì cần nẵm vững những kiến thức sau:
Khái niệm về dữ liệu, dữ liệu quan hệ.
Cách phân tích, thiết kế một cơ sở dữ liệu quan hệ.
Các ràng buộc cơ bản: khóa chính, khóa phụ, not null…
SQL cơ bản: tạo database, tạo bảng, thêm sửa xóa dữ liệu trong bảng (create, select, update, delete…)
JOIN trong SQL
Index, view, Store Procedure
Trigger, Data control language (tạo user, phân quyền…)
Cách một ngôn ngữ hay framework lập trình kết nối và làm việc với database
Transaction
6. Phân tích, thiết kế hướng đối tượng

Để có thể xây dựng được một hệt thống phần mềm hoàn chỉnh, chúng ta cần biết cách thức phân tích và thiết kế ra các hệ thống đó. Đây chính là lý do mà các bạn cần học môn OOAD này. Trải qua 5 môn ở trên, các bạn đã có chút kiến thức rồi thì môn này sẽ giúp hoàn thiện và tổng hợp lại → làm project nhỏ nhưng hoàn chỉnh để hệ thống hóa toàn bộ kiến thức. Tuy hơi nhiều lý thuyết nhưng nếu đã ok 5 môn trên thì môn này chắc chắn ko làm khó được các bạn. Trong môn này, các bạn cần nắm được một vài kiến thức cơ bản sau:
UML: Khái niệm, tác dụng, một vài loại UML cơ bản (class diagram, object diagram, use case, sequence diagram…)
Các Design Pattern căn bản.
Quy trình phát triển phầm mềm (Agile, Scrum)
TDD (Test-Driven Development), DDD
Unit test
7. Tạm kết
Ngoài những kiến thức trên, mình xin recommend thêm một vài gạch đầu dòng nữa:
Tiếng Anh
Cách sử dụng Git
Kĩ năng thuyết trình
Kĩ năng kết nối và trao đổi thông tin.
Trên đây là những chia sẻ từ trải nghiệm làm và dạy lập trình của bản thân mình. Hi vọng sẽ giúp dc chút ít cho các bạn đã, đang và sẽ tìm hiểu về công việc này. Nếu cần hỏi thêm gì, các bạn cứ comment hoặc inbox facebook mình, nếu giúp dc mình sẽ giúp "tới bến"!
Cảm ơn các bạn đã đọc!

Người trong muôn nghề
/nguoi-trong-muon-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất