Dự án anh hóa – ngôn ngữ C#

Bài viết được sự cho phép của tác giả Tin Tran

Cuộc đời này thật trớ trêu, bốn năm dùi mài kinh sử “java đại pháp” ở giảng đường, cứ ngỡ khi đi làm sẽ được ứng dụng những cái đã học, thế nhưng cái số của tôi nó không được may mắn lắm, khi đi làm toàn làm về những cái không phải là chuyên môn của tôi. Và dự án tiếp theo tôi tham gia đó chính là ngôn ngữ C#.

  Dependency Injection – Web API ( C# )
  Kiểm thử đơn vị trong C# với Nunit và .Net Core

Dự án đầu tiên được viết bằng Delphi và đã có sẵn source code, dự án tiếp theo tôi tham gia cũng giống như vậy, đã được phát triển ở một công ty khác, source code cũng đã có sẵn. Đây là một trang web về bảo hiểm được xây dựng bằng ASP.NET MVC3, ngôn ngữ C#, trang web này hiển thị nội dung là chữ tiếng Nhật, công ty khách hàng họ yêu cầu chúng tôi chuyển toàn bộ ngôn ngữ tiếng nhật sang ngôn ngữ tiếng anh cho trang web hiện tại của họ và làm thêm một số chức năng mới. Lại một lần nữa tôi phải tìm hiểu về cái mới. Dự án kiểu này người ta gọi là những dự án maintenance, nghĩa là những dự án nâng cấp, bảo trì, thêm tính năng mới…

Quay trở lại với dự án như thường lệ để bắt đầu một dự án thì chúng tôi tiến hành kick off dự án. Tôi đã giải thích từ kick off ở phần 4 các bạn có thể quay lại xem để biết nhé. Dự án này tôi sẽ không làm chung với chị quản lý cũ nữa mà lần này quản lý trực tiếp của tôi là anh leader, người mà đã training cho tôi trong thời gian thử việc, anh này cực kỳ khó tính, tôi sẽ nói về anh ấy trong bài viết này luôn. Trong buổi kick off thì anh leader phổ biến về công việc của dự án. Dự án sẽ làm hai công việc chính, thứ nhất đó là anh hóa, chuyển toàn bộ ngôn ngữ hiển thị của trang web từ tiếng nhật sang tiếng anh, thứ hai là khách hàng muốn làm thêm khoảng năm cái màn hình mới. Về nghiệp vụ của hệ thống thì không có tài liệu nào mô tả, họ chỉ cung cấp những từ tiếng nhật và nội dung tiếng anh tương ứng để chúng tôi thay đổi, còn những màn hình làm thêm thì sẽ cung cấp cho chúng tôi thiết kế chi tiết mô tả các chức năng của các màn hình đó.

Dự án này khá lớn và gấp nên team chúng tôi có khoảng mười người, chia ra làm hai team nhỏ, một team làm về anh hóa, một team làm những màn hình mới. Tôi và anh B (anh B tôi đã nhắc tới ở phần 1) vẫn làm chung dự án này và cùng vào team làm những màn hình mới, team chúng tôi có bốn người và điều đặc biệt là không ai biết về ASP.NET MVC3. Tới đây nghe là thấy vui rồi và dự án của chúng tôi bắt đầu.

Anh leader gửi mail cho mọi người về thông tin của dự án, bao gồm tài liệu thiết kế, source code và thông tin database. Về source code thì chúng tôi chạy trên Visual Studio 2010, database là SQL server. Phần tài liệu thiết kế chi tiết các màn hình thì toàn bộ bằng tiếng nhật, tuy nhiên hên cái là trong công ty có phiên dịch, họ sẽ dịch toàn bộ tài liệu sang tiếng việt. Vì bản chất họ là phiên dịch thì họ không hiểu nhiều về nghiệp vụ của lập trình nên chỉ có những phiên dịch có kinh nghiệm lâu năm thì sẽ dịch đúng, còn những phiên dịch mới thì dịch nhiều khi đọc không hiểu gì. Trở lại với dự án, chúng tôi bắt đầu setting source code và database để chạy trang web lên xem mặt mũi nó như thế nào, tiến hành tìm hiểu kiến trúc của nó được xây dựng ra sao đó là ngồi đọc code. Tôi mở code ra và đọc, ôi thôi một rừng code không là code, tôi không nhớ chính xác là có bao nhiêu file class, nhưng số lượng ước chừng là vài trăm, chưa tính cả các folder javascript, image… Tôi mở một file lên khoảng vài ngàn dòng code. Tôi bị ngộp trong đống code này và không biết bắt đầu từ đâu, thứ nhất là tôi không hiểu cái luồng xử lý của ASP.NET MVC, thứ hai là tôi sợ vì nó quá nhiều code. Từ lúc làm dự án đầu tiên thì tôi đã bắt đầu sợ, nỗi sợ kéo dài sang dự án tiếp theo.

Sau khi tôi và anh B đọc source code thì hai anh em nhìn nhau cười, anh leader đi lại và hỏi tình hình như thế nào rồi, có tìm hiểu được luồng xử lý của nó chạy như thế nào chưa. Hai chúng tôi nói rằng chưa nắm được gì, thế là anh leader bay vào điều tra. Công nhận kỹ năng của một leader có khác, không biết là anh có biết cái này trước chưa, nhưng sau khi xem một lúc thì anh đã giải thích được cho mọi người về luồng xử lý của một màn hình trong ASP.NET MVC. Việc nắm được luồng đi là một chuyện, còn việc apply được hay không lại là một chuyện khác. Nếu như lúc đó tôi có trình độ như bây giờ thì mọi chuyện sẽ dễ dàng hơn nhưng không thể nói được chữ nếu ở đây. Tôi và anh B cùng nhau apply trước một màn hình để sau đó hướng dẫn cho mọi người cách làm, thực sự mà nói thì cách tổ chức source code của project này không giống như một project ASP.NET MVC bình thường, trong visual studio khi chúng ta tạo ra một project ASP.NET MVC thì mặc định sẽ tạo ra cho chúng ta một cấu trúc thư mục với Model, View, Controller mà khi nhìn vào khá là dễ dàng để hiểu đối với những ai đã từng học mô hình MVC. Tuy nhiên cái dự án của tôi thì nó đã chỉnh sửa lại một cách phức tạp, kể cả anh B có kinh nghiệm khoảng một năm rưỡi cũng khó có thể hiểu được nó.

Sau một buổi ngồi làm thì chúng tôi cũng đã chạy lên được một màn hình với nội dung trang web không có gì. Layout của trang web thì đã có sẵn trong thiết kế chi tiết, ban đầu tôi chỉ chạy lên màn hình trắng, như vậy là thành công được 30% rồi. Việc code layout và các xử lý logic chỉ là chuyện sớm muộn mà thôi. Mỗi người được leader lên schedule cho một màn hình trước để làm, mỗi ngày đều phải điền tiến độ để leader theo dõi, anh leader này rất là kỹ tính trong công việc, luôn bám sát theo member và nếu gặp vấn đề gì khó không giải quyết được thì leader sẽ bay vào support. Trở lại với schedule, tôi được giao cho một màn hình hiển thị danh sách thông tin từ một table dưới database, và có một số button di chuyển qua lại giữa các màn hình khác. Về nghiệp vụ thì màn hình này không có gì khó, tuy nhiên khi code thì bạn không thể code theo ý riêng của bạn mà phải code sao cho nó đồng nhất giữa source code có sẵn. Có nghĩa là cách đặt tên hàm, biến, class thì phải đặt tương tự như source code có sẵn. Ban đầu tôi cũng không biết về việc này, sau khi code xong và được anh leader review code thì bắt tôi sửa lại và thống nhất một cái rule để làm cho tất cả màn hình. Cứ mỗi lần leader review là y như rằng là phải sửa, có một lần tôi code bên file javascript dư một dấu chấm phẩy, mặc dù không ảnh hưởng gì nhưng tôi vẫn phải sửa lại. Như tôi đã nói anh leader này khó và kỹ, khi review code thì gọi tôi lại hỏi “Tại sao em lại code như vầy, chỗ này là sao?, giờ anh không thích em code kiểu này, em phải code lại theo ý của anh” nhiều khi hỏi những câu bắt bí tôi vậy. Tôi biết lúc này kinh nghiêm tôi chưa có nhiều nhưng thái độ của một leader như vậy làm tôi và mọi người rất bức xúc. Leader thường xuyên la mắng nhân viên, lúc nào gần tới giờ ăn cơm cũng gọi lại hỏi để rồi thời gian ăn cơm cũng hết, cơm cũng hết sạch luôn. Đôi lời gửi đến anh leader, nếu anh đọc được bài viết này thì em xin lỗi đã nói xấu anh nha :))

Sau khi chỉnh sửa các nội dung theo đúng ý sếp thì cũng đã hoàn thành việc coding cho màn hình của tôi, tiếp theo là sẽ đến giai đoạn viết testcase để thực hiện test. Việc viết testcase thì ở đây mỗi người đều phải làm cho màn hình của mình, dựa vào thiết kế chi tiết để viết ra tất cả các trường hợp test. Tôi cũng tiến hành viết cho màn hình của mình, sau khi viết xong, lại tới giai đoạn leader review lại. Chuyện gì tới cũng sẽ tới, tôi biết rằng chắc chắn phải sửa lại. Những không ngờ tôi phải sửa một lần, hai lần, ba lần. Những người khác cũng phải sửa số lần giống như tôi. Tôi chắc chắn rằng không một ai có thể làm mà cho ãnh hài lòng mà không cần phải chỉnh sửa gì cả. Việc chỉnh sửa liên lục và họp hành để thống nhất câu chữ để viết cho mọi màn hình thì mất quá nhiều thời gian, nên chúng tôi làm không kịp và mọi người trong team đều phải OT để cover lại tiến độ và những màn hình tiếp theo chúng tôi làm đều diễn biến như vậy chúng tôi OT sấp mặt, team bên anh hóa cũng không khá hơn gì chúng tôi.

Việc thống nhất về cách viết testcase, cách viết code thì đúng là cần thiết cho một dự án, tuy nhiên anh quá khắt khe về những cái nhỏ nhặt làm tốn thời gian của mọi người. Sau một thời gian OT thì dự án cũng đã kết thúc, bài viết này không phải tôi muốn nói xấu về sếp cũ của tôi, có lẽ anh ấy có cách nghĩ riêng của một người leader có nhiều năm kinh nghiêm, về mặt khách hàng thì rất khó tính nên leader phải cẩn thận trong từng cái nhỏ nhặt. Như thường lệ tôi vẫn sẽ rút ra những cái mà tôi học được trong dự án.

1. Khi coding việc có một người review code là rất cần thiết, người này sẽ chỉ ra những chỗ bạn code chưa ổn, code không dư thừa, code đúng thiết kế.
2. Khi làm những dự án kiểu maintenance thì cần chú ý đến cách source sẵn có họ code như thế nào, rồi bắt chước code lại cho đồng nhất về cách code.
3. Việc đặt tên biến, hàm thì hãy đặt sao cho có ý nghĩa. Việc này giúp đảm bảo code của bạn rõ ràng, người đọc code nhìn vào sẽ hiểu ngay.
4. Việc có một anh leader tốt cũng là một điều hết sức cần thiết. haha

Đến đây cũng đã kết thúc bài viết, các bạn nhớ follow fanpage của mình nhé.

Bài viết gốc được đăng tải tại chickencodes.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev