31/08/2018, 15:27

Làm lập trình game có dễ dàng như bạn tưởng?

Nghề lập trình game đang thu hút rất nhiều nhân lực IT trẻ quan tâm. Được thỏa sức sáng tạo, theo đuổi đam mê mà vẫn có mức thu nhập hấp dẫn là những lí do hàng đầu. Đọc bài phỏng vấn của ITviec với anh Trần Mai Nam , game developer của GIANTY Vietnam, để biết: Làm lập trình game là làm gì? ...

Nghề lập trình game đang thu hút rất nhiều nhân lực IT trẻ quan tâm. Được thỏa sức sáng tạo, theo đuổi đam mê mà vẫn có mức thu nhập hấp dẫn là những lí do hàng đầu.

Đọc bài phỏng vấn của ITviec với anh Trần Mai Nam, game developer của GIANTY Vietnam, để biết:

  • Làm lập trình game là làm gì? Những kĩ năng nào quan trọng nhất đối với một game developer?
  • Những kinh nghiệm xương máu sau gần 10 năm làm lập trình game
  • Lời khuyên dành cho các bạn trẻ muốn trở thành game developer

Tham khảo hàng trăm việc làm game tại ITviec.

Tiểu sử: Khi vừa tốt nghiệp khoa CNTT Đại học Bách khoa TP. Hồ Chí Minh (2008), anh Nam tình cờ được tuyển vào GSS, bộ phận chuyên làm game của Vinagame (VNG hiện nay) và làm ở đó đến đầu năm 2012, vị trí senior game developer. Sau đó, anh làm dự án mô hình thực tế ảo máy bay F16 cho Singapore Air Force.

Tháng 06/2012, anh quay lại ngành game làm lead developer cho Joombi Games.

Từ 2012 đến nay, dù trải qua nhiều dự án ở các công ty khác nhau, anh Nam vẫn tiếp tục gắn bó với nghề lập trình game.

Hiện anh đang là một game developer kỳ cựu của GIANTY Vietnam.

Anh có thể giải thích một chút công việc của game developer?

Game developer là người, bằng hiểu biết về kĩ thuật của mình, hiện thực hóa ý tưởng/bản thiết kế của designer thành sản phẩm cụ thể, hoàn chỉnh.

Nghề lập trình game chia làm 2 nhánh chính là front-end và back-end. Hai nhánh này lại chia thành nhiều nhánh nhỏ hơn, ví dụ:

  • Front-end: UI/UX, graphic, gameplay, tools, engine, script programmer.v.v…
  • Back-end: database administrator, system engineer, network programmer, custom services developer.v.v…

Cá nhân anh thì chuyên về front-end.

Sự khác biệt giữa làm front-end và back-end trong lập trình game là gì?

lap-trinh-game

Ảnh vui về front-end và back-end developers

Cả front-end lẫn back-end đều tham gia phát triển các tính năng cho game.

Tuy nhiên, front-end sẽ đảm nhiệm những tính năng giao tiếp trực tiếp với người dùng, ví dụ như hệ thống UI, các hiệu ứng đồ họa, âm thanh, hình ảnh trong game.v.v…

Trong khi đó, back-end sẽ đảm nhiệm những phần mà người dùng không “nhìn tận mắt, nghe tận tai”, ví dụ như lưu trữ dữ liệu trên các server, quản lý hệ thống mạng.v.v…

Tại sao anh chọn làm front-end?

Do duyên thôi em. Khi mới vào nghề, anh được giao task trong mảng front-end, rồi theo luôn từ đó cho tới nay.

Làm front-end cũng vui, vì được làm việc trực tiếp với các họa sĩ, rồi được góp phần tạo ra những hiệu ứng hình ảnh đẹp mắt nữa.

Tuy nhiên, anh cũng có nhiều kinh nghiệm về back-end, và từng đóng vai trò full-stack developer trong một vài dự án, ví dụ như Võ Sĩ Thép của Joombi Games.

Hầu hết các game developer sau một thời gian dài làm việc đều tự học hỏi để trở thành full-stack developer, vì muốn có thể tự phát triển một sản phẩm game của riêng mình.

Công việc hàng ngày của một front-end game developer bao gồm:

Buổi sáng:

Nhận và đọc tài liệu miêu tả một tính năng game do game designer, PM, hoặc cũng có khi do chính khách hàng cung cấp.

Trao đổi trực tiếp với người thiết kế tính năng đó để hiểu rõ hơn về yêu cầu. Đóng góp ý kiến để hoàn thiện tính năng hơn.

Trao đổi trực tiếp với họa sĩ để thống nhất graphic resources cần thiết cho tính năng này.

Buổi chiều:

Viết code để hiện thực hóa bản thiết kế.

Tùy vào độ phức tạp của từng tính năng mà việc này sẽ hoàn thành trong ngày hoặc cần nhiều thời gian hơn.

Cuối ngày, game developer sẽ commit toàn bộ những gì đã làm được vào một branch của riêng họ trên mạng nội bộ. Chỉ khi hoàn tất 100% tính năng, họ mới được commit vào branch chính của dự án.

Trong dự án game Madzone từng có trường hợp 1 bạn dev chưa hoàn tất 100%, chưa test kĩ phần mình làm mà đã vội commit.

Hậu quả, ngày hôm sau phát sinh lỗi từ tính năng này, làm cho tất cả các thành viên dự án không thể tiếp tục chạy game. Cả team đành phải revert lại toàn bộ phần mà bạn này đã commit lên.

Sau giờ làm việc:

Ở lại công ty khoảng 1 giờ để chơi game trên mạng nội bộ với đồng nghiệp. Đây là nơi lí tưởng để tìm bạn chơi game “hợp cạ” hoặc “đối thủ” xứng tầm.

Bọn anh thường chơi những game có tính năng đối kháng trực tiếp như PES, Street Fighter.v.v. hoặc “lập đội” chơi DotA, Counter Strike GQ.v.v. để so tài với team khác trên Internet.

Việc chơi game này để giải trí thôi, và cũng để teambuilding nữa.

lap-trinh-game

Anh Nam cùng bạn bè, đồng nghiệp trong một hoạt động cộng đồng

Anh đã từng làm nhiều dự án game sử dụng các công nghệ khác nhau. Thuận lợi và khó khăn là gì?

Trải qua nhiều công nghệ thì mình có cơ hội hiểu sâu hơn về các nền tảng toán học cơ bản chung.

Ví dụ, game 2D, 2.5D, 3D có thể khác nhau về hình ảnh hiển thị, nhưng đều có chung bản chất là các Quad, vertices, và pixels.

Nhờ vậy, mình học hỏi nhanh hơn khi phải tiếp xúc với những công nghệ mới. Ví dụ, một developer của engine Unity3D khi chuyển sang engine Unreal thì cũng không quá bỡ ngỡ.

Còn khó khăn lớn nhất có lẽ là khi một nền tảng bị thoái trào.

Khi đó, những kĩ năng, kinh nghiệm mà mình đã tích lũy được trong nền tảng đó sẽ thành vô dụng.

Ví dụ như kĩ thuật Flash dùng để làm web game từng làm mưa làm gió một thời, giờ gần như đã vắng bóng trên thị trường.

Đã bao giờ anh nghĩ đến chuyện rời khỏi ngành chưa?

Thú thực, anh có thời gian ngắn làm một dự án không phải game.

Cụ thể là làm mô hình thực tế ảo máy bay F16 cho Không quân Singapore để binh lính họ thực tập nhuần nhuyễn trước khi tiếp xúc với mô hình thật.

Nói thêm, dự án này cũng để lại cho anh nhiều suy nghĩ, vì công ty Singapore thuê người Việt làm phần mềm cho họ, rồi lại đem bán cho chính các tập đoàn Nhà nước Việt Nam, mà cụ thể ở đây là Vietnam Airlines.

Và thi thoảng anh cũng có nghĩ đến chuyện rời khỏi ngành game. Vì làm trong các ngành lập trình khác thì có thể đạt được mức lương cao hơn, nhất là những ngành đang hot trên thị trường tuyển dụng.

Nhưng…?

Cân nhắc kĩ thì anh vẫn gắn bó với nghề làm game.

Trước hết là do nghề này hợp với đam mê, sở thích của mình.

Thứ nhì, làm lập trình game rất thú vị vì được tiếp xúc với đủ kiểu người, đủ mọi tầng lớp trong xã hội.

Hơn nữa, lương bổng không quá cao nhưng cũng không quá thấp so với mặt bằng chung.

Theo anh, đam mê có quyết định tất cả trong nghề lập trình game?

lap-trinh-game

Thuận Thiên Kiếm – game thuần Việt do anh Trần Mai Nam tham gia phát triển

Để thành công ngắn hạn trong ngành game thì có lẽ đam mê là không cần thiết.

Chỉ cần giỏi nắm bắt trào lưu, cộng thêm chút may mắn là có thể thành công.

Tuy nhiên, để đi đường dài, phát triển bền vững thì đam mê rất quan trọng. Vì nếu chỉ làm vì “cơm gạo áo tiền” thì đến một lúc nào đó sẽ cảm thấy nhàm chán.

Những kĩ năng nào cần thiết nhất cho một game developer?

Về kĩ năng, thì nghề lập trình game cũng đòi hỏi các kĩ năng giống như trong các ngành lập trình khác, cụ thể:

  • Kĩ năng phân tích và giải quyết vấn đề một cách logic.

Lập trình game cũng giống như giải toán.

Cái bạn nhận được là “đề bài” (ý tưởng, thiết kế).

Nhiệm vụ của bạn là sử dụng công cụ/kiến thức để giải quyết vấn đề tốt nhất có thể.

Ví dụ, bạn sẽ nhận được một bản thiết kế UI, trong đó có tính năng user dùng ngón tay để xoay các nhân vật trong game.

Vậy nhiệm vụ của bạn là phân tích xem cần dùng những câu lệnh nào để theo dõi vị trí ngón tay trên điện thoại, câu lệnh nào để xoay nhân vật trong game, cũng như công thức xoay nhanh/chậm ra sao cho hợp lý.

  • Kĩ năng tự học.

Đặc biệt quan trọng, vì tốc độ thay đổi trong ngành phát triển phần mềm cực kì nhanh.

Trong dự án Võ Sĩ Thép, có một tính năng quan trọng là đối kháng trực tiếp qua môi trường Internet.

Anh đã phải tự học lập trình mạng, cách kết nối người chơi với nhau qua Internet và công nghệ Photon server để có thể xây dựng tính năng này.

  • Kĩ năng hợp tác với mọi người.

Dù đề cập cuối cùng, song trong nhiều trường hợp, đây lại là kĩ năng đầu tiên và quan trọng nhất.

Trừ khi bạn làm việc một mình hoặc làm phần mềm cho mình bạn dùng.

Trong dự án Madzone, có lần QA/QC báo bug nhưng khi kiểm tra thì anh lại không thấy lỗi này xuất hiện.

Có thể sẽ có developer trong tình huống này nghĩ rằng QA/QC cố tình “bới móc” và gây khó khăn cho họ.

Tuy nhiên, anh đã gặp, trao đổi trực tiếp với QA/QC.

Hai bên bàn bạc, thống nhất phương án để tái hiện lỗi này với tần suất cao hơn (từ 20% lên 80%). Nhờ vậy mà lỗi được fix sớm.

Còn về tố chất thì sao?

Do ngành game khá đặc thù, đòi hỏi sự sáng tạo cao, nên theo anh, để làm trong ngành rất cần sự cởi mở, open-mindedchấp nhận sự khác biệt.

Trong một dự án game, bạn sẽ tiếp xúc với rất nhiều kiểu người, đa dạng về tính cách, trình độ, vẻ ngoài cũng như phong cách.

Liệu bạn có gạt bỏ được định kiến ban đầu để thoải mái làm việc với một designer chỉ học hết lớp 9 và là playboy hạng nặng? Hoặc với một artist tóc vàng hoe, xăm trổ đầy mình? Để có thể nhìn nhận thực sự tài năng/khả năng của họ?

Làm thế nào để một bạn trẻ xác định được là có nên theo nghề lập trình game hay không?

Lập trình game thì cũng là lập trình phần mềm. Để xác định xem mình có phù hợp với nghề lập trình game hay không, bạn chỉ cần trả lời 3 câu hỏi sau:

  • Bạn có thích trở thành software engineer không?
  • Bạn có thích chơi game không?
  • Bạn đã từng muốn tham gia vào một dự án vừa mang tính thương mại, vừa có tính nghệ thuật (ví dụ như lập nhóm nhạc, làm phim, sáng tác truyện.v.v…) chưa?

Nếu cả ba câu trả lời đều là “”, bạn có thể phù hợp với nghề lập trình game.

Để bắt đầu, bạn nên học lập trình trước, rồi tự mình trau dồi kĩ thuật làm game. Bạn có thể tham gia vào một vài nhóm nhỏ tự làm game, phát triển những game đơn giản.

Sau đó, bạn nên ứng tuyển vào các công ty để có cơ hội làm những dự án lớn hơn.

Hoặc bạn cũng có thể theo học các khóa học lập trình game tại VTC Academy hoặc bộ môn lập trình game của trường Đại học CNTT.

Các diễn đàn lớn về game như gamedev.net, gamasutra, hay các trang tutorial của các engine nổi tiếng như Unity3D, Unreal… cũng là nguồn resources học lập trình game miễn phí rất tốt.

nghe-lap-trinh-game

Anh Nam (áo xanh, đứng giữa) và đồng nghiệp, bạn bè trước đồn biên phòng A Pa Chải.

Có điều gì mọi người thường hiểu lầm về nghề lập trình game?

Nhiều người thích chơi game và muốn làm nghề lập trình game vì nghĩ nếu vậy, họ sẽ được chơi game suốt ngày. Nhưng sự thật không phải vậy. (cười)

Trong giờ làm việc, game developer chỉ chơi phần tính năng game mà anh ta đang tham gia phát triển, chứ không thể chơi toàn bộ game. Mục đích phục vụ công việc, chứ không để giải trí.

Thử tưởng tượng, cả ngày bạn chỉ ăn mỗi món phở, hết tô này đến tô khác, thì dù có yêu phở đến mấy, đảm bảo cuối ngày bạn cũng sẽ ngán. (cười)

Đó là hiểu lầm của người ở ngoài ngành. Còn trong ngành thì sao?

Nhiều game developer muốn xây dựng một core framework, tuy nhiên theo cá nhân anh thì việc này trong ngành game Việt Nam là không thực sự cần thiết.

Nói chung, các lập trình viên thường có xu hướng đề cao tính tái sử dụng (re-usable), và họ luôn muốn xây dựng một framework có thể áp dụng cho nhiều project, nhiều quãng thời gian khác nhau.

Điều này có lẽ đúng với các ngành lập trình khác, nhưng không hẳn đúng với ngành game Việt Nam.

Theo anh, ngành game hiện nay đòi hỏi việc thực hiện các tính năng càng nhanh càng tốt, để có thể thử nghiệm và kiểm tra nhiều ý tưởng khác nhau.

Bên cạnh đó, các công ty Việt Nam cũng thường phải thay đổi business liên tục theo thị hiếu của khách hàng.

Bởi vậy, việc đầu tư thời gian xây dựng một core framework áp dụng chung cho mọi dự án có lẽ không thực sự hiệu quả về mặt chi phí.

Sai lầm lớn nhất anh mắc phải khi làm lập trình game?

Một trong những sai lầm “nhớ đời” nhất của anh là khi làm game Madzone.

Team anh định phát hành game cùng lúc trên 2 nền tảng là iOS và Android, nhưng lại chỉ build và test trên nền tảng iOS thôi.

Lí do vì bọn anh chủ quan, cho rằng game làm bằng engine cocos2dx version 2.x thì sẽ chạy tốt trên mọi nền tảng khác nhau.

Tuy nhiên, khi phát hành game trên nền tảng Android, team đã gặp rất nhiều khó khăn về việc tương thích của game trên nhiều loại điện thoại khác nhau.

Do nền tảng Android có rất nhiều hãng sản xuất phần cứng khác nhau, cấu hình mỗi máy cũng khác, và tuy dùng chung OS là Android nhưng mỗi hãng lại thay đổi mã nguồn, UI của OS theo định hướng riêng.

Thế nên, khi vận hành thực tế, game của bọn anh bị chậm, lag trên một số dòng điện thoại.

Rồi một số hiệu ứng đồ họa không chạy được, hoặc một số hình ảnh nhân vật bị đen, mờ.

Thậm chí, một số dòng điện thoại ở thị trường Trung Quốc không sử dụng PlayStore nên không thể đăng nhập bằng tài khoản Google.

Điều này đã ảnh hưởng nặng nề đến kế hoạch phát hành game trên nền tảng Android của dự án.

Không những phải dời ngày phát hành cả tháng trời, một số bản demo gửi cho đối tác cũng phải lùi lại. Và dĩ nhiên, team phải giải thích, xin lỗi khách hàng.

lap-trinh-game-madzone

Madzone – game gần đây nhất do anh Trần Mai Nam tham gia phát triển

Team đã khắc phục sự cố như thế nào?

Team đã mất gần 2 tháng, tập trung toàn lực để khắc phục.

Bọn anh phải can thiệp thay đổi mã nguồn của cocos2dx, nâng cấp một số library đã cũ, thay đổi kĩ thuật làm animation để hỗ trợ cho một số dòng điện thoại đặc biệt.

Cuối cùng, bọn anh còn phải chấp nhận hi sinh một số tính năng trên một vài dòng điện thoại đặc biệt.

Sau sai lầm này, bài học “nhớ đời” mà anh và team rút ra được là luôn luôn không được chủ quan khi làm sản phẩm dạng multiplatform.

Cụ thể, nền tảng Android rất đa dạng, và mỗi dòng điện thoại lại rất khác nhau.

Trước khi làm, tốt nhất là nên thống kê những loại điện thoại nào phổ biến nhất trong thị trường mà bạn muốn nhắm đến.

Từ đó, xây dựng kế hoạch build và test thử trên tất cả các devices đó. Bởi vì việc game chạy tốt cho tất cả các điện thoại Android gần như là không thể!

Gần 10 năm “chinh chiến”, 3 bài học nghề nghiệp quan trọng nhất mà anh đúc rút cho bản thân là gì?

Thứ nhất, không nên áp đặt suy nghĩ chủ quan của mình lên người dùng.

Khi làm game Thuận Thiên Kiếm, bọn anh đã bỏ rất nhiều công sức để làm những tính năng như dâng hương cúng giỗ vua Hùng, bắt sâu bọ ngày Tết Đoan Ngọ, hoặc tính năng thi cử Trạng Nguyên.

Bọn anh cứ ỷ y là những tính năng này lồng ghép yếu tố lịch sử, văn hóa Việt, rất là hay, bản thân mình rất thích thì chắc hẳn user cũng sẽ thích.

Nhưng thực tế, khi vận hành game, user không hào hứng và doanh thu do những tính năng này mang lại cũng không khả quan.

Sau này, game được vận hành bởi một nhóm khác. Họ đã nghiên cứu thị hiếu người dùng và đề nghị làm những tính năng khác, phù hợp hơn như Bầu Cua Cá Cọp, quay số may mắn.v.v…

Những tính năng này phù hợp với tâm lý thích may rủi của người Việt, và thực sự đem lại doanh thu lớn cho sản phẩm.

Thứ hai, trong một vài trường hợp, vẫn có thể áp đặt cá tính chủ quan của mình lên người dùng.

Game Flappy Bird là một ví dụ. Làm game, ai cũng nằm lòng “chân lý” là gamer không muốn chơi một game quá khó ngay từ đầu. Tuy nhiên, đó lại chính là điểm gây nghiện của game này.

Có lẽ là vì làm game vẫn là sáng tạo, và ngành game luôn có chỗ cho những sản phẩm độc đáo, thể hiện cá tính mạnh của người phát triển.

Thứ ba, thành công đến từ sự kiên trì học hỏi, chịu thay đổi, và may mắn!

Kiên trì học hỏi và may mắn thì rõ rồi. Còn chịu thay đổi, theo anh cũng là yếu tố rất quan trọng để đạt được thành công.

Ví dụ một đồng nghiệp của anh, suốt nhiều năm chuyên làm cho các công ty game Âu Mỹ nên có tác phong thoải mái, thường xuyên đi làm với giờ giấc không cố định.

Tuy nhiên, sau này khi làm cho một công ty Nhật, anh ấy đã tự thay đổi để phù hợp.

Buổi tối, anh ấy không còn thức khuya nữa, để sáng hôm sau có thể đi làm đúng giờ. Anh ấy còn chịu khó học thêm tiếng Nhật để giao tiếp trực tiếp với sếp.v.v…

Và quả thực, anh ấy đã thành công! Hiện nay anh ấy là nhân lực chủ chốt của công ty, được đưa sang Nhật để lãnh đạo đội ngũ developer người Nhật!

Bạn muốn trở thành một game developer trong tương lai? Hoặc bạn là một senior games developer muốn chia sẻ kinh nghiệm cùng mọi người? Hãy cùng thảo luận ở phần comment phía cuối bài viết.

Và nếu bạn hứng thú với nghề lập trình game, tham khảo ngay các việc làm game tại ITviec!

0