Mặc dù những kiến thức mà bạn học được trong trường là vô cùng có ích cho công việc của bạn, rõ ràng hai môi trường vẫn khác nhau rất nhiều. Bài viết lần này của mình sẽ trình bày về vấn đề ngược lại với bài trước - tập trung nói về những thứ mà trường học không dạy bạn.

Một hình ảnh khá quen thuộc với đa số nhóm sinh viên, đó là nhóm sẽ có một hai lực sĩ gánh tạ xử lý hầu hết công việc. Ngược lại với các lực sĩ, chúng ta có những cục tạ, không làm cái gì từ đầu tới cuối. Tạ cũng có nhiều loại, loại chịu khó mua trà nước mời lực sĩ, loại điện thoại để làm chuông báo thức, hay loại được giao việc gì cũng ừ nhưng lại không làm .

Các team chuyên nghiệp thì lại khác, tất cả mọi người đều xắn tay vào làm công việc của mình. Dù ai cũng có lúc rảnh tay, nhưng nhìn chung thì thời gian rảnh tay là không nhiều trong suốt dự án, chưa kể những lúc tối mắt tối mũi với đống việc xung quanh. Đó là sự khác biệt đầu tiên giữa một team chuyên nghiệp và một team sinh viên, cũng là thứ gây ra khá nhiều khó khăn cho các bạn sinh viên mới ra trường, dù là lực sĩ hay tạ.

Khác biệt tiếp theo, đến từ dự án. Các dự án mà các bạn sinh viên phải code trong trường đại học thường có thời lượng ngắn, khoảng 1 học kỳ, đôi khi ngắn hơn với một vài môn học đặc thù như Cấu trúc Dữ liệu và Giải thuật, và có yêu cầu rõ ràng, rành mạch. Ngược lại, các dự án chuyên nghiệp thì lại có thời gian kéo dài hơn rất nhiều, với những yêu cầu thay đổi như chong chóng. Mình đã thấy rất bất ngờ và có phần chán nản khi dành ba tuần liên tiếp ngồi chỉnh sửa từng dòng code cho cơ chế bắn súng của con Galaxy Gunner, với thay đổi trong yêu cầu diễn ra sau mỗi tuần, đôi khi là chỉ một hai ngày. Khi mình nhận thấy thứ mình có trong tay chính là phiên bản ban đầu, mình chán lại càng thêm chán .

Yêu cầu thay đổi liên tục cũng gây nên một vấn đề mới với các bạn sinh viên, đó là chỉnh sửa, bảo trì và thay đổi code khi code cũ không còn phù hợp với yêu cầu mới. Khi ấy, chất lượng của code như code dễ đọc, dễ hiểu, dễ thay đổi trở nên rất quan trọng và tiết kiệm rất nhiều thời gian cho cả team. Nếu một ngày bạn cảm thấy bực bội khi phải sửa một đoạn code khó hiểu thì xin chúc mừng, bạn đã bắt đầu biết thế nào là code tốt và code xấu. Cũng đừng lo lẵng hay buồn bã, vì trải qua nhiều dự án cộng với nghiên cứu nhiều tài liệu thì bạn sẽ biết những cách xử lý tốt hơn mà thôi (không liên quan nhưng đó cũng là lý do mà mình luôn nhìn các bậc tiền bối với 5, 10, 20 năm kinh nghiệm với con mắt ngưỡng mộ và luôn tò mò về việc họ giải quyết vấn đề như thế nào ).

Ngoài khác biệt về tinh thần và thái độ làm việc, các bạn sinh viên thường hay gặp khó khăn trong việc sử dụng công cụ làm việc, vốn không được chú trọng trong trường đại học. Thứ đầu tiên mình nói đến, đó là IDE - vốn anh em hay gọi bằng tên tục “trình viết code”(*). Các bạn sinh viên, bao gồm có mình, thời đi học thường không tận dụng tối đa các tính năng của các IDE kiểu Visual Studio vì đủ thứ lý do: sợ lạm dụng công cụ sẽ không nắm vững bản chất, thấy thằng kia dùng Notepad++ trông khệnh vãi, hoặc đơn giản là không biết, chương trình chạy được là xong bố éo quan tâm. Thế nên là việc in log lỗi vô tội vạ rất phổ biến trong các dự án của sinh viên, vì có biết dùng trình debug đâu .

Công cụ thứ hai mình muốn bàn đến, đó là công cụ quản lý phiên bản (version control system) như SVN hay git. Hiểu nôm na thì các công cụ này theo dõi tất cả các file trong project của bạn theo thời gian, do vậy bạn có thể quay về mọi phiên bản trong quá khứ nếu phiên bản hiện tại của bạn có lỗi gì đó. Các trường đại học không dạy phần này, có lẽ vì nó khá đơn giản, nên nhiều bạn sinh viên cũng bỏ qua, thậm chí không biết đến sự tồn tại của loại công cụ này. Kết quả là mình đã chứng kiến tận mắt nhiều dự án, kể cả đồ án tốt nghiệp đại học, vẫn dùng phương pháp copy ra folder khác và đặt tên khác đi.

[caption id=”” align=”aligncenter” width=”1534”] FinalFinalFinalReallyFinal[/caption]

Công cụ thứ ba là công cụ theo dõi tiến độ. Không rõ các bạn thế nào, các dự án thời sinh viên của mình đều bắt đầu một cách hoành tráng với đủ thứ mộng tưởng, để rồi hết nửa thời gian làm phải cắt giảm nhiều yêu cầu do mọi thứ vẫn chưa đâu vào đâu. Đến giai đoạn cuối thì vắt chân lên cổ mà chạy để còn nộp bài cho thầy, vì đến ngày trước hạn chót bấm compile máy vẫn báo một đống error . Chưa kể một đống thời gian bị lãng phí do cứ phải hỏi nhau ai làm phần nào, chỗ này đã có ai giải quyết chưa, đậu má lại lỗi này thằng nào code chỗ này đây,… Các công cụ theo dõi tiến độ sinh ra để các bạn có thể lập kế hoạch dễ dàng hơn và nắm được ai đang làm công việc gì. Các bạn sinh viên thiếu kinh nghiệm thường không có thói quen cập nhật công việc đang làm lên các công cụ này, do chỉ quen làm việc với các team nhỏ khoảng 5 người đổ lại (thực ra mình cũng cho rằng với team khoảng 5 người thì… thôi nói miệng cho nó nhanh). Với các team chuyên nghiệp với kích thước từ trung bình tới lớn, từ 10 người trở lên, tiết kiệm được thời gian hỏi nhau làm gì đã tăng thêm đáng kể thời gian làm việc rồi. Thông thường thì team càng lớn, việc đảm bảo quy trình lại càng quan trọng.

Và cuối cùng, khi nộp báo cáo và sản phẩm cho thầy giáo trong trường đại học, các bạn sẽ có thể tự hào khoe ra các chi tiết kỹ thuật hay ho mà các bạn đã thực hiện trong suốt quá trình làm, khi các team khác nhìn các bạn với con mắt hâm mộ còn thầy thì há hốc mồm vì ngạc nhiên (éo có đâu, tỉnh dậy đi). Nhưng khi đi làm thì thực sự là hầu hết mọi người không quan tâm. OK, có thể là anh em cùng đội code vẫn sẽ chia sẻ cho nhau những chi tiết hay ho mà mình xử lý, nhưng đừng mong các team khác, sếp lớn và người dùng để tâm. Sản phẩm là thứ duy nhất quan trọng.

-–

(*) Tiếng Việt giao tiếp không có thuật ngữ thay thế cho IDE. IDE là Integrated Development Environment, “môi trường phát triển tích hợp”, nên mình dùng tạm thuật ngữ “trình viết code” cho nó dân dã. “Trình viết code” có thể được dịch thô ra tiếng Anh là text editor, vốn chỉ là một thành phần của IDE, bên cạnh trình debug (debugger), trình dịch (compiler/interpreter), cùng các tool phụ trợ khác. Visual Studio hay Netbeans là các IDE, trong khi đó Visual Studio Code, Notepad++ hay vim chỉ được tính là text editor thôi - có chăng là text editor có khả năng mở rộng (extensible).