如何写出优秀的程序? _怎样写出优秀的博客-程序员宅基地

技术标签: 产品  开发工具  vc++  SOFT  microsoft  程序开发  工作  

上一篇文章得到很多朋友的关注,无论是褒是贬,都由衷地开心,其中有好几位朋友都提到了好的源码难求,其实从我的观点来说,阅读程序并不分好坏,好的源码确实让人易读易懂,甚至心旷神怡,而不好的源码让人百思不得其解,甚至心烦意乱,但作为学习者,应保持冷静的头脑,善于从别人的错误或混乱之中得到乐趣,毕竟能看得出别人的错误也可以证明自已的水平要高,阅读程序与发现错误本身也是一个学习的过程。
 
       程序员是一个需要不断学习不断创新的职业,局外人看出来这是一个苦差事,经常思考,经常OT(加班),有人曾这样描述:如果深更半夜之时发现有人影在街上晃动,那么只有两种可能:要么是风尘女子要么是程序员。呵呵,这个比喻真不知是好是坏是对是错?至少能说明我们是辛苦工作着的。其实我们之所以这些辛苦,一是为了让自已不落伍,技术更新太快,我们稍作停留稍不小心就显得OUT了,二是为了写出更加优秀更有价值的程序,让公司赚更多的MONEY,BOSS开心了,我们也开心。
 
       那么,如何才能写出优秀的程序呢?
 
       在温伯格的书里谈到优秀程序的要素,主要包括功能性、时间性、适应性、高效性、经济性等五个方面,对于前面的四点,相信大家都耳熟能详,我们就作一个简单的描述。
 
       任何一个项目或产品或一段程序,都会有一个比较明确的目标,即满足一定的功能需求,程序员一定要理解透彻,切不可模棱两可,否则辛辛苦苦下来,都等于白干了,即使程序写得再漂亮再高效,但并非客户所需,毫无价值,可以这么说,如果一个程序没有在一定的程度上满足功能需求,那么对其适应性、效率以及开发成本的评估都将毫无意义。
 
       这里所说的时间性,是指程序的开发是否能按照开发计划所预计的时间内完成?这是我们经常面临的问题,程序的推迟完成所产生的损失是严重的,除了经济上的损失,还容易造成管理上的失控混乱,总之,令人烦恼的事情会接踵而至,或许读到这里,你开始能明白为什么深更半夜街道上晃动的人影有50%的可能是程序员?尽管如此,我们依然很难看到能按时完成的程序,特别是在国内的IT企业里,估计有80%以上的程序(项目或产品)是不能在计划的时间内完成的。因此,能称得上优秀的程序,按时完成是一个重要的决定因素,在程序开发时,程序员的脑海里除了CODE,还要有时间概念。
 
       一个成熟稳定的程序(项目或产品),大都通过多年的使用与不断地修改完善,修改程序是很正常很经常的事情,修改的难易与多少,也是衡量程序优秀的因素之一。如果一个程序不需要任何修改,就可以在任何平台任环境任何其它软件系统中正常使用,这是很美妙的事情,事实上我们也一直在追求这种RESULT,我们在程序开发时要充分考虑代码适应性的问题,争取让自已编写出来的程序(组件、类、模块等)具有很强的适应能力,以后使用时少修改,容易修改。
 
       过分地强调程序的通用性和易于修改性,往往会造成程序的效率问题,运行起来可能又慢又耗资源,这真是矛盾,用温伯格大师的话来形容就是:“要求程序同时具有高效率和适应性,正如企盼找到一位美丽而谦恭的WIFE”,呵呵,这个DREAM显然是很难实现的,尽管集美貌与谦逊于一身的美人也不是没有,但作为一名普通的程序员,通常我们是需要在二者之间做一取舍的,或者能平衡一下也不错,不是很美但很谦逊的MM也是一个不错的选择啊。
 
       其实前面四点,不用多说,大家也会经常遇到与思考,最后一点---经济性,是我比较感兴趣而且需要强调的一点。写这文章之前,我刚刚研究完最新发布的《福布斯中国名人榜》,在前100名里大都是演员、歌星、运动员、主持人、导演、模特等大腕们,遗憾的是没发现有IT人士,不知道求伯君伯伯张朝阳叔叔李彦宏哥哥们都干啥去了,看看人家比哥(比尔盖茨)都保持了十二年的世界首富了,我们不得不佩服,也期待有朝一天前100名中有几个搞IT的,让俺们沾沾自喜一下。
 
       温伯格认为,判断代码质量最重要的新因素是经济。非程序员们大都认为比尔盖茨是世界上最伟大最优秀的程序员,因为他的或他公司的程序赚的MONEY最多,道理是如此地简单易懂,有时甚至让我怀疑自已干这一行的动机到底是为了兴趣还是为了挣钱或者两者都是但谁更得重要一些?在我刚刚开始工作的那几年,我经常冷嘲热讽所在公司的那些软件产品,在我看来简直是一堆垃圾,但竟然能赚大把大把的钞票,真是不可思议!但现实往往如此,MICROSOFT的东东是好的,但也总在不断地打补丁与升级,我们甚至经常性地发现WINDOWS或OFFICE或大或小的BUG,但这不影响MICROSOFT的销售收入,是的,我们无法编写一个完美无缺的程序,只要不影响到重要功能的正常使用,有一些东西我们必须首先舍弃,我们不能因为追求完美而失去市场的先机,程序写得再好,赚不了MONEY又有什么用呢?
 
       以上主要从大的方面来泛泛而谈,在结束本文之前,让我们从细节之处来总结一下编写出优秀程序需要注意的一些地方:
(1)养成良好的注释风格:包括文件、函数、重要代码等的注释;
(2)代码缩进:每一个嵌套的函数块,使用一个TAB缩进(可以设定为3个空格),大括号应放在条件语句的下一行,单独成一行,便于匹对(主要针对C/C++,VC++);
(3)变量尽量采用匈牙利命名法,同时结合开发工具的原则;一般情况下,变量的取名方式为:<scope><prefix>< qualifier>
(4)养成书写程序文档的习惯;
(5)善于利用组件实现某一特定功能;
(6)数据层与业务逻辑层相互独立;
(7)少用全局变量,少用指针;
(8)避免使用extern,禁止使用goto,Debug增加#ifdef..#endif
..............
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zou_seafarer/article/details/1505019

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签