在上一篇文章里,我带你一起了解了像 VS Code 这样的开源项目对软件工程的应用,以及如何学习借鉴优秀的项目对软件工程的应用。今天我将带你去看看像微软、谷歌、阿里巴巴这些大厂是怎么应用软件工程的,以及我们应该如何学习和借鉴他们对软件工程的实践。
我想无论你现在是否在大厂工作,都有很多途径了解到大厂是如何应用软件工程的,网上已经有很多他们员工的分享。你可能更想知道的是: 从大厂应用软件工程的实践中,你能学习什么,又该如何学习借鉴。
每个公司,都有自己的历史和文化,他们的文化又影响了各自的软件开发模式。
比如说谷歌,谷歌崇尚工程师文化,请来的工程师都是万里挑一的,开发也没有太大的进度压力,所以 Google 的工程师做项目就会不紧不慢,质量优先,有统一的代码规范,严格的代码审查和严谨的自动化测试。还会频繁地重写系统,每隔几年,就把软件重写一遍。
再比如说 Facebook,Facebook 有一种黑客精神,创始人马克·扎克伯格有句名言是“Move Fast and Break Things”,也就是说快速做出产品,不要怕犯错。所以 Facebook 的工程师做软件开发的时候不会想太多,先实现再说,做出来就发布,哪怕可能有 Bug。发布后根据用户的反馈再不断完善,真的把线上功能弄坏了,再打补丁去修复。
然而这些带有各自文化特色的部分,却是我们很难学习借鉴的,因为这样的文化都只适合各自的公司。假设让微软去学习 Facebook 的黑客精神,发布带有很多 Bug 的 Windows 系统,那么用户是不能忍受的;而让普通公司去学 Google 的工程师文化,项目没有严格的 Dead Line,系统隔几年重写一遍,那公司恐怕都要撑不住了。
所以,要学习大厂,你要多去关注大厂们对软件工程实践共通的地方,可以应用在你自己项目的地方,另外还要去看大厂对软件工程实践的变化趋势,在朝什么方向发展。通常这些大厂的很多实践都是业界的风向标,一旦一些实践大厂都在应用,那么很多中小厂就会跟风,最终变成行业标准。
在上一篇《43 | 以 VS Code 为例,看大型开源项目是如何应用软件工程的?》中,我从项目的开发迭代过程,团队的角色分工和项目开发各个阶段来分析了 VS Code 对软件工程的应用。类似的,我也将从大厂的开发团队组成、开发工具的使用、项目开发流程这几个方面来分析一下大厂对软件工程的应用中,有哪些共同点?有哪些变化趋势?有什么地方可以借鉴?
软件项目开发团队组成
软件项目开发,最终要落实到“人”上面。大厂在招人方面一向舍得投入,不仅花很多人力财力在招聘上面,同样对于员工待遇上也很大方,只为了能招到最优秀的人才。
对于普通的公司和团队来说,很难像大厂那样有一群行业内顶尖的人才,但是它在软件团队的一些管理和实践方面,还是有一些共通的地方,有值得普通公司学习借鉴之处。
1. 软件开发团队规模小
网上曾有一张流传甚广的关于各大公司的组织结构图。
(图片来源:HOW YOUR STARTUP’S ORG CHART CHANGES YOUR PRODUCT)
这张图形象生动的描述了各大公司的组织结构,各具特色。然而这些大厂的组织结构具体细分到软件项目开发