我所知大部分最优秀的软件设计师都有软件开发背景。这并不意味着他们是团队中最好的程序员,但他们能够在底层细节和大局之间切换。他们还有着深厚的技术积累,以及从多年软件构建的经验中获得的广阔的知识面。但他们不能(也不会)总是知道一切。再加上也很难找到一个只使用单一技术栈的软件系统。我在职业生涯中,见过一些采用混杂技术栈的系统,包括:
- 针对多个Oracle数据库的微软.NET桌面客户端;
- 通过一组Java EE网络服务从Oracle数据库拉取数据的微软ASP.NET网站;
- 从Java编写的REST服务拉取数据的iOS和Android移动应用;
- 用微软.NET或Ruby编写的多个服务构成的微服务架构;
- 从微软Dynamics CRM系统拉取数据的微软ASP.NET网站;
- 通过微软.NET/Windows通信基础服务拉取数据的微软SharePoint网站;
- 与SAP集成的Java EE 网络应用程序;
- ……。
虽然一般性的设计知识、技巧、模式和方法通常适用于许多不同的技术,但不明白如何将其成功应用在底层细节上可能会导致问题。这是否意味着对任何特定软件系统中使用的所有技术,软件架构师都应该是专家?不,合作才是关键。找到那些知你所不知的人,与他们紧密合作。没有谁说软件构架的角色不能分享,而且欣然认识到你的知识差距往往是创造更和谐的工作环境的第一步。结对编程有好处,那么为什么不能结对架构?