研发的英文是R&D,即研究(Research)与开发(Development)。软件研发这个词包含了两个意思,第一是架构设计,即决定一个系统采用什么样的架构,怎么做,通常这是系统分析师或者架构师的责任,系统分析师是比较传统的叫法,现代互联网公司往往喜欢用架构师来替代;第二是代码实施,也就是通过编写代码把系统实施出来,一般这是程序员的工作。
现在我国互联网行业的软件研发人员的职业生涯往往从写代码开始,然后逐步积累经验向系统设计的方向发展,例如模块设计,系统设计等,等到积累了足够的经验并在思维能力提升之后,程序员可能逐渐成长为专门从事系统设计的架构师。所以程序员与架构师之间有一段很长的路,而且这是一条渐进的灰色地带,有时候两者之间在职位分工方面很难区别。不知道从哪朝哪代开始,行业里用软件研发人员笼统地涵盖相关的职位。
实际上,不同的企业在职位设计上有不同的做法,中国的互联网企业多数参考硅谷的做法,就是以软件研发工程师覆盖写代码的程序员,负责系统设计的系统分析师,以及专门负责架构设计的架构师等不同职位。
R(研究)/架构师
春节前在一个互联网CTO的微信群里,大家聊起了对程序员落实系统架构设计的担忧。有的时候架构设计得很优秀,但是真正落地的系统一塌糊涂,也有的时候没有架构设计,程序员自发完成设计和编程。近期观察到一个支付公司的研发团队,尽管研发工程师们非常努力,但是该团队所负责的应用系统,在架构设计和代码实施上却是坑坑洼洼乏善可陈。
架构设计是这样的
这些现象让我回想起了自己在新加坡、日本、美国和中国的四段职业生涯。反思这四段职业经历,对比目前所面临的困局,我感觉有必要对比分析四个国家的互联网公司在软件研发职位方面的设计,希望能从中提炼出有价值的经验,或许对互联网企业的CTO有一定的启发意义。