打印
[匠人手记]

都过了好久才看到,好**啊

[复制链接]
84490|329
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序匠人|  楼主 | 2008-9-18 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、前言

“程序设计”的真谛是什么?许多初学者的理解是“写代码”。但是,在匠人看来,把“程序设计”理解为“写代码”,就像把“电路设计”理解为“画PCB”一样。

新手们苦恼的问题是,他们只会“写代码”。他们一接到新的项目,总是在第一时间就爬到键盘上去敲代码。新手们的精力总是比较旺盛,他们加班加点,两天就把所有代码敲完。然后他们会用十倍或几十倍以上的时间去调试,中间伴随着几次三番的推倒重来。最后,他们交出一个勉强能跑的程序。这种程序,外行乍一看,觉得还行;内行乍一看,却是吓出一身冷汗!

这也许不能怪新手们,因为他们的老师还没有来得及教会他们“程序设计”的一些方法。他们甚至还没有学会写注释,就已经毕业了。于是他们只能在毕业后的工作中,去完成这段本该在学校里完成的修炼。

要说到程序设计,最重要的一种方法,就是“多思考”。偏偏这又是最难手把手地教的。在此,匠人介绍一些设计时比较常用方法给大家。我们可以借助这些方法来对程序进行更高效、更多维的规划。

(未完待续)

相关帖子

沙发
coldra| | 2008-9-18 10:47 | 只看该作者

好好听课

使用特权

评论回复
板凳
程序匠人|  楼主 | 2008-9-18 10:50 | 只看该作者

二、程序流程图

二、程序流程图

1、从一个简单的流程图说起

我们先来看看这个图(参见图 1.1:一个程序流程图例子)。许多人都很熟悉,它的名称叫“流程图”,或者“程序流程图”。流程图是一种传统的算法表示法,程序流程图是人们对解决问题的方法、思路或算法的一种描述。它利用图形化的符号框来代表各种不同性质的操作,并用流程线来连接这些操作。

2、流程图的作用

流程图简单直观,应用广泛,功能卓越。

在程序的规划阶段,通过画流程图,可以帮助我们理清程序思路。尤其是在非结构化的汇编语言中,流程图的重要性不言而喻。

在程序的调试、除错、升级、维护过程中,作为程序的辅助说明文档,流程图也是很高效便捷的。

另外,在团队的合作中,流程图还是程序员们相互交流的重要手段。阅读一份简明扼要的流程图,比阅读一段繁杂的代码更加易于理解。

(未完待续)

使用特权

评论回复
地板
程序匠人|  楼主 | 2008-9-18 10:55 | 只看该作者

3、流程图的基本画法

3、流程图的基本画法

按道理,画流程图应该是每个程序员的基本功。匠人惊讶的是,居然有那么多人不会或不屑于画流程图。

在这里,匠人罗列出一些流程图中常用的符号(参见图 1.2:常用的流程图符号)。

细心的读者会发现,这里给出的一些流程图符号与教科书上的有点出入。

比如说符号D(条件判断框),书上给出的一般都是四角菱形的,而不是匠人推荐使用的六角菱形。匠人在实践中发现,容纳同样多的文字,六角菱形比四角菱形可以节省更多的空间。这也就意味着我们可以在同样大小的幅面内画出更多的内容。因此,除非是您公司里有明文规定必须使用四角菱形,否则就让教科书见鬼去吧。

另一个不同点,就是如果程序中要调用一个子程序,那么最好给这个子程序一个特别的符号,就像符号C(调用子程序框)。这样做的好处是可以更有利于阅读。

(未完待续)

使用特权

评论回复
5
HWM| | 2008-9-18 10:57 | 只看该作者

呵呵,在一个企业里新手也只有写代码的份。

LZ这些道理科班出身的都知道。关键是作为新手能耐得住性子,从写代码开始一点点的积累。在写代码的同时把自己的眼界放高些,为日后的提升作好准备。

看现在那些只会拘泥于某种器件的工程师们身上可以看到他们的“境界”有多高。

使用特权

评论回复
6
程序匠人|  楼主 | 2008-9-18 11:01 | 只看该作者

连载可能会断断续续,请大家体谅先

这是边写边发,实况转播。所以,有时会停顿,请体谅

使用特权

评论回复
7
香水城| | 2008-9-18 11:17 | 只看该作者

哈哈,刚学会下棋的人总是见人就要下两盘

不求长进的人会屡战屡败,但是斗志顽强的还要屡败屡战;聪明的人输过几盘后就会思考并在实践中自我总结提高;更聪明的人就会找棋谱背定式。

程序设计就像下棋一样,入门不难,难的是成为高手。

现在匠人开始给大家讲解程序设计的棋谱,俗话说的好“磨刀不误砍柴工”,强烈支持匠人布道。

使用特权

评论回复
8
程序匠人|  楼主 | 2008-9-18 11:31 | 只看该作者

哈哈,“布道”不敢。

权当是自我总结吧。

使用特权

评论回复
9
HWM| | 2008-9-18 12:19 | 只看该作者

不好意思,纠正一点:

“在程序的调试、除错、升级、维护过程中,作为程序的辅助说明文档,流程图也是很高效便捷的。”

代码(一般俗称的“程序”)在软件工程的角度来说不能代表程序。代码只是整个程序的最终实现。那程序是什么呢?严格意义上说,它至少包括:分析说明书(含用户说明书),功能模块说明书(含接口定义),各层次流程图,代码,调试说明和调试例程(含相关调试数据)。所以说,流程图比代码更为重要。仔细了解一下目前我们所谓的“软件外包”所做的是些什么玩意儿就知道真正的“软件”是什么,而我们是在付出些什么劳动。

使用特权

评论回复
10
程序匠人|  楼主 | 2008-9-18 12:36 | 只看该作者

仔细了解一下目前我们所谓的“软件外包”所做的是些什么玩意儿就知道真正的“软件”是什么,而我们是在付出些什么劳动。

——“软件外包”=“代码外包”。总的一些框架还是发包方制定的。

使用特权

评论回复
11
hotyong| | 2008-9-18 12:47 | 只看该作者

受益非浅!

使用特权

评论回复
12
HWM| | 2008-9-18 13:04 | 只看该作者

所以说千万别把软件(或程序)和代码等同起来。

但由于软件系统研发的阶段和分工不同,新手一般只能在代码层次上起步,而大量的代码设计是锻炼一个新手所必须经历的过程。这也是新手养成良好的代码书写习惯的一个不可或缺重要环节。

当然若是小型系统,没那么多分工,就必须一人贯穿其中。但对于一个新手来说并不是好事,除非有人带着玩。

使用特权

评论回复
13
程序匠人|  楼主 | 2008-9-18 16:17 | 只看该作者

4、画流程图软件

4、画流程图软件

匠人推荐用Visio软件来画流程图。这款软件功能非常强大,而画流程图只是它众多功能中的一个。

您只需新建一个Visio文件,点击菜单“文件”-〉“形状”-〉“流程图”-〉“基本流程图”,就可以得到许多现成的流程图符号。

在Visio画好的流程图,可以很方便地复制到Word环境中。并且可以在Word中进一步进行修改编辑。

当然,如果您只是偶然画流程图,也可以用Word或Excel软件的画图功能来实现。它们一样可以画流程图,只是没有那么专业罢了。

(未完待续)

使用特权

评论回复
14
程序匠人|  楼主 | 2008-9-18 21:57 | 只看该作者

5、流程图的结构化

5、流程图的结构化

早期的非结构化语言中都有类似“goto”的语句。它允许程序从一个地方直接跳到另一个地方去。而随着C语言的盛行,对程序的结构化要求,必然在流程图中得到体现。

经过研究,人们发现任何复杂的程序算法,都可以分解为顺序、选择(分支)和循环这三种基本结构。基本结构之间可以并列、嵌套,但不允许交叉跳转。我们构造一个算法的时候,也仅以这三种结构为构成单位,并遵守三种基本结构的规范。

如果说“goto”是孙悟空的“筋斗云”,那么“结构化”就是“如来神掌”。也就是说,不管你如何翻腾,也不能从一个结构直接跳转到另一个结构的内部去。呵呵!

这就是结构化编程的要求。它的好处就是结构清晰,易于正确性验证,易于纠错。

既然整个算法都是由三种基本结构组成的,那么,我们只要掌握这三种结构的流程图画法,就可以画出任何算法的流程图,无往而不利了。

(未完待续)

使用特权

评论回复
15
程序匠人|  楼主 | 2008-9-18 22:00 | 只看该作者

(1)顺序结构

(1)顺序结构
顺序结构是简单的线性结构,每条语句按顺序执行(参见图 1.4:顺序结构)。太简单了,实在没啥好说。

使用特权

评论回复
16
程序匠人|  楼主 | 2008-9-18 22:01 | 只看该作者

(2)选择(分支)结构

(2)选择(分支)结构
选择(分支)结构是对某个给定条件进行判断,条件为“真”(满足)或为“假”(不满足)时,分别执行不同的程序语句。当条件不满足时,有时需要执行一些语句,而有时可能什么都不做,由此分化出两种形态。(参见图 1.5:选择(分支)结构)

使用特权

评论回复
17
程序匠人|  楼主 | 2008-9-18 22:03 | 只看该作者

散转(Switch)结构

对于简单的选择(if)结构,条件判断的结果只有Yes和No两种。而在更复杂的选择结构中,比如说对某个表达式的值进行多重条件判断,结果就会有许多。

假设这个表达式可能=0、1、2、3、或者溢出,那么结果就有5个分支,我们可以用4个选择结构来实现这个流程图(参见图 1.6:多重选择(分支)结构)。

当然,我们也可以用一个散转(Switch)结构来画(参见图 1.7:散转(Switch)结构)。

使用特权

评论回复
18
程序匠人|  楼主 | 2008-9-18 22:04 | 只看该作者

图 1.7:散转(Switch)结构

使用特权

评论回复
19
程序匠人|  楼主 | 2008-9-18 22:08 | 只看该作者

(3)循环结构

(3)循环结构

循环结构的常见形态,包括当型(While)结构和直到型(Do-While)结构。
当型(While)循环结构中,是在每一轮循环的开始处执行条件判断,“当”条件满足则继续执行循环体中的语句,否则跳出循环。(参见图 1.8:当型(While)循环结构)。

直到型(Do-While)循环结构中,是先执行循环体中的程序语句,然后再在循环结束处进行条件判断,如果条件满足则继续开始新一轮循环,周而复始;“直到”条件不满足时跳出循环。(参见图 1.9:直到型(Do-While)循环结构)。

由于直到型循环结构是先执行语句,后进行条件判断,也就是说,在直到型循环结构中,循环体中的语句起码会被执行1次。

使用特权

评论回复
20
程序匠人|  楼主 | 2008-9-18 22:10 | 只看该作者

死循环

当条件判断的结果恒为“真”(Yes)时,循环就永远不会退出了。我们称之为“死循环”。主程序(主函数)就是一个常见的死循环的例子。

一般情况下,我们要避免死循环的产生。因为这样会导致其它任务被挂起——除非我们有意想那么做。举例说明:比如在掉电处理程序中,当我们检测到系统掉电信号后,需要预先保存好系统设置、并关闭输出,然后执行一个空操作的死循环。这个时候,我们有意要把所有任务挂起,让系统无牵无挂地、专心致志地“等死”(这就是“安乐死”,呵呵!)。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

734

主题

11156

帖子

675

粉丝