前 言

软件质量是被大多半次序员挂在嘴上而不是放在心上的器械!

除了完全熟行和真正的编程妙手外,初读本书,你起头的感受将是恐惧:“哇!我早年捏造的C /C次序怎样会有那么多的缺陷?”<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

别难熬,作者只不外比你早几年、多几回恐惧罢了。

请花一两个小时注意阅读这本百页经书,你将会获益匪浅,这是前面N-1个读者的发起。

一、编程外行外行与妙手的误区

自从计算机问世以来,次序设计就成了令人恋慕的职业,次序员在受人痛爱之后容易生长成为缺陷特多却常能自我臭美的群体。

目前在Internet下撒布的“真正”的次序员听说是多么的:

(1)    真正的次序员没有进度表,只需市欢领导的马屁精才有进度表,真正的次序员会让领导人心惶惑。

(2)    真正的次序员不写运用声明书,用户该当自己去预想次序的效果。

(3)    真正的次序员几乎不写代码的解释,倘使解释很难写,它该当云云也很难读。

(4)    真正的次序员不画流程图,原始人和文盲才会干这事。

(5)    真正的次序员不看参考手册,新手和胆怯鬼才会看。

(6)    真正的次序员不写文档也不需求文档,只需看不懂次序的笨蛋才用文档。

(7)    真正的次序员以为自己比用户更邃晓剖析鲜明用户需求什么。

(8)    真正的次序员不担任团队开拓的理念,除非他自己是头头。

(9)    真正的次序员的次序不会在第一次就正确运转,可是他们情愿守着机械中断若干个30小时的调试改错。

(10)真正的次序员不会在上午9:00到下午5:00之间事务,倘使你看到他在上午9:00事务,这标明他从昨晚不绝干到目前。

……

具有上述特征越多,越显得程度高,资历老。以是别独特,次序员的许多缺陷竟然可以被算作益处来浏览。就象在武侠小说中,那些独来独往、不受束厄局促且带点邪气的妙手最令人崇敬。我已经也多么信奉,而且停留自己成为那样的“真正”的次序员,效果没有获得好下场。

我从读大学到博士毕业十年来不绝勤奋好学,累计编写了数十万行C /C代码。有多么的苦劳和委顿,我应该称得上是编程外行外行了吧?

我开拓的软件都与科研相干(集成电路CAD和3D图形学领域),动辄数万行次序,手艺复杂,难度颇高。这些软件多次获奖,有一个软件获得首届中国大高足电脑大赛软件闪现一等奖。在1995年开拓的一套图形软件库到2000年还有人买。枚举出这些“业绩”,可以声明我算得上是编程妙手了吧?

惋惜这种集体感受不即是现实。

读博时期我曾用一年岁月开拓了一个近10万行C 代码的3D图形软件产物,我心里惬意表面谦善地向一位真正的软件妙手叨教。他固然从未涉足过3D图形领域,却在几极度钟内指出该软件多处严重设计错误。让人感受那套软件是用纸糊的丽都衣服,扯一下失踪一块,戳一下破个洞。我哑口无言地熟悉到这套软件毫无适用价值,一年的心血白化了,而且害去世了自己的软件公司。

人的顿悟平常爆发在最心痛的时分,在悔恨和心痛之后,我作了深切反省,“面壁”半年,重新温习软件设计的根柢内情基本常识。补修“内功”之后,又以为腰板硬了起来。博士毕业前半年,我曾到微软中国研讨院找事务,担任微软公司一位资深软件工程师的口试。他让我写函数strcpy的代码。

太容易了吧?

错!

这么一个小不点的函数,他从三个方面考察:

(1)编程气焰气派;

(2)犯错处理;

(3)算法庞美丽剖析');(用于进步功能)。

在大学里历来没有人云云严酷地考察过我的次序。我化了半个小时,修改了数次,他还不尽惬心,让我回家好好猜测。我肉体抖擞地进“考场”,大汗淋漓地出“考场”。这“妙手”当得也太窝囊了。我又好好地反省了一次。

我把反省后的心得体会写成文章放在网上传阅,惹起了不少软件开拓职员的共鸣。我因此有幸和国产大型IT企业如华为、上海贝尔、再起等公司的同志们广泛交换。大师以为进步质量与分娩率是软件工程要料理的中央标题结果。高质量次序设计是非常严重的要害,终究软件是靠编程来完成的。

我们心目中的外行外行们和妙手们可否编写出高质量的次序来?

不见得都能!

就我的阅历与阅历来看,国际大学的计算机教导压根就没有灌输高质量次序设计的看法,教员们和高足们也很少盲目关切软件的质量。勤奋好学的次序员耐久在低质量的次序堆中滚爬,吃尽甜头之后才有一些心得体会,长进极慢,我就是一例。

目前国际IT企业拥有学士、硕士、博士文凭的软件开拓职员屈指可数,但他们在担任大学教导时就“先天不敷”,岂能一到企业就遽然完成质的奔驰。试问有多少软件开拓职员对正确性、矫健性、动摇性、服从、易用性、可读性(可相识性)、可扩展性、可复用性、兼容性、可移植性等质量属性管窥蠡测?而且能在实际中运用自若?。“高质量”可不是干活鉴戒点就能完成的!

我们有空虚的情由疑虑:

(1)编程外行外行梗概会耐久用隐含错误的方法编程(风尚整自然),创造缺陷后都不肯相信那是真的!

(2)编程妙手可以在某一领域写出极有程度的代码,但未必能从全局把握软件质量的方方面面。

现实证实云云。我到上海贝尔事务一年来,连气儿口试或测试过近百名“新”“老”次序员的编程手艺,质量及格率大约是10%。很少有人可以写出完全符合质量要求的if语句,许多次序员对指针、内存经管一得之愚,……。

领导们不敢相信这是真的。我做过现场实验:有一次局部新进14名硕士生,在开欢迎会之前对他们中断“C /C编程手艺”摸底测验。我问大师试题难不难?全部的人都答复不难。效果没有一集体及格,有半数人得零分。竞争对手公司的冤家们也做过实验,异样狼奔豕突。

真的不是我“心慈手软”或者要求过高,而是许多软件开拓职员对自己的要求不敷高。

要晓得华为、上海贝尔、再起等公司的员工本质在国际IT企业中是比力前线的,倘使他们的编程质量都云云差的话,我们怎样敢希冀中小公司拿出高质量的软件呢?连次序都编不好,还谈什么再起平易近族软件家产,岂不胡扯。

我筹划界说编程外行外行和编程妙手,请您别见笑。

界说1:能耐久动摇地编写出高质量次序的次序员称为编程外行外行。

界说2:能耐久动摇地编写出高难度、高质量次序的次序员称为编程妙手。

凭据上述界说,立时获得第一推论:我既不是妙手也算不上是外行外行。

在写此书前,我阅读了不少次序设计方面的英文著作,越看越羞惭。由于创造自己连编程基本手艺都未能双方面把握,顶多算是二流程度,还美意思谈什么外行外行和妙手。停留和我一样在国际土生土长的次序员冤家们可以做到:

(1)知错就改;

(2)屡屡温故而知新;

(3)坚持进修,每天向上。

二、本书导读

首先请做附录B的C /C试题(不要看答案),考察自己的编程质量现实怎样。然后参照答案严酷打分。

(1)倘使你只得了几极度,请不要声张,也不要太难熬。编程质量差往往是由于不良风尚形成的,与人的智力、本事没有多大关系,照旧有药可救的。效果越差,可以进步的空间就越大,中国不就是在失队中赶超发达资源主义国度吗?只需你能下决计改失踪不良的编程风尚,第二次测验就能及格了。

(2)倘使你考及格了,标明你的手艺根柢内情基本不错,停留你能谦善进修、不绝进步。倘使你还没有找到相符的事务单位,不妨到上海贝尔试一试。

(3)倘使你考出85分以上的好效果,你有义务和资历为你地址的团队作“C /C编程”培训。停留你能和我们多多交换、相互促进。半年前我已经创造一颗好苗子,就把他挖到我们小组来。

(4)倘使你在没有任何提示的情况下考了满分,停留你能收我做你的徒弟。

编程测验终了后,请阅读本书的解释。

本书第一章至第六章严重叙说C /C编程气焰气派。难度不高,可是细节比力多。别不放在眼里了,进步质量就是要从这些点点滴滴做起。世上不存在最好的编程气焰气派,完整绝对因需求而定。团队开拓考究气焰气派一致,倘使拟订了大师供认的编程气焰气派,那么全部组员都要听命。倘使读者以为本书的编程气焰气派比力合你的事务,那么就接纳它,不要只看不做。人在小岁月措辞发音禁绝,写字潦草,倘使不矫正,总有悔恨的岁月。编程也是异样原理。

第七章至第十一章是专题叙说,手艺难度比力高,看书时要积极思量。非分特别是第七章“内存经管”,读了并不表示懂了,懂了并不表示就能正确运用。有一位同事看了第七章后以为“野指针”写得不错,与我商议了一把。可是过了两周,他通知我,他忙了两天清查出一个Bug,想不到又是“野指针”出标题结果,只好重读第七章。

光看本书对进步编程质量是无限的,发起大师阅读本书的参考文献,那些都是经典名著。

倘使你的编程质量已经过关了,不要就此惬意。倘使你想成为良好的软件开拓职员,发起你阅读并凭据CMMI规范干事,让自己的综合程度上升一个台阶。上海贝尔的员工可以向汇集运用事业部软件工程研讨小组讨取CMMI有关资料,最好能介入培训。

三、版权声明

本书的大局部内容取材于作者一年前的册本手稿(尚未出书),现整理汇编成为上海贝尔汇集运用事业部的一个规范化文件,同时作为培训讲义。

由于C /C编程是众所周知的手艺,没有神秘可言。编程的好阅历应该大师共享,我们自己也是这么学来的。作者情愿地下本书的电子文档。

版权声明如下:

(1)读者可以随意任性拷贝、修改本书的内容,但不可以改举措者及所属单位。

(2)未经作者答应,不得出书或少量印发本书。

(3)倘使竞争对手公司的员工获得本书,请勿地下运用,以免爆发胶葛。

估量到2002年7月,我们将竖立符合中国国情的CMMI 3级料理方案。届时,搜聚本书在内的约1000页规范将严酷受控。

欢迎读者对本书提出批评发起

版权声明: 原创作品,答应转载,转载时请务必以超链接方法标明文章 原始原由 、作者信息和本声明。否则将清查轨则责任。

转载于:https://www.cnblogs.com/zgqjymx/archive/2011/03/07/1974617.html

高质量C /C编程指南---序言相关推荐

  1. 高质量C++/C编程指南 ver 1.0

    高质量C++/C编程指南 ver 1.0 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/25/1631800.html

  2. 《高质量C/C++编程指南》摘要

    一.文件结构 避免头文件被重复引用,用 #pragma once 进行预处理 用 <> 引用标注库头文件,用 "" 引用自定义库头文件 C语言头文件只进行函数声明,不进 ...

  3. 高质量 C++/C 编程指南

    高质量 C++/C 编程指南 文件标识: 文件状态 [ ] 草稿文件 [√]正式文件 [ ] 更改正式文件 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001 年7 月24 日 高质量 C ...

  4. 高质量C++/C 编程指南

    高质量C++/C 编程指南 文件标识: 当前版本: 1.0 作 者: 林锐 博士 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 完成日期: 2001 年7 月24 日 高质量C+ ...

  5. 高质量C++/C编程指南 1

    高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日 http://ma ...

  6. C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构

    http://www.bianceng.cn/Programming/cplus/200705/614.htm 高质量C++/C编程指南-第1章-文件结构 第1章 文件结构 每个C++/C程序通常分为 ...

  7. 高质量c++/c编程指南pdf

    高质量c++/c编程指南pdf,以下是链接 链接:https://pan.baidu.com/s/1NJRhYYahSrjuVbk3rsnXzA  提取码:er89

  8. 高质量C++/C编程指南(林锐)

    版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐 2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐 2001-7-18至 2001-7-24 朱洪海审查 ...

  9. [转载]高质量c/c++编程指南读书笔记

    一个strcpy函数的代码 能考查三个方面 (1) 编程风格 (2) 出错处理 (3) 算法复杂度分析(用于提供性能) 定义编程老手和编程高手 定义1:能长期稳定地编写出高质量程序的程序员称为编程老手 ...

最新文章

  1. 44 ansible ad-hoc模式
  2. django 文档生成器
  3. arrays中copyof_在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?
  4. 认识了一个新的手机游戏剖析工具- SnapDragon Profiler
  5. 文本分析:吉利不裁员不降薪背后的真相是什么
  6. 001-pro ant design 升级2.0后变更
  7. 游戏编程里面有哪些经典或者很酷的算法?
  8. oracle精度说明符1~38_Oracle 错误代码总结及解决方案
  9. linux c语言 utf8读写,关于在C程序中处理UTF-8文本的方法详解
  10. DNN网络(三)python下用Tensorflow实现DNN网络以及Adagrad优化器
  11. asp.net组件检查网站探针
  12. 海外手机号码格式校验(PHP版)
  13. 74ls175四人抢答器电路图_用数字电路实现四人抢答器
  14. win10linux双系统时间,win10与linux双系统切换时间不一致的调整
  15. Revo Uninstaller猎人模式操作说明
  16. 关于PS CC 不能直接拖图片的问题
  17. DB2数据库相关操作
  18. 大四会计转码 初学c语言的心路历程
  19. 官宣, CSDN 2018博客之星获奖名单!
  20. pyqt5 制作壁纸切换工具实例 第二章

热门文章

  1. docker入门(基于虚拟化技术)
  2. mysql的设计模式_数据库设计中使用设计模式
  3. $_server[#039;php_auth_user#039;],ecshop中$user ($GLOBALS[#039;user#039;])对象在哪里定义的...
  4. mfc 使打开的窗口至于最顶层_MFC界面开发控件BCG帮助文档——功能区设计器(2)
  5. java in array_ArrayList to Array Conversion in Java
  6. centos7 开机启动文件路径_centos7定时运行python脚本
  7. ue4 如何获取端口号_尝试在UE4.22中实现罪恶装备Xrd的卡通渲染
  8. 计算机算法设计与分析 递归实现快速排序和随机化实现快速排序
  9. 【文献阅读】Densely Connected Convolutional Networks-best paper-CVPR-2017
  10. 实验2.4 使用系统函数pow(x,y)计算xy的值