Hôm qua đi đá bóng, gặp thằng cu em than vãn với mình rằng học ở trường toàn kiến thức xa vời thực tế. Điều này không phải lần đầu tiên mình được nghe, trái lại mình còn nghe câu này quá thường xuyên từ đủ các nguồn, từ người lớn tuổi, báo đài, cho đến sinh viên đang đi học. Theo mình thì câu này không hề sai, nhưng cũng không đúng. Mình sẽ nói rõ hơn quan điểm của mình trong bài viết này.

Có một điều mà ai cũng phải thừa nhận, đó là không phải cái gì học trong trường cũng có ích cho bản thân chúng ta. Thời đi học đại học mình thường xuyên mang laptop lên lớp giờ Mác Lênin ngồi đá PES hoặc bắn CS lũ bạn (lâu lâu cô giáo đang giảng bài lại thấy từ cuối lớp vang lên tiếng chửi “đmm rùa vkl” ). Cho đến giờ mình dám mạnh dạn khẳng định rằng mình không hề hối tiếc khi từ chối nghe giảng trong giờ học, dù chỉ một chữ.

Sau này khi học đến chuyên ngành, mình dính phải kha khá môn mà mình cũng rơi vào tình trạng không muốn nghe. Nếu mình phải trao giải môn chuyên ngành vô ích nhất mình từng học trong trường Bách Khoa, chắc phải nói đến môn Kinh tế Công nghệ phần mềm, môn này mình được học vào đầu năm cuối. Thời điểm đó mình đã đi làm cả ngày ở Tofu, nên sau buổi đầu tiên lên nghe thầy giáo nói về thông tư với nghị định, mình quyết định là từ các buổi sau mình sẽ bùng . Nói vậy nghĩa là, việc kiến thức trong trường đại học khá hàn lâm và xa rời thực tế là có thật.

Nhưng quãng thời gian đi thực tập, cũng như đi làm chính thức, mình nhận ra rằng, khoảng cách này không xa như mình từng nghĩ.

Trước tiên, hãy nói về kiến thức, vì nếu hỏi một người rằng vì sao học đại học là không đủ để đi làm, rất có khả năng vấn đề về kiến thức sẽ được nêu ra nhiều nhất. Như đã nói ở trên, trường đại học dạy không ít thứ sida, kể cả một số môn chuyên ngành. Tuy nhiên, chúng ta nên nhìn từ phía của trường đại học một cách khách quan: việc xây dựng một chương trình học phù hợp cho tất cả sinh viên là điều không thể. Lấy ví dụ, nhóm 20 thằng mà mình chơi chung hồi đại học, bây giờ đi làm ở đủ các mảng khác nhau trong ngành phần mềm, đếm sơ cũng được trên chục mảng. Kiến thức vì thế cũng khác biệt, thằng mạnh mảng này, thằng bá đạo mảng khác. Vì thế, mình cho rằng trường đại học chỉ có thể trang bị cho sinh viên kiến thức nền tảng của ngành phát triển phần mềm, còn đào sâu vào cái gì thì sinh viên phải tự chủ động - dù sao cũng là tương lai và sự nghiệp của bản thân mình kia mà? Ngoài ra, học có chọn lọc là một kỹ năng mà mình càng ngày càng thấy tầm quan trọng của nó.

Nếu phải vạch ra những kiến thức quan trọng mà mình đã học được trong trường đại học, thì đó là những môn này: Đại số, Vật lý cơ học, Xác suất, Cấu trúc dữ liệu và giải thuật, Kiến trúc máy tính, Lập trình hướng đối tượng và đồ hoạ máy tính. Mình sẽ chia nó làm ba cụm.

Cụm thứ nhất là phần kiến thức khoa học căn bản, bao gồm vật lý và xác suất thống kê. Vật lý quan trọng thế nào trong phát triển game thì có lẽ mình không cần nói thêm nữa, vì bên cạnh phần đồ hoạ, vật lý là thứ mang lại trải nghiệm rõ rệt nhất cho người chơi. Không ai nói vật lý trong Limbo giống Angry Bird hay Temple Run cả. Về xác suất thống kê, game thường bao gồm các yếu tố ngẫu nhiên. Để làm việc tốt với những đại lượng không đoán trước được này, bạn chắc chắn phải cần kiến thức về xác suất rồi.

Cụm thứ hai bao gồm các kiến thức căn bản của một lập trình viên, bao gồm cấu trúc dữ liệu và giải thuật cùng với lập trình hướng đối tượng. Lập trình hướng đối tượng, theo mình là cách tự nhiên nhất để mô tả một game. Mọi thứ đều là đối tượng: quái vật, viên đạn, cây kiếm…. Cách mà bạn định nghĩa cho các đối tượng này tương tác với nhau chính là cách mà game của bạn hoạt động. Với cấu trúc dữ liệu và giải thuật thì mọi chuyện không rõ ràng và trực tiếp như vậy. Các ngôn ngữ lập trình và các thư viện đi kèm chúng đều rất đầy đủ và được sử dụng rộng rãi trong môi trường thực tế, tức là đã trải qua bước chọn lọc tự nhiên rồi. Điều này có nghĩa là không ai yêu cầu bạn phải tự viết lại một thuật toán hoặc một cấu trúc dữ liệu đã có sẵn, trừ khi họ có lý do vô cùng thuyết phục để làm như vậy. Cái bạn cần ở đây là biết dùng cái gì trong một hoàn cảnh cụ thể. Lấy ví dụ nhé, một lũ quái chạy loăng quăng có thể dùng mảng một chiều cho đơn giản, nhưng nếu chúng đi thành hàng (kiểu như rắn săn mồi), thì mình sẽ cân nhắc sử dụng danh sách liên kết.

Cụm thứ ba chính là kiến thức đặc thù của phát triển game: đại số, kiến trúc máy tính và đồ hoạ máy tính. Đồ hoạ ở đây không phải là học vẽ với photoshop đâu nhé. Ở trường Bách Khoa thì môn này nói về cấu tạo của các định dạng ảnh, các mô hình 3D, rồi các thuật toán xử lý các đối tượng này sao cho phù hợp, vân vân. Nghe thì có vẻ không liên quan, nhưng kiến thức về đại số khá cần thiết cho môn học này cũng như cho sự nghiệp làm game về sau của mình. Những thứ như vector, ma trận hay hệ toạ độ được dùng rất rộng rãi trong hầu như khắp mọi nơi. Kiến trúc máy tính thì liên quan đến phần tối ưu nhiều hơn, nhờ kiến thức về tập lệnh máy tính, tổ chức bộ nhớ và giao tiếp giữa bộ nhớ và CPU. Cái này nếu có thời gian mình sẽ viết chi tiết hơn sau.

Đó là lý do mình hay khuyên các bạn còn đang đi học là nên đi làm sớm. Làm đúng chuyên ngành của mình, chứ không nói đến đi phục vụ ở quán cafe, chạy Grab hay phát tờ rơi. Không phải là vì mấy ngành đó hèn kém, mình tôn trọng tất cả ngành nghề, mà với tư cách là một sinh viên ngành công nghệ thông tin, những công việc trên có thể giúp bạn kiếm thêm thu nhập, và chỉ dừng lại ở đó mà thôi. Bạn sẽ không học được gì, hoặc học được rất ít những kinh nghiệm có ích cho môi trường phát triển phần mềm chuyên nghiệp.

Đi làm đúng chuyên ngành ngay từ khi ở trên ghế nhà trường không chỉ giúp bạn có thêm kinh nghiệm thực tế để ghi vào CV, vốn rất có lợi cho bạn khi nộp đơn ứng tuyển vào các công ty. Điều này còn mang lại cho bạn cơ hội thực hành những kiến thức bạn vừa học trên trường vào môi trường thực tế, khiến cho những kiến thức đó không bị mai một và bạn cũng sẽ nắm chắc những kiến thức đó hơn. Khi được dạy trong trường, kiến thức có vẻ như các mảnh rời rạc không liên quan gì đến nhau, nhưng khi làm việc thực tế bạn sẽ lại thấy chúng liên kết với nhau khá chặt chẽ đấy.