Cải thiện khả năng đọc code sẽ cải thiện khả năng viết code
Tuần qua mình đã tham gia lớp học gọi là Nhập môn Agile do Công ty tổ chức. Quả là một khóa học thú vị, xứng đáng dành hai ngày cuối tuần đi hoc. Ngày càng nhiều công ty IT áp dụng Agile trong việc quản lý team, quản trị dự án, vậy nên việc đọc source code của người khác là quan trọng hơn bao giờ ...
Tuần qua mình đã tham gia lớp học gọi là Nhập môn Agile do Công ty tổ chức. Quả là một khóa học thú vị, xứng đáng dành hai ngày cuối tuần đi hoc. Ngày càng nhiều công ty IT áp dụng Agile trong việc quản lý team, quản trị dự án, vậy nên việc đọc source code của người khác là quan trọng hơn bao giờ hết đối với mỗi developer.
Đọc source code là một phần trong công việc của một kĩ sư phần mềm. Tuy nhiên công việc này không phải lúc nào cũng dễ chịu. Không phải ai cũng thích đọc code của người khác, đa phần chúng ta cảm thấy đọc code nhàm chán, thậm chí bực bội. Đôi khi ta gặp trường hợp là đọc xong code do người khác viết mà ta chẳng hiểu gì, ta than vãn rằng sao mà người đó viết code quá rối ren, khó hiểu. Hầu hết tư tưởng của các developer là muốn tập trung viết code, chứ không phải đọc nó, mà không nhận ra rằng đọc code để hiểu nghiệp vụ là một kỹ năng quan trọng và cần thiết.
Đọc source code mang lại lợi ích rất lớn. Ta có thể so sánh việc viết code của developer với việc viết tiểu thuyết của các nhà văn. Không nhà văn nào viết được những tiểu thuyết hay mà lại không từng đọc những tác phẩm lớn, kiệt tác của các nhà văn khác. Vậy nên các developer để có thể viết code tốt thì cần đọc rất nhiều code hay của người khác. Bằng cách đọc source code ta có thể học được cách những developer khác suy nghĩ, giải quyết vấn đề cụ thể mà ta còn thiếu. Chúng ta có thể học từ các ý tưởng, phong cách, mẫu khác nhau từ việc đọc code của người khác giúp ta dần dần nâng cao trình độ của mình.
Có nhiều cách để cải thiện kĩ năng đọc code. Bài viết này xin giới thiệu một số cách thức sau.
Chạy mã nguồn
Thực thi mã code là bước đầu tiên trong việc đọc code. Khi ta thực thi được mã code tức ta biết được yêu cầu dữ liệu đầu vào, và ta thấy được dữ liệu đầu ra. Việc thực thi mã code có thể không cung cấp cho bạn chi tiết về dự án, nhưng nó giúp bạn biết cách làm sao để build code, chạy nó, quan trọng hơn nó giúp bạn biết các thư viện, framework mà project sử dụng. Đó là một cách tuyệt vời nâng cao hiểu biết của bạn về dự án đó. Nếu bạn muốn xây dựng một project tương tự project bạn đang tìm hiểu, bạn sẽ có ngay được hình dung về các thư viện, framework có thể sử dụng.
Tìm cấu trúc bậc cao
Chúng ta không nên đi vào từng chi tiết ngay khi mới bắt đầu đọc code của một project, đặc biệt là những project lớn có nhiều modul khác nhau xử lý nghiệp vụ phức tạp. Thay vào đó, ta nên tập trung vào các cấu trúc cấp cao, overview. Bắt đầu từ class Main. Hầu hết các project đều khởi đầu từ hàm Main, chương trình được bắt đầu từ đó. Nếu project bạn đang tìm hiểu là một web application, hãy bắt đầu bằng việc tìm kiếm các gói khác nhau, như nơi mà chứa các gói nghiệp vụ, controller, giao diện người dùng. Về cơ bản là ta lướt qua toàn bộ dự án để lắm được những ý tưởng chính, và tự hỏi mình ở đâu ta muốn tập trung, phần nào ta nên đọc đầu tiên. Ta không thể đọc ngay toàn bộ code ngay, thay vào đó chỉ một phần của nó khiến ta quan tâm. Khi chúng ta tìm được điểm đầu tiên (method đầu tiên cần quan tâm) ta sẽ tìm hiểu tiếp các method gọi nó, liên tục tìm các method gọi nhau sẽ như sợi dây dẫn ta đi tới các phần của dự án.
Biết và sử dụng tools
Có rất nhiều công cụ trên mạng để đọc và khám phá mã nguồn có thể giúp ta hình dung mã. Ví dụ: IntelliJIdea có khả năng điều hướng mã nguồn, cho phép bạn tìm kiếm theo từ, một phần của từ hoặc thậm chí viết tắt. Bạn cũng nên học các phím tắt. Điều hướng mã nguồn bằng chuột có thể khá chán và chậm khi làm việc với các phím tắt có thể nhanh hơn. Bạn có thể chuyển từ một phần của mã nguồn sang một phần khác của mã nguồn một cách nhanh chóng. Có một phần mềm tuyệt vời để đọc mã, được gọi là Sourcegraph, được tạo ra bởi hai sinh viên tốt nghiệp đại học Stanford, Quinn Slack và Beyang Liu, những người sau khi dành nhiều giờ để tìm hiểu code với các tài liệu không đầy đủ của dự án, đã quyết định xây dựng một công cụ để giúp họ đọc và hiểu source code tốt hơn.
Hiểu ngôn ngữ (programming language)
Việc hiểu sâu một ngôn ngữ cụ thể giúp chúng ta cải thiện kỹ năng đọc code. Mỗi ngôn ngữ lập trình có các tập convention, cấu trúc và cú pháp khác nhau. Nắm được chúng giúp ta dễ dàng làm quen với đoạn code một cách nhanh chóng. Ví dụ, trong ngôn ngữ Java thì tên mehod luôn bắt đầu với ký tự thường (getProductByCategory(Integer categoryId)), trong khi với ngôn ngữ C# (InsertNewProduct(Product newProduct) thì chúng được bắt đầu với chữ cái in hoa. Nắm được sự khác biệt này giúp ta nhận ra các method một cách nhanh chóng.
Đọc những practices/ design patterns tốt nhất
Đoạn code bạn đang đọc, hoặc cấu trúc của nó, có thể trông rất mù mờ hoặc bạn không thấy quen chút nào, điều đó là bình thường thôi. Có vô số các design/practice pattern tốt mà mọi người áp dụng để code một cách chính xác và tối ưu. Ví dụ như, có một pattern là Singleton trong đó constructor được đặt chế độ private. Bạn có thể tự hỏi rằng, ai lại muốn để constructor private nhỉ, trước giờ tôi đều thấy chúng public, nếu không, làm sao có thể khởi tạo instance từ ngoài class được? Thực ra thì có lý do đấy. Singleton patterns đảm bảo bạn khởi tạo một class chỉ một lần, điều này có rất nhiều use-case trong thực tế. Nắm được các pattern này, bạn sẽ tránh được cảm giác muốn đập đầu vào tường như vậy. Thế nên, đọc thêm về các pattern phổ biến sẽ giúp bạn nâng cao kỹ năng đọc code rõ rệt. Cuốn sách kinh điển của "Bộ tứ" (Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides) nêu ra 23 design pattern cũng kinh điển, bạn có thể tham khảo.
Review code
Phát triển phần mềm là một công việc tập thể. Không ai có thể một mình phát triển toàn bộ một phần mềm lớn. Đứng sau mỗi phần mềm là một team. Trong team, mỗi thành viên đóng góp phần mình để định hình nên dự án. Cuối mỗi ngày, phần việc của mọi người được merge lại và trở thành một phần sản phẩm có giá trị thực tế đối với khách hàng. Bên cạnh việc thực sự ngồi code, có một công việc khác mà team nào cũng phải làm hàng ngày, đó là review code của các thành viên, trong khi quan sát, đưa ra đề xuất và học hỏi lẫn nhau. Đây thực sự là một công cụ mạnh mẽ để xây dựng tri thức code, tạo dựng xương sống cứng cáp của team, đồng thời nâng cao chất lượng code để hạn chế bugs trong sản phẩm, mang lại sản phẩm tốt nhất cho khách hàng. Khi thực hiện review code, bạn buộc phải đọc code của một thành viên khác, từ đó tăng kỹ năng đọc hiểu code của bạn.
Thực hiện tái cấu trúc tạm thời
Thực hiện tái cấu trúc tạm thời cũng có thể làm tăng kỹ năng đọc code của bạn. Bạn có thể bắt đầu từ một method dài, cứ liên tục chia nhỏ method thành các đoạn code ngắn dần. Tiếp tục đến khi bạn nắm được nội dung của nó. Sau đó, bạn có thể ghi chú lại chức năng của method và rollback các thay đổi. Quá trình này giúp bạn hiểu rõ cấu trúc của method cũng như tăng kỹ năng thực hiện tái cấu trúc.