GIỚI THIỆU Việc để một chương trình chạy được đúng cách không đòi hỏi quá nhiều kiến thức hay kỹ năng. Học sinh trung học vẫn làm được điều đó hàng ngày. Những chàng trai, cô gái sinh viên đại học thậm chí còn khởi nghiệp với những dự án tỷ đô, dựa trên vài dòng code PHP hay Ruby vụng về. Đám lập trình viên mới vào nghề ở khắp các văn phòng làm việc chen chúc trên toàn cầu miệt mài vượt qua những tài liệu yêu cầu đồ sộ trong các hệ thống theo dõi lỗi khổng lồ chỉ để làm cho hệ thống “chạy được” bằng mọi giá. Mã nguồn họ viết có thể không đẹp, nhưng nó “chạy.” Và chuyện để một thứ gì đó chạy được — ít nhất một lần — thực ra không khó đến thế. Nhưng làm cho phần mềm đúng cách thì hoàn toàn khác. Làm phần mềm đúng là chuyện không dễ. Nó đòi hỏi kiến thức và kỹ năng mà hầu hết lập trình viên trẻ chưa tích lũy được. Nó cần tư duy và sự thấu hiểu mà nhiều lập trình viên không dành thời gian để phát triển. Nó đòi hỏi mức độ kỷ luật và tận tâm mà đa số chẳng bao giờ nghĩ mình cần đến. Trên hết, đó là đam mê nghề nghiệp và khát khao trở thành một chuyên gia thực thụ. Và khi phần mềm được làm đúng, một điều kỳ diệu xảy ra: bạn không cần cả đội lập trình viên đông đảo để duy trì nó. Bạn không cần những tài liệu yêu cầu khổng lồ hay hệ thống theo dõi lỗi phức tạp. Bạn không cần các văn phòng chật chội hay lập trình 24/7 vắt kiệt sức người. Phần mềm làm đúng chỉ cần một phần nhỏ nhân lực để phát triển và bảo trì. Việc thay đổi trở nên đơn giản và nhanh chóng. Lỗi hiếm và không lan tràn. Nỗ lực được tối thiểu hóa, trong khi chức năng và tính linh hoạt được tối đa hóa. Đúng vậy, viễn cảnh này nghe có vẻ như một giấc mơ xa vời. Nhưng tôi đã trải qua; tôi đã chứng kiến nó xảy ra. Tôi từng làm việc trong những dự án mà thiết kế và kiến trúc hệ thống giúp viết code dễ dàng và duy trì cũng nhẹ nhàng. Tôi từng tham gia dự án chỉ cần một phần nhỏ nhân lực so với dự tính. Tôi từng làm việc trên các hệ thống có tỷ lệ lỗi cực thấp. Tôi đã thấy tác động phi thường của kiến trúc phần mềm tốt đối với một hệ thống, một dự án, và một đội nhóm. Tôi đã đến được “miền đất hứa.” Nhưng đừng chỉ nghe tôi nói. Hãy nhìn vào kinh nghiệm của chính bạn. Bạn đã từng gặp điều ngược lại chưa? Bạn có từng làm việc trên những hệ thống quá chặt chẽ, liên kết phức tạp đến nỗi mỗi thay đổi dù nhỏ bé cũng kéo dài hàng tuần và mang theo rủi ro lớn không? Bạn đã từng nếm trải sự cản trở từ code tồi và thiết kế kém chất lượng chưa? Thiết kế hệ thống mà bạn làm việc đã từng ảnh hưởng tiêu cực sâu sắc đến tinh thần đội nhóm, niềm tin khách hàng, và sự kiên nhẫn của quản lý chưa? Bạn có từng thấy các đội nhóm, phòng ban, thậm chí công ty bị phá vỡ vì cấu trúc phần mềm tan hoang không? Bạn đã từng “đi qua địa ngục lập trình” chưa? Tôi thì có — và phần lớn chúng ta cũng vậy. Việc vật lộn với thiết kế phần mềm tồi tệ là điều phổ biến hơn rất nhiều so với tận hưởng niềm vui làm việc với một thiết kế tốt.