程序中的得与失

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

一、时间与空间

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

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

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

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

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

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

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

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

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

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

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

例如, 

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

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

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

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

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

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

三、功能与效率

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

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

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

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

转载于:https://www.cnblogs.com/manuosex/p/3627521.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]新东方老师上课讲的笑话(太有才了)

[张洪伟] 起名字的问题:中西方都不愿意以鲜花、野草起名字,什么牡丹玫瑰,小红小翠了,一听就变味了;张建、李建,但不能叫范建(贱)了;北京以前有个建(贱&#x…

c/c++面试试题(三)

慧通: 什么是预编译何时需要预编译:1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译…

mysql安装使用--2 用户管理

1 修改mysql.user表 添加用户 mysql> INSERT INTO mysql.user (Host,User,Password) VALUES (\%\,\system\, PASSWORD(\manager\)); mysql> FLUSH PRIVILEGES 2 create 和 grant命令省略 3 user表内容 MySQL用户名由两部分组成:(user, host),二者…

constexpr if --- C++ 20

constexpr if — C 20 constexpr if 可以让我们实现条件编译 template <typename T> auto getResult(T t) {if constexpr (std::is_integral_v<T>)return *t;elsereturn t; }如果T是intergral类型,执行第一个分支,否则执行第二个分支 还记得前文写过的模板元编程…

WPF中的动画

WPF中的动画 周银辉动画无疑是WPF中最吸引人的特色之一&#xff0c;其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互。这里我们讨论一下故事板。在WPF中我们采用Storyboard&#xf…

c/c++面试试题(四)

華為1、局部变量能否和全局变量重名&#xff1f;答&#xff1a;能&#xff0c;局部会屏蔽全局。要用全局变量&#xff0c;需要使用"::"局部变量可以与全局变量同名&#xff0c;在函数内引用这个变量时&#xff0c;会用到同名的局部变量&#xff0c;而不会用到全局变量…

[访问系统] Api_Win32_Mac类工具包 (转载)

点击下载 Api_Win32_Mac.zip using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices;namespace BaseFunction {class API{[DllImport("kernel32")]//内存public static extern void GlobalM…

constexpr 函数

constexpr 函数 — C 20 constexpr double pi 3.14;constexpr允许你在编译时使用典型的C函数语法进行编程,但这并不意味之constexpr只和编译期有关 constexpr函数可以在编译期运行,也可以在运行时运行 但在以下情况constexpr函数必须在编译期运行: constexpr函数在编译的上…

react(82)--方法写在effects里面

effects: {*addOrUpdateAssistActivity({ payload, callback }, { call }) {try {const res yield call(addOrUpdateAssistActivity, payload);if (callback && typeof callback function) {yield callback(res);}} catch (error) {console.log(error);}},

让VS2005用起来更顺手

1. 在解决方案资源管理器中跟踪活动项VS2005 工具 选项 项目和解决方案 常规&#xff0c;把“在解决方案资源管理器中跟踪活动项”打勾。2. 显示行号VS2005 工具 选项 文本编辑器 C#&#xff0c;把“行号”打勾。或者 VS2005 工具 选项 文本编辑器 所有语言&…

C++面试题目(五)

思科1. 用宏定义写出swap&#xff08;x&#xff0c;y&#xff09;#define swap(x, y)/x x y;/y x - y;/x x - y;2.数组a[N]&#xff0c;存放了1至N-1个数&#xff0c;其中某个数重复一次。写一个函数&#xff0c;找出被重复的数字.时间复杂度必须为o&#xff08;N&#xff…

如何利用脚本方法清除文本框中汉字,从而保留英文字母和数字等

脚本方法如下&#xff1a; <script language"javascript" type"text/javascript"> function RemoveChineseCharacters(teleriktextboxID) {var textboxinput document.getElementById(teleriktextboxID);var textboxinputhidden document.g…

react(83)--filter

let newarr friendTableSource.filter(function(item, index, arr0) {return item.code ! val;});

constexpr和consteval --- C++ 20

constexpr和consteval — C 20 标准库容器和算法库对constexpr 的应用 C20 中大量的算法和容器可以使用constexpr,这意味着你甚至可以再编译期vector<int>进行排序 Algorithms library - cppreference.com 如下: #include <iostream> #include <ranges>…

西藏攻略集锦

西藏旅游局针对初此进藏旅游的驴友提供实用资讯本文为西藏旅游局针对初次进藏的驴友提供实用资讯&#xff0c;供各位参考。 1、什么是高原反应&#xff1f;高原反应有哪些症状&#xff1f; 高原反应是人到达一定海拔高度后&#xff0c;身体为适应因海拔高度…

将select中的项从一个移动到另一个select中

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml" ><head> <title>将select中的项互相移动…

函数模板(参考《C++ Templates 英文版第二版》)

函数编程(参考《C Templates 英文版第二版》) Chapter 1 函数模板 1.1 一窥函数模板 template<class T> T max(T a, T b) {return b < a ? a : b; }#include "max1.hpp" #include <iostream> #include <string> #include <format>int…

Android FTP Server 1

下面介绍几种Android 版本的FTP Server : virtualdataline Virtual Data Line is a software that you can manage files of the phone on you pc without data line . Phone files can be copied to a computer and computer files can copied to the phone. With this …