老杨说话的地方
  • 首页
  • 关于老杨
  • 博客时间
  • 文章分类
    • 人生感悟
    • 信息技术
    • 往事随风
    • 情感随笔
    • 文学创作
    • 生活记录
    • 评论杂谈
    • 人工智能
  • 留言本
我是老杨
张驰有度 宠辱不惊
  1. 首页
  2. 信息技术
  3. 编程的坏习惯
  4. 正文

编程的坏习惯之贸然开工

2009年07月27日 4400点热度 0人点赞 10条评论

不好意思,让大家久等了,博士太忙了!

今天讲的不是只针对编程的,当然编程当中我也经常遇到这种问题,就是编码开始的太早了,却没有经过仔细的考虑,规划,设计,就草草的开始编码,最后的结果是,代码乱的自己都分不清东西南北了,我问他,这一段是干嘛的,他要仔细研究上下文之后才能够给我答案。

我一直在强调计划,设计的重要性,这不仅是在编程中,做任何事情,都需要有计划,有秩序,有节奏的进行。我从前在本科期间,参与组织过很多的活动,每次需要我组织一个活动的时候,我会很详细的写下每一个环节,时间,地点,人物,道具,需要什么,安排什么,这些还没有发生的事情像电影一样在我的脑子里过好几遍,而基本每一次我都能够找到我还没有考虑到,或者说疏漏的地方,组织的次数多了,以后每次遇到一件事情,我就很自然的开始进行计划了,而好的计划总是能够让我事半功倍,所谓磨刀不误砍柴工,当真是至理名言。

说到编程,计划就意味着各种设计,你要在你自己的脑子里面非常清楚,你要写的这个程序或者软件,写出来应该是什么样子的。我连写一个HTML页面,一个简单的CSS布局都要在草纸上画出分布图,这种设计可能别人根本看不懂,但是对我很有用,我设计一个导航条是怎样的,然后按照设计制作背景图,边框,最后的结果是一个像素也不差。这就是计划,设计给你带来的便利,给你带来的好处。否则,你要修改CSS,你要修改图片,改来改去自己都乱了。

很多时候我看他们的代码,很乱,这个乱指的是没有规划,至少没有很好的规划,拿到需求就开始编码,从来没想过我要从这里面抽象出几个函数,每个函数都完成什么样的功能,每个函数携带什么参数,是否需要重载等等;有时候就算规划了,也是在脑子里面灵光一闪,当真正写代码的时候就忘记了,好记性永远不如烂笔头,记住这句让很多人重复了很多次的名言吧。我在告诉他们应该如何编码的时候,我很少只是简单的说,很多时候我拿出一张草纸,如果我想的很清楚了,那么我会给他写出伪代码,这就是我的设计思路,如果是我自己编码,我也会这样写的;如果我并没有完全想好程序的结构,我会很清楚的列出第一步如何做,第二步如何做,我这么做的目的是想让他们能够很容易的了解程序的结构,从而对编码进行规划和设计。但是我很失望的看到:他们对规划的重视程度远远不够。

可能你在编码的时候会遇到这个问题,有一个功能我在这里遇到了,在另外一个地方也遇到了,或者是类似的功能,只要是这样的情况,就必须把这些东西抽象出来,抽象成一个函数,一个类,甚至一个模块,如果在设计的时候并没有考虑到就开工了,那么你就会发现,这个程序的结构已经乱了,这时候有两种方案:第一,停下编码,进行设计,这是明智的,所谓亡羊补牢,犹未晚也;第二,不管他,这两个地方功能不是差不多吗?我把刚才那一段代码复制粘贴过来稍加修改不就OK了?这种方式很快,可以让你很容易的实现第二个类似的功能,可是这样真的Ok吗?如果你第三次,第四次遇到了同样的类似的功能或者代码段的时候,你怎么办?如果你第一次写的代码就是错的,那么你复制粘贴过来的全部都是错的,需要改动的地方很多很多。

上述问题的另外一个弊端是程序的可读性。你现在看你的代码,觉得每一行我都能很清楚的知道到底是干嘛的,可是一周之后,一个月之后,一年之后,你还知道吗?如果一个月之后程序出现问题了,你再回来读,基本上就和读陌生的代码没什么区别了,而遇到上述“几块儿代码基本都一样”的问题,会严重的迷惑你:为什么一样的代码出现了这么多次?同时这些代码成为你程序出问题最值得怀疑的地方,因为说不定就是哪一次你复制粘贴的时候,少改了一个参数。

设计的好处,还可以表现在改动上。好的设计可以让你在需求改变时做最小的改动。我们把链接数据库的类单独抽象出来,就是为了这个。最原始的做法是:写一段链接数据库的代码,然后复制粘贴到每一个JSP页面中。可是一旦数据库地址或者端口改变了,这需要多大的改动量?可能你现在觉得把数据库抽象出来是理所当然的,因为我们一直就是这么做的,那么在设计自己的类,自己的程序代码的时候,为什么就不能花一些时间把公共的部分抽象出来呢?直到需要修改N个地方的时候你才发现,这里本来应该可以抽象成一个公共模块的,那样就方便很多了。记住:就算简单到一个只有几行的函数,也必须进行仔细的考虑和设计,这是一个很好的习惯。

如果你从未进行编码,或者编码很少,要做到很完美的设计太困难了,必须遇到几次这样的问题可能你才能真正理解这种抽象,设计的魅力,我写这篇文章并不是要大家马上就能设计抽象出很完美的结构和模型,而我也无法教给你如何去做,这些都必须依靠你自己在编码时总结完成。我是要给你提个醒:要重视设计,第一次没设计不要紧,第二次尝试着去做做看,第二次设计的不好不要紧,总结经验,把设计写下来,和最后的程序比较一下,看看设计的时候哪些问题被忽略了,下一次好好设计一下,但是如果你做了五次都没有意识到应该进行提前的抽象,设计,那么你这五次编码不过是在做苦力罢了,除了编码更熟练以外,不会有太多的进步。

这次的主题词就是:不要贸然开工,设计先行,哪怕是只有你自己看的程序,也要设计。

好了,希望本文对大家有所帮助,下期预告:《编程的坏习惯之百密一疏》。

标签: 代码 坏习惯 总结 程序 编程 计划 软件
最后更新:2009年07月27日

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

点赞
订阅评论
提醒
guest

guest

10 评论
内联反馈
查看所有评论
chanthon
chanthon
游客
2009年8月1日 下午3:52

以一个门外汉的身份来看,
不光编程,
其实做什么事情都一样,
首先得有一个大体的计划和框架。。

0
回复
老杨
老杨
作者
回复给  chanthon
2009年8月1日 下午7:19

@chanthon 所言极是啊,这算是一种能力吧

0
回复
Hope
Hope
游客
2009年7月31日 下午9:26

说实话,在做南京党建系统详细设计的时候,初期给我唯一的感觉就是浪费时间,可能是有些东西,我确实不知道怎么实现,设计的必然会有偏差。真正实现的时候更感觉漏洞百出,有的设计甚至需要全盘否定。
其中一个模块之前做过,写详细设计的时候思路也非常的清晰。
我觉得详细设计成功与否与我们平时练习的多少也是息息相关的。只有做过才能真正的描述出来。(抒发一下感情,哈哈)
在做别的项目的时候,我也深深的感受到设计的重要性,由于考虑不周,设计不当等等,很多地方返工了好多次,大大降低了效率。

0
回复
老杨
老杨
作者
回复给  Hope
2009年7月31日 下午9:28

@Hope 你看看我上面给yxp回复的,设计和编码是一个反复循环的过程,就好像理论与实践要相辅相成,共同发展一样,设计和编码不能够互相脱离

0
回复
sunshineyxp
sunshineyxp
游客
2009年7月29日 上午7:55

一直知道设计的重要性,可是真正实施的时候总感觉就跟预想的出现偏差,而且设计的时候总感觉有不明确的地方,这时应该怎么办呢?
说到设计,我就想起了做四方那个项目,刚开始的时候,主程序框架是贾导带着我写的伪代码(应该是哈),虽然后来需求变了很多,一而再再而三的改服务器部分,但相对来说还算比较好改。

0
回复
老杨
老杨
作者
回复给  sunshineyxp
2009年7月29日 上午9:04

@sunshineyxp 在需求分析和用户体验设计方面,有一种方式,我记不得叫什么名字了,大概意思就是,在需求和用户之间不断循环,并不开始编码,然后经过若干次之后,需求越来越接近用户的要求。你的问题和这个类似,可以使用伪代码的形式,让伪代码越来越接近真实代码,如果出现问题,马上更改设计,然后继续伪代码,有问题再改设计,循环到最后真正的代码基本形成,和设计基本上是相符合的。
好的设计肯定会给修改带来便利的

0
回复
myonlystar
myonlystar
游客
2009年7月27日 下午10:58

虽然代码写的不多,但是四方那个项目确实让我见识了设计的重要性,要不然后期改动时,就够麻烦的了。
ps:我发现你写博文速度很快,就听你啪啦一会键盘,洋洋撒三几千字就出来了,看来就是说相声的呵呵,赞一个
ps:貌似这次我又是沙发。。。。。。。。。

0
回复
老杨
老杨
作者
回复给  myonlystar
2009年7月27日 下午10:59

@myonlystar 写了半个小时还多,时间够长的,和说相声感觉关系不大,主要是要有东西写

0
回复
myonlystar
myonlystar
游客
回复给  老杨
2009年7月27日 下午11:00

@老杨 这次评论回的也很快啊

0
回复
老杨
老杨
作者
回复给  myonlystar
2009年7月27日 下午11:00

@myonlystar 嗯,咱有邮件提示,就是牛,哈哈

0
回复

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

搜索
最新 热点 随机
最新 热点 随机
中国是不是体育强国? 成功的必备因素 关于华为 别再侮辱我的智商 春秋航空让人长见识 第二青春计划失败 第二青春计划 模型训练错误RuntimeError: expected scalar type Half but found Float 加载onnx模型进行推理 PyTorch模型转onnx格式
老杨推荐:理想空间 我在大学那几年(一) BSBJ8:带有参数的JSP和Servlet 老杨学游泳一:怕水心理 解决WordPress遇到的MySQL server has gone away的错误 懒 推荐网络同步工具快盘 羽泉陶喆汪峰新专辑 PPLive的读音 微软的迷惑
最新评论
  • 关于华为上的老杨确实,苹果手机系统还是有优势的。
  • 关于华为上的乱云AKAY自从换了苹果手机后,对手机再没以前那样热爱研究了,主要是系统省心。
  • 第二青春计划失败上的老杨第二都失败了,第三就算了吧。
  • 春秋航空让人长见识上的老杨应该提供一点水,至少给不想买水的人一个选择的空间。
  • 别再侮辱我的智商上的老杨那个很好,很值得。
  • 关于华为上的老杨Next系统基本没广告。大部分广告都可以关掉吧,我记得我写过一个文章,…
  • 第二青春计划失败上的xqiushi开始第三青春计划吧。
  • 春秋航空让人长见识上的xqiushi那个桌板能放下小米多看电子书,还是不错的。 这个矿泉水市面上没有,特供…
  • 别再侮辱我的智商上的xqiushi只投了那100亿的项目。
  • 关于华为上的xqiushi今年我爸的手机也换成华为,家庭里手机基本都是华为。最不满意的一点就是广…

Google java jsp linux QQ wordpress 中国 习惯 人生 公司 决定 博士 博客 同学 国家 大学 学习 实验室 家 小说 工作 开始 思考 情感 手机 技术 推荐 插件 数据库 文件 晴迷星途 朋友 生活 电影 相声 程序 笔记 网站 网络 置顶 美国 评论 软件 音乐 项目

关注公众号

COPYRIGHT © 2020 老杨说话的地方. ALL RIGHTS RESERVED.

THEME KRATOS YANG Modified BY 老杨

鲁ICP备17014997号-4

鲁公网安备 37021302000754号