2011年9月11日星期日

不要让人重构你的烂程序

上个星期主要工作是重构一个很重要的模块,先抱怨一下,这个模块没有注释,可以运行,完全没有可维护性,写得是相当的丑陋。

单是理解这个程序就花了我和一个同事整整1天,然后重构花了我4天。而且每天我为了这个模块的重构,居然打破了我的“程序员每天只需编程4个小时”的教条,我每天竟然要花6个小时在这个模块的重构和测试上,最终我在重构上大概花了30个小时,所以很多人说不要轻易重构代码,这里我想说的是重构他人的烂代码还不如自己重写。
但是经过上个星期的经历,这里再次总结一下什么是烂代码。
1. 没有关于重要代码的解释
2. 没有统一的名称的规范
3. 到处都是注释掉的代码(注释掉的代码会让读代码的人很痛苦,而且会让人觉得这个代码不是最终的成品,而是实验性的代码,或半成品)
4. 巨大的方法(我居然看到了一个超过1000行的方法)
5. 很在方法中很随意的加入代码
6. 过于愚蠢的API的设计 (如果要学习如何设计一个好的API请查看Qt API Design Principles

上面第4点提到的,对于这个超过1000行的方法,被我改成的8个小方法,每个都不超过50行,而且这些方法的都具有复用性(因为每个方法很小,代码的可重用性开始指数增长)。为什么会有这种巨型的方法呢,其实就是程序员很多时候很随意的加入代码所造成的,而且他们满足于写出“可用”的程序,而不满足于写出“优雅”的代码。

很多人都停步于烂代码,因为他们认为他们的烂代码可以用,很多程序员都会犯这样的错误。他们很理直气壮的对我说,看我的代码很好用,可用的代码不代表不是烂代码,其实这些代码都金玉其外,败絮其中。人们常说,程序员都是从写烂代码开始,然而也许写出所谓的“内聚性、松耦合、零重复、封装、可测试性、可读性以及单一职责”的“好代码”需要长时间的锻炼,但是最坚持最简单的代码规范却是每个程序员可以做到的,这就是避免烂代码的最好方法。

其实我们常常并不要求人们写出“优雅,精妙”的代码,我们的要求不高,程序员只需要坚持“简单性”,写出符合“代码规范”简单的代码即可。

2011年9月1日星期四

关于经济危机的一些思考

最近计划转换跑道,常常“不务正业”地看一些关于金融投资的书,同时也关注一下德国的股市,最近跌得很厉害,DAX前几天还破了5500点,作为经济的晴雨表的股市表明,经济似乎遇到了危机。我这个电子工程师今天也来谈谈我关于危机的思考。


危机1  夕阳工业和退休基金
突然想到,如果美国政府不断的增发货币。那么证券市场是一个池子,如果这个池子的增加变大要低于货币的增加速度,证券市场作为货币的重要流出口,那么证券市场的就很有可能上扬。但是我们可能会遇到最坏的情况,很多夕阳工业正在消亡,而中国的社保基金,美国和西方国家的退休基金,都相当依赖于这些夕阳工业公司所发放的股利,然而股利的大幅度下降对这些求稳的基金是有很严重的影响。

危机2  债务和赋税
美国的债务不会自动消失,早晚会为了这些庞大的债务付出高额的代价。据统计美国地方政府、州政府以及联邦政府工作的人数,大于制造业的就业人数。众所周知,中国承担着巨大的行政成本,以及越来越庞大的公务员队伍,这是整个国家的巨大负担。虽然政府工作人员虽然对维持社会运作起了很重要的作用,但是他们对社会财富的贡献是很低的。为了解决债务危机,美国政府持续大量印钞票,这些债务得用税赋的方式来偿还,美国的赋税一定会上升的。如果中国的经济无法持续高速发展,为了负担中国巨大的行政成本,中国的赋税会继续上升。

危机3  消费
我们都知道如果美国人停止消费,那么全球将会开始迈入所谓的经济大萧条,因为中国这个重要的市场消费不足。但是美国消费者并没有储蓄,如果美国经济进入小的不景气,消费者的储蓄花完后,那么经济大萧条是肯定的。

危机4  失业率
据最近的报道,德国的同比失业率下降,但是我认为不管西方国家还是中国,失业率长期看来是一定会不断增加。全球化的影响是企业可以大幅降低公司的营运支出,并且利用新的信息技术,会大幅降低人事的成本,带来的是裁员。工业机器人在未来几年内会更大规模的运用,蓝领工作也会受到巨大的影响。


危机中的可能的机会
机器人技术(重点是工业机器人领域)
信息技术(可以用于减少的员工,可以获得更高的利润的信息技术,或者优化生产流程,提高生产效率的信息技术)
房地产(在巨大货币投放下产生的通货膨胀下,如果向银行贷款购买房地产也许是一个还可以的机会,因为我们的还贷成本随着通货膨胀会大大降低,但是必须是能带来现金流的房产(例如出租),例如小套的公寓)