技术工作多年,感受过很多“朝为断肠人,夕为东流水”,信息类工作变化很快,各种成功学,管理学里喜欢说拥抱变化,变化就是永恒的不变已为老生常谈。而不变性存在么,一位哲人曾说“聪明人坚持计划,智慧的人坚守原则”。本文将从语言,系统和算法三个方面探讨。
1.语言的范式存在么
第一次接触编程,学习变量,赋值,条件,循环,还有面向对象的继承,封装,多态。很庆幸当时看的是《Head first Java》, 如果淹没在C++的指针的海洋里,估计很早弃坑。多年之后,扩展了Python,Scala,C++,Golang,从语法上殊途同归,在一阶逻辑方面,如果表达一般算法流程,语言的区分并不大。
当年编译原理选修,我更喜欢做应用,就没有选择听听编译原理,实属遗憾。当下的教育环境,实用主义导向,工程技术犹如搭积木,对存在和本质的思考太少,当然没有生存何谈存在。一位大学教授被职称和成果压力,很难给出有深度的选题,一位学生着急工作挣钱,一心只想学习工业界的技术,也不会潜心研究。面试时,我曾问一位同学,你学过scala么?那函数式编程到底是什么?他说我就知道那是函数式编程,在写spark,大数据里用用,跟java没有区别吧。他或许已经感受到语言的范式,但说不清楚。
范式是一种普遍的原则,面向对象重在对复杂业务逻辑的模块化和抽象,其目标是分离和控制,相关逻辑放一起,不相关的不要耦合,让软件的生命力更长久。函数式编程,更多出现在大数据环境里,因为数据量大,就要分布式,函数式编程从原则上避免副作用,解决分布式里竞态关系的一大问题。
有很多著作探讨语言范式的哲学,这是一个有趣的话题,待有钱有闲可以好好研究哈哈
2.系统的迷思
系统是一系列功能的组合,为了完成某种理性的目标,一个系统通常是五个部分,输入,输出,控制,计算和反馈调节。刚开始工作时,总是只关心了输入,输出,控制和计算逻辑,很容易忽略反馈调节部分,因为反馈不在狭义的编程环境内。可能来自人:例如用户反馈,产品迭代需求,老板拍个脑袋,也可能来自对系统进行监控和观察。
围绕反馈的工作,是长尾的,消耗精力的,特别在一些数据挖掘系统中,算法上线要评估,要排查case,要找到系统问题出现在哪儿。以效果为关注点的管理层并不会关心这些评估工具的效率,只在出现阻碍时才随便下个命令让士兵们开发,而如果能有一些预见性,提早规划系统的反馈阶段的事情,后期的运维便会事半功倍。
系统是逐步长大的,从0到1的初创期,很快乐,使命感和成就感很足,就如一种蜜月期,仿佛划破天际的闪亮流星;然而,这颗流星能不能有汇聚效果,变成一个真正的行星或者太阳呢?
接下来便是,发展期,这是考验系统稳定性和扩展性设计是否良好的阶段。通常由于未来的不确定性,很难最开始就设计好,于是,系统的重构和迁移就开始了,通常是少数精英架构师做好设计和框架开发,画一个改进版本的架构图,写一些框架代码,接下来的体力活和很多琐碎的对接和适配工作,下面的士兵承担,并要给出排期和节奏,在什么时候完成,还要兼容老系统的问题。架构师会喜欢给出一个激进的预期,不然老板会觉得你重构咋要这么就,然后士兵们苦不堪言,delay and delay,终于延期1~2个月上线了,架构师去汇报,老板板着脸说符合预期吧,你的新功能做了么?这不刚重构完麻,第二期已经计划中。哈哈,这就是发展时候的拉锯战。
终于,到了成熟期,架构师由于各种会战中挂上了一枚枚勋章,终于军大衣太重穿不上,换上了一身笔挺的西服,加入了精英政治家的行列,去做纵横捭阖的工作。如果这个系统还在,那谁来浇水施肥呢?一些不思进取的老兵们,会根据业务需求,微调系统的功能,做集群迁移,做报警监控,做成本治理,待到边际收益基本为0,边际成本也下降的不能再降,这已饱经风霜的老兵可退休转业,去别的战场继续挖坑。
3.算法的荣耀
算法可分两类,不可微分编程和可微分编程。不可微,就是传统意义上的一阶逻辑,所处理的实体是序列,集合和图,实体间的关系可通过顺序,分支,循环表达,其运行结果是可复现的,确定的,可观测的,底层基础架构,上层信息类应用,喜欢用离散的状态去抽象表达,整体是不可微的,不连续的函数,这样的编程是一种艺术,有艺术就有高手,比如各种竞赛top coder,ACM。当年有幸见到一位业界知名top coder就如看到武林高手一般激动。
早年的计算机系统,靠近底层,对系统的性能,稳定性,可扩展性要求很高,通常在很小的内存或CPU里,要处理很复杂的任务,对抽象能力要求很高,有挑战的地方,就有聪明的大脑。而至今计算机已经发展70多年,互联网也已经快20年,对信息的CRUD,或者说分布式大规模数据处理,都有了标准化的工具和流程。已经很少有人从头去研究分布式算法,一阶逻辑的算法变成是面试里的一种标准思维考察,编程能力的考试。
算法的世界的注意力已经转向可微分编程,也就是以机器学习,深度学习,强化学习为代表的各种技术,他们要解决的是图像,自然语言处理,复杂智能体的感知,推理,规划问题,要创建人工智能。可微分的那个结构,就是神经网络,层峦叠嶂的权重矩阵,人脑已无法理解,但人可以编程如何生成这样的矩阵,借助反向传播,梯度下降算法,这里复杂的点是不确定性和不可观测性。如果只从经验中学习,经验是无法完全覆盖未来的,于是长尾的优化犹如那奥林匹斯山上的西西弗斯。
武林的世界,技术的世界,按技术的复杂度,影响力的价值度,财富累积的效应程度等,是分等级和分圈子的,对高等级金羊毛的追求,不知是福还是祸。