我们往往非常理性,会认为汽车就是跑得更快的马。
诺,你看,第一天,它跑的还不如马快。我们为什么需要它?
困惑
笔者大学毕业之后,投入工作岗位,在全世界程序员的还算比较向往的大公司工作,每天在吸收西方最先进的经验,可谓一日千里(当时的感受)。 每日赋闲的时候,笔者常常苦思一个问题:为什么这些经验,我在大学里压根学不到?这些工作方法和流程,连听都没有听说过?
笔者的大学,也是国内数一数二的高等学府,大学教授也都水平很高,上课深入浅出,旁征博引,不可谓不科学;课程作业也是难度极大,不可谓不专业。 到底差了什么?
关键的变量
直到某一天,笔者看到如下事实,忽然大悟,有一个关键变量,决定了两者是绝然不同的事。在大学和顶级工业界之间,在这个维度的差距,永远也填补不了。
环境 | 代码规模/行 | 整体工程规模/人年 |
---|---|---|
大学课程作业 | ~1000 | ~0.1 人年 |
初创公司-手机App | ~10,000 | ~1人年 |
创业项目-10人左右小型团队 | ~100,000 | ~10人年 |
中型商业软件-50人左右研发团队2年 | ~1,000,000 | ~100人年 |
大型开源项目-e.g. k8s | ~5,000,000 | ~500人年 |
。。。 | 。。。 | 。。。 |
Windows Vista | ~50,000,000 | ~50,000 人年 |
Google(2015) | ~2,000,000,000 | ~200,000人年 |
表格最后一行Google 的工程规模按照25,000人(2015),假设Google工程师数量线性增长(from 1998 to 2015)来近似推算。
惊人的差距
跑的再快的马,也无法赶上汽车
-- John Adhoc
一个非常显而易见,但往往被忽略的事实就是,上面表格中任意相邻两行,其实都不是一件事情。 学校里的作业,和一个创业项目做一个完整的手机App,是两件不同层面的事情。 负责一个10人团队,研发一年,完成一个创业项目,拿到融资,会管理一个50人研发团队,完成一个商业型的交付系统,是两件不同层面的事情。依次类推。
两件事情的含义
这里不得不多论述一下,两件不同层面的事情 意味着什么:
- 完全不同的技能要求
- 完全不同的合作模式
- 完全不同的管理难度
即下一个层面跑的再快,都无法达成下一个层面需要的基本要求。必须要有维度和模式上的创新,越往上,高处不胜寒。
回到困惑
篇幅有限,笔者对于其中更深层次的思辨,留到以后有时间继续进行。