一、编程老手与高手的误区
自从计算机问世以来程序设计就成了令人羡慕的职业程序员在受人宠爱之后容易发展成为毛病特多却常能自我臭美的群体。
如今在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如果你在没有任何提示的情况下考了满分希望你能收我做你的徒弟。
编程考试结束后请阅读本书的正文。
On Feb 8, 10:17 pm, 阿信 <xinxingqian...@gmail.com> wrote:
> 最近在看林锐博士的《高质量C++编程》,01的一本书了,在网上流传了很久了。第一次看的时候还是在高中读高一的时候,当时写程序都是为了应付noi的比赛,-由于比赛是黑盒的,所以编程时候都是最终结果对久可以了,完全没什么风格不风格的。个把月前有个朋友叫我写个MMSEG的中文分词,我记得高一的时候写过一个,-于是把它给找出来,看了一下,只能用胆战心惊了形容,洋洋洒洒几千行代码不足二十行的注释,文件结构混乱,连自己也难看明白。于是只好自己重写一个了。多年的编-程生涯跌跌撞撞走过来,现在再看回这本书感触很多。我是一个ctrl+c/ctrl+v党,嘿嘿,所以贴一下林锐博士的书的一篇文章。我在水底闷了很久了,头一-次浮出水面,希望各位老大手下留情啊。
>
> 一、编程老手与高手的误区
>
> 自从计算机问世以来程序设计就成了令人羡慕的职业程序员在受人宠爱之后容易发展成为毛病特多却常能自我臭美的群体。
>
> 如今在Internet上流传的"真正"的程序员据说是这样的
>
> (1)真正的程序员没有进度表只有讨好领导的马屁精才有进度表真正的程序员会让领导提心吊胆。
>
> (2)真正的程序员不写使用说明书用户应当自己去猜想程序的功能。
>
> (3)真正的程序员几乎不写代码的注释如果注释很难写它理所当然也很难读。
>
> (4)真正的程序员不画流程图原始人和文盲才会干这事。
>
> (5)真正的程序员不看参考手册新手和胆小鬼才会看。
>
> (6)真正的程序员不写文档也不需要文档只有看不懂程序的笨蛋才用文档。
>
> (7)真正的程序员认为自己比用户更明白用户需要什么。
>
> (8)真正的程序员不接受团队开发的理念除非他自己是头头。
>
> (9)真正的程序员的程序不会在第一次就正确运行但是他们愿意守着机器进行若干个30小时的调试改错。
>
> (10)真正的程序员不会在上午9:00到下午5:00之间工作如果你看到他在上午9:00工作这表明他从昨晚一直干到现在。
>
> ......
>
> 具备上述特征越多越显得水平高资格老。所以别奇怪程序员的很多缺点竟然可以被当作优点来欣赏。就象在武侠小说中那些独来独往、不受约束且带点邪气的高手最令人崇-拜。我曾经也这样信奉并且希望自己成为那样的
> "真正"的程序员结果没有得到好下场。
>
> 我从读大学到博士毕业十年来一直勤奋好学累计编写了数十万行C++/C代码。有这样的苦劳和疲劳我应该称得上是编程老手了吧
>
> 我开发的软件都与科研相关集成电路CAD和3D
> 图形学领域动辄数万行程序技术复杂难度颇高。这些软件频频获奖有一个软件获得首届中国大学生电脑大赛软件展示一等奖。在1995年开发的一套图形软件库到200-0
> 年还有人买。罗列出这些"业绩"可以说明我算得上是编程高手了吧
>
> 可惜这种个人感觉不等于事实。
>
> 读博期间我曾用一年时间开发了一个近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
> 如果你只得了几十分请不要声张也不要太难过。编程质量差往往是由于不良习惯造成的与人的智力、能力没有多大关系还是有药可救的。成绩越差可以进步的空间就越大中-国不就是在落后中赶超发达资本主义国家吗只要你能下决心改掉不良的编程习惯第二次考试就能及格了。
不知道是不是在这里看到的一个故事,
老和尚和小和尚在山上隐居, 老和尚考小和尚, 窗外是什么?
小和尚答曰: 青山绿水.
老和尚摇头.
十年后, 老和尚又问小和尚, 窗外是什么?
小和尚会意, 答曰, 山非山水非水.
老和尚点头.
再过十年, 老和尚快要西去, 又问道小和尚(长大了的), 窗外是什么?
小和尚答曰, 山是山, 水是水.
On 2月9日, 下午3时46分, wanng fenng <wanng.fe...@gmail.com> wrote:
> 2009/2/9 hashinghwan...@gmail.com <hashinghwan...@gmail.com>
2009/2/9 wanng fenng <wanng...@gmail.com>:
--
Shujie Shang
College of Computer Science, Zhejiang University,China.
msn: ssj...@hotmail.com
原来未参禅时,对事物的界限很明白,后来,参禅时,发现事物的界限并非原来那么清楚,看到了事物表象背后的东西,最后又回到表象,相当于是对一个事物的重新更全面的认识
如今在Internet上流传的"真正"的程序员据说是这样的
(2)真正的程序员不写使用说明书用户应当自己去猜想程序的功能。
(3)真正的程序员几乎不写代码的注释如果注释很难写它理所当然也很难读。
(6)真正的程序员不写文档也不需要文档只有看不懂程序的笨蛋才用文档。
On Feb 9, 5:38 pm, sjinny <sji...@163.com> wrote:
> 其实最简单的解释就是:
> 第一个阶段的山水的概念和第三个山水的概念不同;第一个阶段的是山水的外表,第三个阶段的是山水的内涵;而第二个阶段则是过渡阶段:看到了一些外表之下的东西,但仍然有所缺失或误解。
> 不过这个解释似乎不是很理想,没有味道。;)
>
> 在2009-02-09,LeeoNix <real-l...@yeah.net> 写道:
>
> >个人感觉,其实就是一句大实话,也是一种过程经历的总结。
>
> >每个人理解都不一样的,到达一定阶段自然会理解这个。
>
> >最好还是通过自己的经历去思考,呵呵。因为每个人都可能说出不同的想法。
>
> >------------------
> >LeeoNi
> >2009-02-09
>
> >-------------------------------------------------------------
> >发件人:sjinny
> >发送日期:2009-02-09 17:20:47
> >收件人:pongba
> >抄送:
> >主题:[TopLanguage] Re: 你是老手还是高手?你会编高质量的程序吗?读高质量C++编程有感
>
> >>山水是不是山水的这个说法很早就听过,虽然之前没看到出处。
> >>不过这句话该怎么理解呢?一直不是很清楚。
>
> ...
>
> read more >>