Transforming Programming — Biến Đổi Dữ Liệu Trong Code (Pragmatic Programmer #30)

Phong

Mở đầu

Ảnh: ThisisEngineering — Pexels

Mình đang đọc cuốn The Pragmatic Programmer 20th Anniversary Edition. Đọc tới topic 30 này thì mình thấy nó khá thú vị, kiểu như nó nhắc mình nhớ lại cái bản chất cốt lõi của việc lập trình. Mình viết series này để chia sẻ cảm nhận từng topic một cách tự nhiên, hy vọng mấy bạn cũng thấy hay như mình.

Transforming Programming

Ảnh: Pixabay — Pexels

Topic này nói rằng tất cả chương trình đều là quá trình biến đổi dữ liệu. Từ input thành output. Các tác giả trích lời W. Edwards Deming: "Nếu bạn không thể mô tả những gì bạn đang làm như một quy trình, thì bạn không biết mình đang làm gì."

Họ khuyên chúng ta nên nghĩ về code theo cách functional hơn: input → transform → output. Thay vì nghĩ theo kiểu stateful, mutable. Điều này giúp code dễ test, dễ hiểu, dễ maintain hơn. Mình thấy nó liên hệ rất gần với mấy cái pipeline trong Unix, hay là data flow trong reactive programming, hay thậm chí là ETL trong data engineering.

Trong thực tế, khi mình viết API thì input là request, transform là business logic, output là response. Nếu mình nghĩ theo kiểu transformation thì mình sẽ viết code sạch hơn, ít side effect hơn. Không còn cái kiểu "đây là object, tui mutate nó tùm lum" nữa.

Cảm nhận của mình

Ảnh: Daniel — Pexels

Mình thấy topic này hay ở chỗ nó làm mình nhìn code theo góc nhìn khác. Hồi trước mình hay nghĩ lập trình là "viết logic", giờ thì mình nghĩ là "xây dựng chuỗi transformation". Cái này giúp mình debug dễ hơn, vì mình có thể trace từng bước transform một.

Trong dự án thực tế, khi mình refactor code cũ, mình hay áp dụng ý này: tách ra thành các pure function transform data. Code sạch hơn nhiều, test cũng dễ viết hơn. Mình nghĩ đây là một trong những ý quan trọng nhất của cuốn sách, giúp dev nâng tầm tư duy từ "code chạy được" lên "code hay và bền vững".

Kết

Tóm lại, Transforming Programming nhắc mình rằng code là quá trình biến đổi dữ liệu một cách rõ ràng. Áp dụng được cái này thì code của mình sẽ tốt hơn rất nhiều. Hẹn mấy bạn ở topic sau nha!