Cảnh quan hệ thống

Từ đầu thế kỉ 20, các qui trình chế tạo dựa trên “dây chuyền lắp ráp” do Henry Ford tạo ra đã trở thành chuẩn. Ý tưởng là chia các qui trình phức tạp thành những nhiệm vụ nhỏ nhất và đơn giản nhất để cho công nhân có thể được đào tạo là một cách hiệu lực hơn và hiệu quả hơn. Việc phân đoạn nhiệm vụ này là bản chất vào thời đó do giới hạn của kĩ năng của công nhân lao động và tính hiệu quả cần thiết của ngành công nghiệp ô tô. Henry Ford đã nói: “Cách duy nhất để một nhóm công nhân làm việc trong các qui trình phức tạp như làm xe hơi là cho từng người trong họ một việc để làm và để họ tập trung vào việc làm điều đó một cách hiệu quả và nhanh chóng nhất có thể được.”

Phương pháp này cũng tự biểu lộ nó theo cách mọi người tổ chức mọi sự thành chức năng và chuyên môn hoá. Nó có tác dụng rất tốt trong toàn thế kỉ 20, đặc biệt trong khu vực chế tạo với công nhân lao động thủ công. Tuy nhiên, nó không làm việc tốt trong khu vực công nghệ với công nhân tri thức của thế kỉ 21. Ngày nay, hầu hết công việc yêu cầu tri thức nhiều, đặc biệt công việc công nghệ. Đó là lí do tại sao có lỗ hổng lớn giữa công nhân có kĩ năng và công nhân không kĩ năng. Không may là nhiều công ti CNTT vẫn đang vận hành như khi họ ở trong thế kỉ 20. Họ phân chia công việc thành các nhóm chức năng, từng người chỉ biết một thứ dựa trên công nghệ và nền. Chẳng hạn, mạng, máy phục vụ, cơ sở dữ liệu, máy tính bàn và ứng dụng. Rất ít người biết cách toàn thể hệ thống làm việc và cách nó tác động tới doanh nghiệp. Trong phát triển phần mềm, công nhân bị chia thành nhiều chức năng, từng người được chuyên môn hoá trong một chức năng như lập kế hoạch, thiết kế, viết mã, hay kiểm thử nhưng ít người biết toàn thể công việc phần mềm. Đó là lí do tại sao nhiều dự án thất bại trong khi tích hợp.

Vấn đề với phân đoạn nhiệm vụ là ở chỗ bằng việc chia các qui trình phức tạp thành các nhiệm vụ riêng lẻ, cảnh quan toàn thể bị mất. Công nhân chỉ biết việc làm riêng của họ, chức năng riêng của họ. Bất kì cái gì bên ngoài họ đều không phải là mối quan tâm của họ. Nguyên nhân gốc rễ có thể dõi về hệ thống giáo dục. Các giáo sư hàn lâm nhìn phần mềm và coi lập trình và kiểm thử là các hoạt động chính rồi hội tụ chương trình đào tạo vào chỉ mỗi hai kĩ năng này. Trong nhiều năm, sinh viên tốt nghiệp các chương trình này chỉ biết rõ một điều nhưng mất cái nhìn về toàn thể hệ thống.

Sinh viên năm thứ nhất thường hỏi tôi: “Tại sao chúng em phải học nhiều thứ thế trong kĩ nghệ phần mềm nơi mà mọi điều em cần là viết mã để kiếm việc làm trong công nghiệp?” Tôi bảo họ: “Các bạn được đào tạo là kĩ sư phần mềm, không phải người lập trình. Người kĩ sư xây dựng ra hệ thống, người lập trình chỉ xây dựng một cấu phần của hệ thống. Nghề của các bạn bao quát toàn thể việc phát triển phần mềm và nhiều hơn nữa. Nghề của người lập trình bị giới hạn vào viết mã và kiểm thử. Bạn có thể bành trướng tri thức của bạn ra rộng hơn và sâu hơn và không có giới hạn nào về điều bạn có thể làm. Người lập trình không thể làm được điều đó và ngày nay, không có lí do gì để trả lương cao cho ai đó chỉ viết mã vì bạn có thể khoán ngoài việc viết mã cho các nước có chi phí thấp hơn. Không công ti nào khoán ngoài việc của kĩ sư phần mềm, chỉ khoán ngoài việc của người lập trình. Bạn muốn thấy toàn thể khu rừng, không chỉ một cây. Bạn muốn biết cách hệ thống làm việc và hỗ trợ cho doanh nghiệp, không phải là cách một cấu phần vận hành. Đừng giới hạn bản thân bạn vào một thứ, mở rộng đường chân trời của bạn ra thì bạn có thể đi nhanh như tiềm năng của bạn cho phép.”

Tôi thường kể cho sinh viên câu chuyện về người lập trình giỏi nhất trên thế giới. Không ai có thể viết mã giỏi hơn anh ta. Anh ta có thể viết cả nghìn dòng mã một ngày. Anh ta biết rằng có hệ thống mà phần mềm của anh ta vận hành nhưng anh ta không hiểu kĩ nó. Chưa bao giờ xuất hiện việc anh ta hỏi người dùng họ cần gì vì anh ta chưa bao giờ nói chuyện với người dùng. Anh ta không có ý tưởng nào về các chức năng và người khác, những người cũng làm việc trên hệ thống. Anh ta không có ý tưởng về cách toàn thể hệ thống vận hành. Anh ta không có khái niệm về quản lí cấu hình hay quản lí thay đổi. Anh ta chỉ biết một điều: “Viết mã”.

Trong dự án, anh ta nhận được yêu cầu từ người quản lí và trong vòng vài ngày, anh ta kết thúc nó. Vào ngày hôm sau, người quản lí của anh ta nói rằng khách hàng đã đổi ý cho nên có yêu cầu mới. Anh ta không bận tâm về sửa mã của mình cho nên anh ta thêm vài nghìn dòng mã. Vài ngày sau, người quản lí nói rằng khách hàng muốn thêm nhiều chức năng cho nên anh ta bắt đầu viết thêm vài nghìn dòng mã nữa. Vài tuần sau, khách hàng đổi ý và muốn bắt đầu với các yêu cầu mới hơn và tốt hơn. Anh ta phải vứt đi mọi thứ anh ta đã làm và bắt đầu mọi thứ mới. Anh ta viết nhiều nghìn dòng mã. Khách hàng lại đổi ý cho nên anh ta phải viết lại mã lần nữa. Anh ta phải làm điều đó ít nhất thêm hai mươi lần nữa trong vài tháng. Anh ta biết rằng anh có lẽ viết tới trên năm mươi nghìn dòng mã và anh ta thực sự bị lẫn lộn và mệt mỏi về mọi thay đổi. Cuối cùng, dự án hoàn thành nhưng khi anh ta chuyển giao phần mềm, khách hàng phàn nàn: “Đó không phải điều tôi muốn, xin làm lại nó.” Cuối cùng, người lập trình giỏi nhất bỏ việc làm và trở lại trường, lần này anh ta hiểu điều anh ta thực sự cần, anh ta muốn học về kĩ nghệ phần mềm.”

Ngày nay, người phát triển phần mềm không làm việc một mình. Họ bao giờ cũng làm việc trong tổ bởi vì phần mềm đang ngày một lớn hơn và phức tạp hơn. Điều người phát triển cần là tri thức về toàn thể hệ thống, và mối quan hệ của mọi cấu phần chính và cách chúng làm việc cùng nhau để hỗ trợ cho mục đích của doanh nghiệp. Họ phải hiểu toàn thể qui trình phần mềm, không phải là từng mảnh của nó. Họ phải biết cách làm việc với khách hàng để nhận diện nhu cầu của họ và lấy được yêu cầu tốt hơn. Họ phải biết cách kiến trúc hệ thống bằng việc nhận diện mọi cấu phần cũng như các giao diện người dùng, thuộc tính chất lượng. Họ phải biết cách thiết kế từng cấu phần bằng việc tiến hành bù trừ và đặt ưu tiên để giảm rủi ro. Họ phải biết cách thực hiện các cấu phần này và chắc chắn rằng chúng tất cả đều làm việc tốt cùng nhau. Họ phải biết cách tiến hành kiểm thử để thẩm tra rằng mọi thứ làm việc như được thiết kế và đáp ứng yêu cầu khách hàng. Họ phải biết cách hỗ trợ cho khách hàng khi hệ thống vận hành đầy đủ và chạy. Về căn bản, họ phải biết mọi thứ.

Ngày nay, công nhân phần mềm cần đào tạo và giáo dục toàn diện. Đó là lí do tại sao giáo dục đại học tốt là mấu chốt thế. Đó là lí do tại sao việc lựa chọn trường tốt với chương trình đào tạo tốt là quan trọng thế. Mọi sinh viên đều phải ra “quyết định đúng” bởi vì tương lai của bạn tuỳ thuộc vào nó. Thầy giáo tốt chỉ có thể mở cánh cửa tri thức cho bạn nhưng bạn phải đi vào nó. Chương trình đào tạo tốt có thể chỉ ra cho bạn bản lộ trình tới đích đến của bạn nhưng bạn phải đích thân đi con đường này. Trong thế giới thay đổi nhanh chóng này, mọi sự có thể tới và đi nhanh chóng. Vận may có thể thay đổi nhanh hơn thời tiết nhưng tri thức và kĩ năng là điều duy nhất bạn có và không ai có thể lấy nó đi được.

English version

Full article: A system perspective

Tác phẩm, tác giả, nguồn

  • Tác phẩm: Quản lí hệ thông tin
  • Biên tập: Kipkis.com
  • Nguồn: Blog của giáo sư John Vu, Carnegie Mellon University
"Like" us to know more!