- 浏览: 538141 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
landerson:
明显就有要求的嘛
ANDROID轻量级JSON序列化和反序列化[转] -
jimode2013:
很不错,就是需要这个方法
多个UIViewController使用addSubView,第二个 UIViewController 不响应旋转[转] -
w11h22j33:
...
[转]NSMutableArray中的自动释放对象让我郁闷了一整天 -
w11h22j33:
UILabel* label = [[UILabel a ...
Iphone开发 -
w11h22j33:
http://mobile.51cto.com/iphone- ...
获得通讯录中联系人的所有属性[转]
先给大家看一段据说是史上最强的程序:
e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1
e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20
e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa
e14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 f5 8b fb ba 11 1 4f 4f 4a
e168 39 5 7f f9 52 8b c5 f7 25 f7 37 2b c8 95 f7 65 2 f7 37 95 2b e8 fe e fe
e181 10 79 6 c6 6 fe 10 7 46 d0 14 d1 d1 d1 e5 79 ec 5a b8 11 1 ff 7 4b 4b 48
e19b 3b d0 75 f7 5f c3 83 f7 83 a6 5d 59 82 cd b2 8 42 46 9 57 a9 c5 ca aa 1b
…………………………………………………………………..
这段程序是1997年世界程序设计大赛的一等奖作品的部分代码(完整的代码下载,把代码复制粘贴到cmd的debug命令中,回车看到效果)。这个程序运行后将是一个3D的且伴随着音乐的动画。震撼吧!
是不是从事软件开发的人员都希望成为这样的武林高手呢?然而真要是用这样的高手来设计、编写我们的产品代码,恐怕某一天,我们什么都不用干了,只能人手一本机器代码,一句一句进行翻译了;那么对于软件产品开发而言,如何写好代码呢?一流的软件产品的代码具备哪些特征呢?
一流代码的特征
1、稳定可靠(Robustness)
代码写出来以后,一定要能够运行得非常好,非常稳定可靠。在现今的IT行业,软件产品都是是24*7,即要保证系统一天24小时,一星期7天中都可以无间断的正常运行。比如我们百度的搜索引擎系统,比如我们的通信系统,等等。到了产品开发后期,大部分的成本都将投入到产品稳定性的提高。
2、可维护且简洁(Maintainable and Simple Code)
在写代码时,首先要考虑的是:写出来的代码不但要自己可以读懂,而且我们的同事、测试工程师都可能要修改这些代码,对其进行增减。如果代码很复杂,不容易读懂,如程序中的递归一大堆、程序不知何时或从何地跳出,则会使程序的可维护性和简洁性降低。所以必要的注释、统一的编程规范等都是非常重要的。
3、高效(Fast)
在软件行业中效率是非常重要的,比如搜索引擎。有些软件的搜索效率就不高,搜索过程特别缓慢,让人难以接受。当然这里面有一个带宽的问题,但是程序效率不高也是一个重要的原因。而实际上程序的效率提高,有时候很简单,并没有什么神秘之处,如使用数组索引时候,可以用指针方式而不使用数组下标;数组的空间定义应该定义为2的N次幂等等。
4、简短(Small)
这方面大家的感受可能不是很深,但是我的感受是很深的。配置过PSTN程控交换机、路由器、VoIP网关设备的人都知道,这些设备的软件都是从PC机通过网口或串口下载到这些设备的Flash上(类似PC机的BIOS)再通过设备上的CPU启动。如果程序写的很罗嗦,随着特性不断增加,程序规模将变大的巨大,Flash空间告急、内存告急、下载升级变的不可忍受,等等,带来的就是成本不断增加,利润不断下降。
5、共享性(Reusable)
如果做大型产品开发,程序的共享性也是非常重要的。我们产品有那么多开发人员,如果每一个人都自己定义字符串、链表等数据结构,那么开发效率就会降低,我们的产品恐怕到今天也不能出台。我所说的“共享”不是指将别人的代码复制到自己的代码中,而是指直接调用别人的代码,拿来即可用。这一方面可以减少代码的冗余性,另一方面可以增强代码的可维护性。如果别人的代码里有Bug,只需修改他的代码,而调用此代码的程序不用进行任何修改就可以达到同步。这同时要求我们在设计的时候,如何考虑系统的内聚和耦合的问题。
6、可测试性(Testable)
我们的产品开发里,除了软件开发人员,还有一部分工程师负责软件测试。软件测试人员会将开发代码拿来,一行一行地运行,看程序运行是否有错。如果软件开发人员的代码不可测试,那测试工程师就没有办法进行工作。因此可测试性在大型软件开发里是很重要的一点。可测试性有时候与可维护性是遥相呼应的,一个具有好的可测试性和可维护性的代码,测试人员可以根据开发提供的维护手册、debug信息手册等就可以判断出程序出错在哪个模块。
7、可移植性(Portable)
可移植性是指程序写出来以后,不仅在windows 2000里可以运行,在NT/9X下可以运行,而且在Linux甚至Macintosh等系统下都可以运行。所有这些特性都是一流代码所具备的特性。但是其中有些特性是会有冲突的。比如高效性,程序写的效率很高,就可能变得很复杂,牺牲的就是简洁。好的代码要在这些特性中取得平衡。
写好代码的10个秘密
1、百家之长归我所有(Follow Basic Coding Style)
其实写代码的方式有很多,每个人都有自己的风格,但是众多的风格中总有一些共性的、基本的写代码的风格,如为程序写注释、代码对齐,等等。是不是编程规范?对就是编程规范。
2、取个好名字(Use Naming Conventions)
取个好的函数名、变量名,最好按照一定的规则起名。还是编程规范。
3、凌波微步,未必摔跤(Evil goto’s?Maybe Not…)
这里我用“凌波微步”来形容goto语句。通常,goto语句使程序跳来跳去,不容易读,而且不能优化,但是在某种情况下,goto语句反而可以增强程序的可读性。Just go ahead,not go back。
4、先发制人,后发制于人(Practic Defensive Coding)
Defensive Coding指一些可能会出错的情况,如变量的初始化等,要考虑到出现错误情况下的处理策略。测试时要多运行几个线程。有些程序在一个线城下运行是正常的,但是在多个线程并行运行时就会出现问题;而有些程序在一个CPU下运行几个线程是正常的,但是在多个CPU下运行时就会出现问题,因为单CPU运行线程只是狭义的并行,多CPU一起运行程序,才是真正的并行运算。
5、见招拆招,滴水不漏(Handle The Error Cases:They Will Occur!)
这里的Error Case(错误情况),是指那些不易重视的错误。如果不对Error Case进行处理,程序在多数情况下不会出错,但是一旦出现异常,程序就会崩溃。 6、熟习剑法刀术,所向无敌(Learn Win32 API Seriously)
用“剑法刀术”来形容一些API是因为它们都是经过了很多优秀开发人员的不断开发、测试,其效率很高,而且简洁易懂,希望大家能掌握它,熟悉它,使用它。是不是象我们的ULIB。
7、双手互搏,无坚不摧(Test,but don’t stop there)
这里的测试不是指别人来测试你的代码,而是指自己去测试。因为你是写代码的原作者,对代码的了解最深,别人不可能比你更了解,所以你自己在测试时,可以很好地去测试哪些边界条件,以及一些意向不到的情况。
8、活用断言(Use,don’t abuse,assertions)
断言(assertion)是个很好的调试工具和方法,希望大家能多用断言,但是并不是所有的情况下都可以用到断言。有些情况使用断言反而不合适。
9、草木皆兵,不可大意(Avoid Assumptions)
是指在写代码时,要小心一些输入的情况,比如输入文件、TCP的sockets、函数的参数等等,不要认为使用我们的API的用户都知道什么是正确的、什么是错的,也就是说一定要考虑到对外接口的出错处理问题。
10、最高境界、无招胜有招(Stop writing so much code)
意思就是说尽量避免写太多的代码,写的越多,出错的机会也越多。最好能重用别人开放的接口函数或直接调用别人的api。
e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1
e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20
e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa
e14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 f5 8b fb ba 11 1 4f 4f 4a
e168 39 5 7f f9 52 8b c5 f7 25 f7 37 2b c8 95 f7 65 2 f7 37 95 2b e8 fe e fe
e181 10 79 6 c6 6 fe 10 7 46 d0 14 d1 d1 d1 e5 79 ec 5a b8 11 1 ff 7 4b 4b 48
e19b 3b d0 75 f7 5f c3 83 f7 83 a6 5d 59 82 cd b2 8 42 46 9 57 a9 c5 ca aa 1b
…………………………………………………………………..
这段程序是1997年世界程序设计大赛的一等奖作品的部分代码(完整的代码下载,把代码复制粘贴到cmd的debug命令中,回车看到效果)。这个程序运行后将是一个3D的且伴随着音乐的动画。震撼吧!
是不是从事软件开发的人员都希望成为这样的武林高手呢?然而真要是用这样的高手来设计、编写我们的产品代码,恐怕某一天,我们什么都不用干了,只能人手一本机器代码,一句一句进行翻译了;那么对于软件产品开发而言,如何写好代码呢?一流的软件产品的代码具备哪些特征呢?
一流代码的特征
1、稳定可靠(Robustness)
代码写出来以后,一定要能够运行得非常好,非常稳定可靠。在现今的IT行业,软件产品都是是24*7,即要保证系统一天24小时,一星期7天中都可以无间断的正常运行。比如我们百度的搜索引擎系统,比如我们的通信系统,等等。到了产品开发后期,大部分的成本都将投入到产品稳定性的提高。
2、可维护且简洁(Maintainable and Simple Code)
在写代码时,首先要考虑的是:写出来的代码不但要自己可以读懂,而且我们的同事、测试工程师都可能要修改这些代码,对其进行增减。如果代码很复杂,不容易读懂,如程序中的递归一大堆、程序不知何时或从何地跳出,则会使程序的可维护性和简洁性降低。所以必要的注释、统一的编程规范等都是非常重要的。
3、高效(Fast)
在软件行业中效率是非常重要的,比如搜索引擎。有些软件的搜索效率就不高,搜索过程特别缓慢,让人难以接受。当然这里面有一个带宽的问题,但是程序效率不高也是一个重要的原因。而实际上程序的效率提高,有时候很简单,并没有什么神秘之处,如使用数组索引时候,可以用指针方式而不使用数组下标;数组的空间定义应该定义为2的N次幂等等。
4、简短(Small)
这方面大家的感受可能不是很深,但是我的感受是很深的。配置过PSTN程控交换机、路由器、VoIP网关设备的人都知道,这些设备的软件都是从PC机通过网口或串口下载到这些设备的Flash上(类似PC机的BIOS)再通过设备上的CPU启动。如果程序写的很罗嗦,随着特性不断增加,程序规模将变大的巨大,Flash空间告急、内存告急、下载升级变的不可忍受,等等,带来的就是成本不断增加,利润不断下降。
5、共享性(Reusable)
如果做大型产品开发,程序的共享性也是非常重要的。我们产品有那么多开发人员,如果每一个人都自己定义字符串、链表等数据结构,那么开发效率就会降低,我们的产品恐怕到今天也不能出台。我所说的“共享”不是指将别人的代码复制到自己的代码中,而是指直接调用别人的代码,拿来即可用。这一方面可以减少代码的冗余性,另一方面可以增强代码的可维护性。如果别人的代码里有Bug,只需修改他的代码,而调用此代码的程序不用进行任何修改就可以达到同步。这同时要求我们在设计的时候,如何考虑系统的内聚和耦合的问题。
6、可测试性(Testable)
我们的产品开发里,除了软件开发人员,还有一部分工程师负责软件测试。软件测试人员会将开发代码拿来,一行一行地运行,看程序运行是否有错。如果软件开发人员的代码不可测试,那测试工程师就没有办法进行工作。因此可测试性在大型软件开发里是很重要的一点。可测试性有时候与可维护性是遥相呼应的,一个具有好的可测试性和可维护性的代码,测试人员可以根据开发提供的维护手册、debug信息手册等就可以判断出程序出错在哪个模块。
7、可移植性(Portable)
可移植性是指程序写出来以后,不仅在windows 2000里可以运行,在NT/9X下可以运行,而且在Linux甚至Macintosh等系统下都可以运行。所有这些特性都是一流代码所具备的特性。但是其中有些特性是会有冲突的。比如高效性,程序写的效率很高,就可能变得很复杂,牺牲的就是简洁。好的代码要在这些特性中取得平衡。
写好代码的10个秘密
1、百家之长归我所有(Follow Basic Coding Style)
其实写代码的方式有很多,每个人都有自己的风格,但是众多的风格中总有一些共性的、基本的写代码的风格,如为程序写注释、代码对齐,等等。是不是编程规范?对就是编程规范。
2、取个好名字(Use Naming Conventions)
取个好的函数名、变量名,最好按照一定的规则起名。还是编程规范。
3、凌波微步,未必摔跤(Evil goto’s?Maybe Not…)
这里我用“凌波微步”来形容goto语句。通常,goto语句使程序跳来跳去,不容易读,而且不能优化,但是在某种情况下,goto语句反而可以增强程序的可读性。Just go ahead,not go back。
4、先发制人,后发制于人(Practic Defensive Coding)
Defensive Coding指一些可能会出错的情况,如变量的初始化等,要考虑到出现错误情况下的处理策略。测试时要多运行几个线程。有些程序在一个线城下运行是正常的,但是在多个线程并行运行时就会出现问题;而有些程序在一个CPU下运行几个线程是正常的,但是在多个CPU下运行时就会出现问题,因为单CPU运行线程只是狭义的并行,多CPU一起运行程序,才是真正的并行运算。
5、见招拆招,滴水不漏(Handle The Error Cases:They Will Occur!)
这里的Error Case(错误情况),是指那些不易重视的错误。如果不对Error Case进行处理,程序在多数情况下不会出错,但是一旦出现异常,程序就会崩溃。 6、熟习剑法刀术,所向无敌(Learn Win32 API Seriously)
用“剑法刀术”来形容一些API是因为它们都是经过了很多优秀开发人员的不断开发、测试,其效率很高,而且简洁易懂,希望大家能掌握它,熟悉它,使用它。是不是象我们的ULIB。
7、双手互搏,无坚不摧(Test,but don’t stop there)
这里的测试不是指别人来测试你的代码,而是指自己去测试。因为你是写代码的原作者,对代码的了解最深,别人不可能比你更了解,所以你自己在测试时,可以很好地去测试哪些边界条件,以及一些意向不到的情况。
8、活用断言(Use,don’t abuse,assertions)
断言(assertion)是个很好的调试工具和方法,希望大家能多用断言,但是并不是所有的情况下都可以用到断言。有些情况使用断言反而不合适。
9、草木皆兵,不可大意(Avoid Assumptions)
是指在写代码时,要小心一些输入的情况,比如输入文件、TCP的sockets、函数的参数等等,不要认为使用我们的API的用户都知道什么是正确的、什么是错的,也就是说一定要考虑到对外接口的出错处理问题。
10、最高境界、无招胜有招(Stop writing so much code)
意思就是说尽量避免写太多的代码,写的越多,出错的机会也越多。最好能重用别人开放的接口函数或直接调用别人的api。
发表评论
-
思考、学习新技术的原则和方式【转】
2014-01-02 17:50 1108http://kb.cnblogs.com/page/195 ... -
最好的程序员凡事先上谷歌搜索【转】
2013-03-07 18:07 1298我知道的最优秀的程序员是我的Framebase.io ... -
史上最最佳软件开发实践指导【转】
2013-03-07 18:06 1262“” 阅读器 软件开发 -
我所钟爱的代码审查【转】
2013-02-22 18:00 928当我从学术界转向产业界的过程中,对我生涯改变最大的事情就 ... -
高效代码审查的十个经验【转】
2013-02-22 17:59 976代码审查(Code Review)是软件开发中常用的手段,和 ... -
为什么程序员不擅长评估开发时间?[转]
2012-12-17 10:07 852一个曾经与我一起工作过的经验丰富的项目经理声称,他拿到程 ... -
给明年依然年轻的我们[转]
2012-06-28 09:18 931今天是22岁的最后一天。几个月前,我从沃顿商学院毕业,用 ... -
[转]用户交互设计UI参考书目整理
2012-01-19 15:18 1149书名 作者用户体验的要素 Jesse James Garret ... -
【转】android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
2011-09-07 18:23 2521protobuf 是什么? Protocol ... -
【转】开源点评:Protocol Buffers介绍
2011-09-07 17:14 1173引自:http://blog.csdn.net/p ... -
google ProtoBuf开发者指南【转】
2011-09-07 17:09 2504目录 1 概览 1.1 什么是 ... -
hg clone 命令的windows解决方法TortoiseHg[转]
2011-05-11 20:50 2331hg是跟svn和cvs一样的版本管理系统。windows下 ... -
谷歌高效能经理人的8个习惯【转】
2011-03-26 12:24 1200Google's "people operati ... -
面试时不要说的7件事【转】
2011-03-26 11:55 9867 Things Not to Say During ... -
为了成功 训练自己[转]
2011-03-26 11:50 1292你是否曾见过像曼尼· ... -
在github上建立自己的开源项目
2011-03-26 00:12 1989由于代码一直在自己这保存,一方面别人看不见,也不安全。搜了下, ... -
从ant到maven -- maven pom例子(初级)转
2011-02-27 00:46 1513http://hi.baidu.com/javajiwei/b ... -
从一个男人身上看出他的修养和抱负
2011-02-15 23:07 859一、拥有自信和风度 男人到了二十几岁后,就要开始学着用心去经营 ... -
用CVS来管理自己的程序
2011-01-15 18:18 906每个编写程序的人也许 ... -
手机操作系统三国时代的结束
2011-01-11 00:19 958第一篇:Symbian正式崩盘,手机操作系统三国时代结束 ...
相关推荐
在实际开发中,了解和掌握这些怪癖和秘密可以帮助开发者写出更加符合预期的JavaScript代码,避免一些常见的错误和疑惑。对于学习和应用JavaScript的朋友们,理解这些特点对于提高代码质量、解决bug和优化性能具有...
### 隐藏在Windows XP中的28个秘密武器 Windows XP作为一款经典的桌面操作系统,在其辉煌的历史中,隐藏着许多不为人知的功能和工具。本文将深入探讨这些秘密武器,帮助用户更好地理解和利用Windows XP的强大功能。...
"绝密核心代码"可能指的是这些驱动程序的源代码,通常这些代码不公开,因为它们涉及到公司的技术秘密和知识产权。 系统驱动在MTK平台上分为多个层次,包括内核驱动和用户空间驱动。内核驱动直接与Linux内核交互,...
7. **函数设计**:可能包括一个主函数和一些辅助函数,如生成秘密数字的函数、检查猜测的函数等,这样可以使代码结构更清晰。 8. **程序结构**:遵循结构化编程的原则,将代码组织成逻辑清晰的块,有助于理解和维护...
与PC上程序的启动不同,单片机上的程序通常直接烧写在只读存储器(ROM)或可擦写可编程只读存储器(EEPROM)中,而数据则存储在随机存取存储器(RAM)中。由于单片机的RAM资源非常有限,通常只有几千字节(KB),而...
果为二进制值11000,该值转换为十进制为24,所以得到的加密结果为24。而解密过程也很简单,只是将加密 结果24与加密数字15 进行“异或”运算,将24 转换为二进制值11000,将15 转换为二进制值1111,进行“异 或”...
当然,OBS.DLL还具备一些很有特色的功能,对Excel的功能来说,应该是一个很好的补充。如: 1、中文简繁互换:在简体中文和繁体中文之间进行转换。 2、进制转换:在二进制、八进制、十进制、十六进制之间相互转换。...
《金哥哥的秘密小屋.zip》是一个压缩包,据描述,其中包含了作者精心编写的C++面试宝典。这个宝典无疑是为准备C++面试的求职者量身打造的,旨在帮助他们更好地理解和掌握C++语言的关键概念和技术,从而在面试中...
11. **软件设计模式**:设计模式是解决常见编程问题的最佳实践,如单例模式、工厂模式、观察者模式等,熟悉它们可以帮助写出更高质量的代码。 12. **优化技巧**:无论是性能优化还是代码优化,都需要不断学习和实践...
这段代码通过循环遍历100到999,将每个数分解成百位、十位和个位,然后计算这三个数字的立方和,最后比较这个和是否等于原数。如果相等,则打印出该数。 除了Python,其他编程语言如Java、C++或JavaScript也可以...
当然,OBS.DLL还具备一些很有特色的功能,对Excel的功能来说,应该是一个很好的补充。如: 1、中文简繁互换:在简体中文和繁体中文之间进行转换。 2、进制转换:在二进制、八进制、十进制、十六进制之间相互转换。...
实例266 读/写BIOS计时器 377 实例267 获取CMOS密码 377 9.3 硬件、软件中断 379 实例268 获取Ctrl+Break键消息 379 实例269 鼠标中断 380 实例270 设置文本显示模式 382 9.4 磁盘相关 385 实例271 ...
通过阅读《深度C的秘密》,读者不仅可以提升对C语言的精通程度,还能学习到如何写出更高效、更健壮的代码。这本书适合有一定C语言基础并希望深入研究的开发者,是C语言学习者的宝贵资源。由于提供的是英文原版高清晰...
以下是对一些常见蓝屏错误代码的深入解析,让我们一起揭开这些代码背后的秘密。 #### 1. IRQL_NOT_LESS_OR_EQUAL (0x0000000A) 此错误通常与驱动程序或硬件资源管理有关,表示当前线程尝试访问一个处于较高中断...
在网络安全领域,VB后门源代码指的是利用VB编写的恶意程序,这些程序通常设计为在目标系统上秘密建立一个“后门”,允许攻击者远程控制或访问受感染的计算机。"免杀"是指这种后门代码经过特殊处理,能够绕过安全软件...
这个“java培训机构秘密课件”很可能还包括了练习题、示例代码和解答,以帮助学习者巩固所学,并提供实践机会。对于那些刚开始接触Java的学习爱好者来说,这样的资源无疑是宝贵的,它能系统性地引导他们步入编程的...
《C语言深度解剖--解开程序员面试笔试的秘密》是一本专为软件工程师面试准备的指导书籍,涵盖了C语言的核心概念和技术,旨在帮助程序员在面试笔试中脱颖而出。这本书深入剖析了C语言的关键知识点,通过一系列常见...
- **2.1.2 编写代码(15分钟)**:指导读者如何快速编写一个简易搜索引擎的核心代码。 - **2.1.3 发布运行(5分钟)**:讲解如何部署并运行已经编写的搜索引擎程序。 - **2.2 搜索引擎基本技术**: - **2.2.1 ...
开发人员可能需要熟悉Git命令行操作,如`clone`、`branch`、`merge`等,以及使用GitHub或GitLab等代码托管平台。 4. **游戏逻辑**:复刻版需要实现游戏的AI(人工智能)系统,让电脑对手有一定的挑战性。这包括敌人...