Đã có nhiều câu hỏi với câu trả lời hay về vai trò của Kiến trúc sư phần mềm (SA) trên StackOverflow và Lập trình viên SE . Tôi đang cố gắng hỏi một câu hỏi tập trung hơn một chút so với những câu hỏi. Định nghĩa về SA rất rộng nên vì mục đích của câu hỏi này, hãy định nghĩa SA như sau:
Kiến trúc sư phần mềm hướng dẫn thiết kế tổng thể của dự án, tham gia vào các nỗ lực mã hóa, tiến hành đánh giá mã và chọn các công nghệ sẽ được sử dụng.
Nói cách khác, tôi không nói về phần còn lại của người quản lý và áo vest ở các loại mào (các từ có vần điệu hơn nữa được tách ra) của các loại SA. Nếu tôi theo đuổi bất kỳ loại vị trí SA nào, tôi không muốn tránh xa tiền mã hóa. Tôi có thể hy sinh một chút thời gian để giao tiếp với khách hàng và Chuyên viên phân tích nghiệp vụ, v.v., nhưng tôi vẫn tham gia về mặt kỹ thuật và tôi không nhận thức được những gì đang diễn ra trong các cuộc họp.
Với những điểm này trong tâm trí, một SA nên mang gì đến bàn? Họ có nên đưa ra một tâm lý "đặt ra luật" (có thể nói) và thực thi việc sử dụng một số công cụ nhất định để phù hợp với "cách của họ", tức là hướng dẫn mã hóa, kiểm soát nguồn, mẫu, tài liệu UML, v.v.? Hay họ nên xác định phương hướng và chiến lược ban đầu sau đó được đặt lại và nhảy vào khi cần thiết để điều chỉnh hướng của con tàu?
Tùy thuộc vào tổ chức này có thể không hoạt động. Một SA dựa vào TFS để thực thi mọi thứ có thể đấu tranh để thực hiện kế hoạch của họ tại một chủ nhân chỉ sử dụng StarTeam. Tương tự, một SA cần phải linh hoạt tùy thuộc vào giai đoạn của dự án. Nếu đó là một dự án mới, họ có nhiều sự lựa chọn hơn, trong khi họ có thể có ít hơn cho các dự án hiện có.
Dưới đây là một số câu chuyện SA tôi đã trải nghiệm như một cách chia sẻ một số nền tảng với hy vọng rằng câu trả lời cho câu hỏi của tôi cũng có thể làm sáng tỏ những vấn đề này:
Tôi đã làm việc với một SA, người đã xem xét mã từng dòng mã của nhóm. SA sẽ làm điều này không chỉ cho dự án của chúng tôi mà các dự án khác trong tổ chức (hãy tưởng tượng thời gian dành cho việc này). Lúc đầu, nó rất hữu ích để thực thi các tiêu chuẩn nhất định, nhưng sau đó nó trở nên tê liệt. FxCop là cách SA sẽ tìm ra vấn đề. Đừng hiểu sai ý tôi, đó là một cách hay để dạy các nhà phát triển cơ sở và buộc họ nghĩ về hậu quả của cách tiếp cận đã chọn, nhưng đối với các nhà phát triển cấp cao thì nó được coi là hơi hà khắc.
Một SA đặc biệt đã chống lại việc sử dụng một thư viện nhất định, cho rằng nó chậm. Điều này buộc chúng tôi phải viết hàng tấn mã để đạt được những điều khác biệt trong khi thư viện khác sẽ giúp chúng tôi tiết kiệm rất nhiều thời gian. Chuyển nhanh đến tháng cuối cùng của dự án và khách hàng đã phàn nàn về hiệu suất. Giải pháp duy nhất là thay đổi chức năng nhất định để sử dụng phương pháp bỏ qua ban đầu mặc dù có cảnh báo sớm từ các nhà phát triển. Vào thời điểm đó, rất nhiều mã đã bị loại bỏ và không thể tái sử dụng, dẫn đến tăng ca và căng thẳng. Đáng buồn thay, các ước tính được sử dụng cho dự án dựa trên cách tiếp cận cũ mà dự án của tôi bị cấm sử dụng vì vậy nó không phải là một chỉ số thích hợp để ước tính. Tôi sẽ nghe Thủ tướng nói "chúng tôi đã làm điều này trước đây",
SA người sẽ thực thi việc sử dụng các lớp DTO, DO, BO, Service và vv cho tất cả các dự án. Các nhà phát triển mới đã phải học kiến trúc này và SA hướng dẫn sử dụng một cách kiên quyết. Các ngoại lệ đối với hướng dẫn sử dụng đã được thực hiện khi hoàn toàn khó thực hiện theo hướng dẫn. SA đã được căn cứ trong cách tiếp cận của họ. Các lớp cho DTO và tất cả các hoạt động CRUD được tạo thông qua CodeSmith và các lược đồ cơ sở dữ liệu là một quả bóng sáp tương tự khác. Tuy nhiên, đã sử dụng thiết lập này ở mọi nơi, SA không mở ra các công nghệ mới như LINQ to SQL hoặc Entity Framework.
Tôi không sử dụng bài đăng này như một nền tảng để trút giận. Có những khía cạnh tích cực và tiêu cực đối với những trải nghiệm của tôi với những câu chuyện SA được đề cập ở trên. Câu hỏi của tôi sôi lên:
- Một SA nên mang gì đến bàn?
- Làm thế nào họ có thể đạt được sự cân bằng trong việc ra quyết định của họ?
- Có nên tiếp cận một công việc SA (như được xác định trước đó) với tâm lý rằng họ phải thực thi các quy tắc cơ bản nhất định?
- Bất cứ điều gì khác để xem xét?
Cảm ơn! Tôi chắc chắn rằng các nhiệm vụ công việc này dễ dàng được mở rộng cho những người là nhà phát triển cấp cao hoặc lãnh đạo kỹ thuật, vì vậy hãy thoải mái trả lời với khả năng đó.