优化系统与优化程序员_风闻
code2Real-有人就有江湖,有code就有bug2021-03-31 11:26
想想中国本科CS教育大多都教的是什么?
我们来一个一个数:
算法,是在给你一个问题,要你尽快算出解。
数据库,是给你一些数据,要你快速储存查找。
分布式算法/GPU编程,是一个cpu不够用,给你更快的硬件(集群或者gpu),要你更快算出解。
人工智能课,是写出指数增长的搜索算法,然后再用剪枝,学习等方法加速。
体系结构课,是在用电路门造出更快的CPU。
快。快。快。快。快……
慢!
程序员难道不重要吗?
为什么我们一个劲去优化机器,不去优化程序员呢?
而且,这问题只会随着代码量越来越多的时候,变得越来越大。
当程序是十行的时候,那怕是x86汇编二进制,也可以手动解码然后理解。百行的时候,汇编还是可以读的。千行的时候,可以改写C语言,而万行的时候,C高手,或者用更高级抽象的语言也能顶住。十万行一百万行,一个人就基本上读不完了,
那这时候怎么办?怎么分工怎么保证代码质量?像chrome这样,五千万行的时候呢?当有五千万行代码的时候,你如何抓bug?那怕是万分之一的代码,看起来都够呛!
于是,有了各种各样的方法论。比如重构。比如TDD。比如defensive programming。比如设计模式。我们也有了各种各样的编程语言。Java, Python, Ruby, Javascript, C++, Go。。。到底什么样的编程语言,编程方法论,才最好呢?
有的人说TDD是走火入魔,有的人认为defensive programming不好,要fail fast,有的人喜欢动态语言有的人喜欢静态语言,有的人往语言里面加feature,有的人认为大道至简,到底谁才是对的?
更糟糕的是,群众的眼睛并不是雪亮的。
多年前,大家认为应该用动态语言,Java是个垃圾,但是现在有人说动态类型一时爽,代码重构火葬场。
于是typescript越来越火,连python都在加入静态类型特性。
多年后,为什么不可能再反过来,动态类型又变得流行起来,我们再去追寻?
我们取笑大道至简,但是每过大概十年左右,就会出一个新的,更简单的语言,取代以前越来越复杂的怪物(命运之轮),然后循环往复。我们到底是在进步,还是在原地踏步呢?
各个领域都在拼命提高硬件和工具的效率,但很少有优化程序员的措施。
程序员是拿来挣钱,不是用于培养的。
培养好的程序员会飞走的,到头来为他人作嫁衣。
我们以为只要招到高素质的人才,自然会有高水平的产品。
为此, 企业不断增加面试难度,但是“面试造航母,工作拧螺丝”,程序员空怀一身屠龙技,却只能在流水线上剁肉。
即使有人鼓吹微代码、无代码技术,但是核心工作仍然需要程序员来完成。
如果程序员没有经过优化,那么只能自己在错误中慢慢领悟如何写程序,或者更糟糕的,整天去追寻工业界提出的新的编程语言,最新的方法论,但是到最后,发现这些都浮于表面,最后一无所获。
一位IT大师说:“过早的优化是万恶之源。”
但是在实际操作中,许多人最先考虑的是如何快速达到最优,而不是慢慢迭代。
因为领导的任期只有一届,如果不能在短期内取得最好成果,就没法形成政绩。
而政绩是决定领导升迁的重要因素。
民国时期,许多人认为有钱有枪有人就能雄霸一方。
因此,许多人的努力都是向外。
武昌一声枪响,双鸭子首先想到的不是立即回国领导起义,而是跑欧美向西方列强争取支持。
北伐打到上海时,常凯申想到的是如何争取江浙财阀和帝国主义的支持。
宁汉合流前,陈独秀想到的如何争取俄国和国民党的支持,而不是独立自主的武装斗争。
只有教员明白真正的优化来自内部,通过三湾改编,将一盘散沙的农民改造成能学习、能宣传、能战斗、能筹款、自组织的现代化军队。虽然这支军队缺枪少炮,衣衫不整,但是层次远超时代的其它军队。
这群土生土长的农民,即使在井冈山、延安时期就在关注世界动态,每天坚持学习,墙上挂着飞机、航母等图片,通过“官教兵,兵教官,兵教兵”提高业务水平。
在朝鲜战场上,一个普通士兵的新战法会立刻普及到全军。志愿军本得“钢不够气来凑”的精神打赢了联合国军。
反观国内IT界,管理水平也就民国军阀的水平。