面向对象的CheckList

数据完整性(事务):内存+数据库(选项:事务归一化,完全面向对象)
隔离(非法数据+程序容错)
顺序结构适应(改造)
错误处理
通信规划
日志系统
系统监控
崩溃恢复
线程 合作+内部+内存泄漏
锁,死锁
多任务机制♀性能+鲁棒性
网络:线路适应性,会话状态机,消息表示,协议,
对象系统:扩展性,抽象程度,可进化性,语义:方向+层次+精化(市场策略)+存储(内存计划)
ui: 易用性,好用性,用户投入,用户效果,投入产出比,效率,用户粘性,发展模式,,,,
io分离(大操作)
算法
数据容错+通信容错
递归
系统关键流程(健壮性)
奥卡姆剃刀(可以更简单一点吗?)
坏人
需求完成度
性能(处理器计划):循环优化,流程优化,内存优化,通信优化,调用优化,频繁操作优化,数据结构优化,查找优化,条件/命中率优化,任务优化(内存优化)

对于大多数WEB应用来说,这个清单要短一半以上。这就是为什么我一直强调语义(产出)的原因。因为其实大多数编程任务中,编程环境语义层次都比较高。除去顺序结构本身的问题以外,基本上就没有问题了。但你要面向对象,你就有一个长长的清单。要不然你以为为什么人们会逃向FP呢是吧?

其实说到最后,像我上次跟一个印度程序员说的一样:我问他你认为编程工作最大的挑战是什么?或者说你认为最重要的地方是什么?他说是你要提前想清楚所有的步骤,要解决所有的问题。我说你要是做过生意就会知道,这么想是不对的。你写程序的第一件事情应该是整钱,而不是把程序整好。我们都是做技术的,我们都知道,Almost all programmes will finally solve all of their problems, right? The only problem no people can solve is aways the market.

所以,写程序的第一件事情不是写程序,而是想,谁在或将会使用这个程序,我应该制造什么样的程序,才能得到或者巩固这个市场。你应该有一个完整的发展计划,使得你可以从小长到大。你应该对你的软件市场定位的各个方面都具有非常详尽的考虑,因为只有这些才是真正的根本。不然它就只是一场游戏,一场控制机器的游戏。你只有把人研究透了,把你的客户研究透了,你才能够去控制你的客户,让他们为你工作。

商业是一切的基础。最少在商业环境是这样。你如果写着好玩,当然无所谓。但你相写出来的东西有用,那就一定要以商业为根本,不要随便以一点进步沾沾自喜,因为对客户来说,没有最好只有更好,你永远都会有一个地方没做好。这就是你为什么要计划,以及你为什么需要一个计划的原因。需求是个无底洞,你不能不想它,你也不能老想它,你必须一边想,一边做,然后又想一下,然后又做一下,直到有钱滚到你的口袋里面来。钱是终点。

这是从商业角度讨论的结果。

但即使跳出商业角度也即价值观,结论也差不了多少!为什么呢?看下面。

没有人可以解决市场的问题。搞技术的人大部分看起来很聪明,但生活圈子却极窄。这样的结果就造成他们对需求理解程度的不够。因为理解需求需要反复地对人进行思考,再在人与软件中找了个最佳工作点。而不是成天围着技术转 . 越好的程序员,越容易有这方面的问题. 比如比尔盖茨, 把WIN8做成这个样子, 桌面娱乐两头都不不讨好, 这是不是问题?

所有的技术问题都将最终得到解决。我们是程序员,我们要FIX所有的BUG,责无旁贷。我们也仅仅被赋予这个责任。于是我们变成螺丝钉 ,从来不知道外面到底在发生什么,从来只能做帮老板写程序的代码搬运工。所以从这个角度讲,多想想语义层的东西,其实对你自己的未来,也是一个好的交代。老板可能有的会喜欢,有的不喜欢你去想这些问题。但那是他的事情,与你无关。你的责任是做一个好程序中。为老板作贡献,忠言逆耳是吧。

此文只是一个CHECKLIST,要想写好程序,还是要以需求和语义为根基。否则一切都是纸上谈兵,一切都是游戏,没有意义。

你可能感兴趣的:(面向对象的CheckList)