͡° ͜ʖ ͡°兼问:改革

三分观点:优化,重构,回归验证

大概许多年轻人都有意气奋发的时候,面对社会的种种不公现象,多少会表现得有些愤青。每个时代变局前夕,都是青年人抛头露面,洒热血,青年人热血是很正常的现象,但是也要明辨是非,否则被利用了,被卖了还帮着数钱。(参见台湾2014年太阳花运动,香港2016年旺角暴乱,2019年暴力袭警,冲击立法会)
  中国已经进入改革开放40个年头了,十八届三中全会审议通过的《中共中央关于全面深化改革若干重大问题的决定》,提出了全面深化改革的指导思想。主要中国保持国内局势稳定,实现中华民族伟大复兴指日可待。自身参与其中,希望我能看到那一天的到来。

我们一直在谈改革,改革基本是伴随着80之后的每一代人。改革的对象范围非常广,为了有个区分度的参考,我从自己最熟悉的软件开发领域进行解读。
  一、从优化开始说起:
  在计算机算法领域,优化往往是指通过算法得到要求问题的更优解。优化通常是指一个方法内,或者局部性的。编程篇讲过计算机的基本矛盾:时间空间的矛盾。 在计算机程序设计中,两个最重要的指标是时间复杂度和空间复杂度。由于存储空间的飞速扩大,问题基本集中在对时间复杂度的优化。
  类比到改革场景中:建桥修路,火车提速。中国基建狂魔不是盖的,逢山开路、遇水架桥,缩小空间距离,其他的改进就是对出行时间的优化了。

二、重构:
  重构,在不改变系统外部行为的前提下,改善它的内部结构。对于软件工程师来说,重构不是额外的工作,它就是编码本身,有优化的方法;
  1、全面的了解系统的过去,包括以前的架构/技术背景、业务需求
  2、分析以前架构的问题,例如:可维护性低、在哪个方面已经不满足现有需求等等
  3、查看至少80%的核心代码,最好有一定时间的真实在以前代码基础上编码的经历
  有了上面几点后还需要搞一个有效地重构计划,保证重构有条不紊的进行,才不会出现重构没有动力或者无法推动,或者与其他的业务需求冲突。

重构与性能优化:
  重构是为了让代码易于理解,你常会做出一些使程序运行变慢的修改。重构的过程中,不要同时追求优化性能。特别当重构代码优化与性能优化两者出现冲突的时候。 通常情况下重构会使代码优雅,性能优化为了提高性能不得不采用一些技巧来实现从而有可能使得代码变得复杂, 而且,有时性能好坏不是单凭感觉出来,多了几个for循环带来的性能下降通常没有你想象中那么大,一定要量化,能测出数据来证明是否由此导致的性能下降。 此时要注意我们的目的是重构,重构的手法可能会使得软件性能有所下降,也应该往下执行。
  性能优化属于另外一个关注点,等重构完成后,项目设计良好,此时再去做性能优化也更容易。 若仅凭感觉来决定说为了提高性能而放弃重构代码,这是一个错误的想法。 正确的做法是:首先写出可运行的软件,然后调整它以求获得更快的速度。
  如果当你在开发的过程中时刻追求软件的性能,首先会导致开发难度增加、开发时间变长。同时大多数情况下来分析,你会发现你花费的大部分时间都是在调整一些小部分的代码上以追求性能的增加,实际上这小部分代码最终被执行的概率没有你想象中的那么频繁。这意味着你大部分时间做的是无用功。 你所做的性能优化是你臆想出来的。只有当你做出可运行的项目,并且对整个项目结构了解清楚之后,知道性能瓶颈在哪,有针对性的进行优化,通常会有意想不到的收获。
  类比就是深化改革的意思,意味着必须有全流程的关注,全面的认识,兼顾性能(利益)与时效(效率)的平衡,实际应用上来说,非常困难。

三、回归验证
  重构的代码必须经过充分测试验证,因为现在软件复杂度提高,每个人负责一部分的工作量,其中的沟通,协调,并版,部署,调试,需要进行大量的工作。通常来说,正常运行的程序,只允许做小范围的优化,大范围的重构,需要讨论评审,而且需要自上而下的推动,否则阻力重重。 软件层面尚且如此困难,何况实际改革中,所以通常很多改革不成功的原因,可见一斑,理想很好,然而因为周期效应过长致变数过多,冰冻三尺,非一日之寒。

再说说重建,那就相当于重新来过了。革命不是请客吃饭,是要冲突流血的。

扩展话题:
  寒门贵子,这是很有视觉冲击力的一组对照,传统上来说寒门贵子指出身贫微,依靠个人努力,自身拼博,通过科举考试,高中出仕,最后衣锦还乡。抛开情感方面的因素,寒门贵子无论在哪个时代都是低概率的事件。 多元化社会,成功千千万,如何的“门”才算真正的“寒”,如何的“子”才算真正的“贵”值得推敲。我们按规则先给定义:寒门保留定义,贵体现的是社会地位,将古时以官为贵这个范围扩大到各行各业前三甲,行行出状元,就算如此,可比性还是很低。 但一个不争的事实是,现如今,从幼儿园到大学花费已达巨资,现今环境没有好的条件再好的个人也难出头。而且行业的专业性越来越强了,那就是天然的门槛了。