要有做工程的思维方式去写程序,我觉得中国有,但可能还不是普遍现象。其实美国公司也并不是都有工程思维的,所以其实烂的东西很多,但是几个大的公司,特别是谷歌的工程真心做得很好。
我曾经有过在两个公司中有过和国内同事一起工作的经验,我发现国内的同事特别注重算法和代码的复杂程度,我不知道这是不是国内的普遍现象。好在这两个团队是我在带的,所以我用了一两年时间把这件事纠正了过来,我对他们一直强调的一件事就是:科学强调的是好奇心、探索方法和复杂程度;但工程强调的是简洁、可维护性和可延展性。
我觉得在软件开发这一块,有许许多多的人,不光是国内的,美国和欧洲的程序员也很容易地混淆这两个概念,有些程序员甚至追求自己的代码写得漂亮和有艺术性。我对我团队里的程序员说得很清楚:如果你们周末不想加班,晚上不想加班,不想在维护别人的代码时看不懂代码,那就想办法简洁化;我对我的团队的指导很简单,要是我们团队里任何队员需要一个小时以上读懂你的30行代码,你的代码对我来说就是垃圾,需要重写,我希望看到的代码是不懂代码的人也大概能看懂你的代码。
如何使代码简洁化就需要工程力量了,要做标准化版块,要设计升级的延展性。这个道理其实很简单,假使你汽车的刹车磨损了,你可以去换两块新刹车皮,而不是把车给换了,可惜在软件行业坏了刹车换新车的例子太多了,很多996就是这么来的。可维护性和可延展性就是工程的基础,标准件,统一流程,简洁功能的基础是复杂的工程能力。比如逻辑模块能不能独立出来?数据访问到数据对象化能不能独立出来?测试模块能不能独立出来?build/deploy版块能不能本地远程一体化?能不能debug复杂的平台?当问题的数据线有很多软件参予的时候,如何能迅速找到问题所在?
一个好的软件工程平台,任何新手都可以在这个平台上迅速开发自己的新功能,比如谷歌的程序员可以迅速对Pb的天量数据作ML的模块,与其欣赏该程序员的能力,不如欣赏谷歌的能力,在谷歌做5分钟的运算,很可能在其它公司需要几天甚至几星期甚至大半年。
中国互联网经历了20年的开疆拓土,已经开辟了自己的天地,完成了原种积累,应该静下心来沉浸技术,去创造软件界的高铁了。