程序中的得与失

  俗话说,舍得,有舍便有得,程序或许和世间万物一个样,讲究阴阳平衡。或许您写程序过程中,得到一颗歪脖树,却放弃了一大片大森林,能正确的取舍矛盾体双方的关系,或许是您扎实功底的体现,当然这必须需要一种日积月累的过程。下面我就说一些程序的矛盾体,起一个抛砖引玉的作用。

一、时间与空间

  程序中存储空间与时间,自古就是天敌一枚,自古就是有我没他,有他没我的局面。这对天敌关系处理,令无数英雄竞折腰。

  弄清楚他们之间关系,让我们从空间与时间观点,从辩证唯物主义思想来分析程序。

  我们知道一个程序分为几个层次,每个层次分为几个部分,部分之间有什么关系,每个部分都有什么特点。这是从空间的角度来划分程序;一个程序的表现在不断变化,结构在不断演变,有生老病死,这是从时间角度来考察程序。

  从空间来考虑程序,需要做好其架构,规划好其交互接口,要想好究竟是模块插拔还是总线组装,搞清楚用配置文件还是数据库。所谓用空间换时间,一个合理的空间结构,需要尽量降低时间点上的热度,包括开发上的时间热点和程序运行时的时间热点。

从时间角度考虑,就要想好程序的生命周期,程序各个部分给谁来开发,用什么开发,在什么时间点交付;程序如何部署,如何启动,如何更新,如何销毁,如何停止,如何删除;历史版本如何处理,未来的版本如何处理。一个合理的时间结构,需要仔细提供整体的开发和运行效率。

程序,正与上文提到的一样,我都习惯先从空间上划分一下,再从时间上观察一下。我想知道一个事物的组成结构,我想了解一个事物的历史渊源,现在以及将来。可惜,时而迷雾漫天,时而一叶障目,时而迷走方向,时而回环往复。

    程序中,我们经常看到了降低一个程序时间复杂度,往往是牺牲存储空间为代价,反之亦然,降低相应存储,往往就提升时间复杂度。

  说了这么多,总而言之一句话,往往是程序换空间,还是空间换时间。

二、(开发)效率与(开发)规范

  如上面一样,在加强开发规范的前提下,往往做出的牺牲是什么啊,是以降低开发效率做出牺牲。

  例如你加代码注释工程中,自己完成代码速度大大降低。但是,随着工作年份增加,我发现这是都么肤浅的认识,由于你没有好的代码规范,你的代码维护时间往往比当初开发时间  多上了好几倍了。由此可见,令人可喜,这对所谓的天敌,更多的是走向合作的步伐。 良好的开发规范反而能够促进开发效率的提高。

例如, 

 1.    写程序前打个草稿可以在心里,最好在纸上:目的要从整体上考虑程序的实现。 如果公司采用建模的方式,有建模工具(rose ,visio )那是最好不过的了。

2.   注意休息,不要浪费自已的休息时间,用去了自已的时间不但会写出的代码因为注意力不集中而会常常出现代码的质量有问题,逻辑常出错

3.   要善于收集相关的专业开发上的资料,以便以后能更快更好的解决问题目。提倡公司能提供内部知识勾通的工具(如知识论坛,内部即时聊天器);提倡公司内部有技术资料的共享库,提高解决问题的能力.    

4.   提高对所写的模块的相关全局把握能力,在写程序中要最好先详细设计后再发布.  

5.    要学会与他人沟通如非工程师,学会沟通的不同方式,提高沟通的效率。

  貌似这些支离破碎,婆婆妈妈的繁枝缛节行为会降低开发效率,实际上,这些动作是提高你工作效率有力保证。

三、功能与效率

  功能与效率更像印证了第一点了,功能越多,你程序效率貌似越低。不是吗,你写了一个简单计算器与一个复杂的计算器,运算复杂度是几何倍数增加的。

  由于我是android开发的,往往看到高手喜欢挑战,尤其在手机上实现精巧的算法,这样能带来更强的征服感。例如,有人曾在手机上实现了布隆过滤器(一个庞大精巧的类哈希表,多用于在服务器端如垃圾邮件查找),其内存消耗和计算复杂度都远远高于普通的HashMap,且实现并不容易。结果App发布之后,效率大大降低,cpu计算增多,耗能从而提高了。出现用户抱怨耗电量大,并且经常出现Bug,最后还是老老实实换成了HashMap。

  这正如一句古话:鱼,我所欲也,熊掌,亦我所欲也,二者不可得兼,舍鱼而取熊掌者也。

  以上的一些矛盾体,既能对立,也能合作。归根结底,就是为了做好好的程序服务的,只能真正做好的程序中的取舍,这样才能做好好的程序

时间: 2024-10-25 21:57:17

程序中的得与失的相关文章

浅谈C++应用程序中创建持久化对象

持久化的对象,是已经存储到数据库或保存到本地硬盘中的对象,我们称之为持久化对象.下面介绍C++中的持久化对象. 持久对象(persistent objects)广泛应用于游戏.分布式数据库系统.多媒体以及图形应用程序中.目前C++并不直接支持持久性(persistence)(但有一些在C++未来版本中添加持久性和反射(reflection)的建议). 持久对象可以在创建它的程序的作用域之外保持自身状态.把对象写入一个文件并在以后重建之,或者把对象传送到一台远程机器,就是这样的例子.对持久性的支持

在Java程序中实现FTP的上传下载

FtpList部分是用来显示FTP服务器上的文件:GetButton部分为从FTP服务器下传一个文件:PutButton部分为向FTP服务器上传一个文件. 别忘了在程序中还要引入两个库文件(importsun.net.*,import sun.net.ftp.*). 以下是这三部分的JAVA源程序: (1)显示FTP服务器上的文件 void ftpList_actionPerformed(ActionEvent e) { String server=serverEdit.getText(); /

应用-android中设置支持javascript会引入xss变量到你的程序中,请检查清楚

问题描述 android中设置支持javascript会引入xss变量到你的程序中,请检查清楚 Using setJavaScriptEnabled can introduce XSS vulnerabilities into you application, review carefully. 如何理解上面这句英语啊?? 解决方案 你指的是在webView上设置支持JavaScript么? 解决方案二: @SuppressLint("SetJavaScriptEnabled") 忽略

声音文件-Borland C++ 想在程序中增加播放声频

问题描述 Borland C++ 想在程序中增加播放声频 如果操作有误的话就像Windows操作系统一样有个声音提示,具体该怎么操作?最好提供源码,谢谢,声音文件来自于C:windowsMedisWindows xp 错误.wav,我不太会定义,是Borland C++中有关于声频的控件么?

在android程序中打开HPROF文件时出错

问题描述 在android程序中打开HPROF文件时出错 当我用Memory Analyzer打开HPROF文件时(由Debug.dumpHprofData创建),得到的是以下的异常: java.io.IOException: Unknown HPROF Version (JAVA PROFILE 1.0.3) at org.eclipse.mat.hprof.AbstractParser.readVersion(AbstractParser.java:124) at org.eclipse.m

为什么c程序中创建了数据文件,再次打开源代码运行时数据没了?

问题描述 为什么c程序中创建了数据文件,再次打开源代码运行时数据没了? 为什么c程序中创建了数据文件,再次打开源代码运行时数据没了? http://blog.csdn.net/hackbuteer1/article/details/6573488# 就是这个通讯录的代码,在里面创建通讯录后,再次打开运行显示通讯录时就提示通讯录为空. 解决方案 写入文件是否错误,用winhex或者ultraedit看看写文件本身有没有写对. 如果没有,就是写的问题,如果对的,那么就是读的问题.再具体调试有问题的程

android-如何隐藏应用程序中的软键盘?

问题描述 如何隐藏应用程序中的软键盘? 当启动程序时,我想隐藏应用程序中的软键盘.我使用下面的代码,但是没有实现效果.请问如何隐藏应用程序中的软键盘? InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(notes.getWindowToken() 0); 解决方案 getWindow().setSoftIn

在整个应用程序中锁定 android 方向为横向模式

问题描述 在整个应用程序中锁定 android 方向为横向模式 如何在整个应用程序中锁定 android 方向为横向模式? <activity android:screenOrientation=""landscape"" android:name="".BasicLayoutCheckActivity"" /> 这段代码不能运行,如果使用另外一个 activity,就变成纵向模式. 解决方案 在 Manifest

ios-越狱的iPhone程序中删除应用图标

问题描述 越狱的iPhone程序中删除应用图标 在越狱设备上,通过编程删除应用图标.不知道怎么做?谢谢 解决方案 修改应用绑定的Info.plist文件,填上这个 : <key>SBAppTags</key><array> <string>hidden</string></array> 点击这里