Lập trình ôm (pair programming)

Thursday, March 12, 2009 0 phản hồi

High cohesion - Loose coupling và Xích Bích

0 phản hồi

Nhân xem phim Đại chiến Xích Bích, chợt nghĩ ra một sự liên hệ giữa nguyên nhân đại bại của Tào Tháo và nguyên lý High cohesion - Loose coupling(1).


Tào Tháo nghĩ rằng việc liên kết các chiến thuyền lại càng vững chắc thì sẽ làm tăng sức mạnh của thủy quân. Tuy nhiên, ông đã vi phạm một sai lầm nghiêm trọng.

1/ Mỗi chiến thuyền là một đơn vị thủy quân tương đối độc lập. Khi có một biến cố xảy ra, họ luôn nghĩ đến chính mình trước. Do đó, việc đầu tiên họ làm khi gặp biến cố là cố gắng tách mình ra khỏi sự ảnh hưởng từ các chiến thuyền khác. Vì liên kết giữa các chiến thuyền quá chặt, nên việc tách thuyền trở thành vô vọng. Quân lính vừa phải đối phó với liên minh Lưu - Tôn, vừa phải cố gắng tách mình ra khỏi sự ảnh hưởng xung quanh. Chỉ cần dùng một lực lượng nhỏ cũng đủ phá tan quân Tào. => Vi phạm tính chất loose coupling.

2/ Từng chiến thuyền của Tào Tháo về thực chất không mạnh. Quân Tào từ phía Bắc không thông thạo sông nước (Yếu tố con người). Thuyền không đủ vững chải (Yếu tố vật chất). Mỗi chiến thuyền không đủ mạnh thì rất dễ bị tác động bởi những biến đổi xung quanh. => Vi phạm tính chất high cohesion.


3/ Kết hợp 2 ảnh hưởng trên, quân Tào bị rối loạn, hoang mang về tâm lý. Cái hiệu ứng đám đông kinh khủng ấy làm cho quân Tào tự giẫm đạp lên nhau mà chết. Kẻ chết vì lửa thì ít, kẻ chết vì hỗn loạn thì nhiều vô kể.
------------------------------------

Nhân tiện, viết lại trận Xích Bích theo một góc nhìn khác từ phần mềm: (Mong tác giả La Quán Trung quá cố đừng chấp tại hạ)

Tào Tháo là con của một quan chức nhà nước. Tận dụng thế lực hùng hậu của cha mình, Tào đã lập ra một công ty lấy tên là Tào Gia, chuyên nhận những dự án nhà nước với kinh phí rất lớn. Nhờ đục khoét và khéo lo lót nên chẳng bao lâu đã trở thành công ty đứng đầu trong ngành phần mềm Việt Nam.

Cùng thời điểm đó, có 2 công ty cũng đang ăn nên làm ra. Một là công ty của Lưu Bị - làm outsourcing cho một số dự án vừa và nhỏ từ US và Châu Âu. Xuất thân của Lưu Bị nghèo hèn, đã từng có lúc phải nhận những dự án freelancer giá vài chục đến vài trăm USD để kiếm sống qua ngày. Nhờ lăn lộn nhiều nên Bị tụ tập được nhiều người giỏi trong làng phần mềm. Chẳng bao lâu, Bị khuếch trương được thanh thế và trở thành một công ty có tên tuổi ở Việt Nam

Công ty thứ hai là công ty của Tôn Quyền. Tôn Quyền là con nhà giàu có, thế phiệt. Cũng may không ăn chơi hút hít, mà lại hứng thú làm ăn. Quyền được cha cho học ngành CNTT rồi sau đó mở cho một công ty Trách nhiệm hữu hạn lấy tên là: Công ty TNHH giải pháp Tôn Hành Giả.

3 công ty của Tào, Lưu, Tôn đã trở thành 3 công ty phần mềm lớn nhất ở VN thời đó. Tuy nhiên, so về thế và lực, thì Lưu và Tôn còn kém xa so với Tào.

Một ngày nọ, hãng phần mềm Microsoft đến Việt Nam và đặt hàng làm một dự án về ERP lớn nhất chưa từng có - trị giá 35 tỳ USD. Đây là một hợp đồng rất béo bở. Trong cuộc đấu thầu có cả 3 công ty: Tào, Lưu, Tôn. Nhờ có quen biết và khéo léo làm PR, Tào nghiễm nhiên trở thành công ty nhận được 60% hợp đồng. Lưu và Tôn chỉ được nhận làm một số module của 40% còn lại.

Tào sau khi nhận dự án đã huy động một lực lượng gần 3000 nhân viên để xây dựng phần chính của sản phẩm. Ông được một Technical Architect quạt mo bày cho một thiết kế kiến trúc gần 300 system component. Technical Architect của Tào chưa có nhiều kinh nghiệm. Hắn tạo ra một bản vẽ kiến trúc với những mối liên hệ gắn kết chặt giữa rất nhiều component một cách vô tội vạ. Mỗi component được triển khai bởi một team gần 10 người.

Lưu và Tôn sau khi thất bại đấu thầu quyết tâm liên kết để đánh bại Tào. Những phần component còn lại của hệ thống không quá phức tạp nên Lưu và Tôn đã nhanh chóng hoàn thành với chất lượng rất tốt. Lưu Bị có một Project manager rất giỏi là Gia Cát Lượng. Ông này ngoài tài quản lý, kĩ thuật còn có khả năng tư vấn khách hàng rất tốt. Lượng nhờ có uy tín nên ít lâu sau đã được mời về làm ở bộ phận tư vấn cấp cao về tính năng sản phẩm ERP đang xây dựng.

Bằng sự khôn khéo và có chuẩn bị trước, Lượng đã đệ trình một danh sách gồm: những điểm yếu về tính năng cũ, danh sách những tính năng mới, thống kê về thói quen, nghiệp vụ của khách hàng cho Microsoft và yêu cầu thay đổi trên hệ thống đang phát triển hiện tại

Bản danh sách này nhanh chóng được Microsoft chấp thuận. Hậu quả của nó là: 90% thay đổi về yêu cầu nằm trên những system component mà Tào đang phát triển.

Vì các system component của Tào được xây dựng phụ thuộc nhau quá chặt chẽ. Một thay đổi nhỏ cũng ảnh hưởng dây chuyền đến hàng loạt những thành phần khác. Sự thay đổi yêu cầu này như một ngọn lửa bùng lên và lan đi khắp các bộ phận phát triển của công ty Tào Gia.

Mỗi nhóm thay vì tìm cách để thay đổi thiết kế cho thích hợp, lại chuyển sang tranh luận để làm cách nào cho module của mình không bị ảnh hưởng bởi những module khác - đẩy trách nhiệm thay đổi cho các nhóm khác. Họ cố gắng tách mình ra khỏi sự ảnh hưởng xung quanh.

Thêm vào đó, nhân viên của Tào tuy đông nhưng không giỏi. Điều đó dẫn đến mỗi component được thiết kế hết sức sai về những nguyên tắc hướng đối tượng. Các class trong mỗi component được không có tính liên kết chặt chẽ. Mỗi khi cần sửa thì phải thay đổi ở nhiều chỗ. Có những thay đổi buộc phải thay đổi cả interface giao tiếp với bên ngoài.

Sau 3 năm hì hục để sửa chữa và đáp ứng những yêu cầu mới mà vẫn không có kết quả. Microsoft tuyên bố cắt hợp đồng với Tào. Đồng thời buộc Tào phải bồi thường 20% giá trị hợp đồng. Những component của Tào đang xây dựng được chuyển qua outsource cho 2 công ty Lưu và Tôn.

Sau hợp đồng thất bại thảm hại, thanh thế của Tào sa sút. Cũng may nhờ một quỹ đầu tư mạo hiểm thấy Tào còn có tiềm năng nên đã bỏ tiền để vực dậy công ty Tào Gia. Từ đó, 3 công ty Tào, Lưu, Tôn dựng nên một thế chân vạc trong ngành phần mềm Việt Nam.

Nghe đâu sau đó tay Technical Architect quạt mo kia bị Tào Tháo sa thải. Về sau có người đồn rằng thấy hắn tham gia bid một vài project nho nhỏ trên rentacoder để kiếm sống qua ngày. Hư thật thế nào cũng không rõ.
Hết.

Ghi chú:
Hic, vừa post lên thì nhận được hơn 10 cái message hỏi Tào Tháo là công ty nào, dự án nào mà to thế, ... Xin đính chính lại: đây là sản phẩm của trí tưởng tượng của mình - chỉ muốn mượn hình ảnh của đại chiến Xích Bích mà nói về Loose coupling và High Cohension mà thôi.

Lần sau sẽ chú thích rõ ràng hơn. :)

(1) High cohesion - Loose coupling là một nguyên lý thiết kế hướng đối tượng, trong đó nói rằng:
Các class trong mỗi package phải có mối quan hệ chặt chẽ với nhau để tạo nên một thực thể bền vững (cohesion = tính cố kết). Các package trong hệ thống phải có mối quan hệ phụ thuộc (coupling) càng lỏng lẻo càng tốt để đảm bảo tính độc lập - ít bị ảnh hưởng khi có sự thay đổi