如何避免进退唯谷

来源:互联网 发布:js创建对象的几种方式 编辑:程序博客网 时间:2024/06/05 07:44

设计多数情况是选优,也就是说,大多数时候,在工作中,与学习和考试时不同,不是找不到解决的办法,而是可以选择的方法和方案太多。


所以,有人说,设计就是选优。


我们编程时候,选优如果纯靠经验,是很累人的,所以,这里,我总结一些基本原则,以示备忘:


1。 可调试和可测试,永远排在第一和第二。

       在完成一个工作的过程中,甚至工作没有开始前,心中面的困难,压得你喘不过气来的时候,也就是说,你要重新审视一下你的策略 :

       到底是什么让你觉得你心中没有底?

      而真正的答案,往往是你没有想过在完成编码后,如何调试和验证。

       特别是,当前的任务,是以往没有从事过,或是上次做过,但觉得过于复杂,以至于头痛的程度。

       特别是统计性的工作,需要通过大量数据进行处理,而你现在没有这些数据,甚至需求指向的,是本次新加入的数据。

      这种对面空虚的感觉是很糟糕的,足以使一个坚强的人失去前进的信心。


       这时,不要冒进,重新审视眼前的几个方案,问自己,哪个方案,更容易验证,调试与测试,哪一个方案,可以把复杂的工作,分解成小的步骤,并且每一步都可以依赖工具,提前验证,甚至手工做出假数据,并且看到结果。

2。准备,再准备。

       准备什么呢?主要是文档。把当前需求相关的信息,进行详细的整理。

       因为,一旦开工,你往往处于高度紧张的状态,不要相信你在工作中的状态会好到哪去,平常简单的问题,当你开始连续工作时,当前面对数十个问题时,你解决每个问题的能力,被大大稀释了,所以,准备工作,至关重要。特别是文档。

       同样,当你干不下去时,也要回头看文档。


3。 强制打断自己的工作。不断地。控制节奏,张弛有度。

       在电脑上装个软件,我装了个眼睛护士,每小时,强制休息一下,虽然看起来进度受到影响,但减去少犯的错误,还是上算得多。对身体也好。有人说为什么你不能打断程序员。当然有理,但长远来看,每小时停10分钟是合理的。如果一个工作,超过这个时长,你应当先在纸上画好再编程。


4. 第一“遍”最重要

    这里的“遍”是编译器程序的一个概念。编译器是最重要的人机交互程序。是把接所人类能懂的、仿自然语言的、半机器语言,转成纯机器语言,的一种程序。

    编译器相当复杂,众所周知,一般的编译器程序,有前端和后端,编译器的前端,面对的是人类,为了把人类的主观意识去除,并且告知人类哪些地方写得它不懂,

    有人发明的一个概念,或者说方法,就是“遍”。

    意思是说,象过筛子:虽然,我们想要得到的是最细的沙子,但如果一开始就用最细的筛子去筛沙子,筛子眼就被堵住了。

    所以,先用大眼的,把大石头去除,然后用中号的,再用小号的。

    GCC的前端好象就是三遍。


    不过,我放在这里写这个事情,的确有自己的看法。编译器之所以引入“遍”,的确是由于它有一定的特殊性,一方面,它面对的是人,如果在很底层发现了错误,它很可能不清楚如何把这个错误以人类可以理解的话告知人类。这是一个根本点。

     另外,编译器它所处理的生存环境是相当恶劣的。因为往往第一版编译器出现时,操作系统还指望等编译器出来改进呢。内存小得可怜,而如果被编译的代码,有糟糕的错误,前端一开始就把内存用光了,所以,编译器的程序,不得不层层防御。用于VC6的人,都知道,它不允许一行超过1K。而VC6所带的编译器,相对于更早的编译器,生存环境要好得多了。


      说得有些跑题了。我说这么多,就是为了表达一个意思:遍是好东西,但如果你用到了,永远要记住,第一遍是最重要的!!!因为我们不是在写编译器,更不差内存。

      许许多多程序员,在解析输入信息时,txt,excel,等等,根本不太乎,反正想着,后面的处理过程,会解决的。

      可是,第一遍的粗放,只会给你带来无尽的灾难!

      比如,前段时间,我接的一个程序中,为了从excel中直接把数据导入数据库,原作者把所有的字段就char[]作为数据类型,又没有做足够的有效性检查,给后期的维护带来的很大的负而影响。

     因为,等你发现数据有错误时,时间已过去很久了,难道你还要找到用户,请他更正吗?数据的兼容性,足以使一个大的项目轻易崩溃:因为项目经理最后发现,维护数据占用的人力,越来越多,无法收敛——那就等着完蛋吧。


     所以,虽然,第一条,我说的是,任务要分解。不过有个条件,就是每一步的输出,都是可以独立调试验证测试的。因为,这是下一步的输入,在一个“遍”里能解决的,一定要在当前步聚解决。比如,导入excel 数据,那么,就一定要确保用户的输入是完全正确的,不正确,就要提示用户修正,坚定不移地要求用户成为我们体系的一部分,不要导入数据库以后再由后续的“遍"来解决。用字符串表示整型,再加上没有检查,用户就可以非数字的信息写在那一列,这些信息,因为没有检查,就可以进入数据库。

    

       总之,每一“遍”要有明确的功能定义,和输入输出规则,然后才能称之为“遍”。否则,那必是灾难的开始,扯皮的开始。如果不能定义,我个人的看法是,永远也不要引入遍的概念:或者可以说:一遍就解决问题。