Em mới học xong C++ giờ em học gì tiếp để đi làm?
Đây là câu hỏi khá phổ biến, vì ai chẳng muốn học để đi làm? Còn gì đau đớn tâm can hơn là học 4-5 năm đại học xong ra phải chạy Grab, mất toi một nửa tuổi thanh xuân.Để trả lời câu hỏi này, bạn cần biết tại các công ty phần mềm người ta làm gì (Ở công ty phần mềm, người ta làm ra phần mềm, ôi dĩ nhiên rồi ) và người ta cần người như thế nào.
Phần mềm có rất nhiều loại, có thể nói con người cần làm gì, thì sẽ có phần mềm hỗ trợ họ làm việc đó. Vậy nên trong bài viết này sẽ chủ yếu nhắc đến những công nghệ phổ biến nhất, sau khi làm vài năm, tùy khả năng và hoàn cảnh đưa đẩy, mỗi người sẽ có con đường đi riêng của mình.
Trước tiên, đã là lập trình thì bạn phải thành thạo một ngôn ngữ lập trình nào đó, có thể là Java, C++, ASM, PHP, Python… thành thạo nghĩa là phải kể vanh vách được các kiểu dữ liệu như thế nào, các vòng lặp được thực hiện ra sao, các bộ thư viện chính là gì, các từ khóa static, interface, import, export, synchronized, await, async… hoạt động thế nào. Các biến được lưu trữ thế nào, kiểu float khi lưu trữ khác gì int, kiểu string khác gì mảng char… Các input/output stream hoạt động như thế nào, dùng thư viện gì để kết nối cơ sở dữ liệu… Để biết một ngôn ngữ nào đó rất dễ, nhưng thành thạo thì rất lâu đấy nhé.
Cấu trúc dữ liệu và giải thuật: đây là một môn học vô cùng thú vị nhưng cũng khá hại não. Nhưng thực sự vô cùng cần thiết, nó dạy cho bạn cách người ta suy nghĩ thế nào, để từ đó bạn biết mình cần suy nghĩ thế nào. Sau này bạn sẽ thấy rất nhiều thứ có trong máy tính đã được xây dựng từ những thứ bạn được học: linked list, tree, graph…
Bạn có thể đọc bài về index (https://daohainam.com/2021/08/13/ban-biet-gi-ve-index/) để thấy người ta dùng B-tree tạo ra các cơ sở dữ liệu như thế nào.
Kiến thức về cơ sở dữ liệu quan hệ: Bạn nên biết về ít nhất một cơ sở dữ liệu nào đó như Mysql, Oracle, Sql Server… Tất cả các CSDL này đều có bản free, nên đừng đổ thừa tôi không có để học nhé. Nhớ học cả về thiết kế, primary key, foreign key, index, các dạng BCNF, cách viết query sao cho hiệu quả, cách thiết kế bảng sao cho tối ưu nhưng vẫn dễ mở rộng về sau…
Kiến thức về OOP: OOP không bao giờ là thừa, bởi nó là một trong những nền tảng cơ bản của hầu hết các ngôn ngữ phổ biến hiện nay: C++, Java, C#… Không những thế nó còn là một cách tư duy để bạn có thể xây dựng những phần mềm lớn và phức tạp.Bạn có thể xem thêm về OOP tại đây: /tag/oop/
Một chút về networking: Bạn cần biết một chút về cách các máy tính trao đổi dữ liệu với nhau, về địa chỉ IP, MAC, port, socket, các giao thức phổ biến: HTTP, FTP, DNS, Name pipes, tìm hiểu về mô hình OSI. Nếu có nhiều thời gian (chắc chắn là có rồi), bạn có thể tìm đọc một quyển sách về CCNA, bạn không cần đọc hết, cũng không cần thi vì bạn là developer chứ không phải network engineer. Nhưng hiểu về mạng sẽ giúp bạn tiết kiệm thời gian giải quyết các vấn đề cài đặt, cấu hình, kết nối web server, SQL server, Mysql…Bạn định bắt người khác cấu hình web server và Mysql server cho bạn để lập trình sao?
Kiến thức về multithreading: Lập trình multi threading luôn là bài toán đau đầu, ngay cả với các lập trình viên nhiều năm kinh nghiệm, bởi độ phức tạp và yêu cầu về hiệu năng thường rất cao. Ngoài ra học về multithreading cũng giúp bạn hiểu sâu hơn về cách hệ điều hành quản lý các tiến trình, bộ nhớ, những cách kiểm soát các tài nguyên dùng chung (semaphore, mutex…). Hiểu về multithread programing luôn là một điểm cộng trong mắt các nhà tuyển dụng.
Linux: có thể bạn không cần phải biết về linux nếu bạn chỉ làm với Windows. Nhưng học cách sử dụng dòng lệnh, cách cấu hình dịch vụ bằng các file config, cách viết các file script, cron job sẽ giúp các bạn rất nhiều cho công việc sau này, vì ai biết được ngày nào đó bạn sẽ phải làm việc với chúng. Cá nhân tôi vẫn thích viết script trên Linux hơn PowerShell trên Windows.Nên nhớ là hiện tại .NET core cũng chạy trên linux, SQL server cũng có bản cho linux, dùng microservice/docker với linux cũng rất phổ biến (mình nghĩ nó còn phổ biến hơn với Windows). Ngay cả Android cũng là một phiên bản của Linux, bạn không nhớ sao?À mà tôi khuyến khích bạn đừng cài GUI nhé, chỉ sử dụng dòng lệnh, nếu bạn muốn thành thạo.
Các công nghệ web phía frontend: để học web, bạn sẽ bắt đầu với HTML, CSS, rồi sau đó học Javascript, đừng dùng bất kỳ framework nào, kể cả bootstrap, jquery. Nguồn tài liệu học mấy thứ này thì vô cùng vô tận. Bởi HTML, CSS và javascript là những thứ cơ bản nhất, nên về lý thuyết bạn có thể tạo ra tất cả mọi thứ trên web chỉ với 3 công nghệ trên, và cũng bởi vậy nên khi đã thành thạo chúng rồi thì việc học các framework sẽ trở nên dễ hơn ăn cháo. Tôi vẫn thấy người ta chia ra làm backend/frontend, nhưng theo cá nhân tôi, cả hai chẳng có gì khác nhau. Nếu bạn quá quan trọng hóa các framework, bạn sẽ bị phụ thuộc vào chúng, khi đó bạn phải cố gắng phân chia ra và nghĩ rằng: “tôi không thuộc về thế giới còn lại”.
Các kiến trúc phần mềm và design pattern: Có một số kiến trúc thường được dùng như 3-tier, SOA… và ngôi sao đang lên microservice, tuy nhiên bạn nên thành thạo các phần trên trước khi tìm hiểu về sâu về chúng. Hi vọng nếu có thời gian tôi sẽ viết chi tiết về các mô hình này.Bạn cũng nên đọc về các design pattern, tức các mẫu thiết kế thường gặp, có thể kể ra như: skeleton, factory, unit of work, repository, IoC, MVC (MVC thường được coi là một mô hình dùng trong tầng presentation trong 3-tier)…
Một vài thứ khác: ngoài những thứ ở trên, còn rất nhiều thứ khác bạn nên tìm hiểu như: NoSQL, caching, cách cấu hình IIS, Apache… tuy nhiên tùy vào nhu cầu thực tế bạn có thể chọn cái nào cần thiết cho bản thân. Vậy đấy, nắm vững những thứ ở trên, bạn có thể tự coi mình là một full stack developer được rồi.
Nhưng làm sao tôi học hết được những thứ ở trên?À đây là câu hỏi tôi dành cho bạn chứ không phải của bạn dành cho tôi. Nhưng nếu bạn vẫn không nghĩ ra đáp án thì để tôi tính cho bạn nhé: trong 4 năm đại học, mỗi ngày học 8 tiếng, bạn có 8 x 365 x 4 = 11680 giờ. Nếu chia cho 8 mục đầu tiên ở trên mỗi mục 1000 giờ thì bạn vẫn còn dư 3680 giờ. Mà đây mới tính cho tới lúc bạn ra trường thôi đấy nhé.
Tới đây có thể bạn sẽ hỏi làm sao có thể học một ngày tới 8 tiếng đồng hồ, còn các môn học khác thì sao? Tiếc là tôi không trả lời được câu này, vì nó lại là câu hỏi dành cho bạn chứ không phải cho tôi.
À đừng quên tiếng Anh nữa nhé: https://daohainam.com/2021/08/13/tieng-anh-co-can-cho-nguoi-lap-trinh-khong/
Tôi chỉ có một kinh nghiệm duy nhất cho bạn, đó là hãy thực hành thật nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều nhiều vào.
One thought on “BẠN HỌC GÌ ĐỂ ĐI LÀM?”