`

写好代码的10个秘密

阅读更多
先给大家看一段据说是史上最强的程序:
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。
分享到:
评论

相关推荐

    有关JavaScript的10个怪癖和秘密分享

    在实际开发中,了解和掌握这些怪癖和秘密可以帮助开发者写出更加符合预期的JavaScript代码,避免一些常见的错误和疑惑。对于学习和应用JavaScript的朋友们,理解这些特点对于提高代码质量、解决bug和优化性能具有...

    隐藏在Windows XP中的28个秘密武器.txt

    ### 隐藏在Windows XP中的28个秘密武器 Windows XP作为一款经典的桌面操作系统,在其辉煌的历史中,隐藏着许多不为人知的功能和工具。本文将深入探讨这些秘密武器,帮助用户更好地理解和利用Windows XP的强大功能。...

    MTK平台绝密核心代码之系统驱动MTK平台绝密核心代码之系统驱动

    "绝密核心代码"可能指的是这些驱动程序的源代码,通常这些代码不公开,因为它们涉及到公司的技术秘密和知识产权。 系统驱动在MTK平台上分为多个层次,包括内核驱动和用户空间驱动。内核驱动直接与Linux内核交互,...

    猜数游戏,限定7次-C语言代码

    7. **函数设计**:可能包括一个主函数和一些辅助函数,如生成秘密数字的函数、检查猜测的函数等,这样可以使代码结构更清晰。 8. **程序结构**:遵循结构化编程的原则,将代码组织成逻辑清晰的块,有助于理解和维护...

    单片机的小秘密 指令数据都被写在了哪?

    与PC上程序的启动不同,单片机上的程序通常直接烧写在只读存储器(ROM)或可擦写可编程只读存储器(EEPROM)中,而数据则存储在随机存取存储器(RAM)中。由于单片机的RAM资源非常有限,通常只有几千字节(KB),而...

    c# 加密和解密相关代码

    果为二进制值11000,该值转换为十进制为24,所以得到的加密结果为24。而解密过程也很简单,只是将加密 结果24与加密数字15 进行“异或”运算,将24 转换为二进制值11000,将15 转换为二进制值1111,进行“异 或”...

    Excel终极伴侣1.291

    当然,OBS.DLL还具备一些很有特色的功能,对Excel的功能来说,应该是一个很好的补充。如: 1、中文简繁互换:在简体中文和繁体中文之间进行转换。 2、进制转换:在二进制、八进制、十进制、十六进制之间相互转换。...

    金哥哥的秘密小屋.zip

    《金哥哥的秘密小屋.zip》是一个压缩包,据描述,其中包含了作者精心编写的C++面试宝典。这个宝典无疑是为准备C++面试的求职者量身打造的,旨在帮助他们更好地理解和掌握C++语言的关键概念和技术,从而在面试中...

    编程不可少的秘密,真的很重要

    11. **软件设计模式**:设计模式是解决常见编程问题的最佳实践,如单例模式、工厂模式、观察者模式等,熟悉它们可以帮助写出更高质量的代码。 12. **优化技巧**:无论是性能优化还是代码优化,都需要不断学习和实践...

    水仙花_水仙花_

    这段代码通过循环遍历100到999,将每个数分解成百位、十位和个位,然后计算这三个数字的立方和,最后比较这个和是否等于原数。如果相等,则打印出该数。 除了Python,其他编程语言如Java、C++或JavaScript也可以...

    Excel终极伴侣1.287

    当然,OBS.DLL还具备一些很有特色的功能,对Excel的功能来说,应该是一个很好的补充。如: 1、中文简繁互换:在简体中文和繁体中文之间进行转换。 2、进制转换:在二进制、八进制、十进制、十六进制之间相互转换。...

    C程序范例宝典(基础代码详解)

    实例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语言的精通程度,还能学习到如何写出更高效、更健壮的代码。这本书适合有一定C语言基础并希望深入研究的开发者,是C语言学习者的宝贵资源。由于提供的是英文原版高清晰...

    电脑蓝屏代码全解析

    以下是对一些常见蓝屏错误代码的深入解析,让我们一起揭开这些代码背后的秘密。 #### 1. IRQL_NOT_LESS_OR_EQUAL (0x0000000A) 此错误通常与驱动程序或硬件资源管理有关,表示当前线程尝试访问一个处于较高中断...

    vb后门源代码真的是很有用啊,免杀

    在网络安全领域,VB后门源代码指的是利用VB编写的恶意程序,这些程序通常设计为在目标系统上秘密建立一个“后门”,允许攻击者远程控制或访问受感染的计算机。"免杀"是指这种后门代码经过特殊处理,能够绕过安全软件...

    java 培训机构秘密课件 很给力0

    这个“java培训机构秘密课件”很可能还包括了练习题、示例代码和解答,以帮助学习者巩固所学,并提供实践机会。对于那些刚开始接触Java的学习爱好者来说,这样的资源无疑是宝贵的,它能系统性地引导他们步入编程的...

    C 语言深度解剖--解开程序员面试笔试的秘密

    《C语言深度解剖--解开程序员面试笔试的秘密》是一本专为软件工程师面试准备的指导书籍,涵盖了C语言的核心概念和技术,旨在帮助程序员在面试笔试中脱颖而出。这本书深入剖析了C语言的关键知识点,通过一系列常见...

    高清彩版 自己动手写搜索引擎

    - **2.1.2 编写代码(15分钟)**:指导读者如何快速编写一个简易搜索引擎的核心代码。 - **2.1.3 发布运行(5分钟)**:讲解如何部署并运行已经编写的搜索引擎程序。 - **2.2 搜索引擎基本技术**: - **2.2.1 ...

    智龙迷城复刻

    开发人员可能需要熟悉Git命令行操作,如`clone`、`branch`、`merge`等,以及使用GitHub或GitLab等代码托管平台。 4. **游戏逻辑**:复刻版需要实现游戏的AI(人工智能)系统,让电脑对手有一定的挑战性。这包括敌人...

Global site tag (gtag.js) - Google Analytics