 |
 |
|
Thợ hồ tin học và các mẫu dáng thiết kế
Tâm... đa sự của một lập trình viên |
|
Có người ví ngành tin học, hay
nói “dông dài” hơn là công nghệ thông tin, giống như
ngành xây dựng: muốn tạo ra hệ thống nào đó, cần có
"kiến trúc sư" và... "thợ hồ", tức những người thiết
kế hệ thống và những người viết nên mã chương trình
cụ thể. Theo tiêu chí này, dường như số đông sinh
viên tin học tốt nghiệp sẽ làm... "thợ hồ" (thợ dĩ
nhiên phải cần nhiều hơn thầy). Công việc "kiến trúc
sư" có lẽ phải dành cho các bậc "sồn sồn" dày dạn
kinh nghiệm trận mạc. |
|
Quả quyết rằng người Việt có năng
khiếu tin học bẩm sinh (không rõ tôi "tiêm nhiễm"
điều này từ bao giờ), tôi hăm hở lao vào tin học.
Thế rồi đúng như số mệnh mà ai cũng biết rõ mười
mươi: tôi trở thành… "thợ hồ"! Quả thực, công việc
thường chỉ là gắn lại với nhau những "viên gạch" có
sẵn mà người ta gọi là các thành phần (component).
Ngày ngày tôi lầm lũi xây những bức tường, có khi
chẳng thấy ngôi nhà hay cao ốc nó ra sao. |
|
Tuy nhiên, cái chân "thợ hồ" của
tôi xem ra cũng không dễ dàng chút nào! Nếu như thợ
hồ trong xây dựng có thể về nhà ngủ khò sau một ngày
làm việc (tôi ghen với họ!), tôi luôn phải loay hoay
tìm đọc sách này, sách kia, thức đêm thức hôm để
tiêu hóa một cách khó nhọc những kiến thức mới mẻ cứ
nảy sinh đều đều (giờ đây tôi thường tự nhủ: người
mình chắc chắn thông minh... bằng người ta!). |
|
Một trong những thứ khó nuốt (đối
với tôi) kêu bằng design pattern. Khái niệm này trở
nên thịnh hành từ khi xuất hiện quyển sách "đáng
ghét", từng làm xôn xao giới lập trình, mang tên
Design Patterns: Elements of Reusable
Object-Oriented Software của bốn tác giả Erich
Gamma, Richard Helm, Ralph Johnson và John
Vlissides. Bên Mỹ người ta gọi đùa họ là "bè lũ bốn
tên" (Gang of Four). "Bè lũ" này làm cho đời sống
của cánh "thợ hồ" như tôi thêm vất vả nhưng có lẽ
cũng vì thế mà quyển sách nổi tiếng của họ được đưa
vào… chương trình đại học. |
|
[Đầu trang] |
|
Decorator, Iterator,
Mediator,... |
|
Bạn có thấy dòng chữ nêu trên
giống câu thần chú kiểu trong… Harry Potter không?
Lần đầu tiên, tôi đụng phải một cái design pattern
(thường gọi ngắn gọn là pattern) là khi người ta gửi
cho tôi một bản vẽ (thế đấy, làm "thợ hồ" vẫn phải
đọc bản vẽ) và yêu cầu tôi thực hiện một decorator ở
chỗ "được khoanh tròn". Vờ như đã hiểu, tôi "không
thèm" hỏi lại xem decorator là cái giống gì. Từ đó,
tôi bắt đầu để ý những đồng nghiệp thường xuyên nói
chuyện với nhau bằng những từ lạ lùng hơn, nào là
iterator, rồi mediator,... Dường như họ muốn chứng
tỏ mình sành điệu thì phải.
Học thầy không tày học bạn, tôi đem chuyện bí hiểm
ấy kể với một người bạn học cũ. Anh nói ngay: "Mấy
thứ đó gọi chung là pattern! Cũng chẳng có gì, đại
khái nó là những data structure (cấu trúc dữ liệu)
thôi mà". Có thật vậy chăng? Hình như anh cũng
hiểu... đại khái như thế thôi vì anh không thể giải
thích cho tôi rõ tại sao người ta "bịa" ra các tên
mới để làm gì. |
|
Thật may, cuối cùng một vị tiền
bối trong ngành tin học nói cho tôi biết design
pattern có thể dịch là mẫu dáng thiết kế. Nó không
phải là… cấu trúc dữ liệu (nhầm lẫn tai hại!). Mỗi
một mẫu dáng không phải là vật liệu để dùng ngay
(khổ thật, tôi đã quen với "tư duy lắp ráp") mà là
một giải pháp kiến trúc hợp lý và hiệu quả, từng
được kiểm nghiệm nhiều trong thực tế, do đó có tính
phổ quát và tính ứng dụng cao. Tôi rất tâm đắc với
thuật ngữ "mẫu dáng" mới toanh để dịch nghĩa cho
pattern hơn là cách gọi "mẫu mực" hay "mẫu hình"
(theo từ điển) vì từ "dáng" bao hàm sự uyển chuyển,
tính linh hoạt, đòi hỏi người ta phải cảm nhận, hiểu
biết sâu sắc để vận dụng, không thể sao chép rập
khuôn.
Mẫu dáng ở đâu ra? |
|
Hóa ra thuật ngữ design pattern lại xuất phát từ
ngành xây dựng, do kiến trúc sư lão làng Christopher
Alexander nghĩ ra từ những năm bảy mươi. Từ ngày ấy,
ông đã nhận ra rằng có những bài toán và lời giải
được lặp đi lặp lại cả "tỷ” lần trong nhiều công
trình, nhiều môi trường rất khác nhau, trong thiết
kế nội thất, cao ốc hay cả đô thị. Những bài toán và
lời giải ấy chỉ có dáng dấp giống nhau thôi chứ
không bao giờ là một. Mỗi lời giải hợp lý, hiệu quả
giúp cho công trình xây dựng ít bị tổn thương, dễ
thích nghi với những biến động trong tương lai lâu
dài. Những trường hợp thành công như vậy luôn có sự
hiện diện của những nét chung nhất định. Và
Christopher Alexander gọi những nét chung ấy là
pattern. |
|
Cũng không có gì quá to tát, bạn hãy hình dung: thợ
hồ phải biết lợp mái nhà sao cho không dột, xây hố
ga sao cho khỏi... bốc mùi (bạn để ý mà xem, không
dễ đâu nhé!). Điều này không hoàn toàn tùy thuộc vật
liệu được dùng thuộc loại tốt hay xấu. Nếu người thợ
biết áp dụng các mẫu dáng thiết kế khôn ngoan, những
gì họ làm ra sẽ đạt yêu cầu sử dụng, có độ bền cao,
lại dễ sửa sang khi cần. |
|
Trở lại với lịch sử, vào năm
1987, Ward Cunningham and Kent Beck nhận thấy ý
tưởng mẫu dáng thiết kế của kiến trúc sư Alexander
rất phù hợp với ngành tin học và quyết định dùng
khái niệm ấy khi giảng dạy ngôn ngữ Smalltalk. Sự
chú ý đến vấn đề này ngày càng tăng. Sau khi xuất
hiện quyển sách được biên soạn công phu của "bè lũ
bốn tên" lần đầu tiên năm 1994, mẫu dáng thiết kế
thực sự trở thành một khái niệm tin học quan trọng. |
|
Thế là sau một thời gian dài chỉ
tập trung vào vật liệu (các đối tượng, các thành
phần), nay giới lập trình lại phải chú ý đến kiến
trúc nữa. Nếu bạn cũng là "thợ hồ" như tôi, xin đừng
nghĩ "kiến trúc" hay "thiết kế" cứ nhất thiết phải
là những gì "ở trển dội xuống". Đó là những quy
cách, những kinh nghiệm ảnh hưởng trực tiếp đến
chính lề lối viết mã cụ thể hằng ngày của chúng
mình. |
|
Quyển sách của "bè lũ bốn tên"
được nhắc đến ở trên đã tổng kết những bí kíp qúy
báu trong... "giang hồ", liệt kê thành 23 mẫu dáng
thiết kế khác nhau. Sau phát pháo mở đầu ấy, số
lượng mẫu dáng thiết kế được đề nghị "lưu danh muôn
thuở" ngày càng tăng. Nếu bạn là "thợ hồ" (hay...
"phụ hồ") và chí thú với nghề, bạn rất cần (phải,
rất cần!) thu nạp các mẫu dáng thiết kế đã được công
nhận vào "túi khôn" của mình. |
|
[Đầu trang] |
|
 |
|
 |