Quần Cam

[Review sách] Work Effectively With Legacy Code

work effectively with legacy code

Nhân vật chính hôm nay của chúng ta là cuốn sách 15 năm tuổi, có tên là “Work Effectively With Legacy Code” (tạm dịch: Bí Kíp Hốt Shit). Đây là cuốn sách thuộc thể loại cook book, dạng sách mà khi nào đụng chuyện thì lấy ra tra khảo.

Làm việc với legacy code

Trong quá trình hành tẩu giang hồ, hẳn có lúc bạn phải làm việc với legacy code.

Có nhiều định nghĩa về legacy code, có người nói đó code hưởng lại từ người khác, code qua tay nhiều người, code mà đọc không hiểu, code không ai dám đụng vào, code không có test, hoặc code 20 triệu năm chưa update. Bạn có thể nhận được legacy code từ bất kì tình huống nào: nhận dự án từ một công ty khác, vào làm ở một công ty thành lập đã lâu.

Chắc không có ai thích làm việc với legacy code cả, nhưng không phải lúc nào bạn cũng được đập-đi-xây-lại, vì nhiều lý do: công ty không có nguồn lực, “if it doesn’t break, don’t change it”, hoặc đơn giản là nếu bạn không hiểu được hệ thống cũ thì bạn xây hệ thống mới bằng cách nào.

Hoặc tui sẽ mượn foreword của Uncle Bob trong cuốn sách này:

Many of us have tried to discover ways to prevent code from becoming legacy. We’ve written books on principles, patterns, and practices that can help programmers keep their systems clean. But Michael Feathers had an insight that many of the rest of us missed. Prevention is imperfect. Even the most disciplined development team, knowing the best principles, using the best patterns, and following the best practices will create messes from time to time. The rot still accumulates. It’s not enough to try to prevent the rot, you have to be able to reverse it.

Ý tui muốn nói là, dù hên hay xui thì sớm muộn cũng có ngày bạn phải làm việc với legacy code. Nếu ngày đó đến, Work Effectively With Legacy Code là một cuốn sách dành cho bạn.

Giới thiệu sách

Cuốn sách bắt đầu bằng cách liệt kê ra 4 lý do chính mà bạn phải sửa code: 1) thêm tính năng, 2) fix bug diệt sâu, 3) refactor - cải thiện code, 4) optimize ứng dụng.

Tuy nhiên dù cho bạn sửa code vì lý do gì đi chăng nữa, có một thứ bạn phải đảm bảo là hành vi của những đoạn code còn lại được bảo lưu. Nghĩa là những đoạn code đó, trước khi bạn sửa chúng chạy thế nào thì sau khi sửa chạy thế nấy. Không có chuyện “Tôi sửa cái lỗi làm tròn số rồi, nhưng giờ khi thanh toán người bán sẽ phải trả tiền cho người mua”.

Đó là thử thách lớn nhất khi làm việc với legacy code. Bởi vì với legacy codebase, bạn không thể nắm hết mọi hành vi của ứng dụng được (còn không thì đã không gọi là legacy code rồi). Làm thế nào để bạn đảm bảo việc sửa một đoạn code này không làm ảnh hưởng đến hành vi của những đoạn code khác? “Work Effectively With Legacy Code” sẽ giúp bạn trả lời.

Khi đọc sách, có lúc tui có cảm tưởng là “đam mê, ông này đi Bitis Hunter trong bụng mình hay sao á” hoặc “Ặc, mình cũng hay làm như vậy” . Thật vậy, mỗi chương trong cuốn sách bàn về một vấn đề mà tui chắc chắn là bạn từng gặp phải khi làm việc với legacy code.

  • Giờ tui cần sửa code, mà tui lại không có nhiều thời gian.
  • Tui không biết làm sao để viết test cho cái này cả.
  • Giờ tui cần viết code, nhưng mà không biết test cái hàm nào hết.
  • Đoạn code này tui đọc không hiểu gì cả, nhưng mà tui cần sửa nó.
  • Với cái class dài 2 nghìn dòng thì tui bắt đầu từ đâu?

Cuốn sách sẽ hướng dẫn bạn từng bước tìm ra câu trả lời cho những câu hỏi này, bao gồm kĩ thuật, phương pháp, công cụ, lối tư duy để xử lý từng vấn đề một. Qua đó legacy code của bạn sẽ trở nên đẹp hơn, clean hơn, dễ đọc hơn, dễ bảo trì hơn; và bạn sẽ trở nên vui vẻ hơn khi làm việc với nó.

Vài lời của người viết

Đây là một quyển sách thực dụng và rất dễ đọc, tuy nhiên có cái là bạn có đọc và note lại thì cũng không nhớ hết.

Lời khuyên cá nhân của tui là bạn mua sách về, đọc kĩ Part I để nắm nội dụng mà sách sẽ nói đến và cách dùng cuốn sách này như thế nào, kinh qua từng chương của Part II để nắm sơ phương pháp của từng vấn đề để khi nào cần thì biết chỗ nào để tra, còn Part III thì có chút hơi thiên về OOP và Java.

Túm cái váy lại, tui thấy đây là một cuốn sách mà bạn nên có trong tủ sách. Sách được bán trên Amazon, có cả bản Kindle lẫn Paperback.

Cám ơn anh @tamnd đã recommend cuốn sách này.


NGUY HIỂM! KHU VỰC NHIỀU GIÓ!
Khuyến cáo giữ chặt bàn phím và lướt thật nhanh khi đi qua khu vực này.
Chức năng này hỗ trợ markdown và các thứ liên quan.
hta218 chém vào lúc

cảm ơn đại hiệp

Bài viết cùng chủ đề

Nhật ký hốt sh*t—Chuyện về cái service A

Bài viết mà thằng chả chém gió về cách chả monitoring và debug một sự cố gặp phải khi vận hành hệ thống Elixir

Vài ghi chép về Elixir Compiler (phần 1)

Bài viết mà thằng chả chém gió về Elixir compiler.

Lamport timestamp

Bài viết là một phần trong paper Time, Clocks, and the Ordering of Events in a Distributed System của Leslie Lamport.