Trong này có nhiều bạn đang là sinh viên CNTT, hiểu biết và kinh nghiệm còn thiếu. mình viết thread này hy vọng sẽ giúp các bạn có cái nhìn khái quát hơn về việc cần học gì để ra trường có cái điền vào CV và biết cái chém gió khi phỏng vấn, ngoài ra đỡ bị bỡ ngỡ khi vào việc thật
Để tránh tranh cãi ko cần thiết , mình xin nói luôn:
- Đây là ý kiến cá nhân của mình. các bạn có thể tham khảo hoặc ko. Dĩ nhiên nếu bạn là siêu sao, hoặc bạn chọn 1 lối đi quá specific như kiểu lập trình nhúng thì có lẽ những điều sau đây ko phù hợp với bạn. còn nếu bạn đi theo con đường LTV thông thường và ko muốn lãng phí thời gian SV thì có thể coi nó như những thứ tham khảo xem nên định hướng học gì và cần trang bị những gì trước khi ra trường. tất nhiên, sau khi ra trường, chỉ dám hy vọng bạn nắm đc khái niệm và biết cách sử dụng, còn lại sẽ được học trong môi trường thực tế rất nhiều.
Hiểu biết cơ bản:
Hiểu được thế nào là chương trình, lập trình, bộ nhớ, thanh ghi
Hiểu được idea của các loại data structs và thuật toán cơ bản. nếu implement được trên 1 ngôn ngữ dạng mainstream thì càng tốt
Hiểu biết về nền tảng:
2 nền tảng cơ bản và lớn nhất hiện nay là .NET và Java (có thể kể thêm PHP), nên nắm tương đối vững về 1 trong 2 nền tảng này, bao gồm những khái niệm cơ bản nhất. Ví dụ như với .NET thì biết được CLR, CIL, BCL, JIT,... là gì. Biết sử dụng framework một cách cơ bản, nếu học thêm về những framework mở rộng cho 2 framework thì càng tốt (ví dụ Spring/Struts/Hibernate với Java, MVC/EF/WCF/WPF/WF với .NET). Cách tốt nhất là viết được 1 ứng dụng non-trivial (kiểu như helloworld hay giải phương trình bậc 2) trên framework đó
Hiểu biết về CSDL
Phần mềm nào cũng cần CSDL, vì vậy ngay cả khi bạn là 1 web developer thì cũng ko nên bỏ qua cái này. Tổ chức dữ liêu dạng relational, chuẩn hóa dữ liêu về dạng NF3 là yêu cầu bắt buộc. Có khả năng thiết kế 1 DB loại vừa. hiểu được các khái niệm cơ bản về Index, key,...viết được SQL với các điều kiện đơn giản.
Hiện nay 3 DB phổ biến nhất ở VN là Oracle (dùng trong các doanh nghiệp lớn, ngân hàng,...do chí phí cao, khó học, thường đi kèm với Java), SQL Server (chủ yếu dùng cho ASP.NET) và MySQL (đi kèm với PHP). Các DB khác như DB2 hay PostgreSQL ít phổ biến hơn. tùy theo framework mà bạn đã chọn, nên học thêm về DB tương ứng. SQL của mỗi loại sẽ có những thứ khác nhau, đồng thời nên học qua về những thứ sơ đẳng nhất trong quản trị.
Hiện nay, các DB dạng NoSQL đã trở nên xu hướng, nên nếu có điều kiện thì nghiên cứu thêm cả MongoDB, CouchDB, Cassandra,...
Hiểu biết về công cụ
Biết sử dụng ít nhất 1 IDE (2 cái cơ bản nhất hiện nay là VS và Eclipse, ngoài ra còn có Netbeans, Zend Studio, Aptana,...), 1 công cụ editor mạnh như Notepad++ cũng là ko thể thiếu. Ngoài ra các công cụ hỗ trợ để deploy/test như Unleash It, FTP các thể loại,... cũng nên biết cách sử dụng cơ bản
Hiểu biết về quy trình
Hiện nay Agile là một phương pháp phát triển phần mềm rất phổ biến, nhưng trừ những công ty nước ngoài thì ít thấy các cty VN sử dụng phương pháp này. Theo quan điểm của mình thì nên tìm hiểu về các phương pháp Agile như Scrum/Kanban, hiểu được các triết lý và nguyên tắc cơ bản của nó.
Biết sử dụng 1 cái source-control. Trong đó cơ bản nhất là SVN (rất nhiều cty sử dụng, biết cách setup 1 cái server, commit-update-merge), nếu có điều kiện thì xem qua các VSC khác như TFS, hay tốt hơn nữa là các DVSC như Mercurial/Git (2 cái này đang hot)
OOP
Nói gì thì nói, OOP vẫn là cách tiếp cận và thiết kế phổ biến nhất hiện nay, và nó sẽ còn sống rất lâu nữa, ít nhất là đến khi nào Java/.NET còn tồn tại. vì vậy, học về những khái niệm của OOP không bao giờ là thừa. Ngoài việc nắm được những kiến thức cơ bản về OOP, sẽ rất tốt nếu như bạn có thể hiểu và nhận biết được các design patterns. Trên quan điểm cá nhân, design patterns là vấn đề khá khoai, từ lý thuyết đến áp dụng là một khoảng cách dài, tuy nhiên, đây là yêu cầu bắt buộc để thiết kế phần mềm tốt. nếu làm việc cho các cty sản xuất products, đây là yêu cầu bắt buộc cho các senior dev. vì vậy đừng ngại khó nếu muốn bạn muốn chuẩn bị 1 tương lai tốt hơn cho mình
Engineering Best Practices
Thực ra thì việc áp dụng design patterns vào thực tế là một phần khá quan trọng của engineering best practices, nhưng không phải là tất cả. Đây là những "kinh nghiệm", những "bài học" mà giới LT đã đúc kết trong thời gian dài. bạn nên học và tích lũy càng nhiều càng tốt. Ví dụ trong .NET, khi phải nối nhiều string với nhau, thì dùng StringBuilder thay vì dùng string +. Hoặc ko check-in những đoạn commented out code,... Nói chung đây là kiến thức tổng quát nên yêu cầu thời gian tìm tòi và ghi nhớ. bạn có thể bắt đầu với cuốn "Effect java, 2nd ed", một cuốn dành cho Java nhưng có rất nhiều lời khuyên hữu ích về OOP nói chung.
Một vài ghi chú khácHọc cái gì
Có thể những bạn mới học sẽ thấy chóng mặt với những thứ liệt kê ở trên. tuy nhiên bạn cần phải lựa chọn và học dần đần. với 1 người chưa biết gì, nếu chịu khó thì sau 2 năm có thể nắm đc những thứ tương đối cơ bản ở trên, và có thể làm việc mà ko quá bỡ ngỡ. đồng thời đây sẽ là nền tảng kiến thức giúp bạn học sâu hơn.
///tạm tạm thế, sẽ update dần dần