Những điều trường đại học không dạy bạn – Phần 1

Lang thang trên mạng đọc được một bài viết có tên là “Những điều trường học không dạy bạn”, bỗng dưng muốn viết một bài tương tự, dành cho dân developer tụi mình. Kinh nghiệm làm việc của mình cũng kha khá, có thể sẽ không đầy đủ, rất mong comment góp ý ủng hộ của các bạn.

Có rất nhiều điều chúng ta không được học ở trường (Nhưng lại vô cùng cần thiết), mình tạm chia ra làm 3 phần.

Đây là phần đầu trong series bài viết “Những điều trường đại học không dạy bạn”:

  1. Kĩ thuật lập trình
  2. Cách nâng cao giá trị bản thân
  3. Thành công và thăng tiến trong môi trường làm việc

Ở phần 1 này, mình sẽ nói về kĩ thuật lập trình.

Ở Việt Nam, đa phần các bạn lập trình viên thường là sinh viên tốt nghiệp ngành Khoa học Máy tính (Computer Science) ở trường đại học, 1 số bạn tự học hoặc học qua 1 số trung tâm.

Mảng Khoa học Máy tính thường nặng về tính khoa học, nghiên cứu. Những kiến thức về hệ điều hành, thuật toán và cấu trúc dữ liệu v….v mà trường dạy là vô cùng cần thiết với các developer, mình không phủ nhận.

Tuy nhiên, code, ngôn ngữ lập trình và design lại khá bị xem nhẹ. Do đó, khi bắt đầu làm việc, đa phần các bạn sẽ thiếu những kĩ năng sau đây:

Cách đọc và viết code

Khi còn ở đại học, khi bạn viết ra code chạy đúng, chạy được, giải quyết xong bài toán tức là bạn giỏi. Trong các kì thi cũng thế. Trong công việc thì khác, chạy đúng là yêu cầu bắt buộc, nhưng code được viết ra còn phải dễ hiểu, dễ đọc, dễ bảo trì và sửa chữa.

Vì sao? Trong ngành này, code không phải chỉ viết 1 lần rồi bỏ đó, ta phải bảo trì, nâng cấp, sửa chữa thường xuyên. Như mình đã nói ở các bài viết trước, hãy chọn cách đơn giản, dễ hiểu, đừng chọn cách thông minh để rồi không ai hiểu.

Ngày xưa mình cũng từng là sinh viên giỏi, từng nghĩ mình code hay này nọ… sau khi đi làm hơn 1 năm rồi, đọc lại đống bùi nhùi trông như là code của mình mới nhận ra ngày xưa mình trẻ trâu thế nào.

Trường đại học dạy ta vô số thứ: lập trình hướng đối tượng, tính bao đóng, tính kế thừa v…v, nhưng chẳng ai dạy các bạn về SOLID – Những điều lập trình viên nào cũng cần nắm rõ; không ai dạy các bạn cách đặt tên hàm, tên biến, cách viết API cho dễ sử dụng; không ai dạy design pattern – một thứ để phân loại lập trình viên junior và senior.

Các bạn hãy đọc 2 cuốn: Code CompleteClean Code, chỉ cần hiểu và áp dụng khoảng 30-50% những điều trong sách này, các bạn đã giỏi hơn 50% số developer còn lại rồi đấy

abcd

Sử dụng IDE, debug

Mình không vơ đũa cả nắm, nhưng một số trường vẫn còn sử dụng phương thức kiểm tra giấy cho các kì thi lập trình. Sau đó giáo viên sẽ đọc code của từng học sinh, thật là cực cả thầy lẫn trò. Sinh viên code C, C++ trên notepad, hoặc 1 số ide, sau đó thì chạy code.

Đến khi đi làm, nhiều bạn không biết sử dụng IDE như Eclipse, Visual Studio,… không biết dùng Nuget, Maven .. Mình thì may mắn hơn, thời gian code chiếm 70% thơi gian học, được sử dụng VS khi học C++, dùng NetBeans khi học Java, cơ mà cũng tới năm 3 mới bắt đầu biết set breakpoint để debug chương trình.

Do đó mình thấu hiểu nỗi khổ của nhiều bạn học lập trình theo kiểu học thuật, không được code đủ.

tumblr_m09tsaSKa21qbkusho1_1280

Testing, unit test

Trong chương trình học của 1 số trường vẫn có môn Kiểm thử phần mềm. Tuy nhiên, nhiều sinh viên CS vẫn ngáo ngơ không biết test case là gì, thế nào là black-box, white-box testing.

Một số câu khoai hơn như: NUnit, JUnit, Jasmine là gì … làm sao sử dụng mock, stub, dùng IoC càng không ai biết. Có người sẽ chu môi: Dào, tao đi code chứ có phải đi làm test đâu.

Điều này hoàn toàn sai nhé! Để làm một developer giỏi, phải chắc rằng code mình viết ra không lỗi. Để đảm bảo code không lỗi, phải có suy nghĩ của một tester, nghĩ ra những case để kiểm thử nó.

continuous-testing

Agile Development

Ở trường đại học, chúng ta được học về “quy trình phát triển phần mềm”, học về waterfall, agile v…v (Một số trường không có). Tuy nhiên, chúng chỉ là những kiến thức nhàm chán trên giấy mà ai cũng quên ngay sau khi thi.

Đến khi bắt đầu làm việc, bạn sẽ ngáo ngơ khi vào daily meeting, planning meeting, ko rõ quy trình … vì không biết Scrum, XP là cái khỉ gì (Hồi vào FSOFT mình cũng ngáo ngơ, phải lên scrumtraining để học thêm.

AgileD

Source code control system

Đây là một thứ khá đơn giản nên nhà trường cho rằng các bạn có thể tự học được. Hãy nhìn cách các nhóm SV năm nhất, năm 2 khổ sở làm bài tập lập trình nhóm: Mỗi người làm một phần, sau đó họp cả team ghép code lại, mất code là mất luôn (Mình cũng từng trải qua cảnh ấy, cũng may về sau đỡ hơn).

Hậu quả là các SV mới ra trường phải được training lại về cách dùng SVN, dùng Git, hoặc TFS (Quảng cáo tí, chương trình Fresher của Fsoft có training cái này). Cuộc sống SV của bạn sẽ dễ thở hơn nếu bạn tự trang bị kiến thức về cách dùng Git, SVN cho mình.

git-t-shirt

Cách dùng thư viện và framework

Do bản chất của chuyên ngành Computer Science, các trường chỉ dạy 1 số ngôn ngữ như C++, Java để dạy các môn còn lại. Nhiều sinh viên ra trường vẫn không biết dựng 1 trang web như thế nào, ngôn ngữ này có framework gì hay, làm sao để hiểu và sử dụng API của 1 thư viện nào đó.

Các trường chỉ dạy 1 vài mô hình MVC, MVP, MVVP trên giấy, còn cách dùng những thư viện, framework nổi tiếng như: Struts 2, ASP MVC, Ruby on Rails, jQuery … còn tùy vào khả năng tự học của sinh viên. (Bài viết này không nói tới vài bạn có khả năng tự học giỏi, tự tìm hiểu và đã rành rọt vài ba framework khi mới ra trường nhé).

JavaScript-Code-Libraries

Hẹn gặp lại các bạn ở phần 2, mình sẽ nói tới 1 điều nữa quan trọng không thua gì kĩ thuật lập trình: Cách nâng cao giá trị bản thân.

30s quảng cáo

book.jpg

Đây là một bài viết được trích dẫn từ cuốn sách “Code dạo kí sự – Lập trình viên đâu phải chỉ biết code” do mình viết. Quyển sách bao gồm những kĩ năng từ mềm đến cứng mà mỗi developer phải có, đảm bảo sẽ rất có ích cho các bạn sinh viên hoặc lập trình viên đã đi làm. Các bạn xem thông tin và đặt mua sách tại đây nhé: Sách Code Dạo Ký Sự.

9 thoughts on “Những điều trường đại học không dạy bạn – Phần 1”

  1. Cảm ơn bạn, bài viết rất hay, phản ánh đúng thực trạng hiện nay của phần lớn SV CNTT mới ra trường, hầu hết các bạn đều không biết cách code như thế nào là hay, là khoa học, mà toàn là code theo kiểu rất cao siêu, gì cũng code được, nhưng chỉ mình coder hiểu, người khác nhìn vào thì chịu

    Liked by 1 person

  2. Đọc xong bài của anh mới thấy bản thân còn thiếu sót rất nhiều.
    Sắp ra trường và cảm thấy hoang mang quạ =.=
    Cảm ơn bài viết của anh nhiều lắm!

    Like

  3. Cảm ơn vì bài viết, bài viết khá hay. 🙂 Mình cũng thấy những kiến thức ở trường là không thể đủ. đòi hỏi sinh viên phải tự học nhiều hơn. Ở trường họ chỉ dạy những thứ rất cơ bản, mà một số môn học khá vô bổ. Nhưng cũng nhiều sinh viên ra trường không làm code, họ vẫn làm về công nghệ nhưng đi theo các hướng như: tester, BA …

    Liked by 1 person

  4. Dạ em chào a, a cho em hỏi là năm nhất ngành Truyền thông và mạng máy tính thì em nên học thêm những những thứ căn bản gì trước ạ ? em cảm ơn a

    Like

Leave a comment