tháng 6 22, 2019

Đôi dòng về quyển Practical Object-Oriented Design - Sandi Metz

Đôi dòng về quyển Practical Object-Oriented Design - Sandi Metz
Practical Object-Oriented Design (2nd edition) - POOD - Sandi Metz

Tại sao mình lại đọc quyển này nhỉ? Mình là một mọt sách, một năm mình có thể đọc vài ba chục quyển sách các thể loại, từ tiểu thuyết, truyện ngắn, tản văn, về lịch sử, kinh tế, ... nhưng những năm gần đây, thì mình rất hiếm khi đọc những quyển sách về chuyên môn của mình, một lập trình viên. Dù đôi khi, mình có bỏ tiền ra mua những quyển sách kĩ thuật đấy. Như quyển Practical Object-oriented Design này, mình biết đến nó từ trước, khi biết Sandi chuẩn bị xuất bản 2nd edition (Tháng 7/2018) thì mình cũng mua rồi vẫn để đấy. Nói chung là cũng do tính lười biếng của mình cả thôi. Đọc tiểu thuyết thì đỡ hại não hơn đọc sách kỹ thuật.

Đọc sách là một cách lười biếng nguy hiểm nhất, bởi kẻ làm biếng mà ở không, họ sẽ cảm thấy như khó chịu với lương tâm. Trái lại, nếu họ có đọc sách, họ tin rằng họ có làm việc và nhân thế, cái bệnh lười biếng của họ không còn thế nào trị được nữa. - Tôi Tự Học - Nguyễn Duy Cần.

Công việc hiện tại của mình là làm cho một công ty Startup ở Nhật, nói là Startup chứ công ty cũng tồn tại từ 2012 đến giờ, sản phẩm chính của công ty, codebase cũng từ 2014 đến nay, qua nhiều lớp lập trình viên, để lại một mớ code, haizz, ugly, hỗn độn. Công việc của mình là maintenance và thêm features, fix bugs cho sản phẩm đó, những bạn đã làm việc qua với các legacy project thì cũng sẽ cám cái cảnh này. Nhưng trong khó khăn cũng có cơ hội, vì team lập trình viên khá nhỏ, nên mình có nhiều sự tự do hơn, và những quyết định của mình cũng có nhiều sự ảnh hưởng hơn. Và mình rất muốn refactor lại toàn bộ product, nhưng để làm được, mình cần phải giỏi hơn, trước đã, học và tiến bộ cho bản thân mình.

Chương 1 giới thiệuvề lập trình hướng đối tượng (OOP), các đặc điểm của OOP, phân biệt lập trình hướng đối tượngvới Procedural programming, tầm quan trọng của một chương trình được thiết kế tốt (well-designed application bằng OOD).  Nếu bạn tự tin mình đã rất rõ về OOP vì làm việc với nó hàng ngày thì bạn có thể bỏ qua chương này. Tuy nhiên, mình khuyến khích bạn vẫn nên đọc để ôn lại, củng cố hơn. Từ chương 2 đến chương 8 bắt đầu giới thiệu các nguyên tắc nền tảng như SOLID principles, Law of Demeter, một số patterns để giải quyết những vấn đề cụ thể như Duck typing, Inheritance, Composition, ... Cuối cùng là chương 9, dành hẳn cho việc viết test, vì một well-designed application không thể  không có well-crafted tests suite.

Ban đầu, khi đọc quyển POOD, mình cảm thấy nhiều chỗ Sandi Metz viết khá dông dài và nhiều thứ cứ lặp đi lặp lại nhiều lần. Sau này, mình mới biết đấy chính là dụng ý của tác giả, Sandi miêu tả rất chi tiết về quá trình tư duy, kiểu thinking-out-loud khi áp dụng các nguyên tắc OOD, bắt đầu từ những đoạn code xấu xí, tìm ra lỗ hổng của nó, cải tiến nó. Còn việc lặp đi lặp lại là để nhấn mạnh những điều quan trọng mà Sandi muốn khắc sâu hơn vào trí nhớ của người đọc.

Sihui Huang - một lập trình viên, có những chia sẻ thú vị về trải nghiệm khóa học POOD của Sandi Metz trên blog của cô ấy - https://www.sihui.io/sandi-metz-pood/, Khóa học theo Sihui là khá đắt đỏ, nhưng đáng giá đến từng xu, “Run, don’t walk, and throw money at Sandi now!

Dự định tiếp theo

Vậy sau khi đọc xong quyển POOD này, thì mình dự định sẽ tiếp tục đọc quyển 99 Bottles of OOP của Sandi, nếu quyển POOD nặng về lý thuyết, cho chúng ta một số kiến thức nền tảng về các nguyên lý thiết kế cũng như tổ chức code thì quyển 99 bottles of OOP sẽ thiên về thực hành hơn. Ngoài 2 quyển sách này ra, Sandi còn một số tech talk liên quan, mà bạn có thể dễ dàng tìm thấy trên Youtube.

Mình nghĩ là cần thiết để đọc thêm sách, trau dồi thêm trước khi bắt tay vào refactor project hiện tại của công ty. Vâng, chỉ có thực hành, đem nó vào công việc thường ngày thì những kiến thức mình đọc được trong sách mới có thể trở thành thực sự của mình.