老杨说话的地方
  • 首页
  • 关于老杨
  • 博客时间
  • 文章分类
    • 人工智能
    • 人生感悟
      • 共产主义
      • 能量哲学
      • 自然辩证法
    • 信息技术
      • C#笔记
      • LaTex
      • Linux
      • RIME
      • Ubuntu&Debian
      • WordPress
      • 基于Java的B/S系统构建
      • 开源开发
      • 病毒相关
      • 编程的坏习惯
      • 网上办公系统
    • 往事随风
      • 我在大学那几年
      • 童年趣事
      • 精彩生活
    • 情感随笔
    • 文学创作
      • 小说
    • 生活记录
      • 博士进行中
      • 美国一年
      • 老杨学游泳
    • 评论杂谈
  • 留言本
我是老杨
张驰有度 宠辱不惊
  1. 首页
  2. 信息技术
  3. 编程的坏习惯
  4. 正文

编程的坏习惯之贸然开工

2009年07月27日 5302点热度 1人点赞 10条评论

编程的坏习惯之贸然开工

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

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

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

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

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

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

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

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

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

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

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

标签: 代码 坏习惯 总结 程序 编程 计划 软件
最后更新:2026年11月02日
老杨

老杨

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

点赞

评论(10)

写下你的评论
  1. myonlystar
    myonlystar2009年07月27日 22:58

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

    1. 老杨
      老杨作者2009年07月27日 22:59

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

      1. myonlystar
        myonlystar2009年07月27日 23:00

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

        1. 老杨
          老杨作者2009年07月27日 23:00

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

  2. sunshineyxp
    sunshineyxp2009年07月29日 07:55

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

    1. 老杨
      老杨作者2009年07月29日 09:04

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

  3. Hope
    Hope2009年07月31日 21:26

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

    1. 老杨
      老杨作者2009年07月31日 21:28

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

  4. chanthon
    chanthon2009年08月01日 15:52

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

    1. 老杨
      老杨作者2009年08月01日 19:19

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

发表评论

选择代码语言
选好后在光标处插入代码块,把示例文字换成你的代码即可。

老杨

老杨

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

搜索
最新 热点 随机
简航:极简开源个人导航SimpleNav 关于机器人的发展 遥遥领先 开源密码生成工具SimplePassword 痛苦根源 同步日历-我的第一款鸿蒙应用(鸿蒙CalDav客户端) 别成为AI的奴隶 给阿嬷的情书 信息焦虑综合症 PUA
为多用户安装Anaconda及其使用方法WordPress主题发布:kratos_YangLaTex中上划线\overline和\bar的使用说明LaTex中设置字体的正确方法那一年,2009使用Windows7自带Windows Media Center播放RMVB影片幼儿园:回味童年童年趣事之气门芯这几天的事儿无插件实现WordPress留言本
Ubuntu下安装Telnet 心灰意冷 分别一如既往 雅可比迭代求解线性方程组C语言 自然辩证法笔记一 童年趣事之链子枪 爱因为在心中 电影《斗牛》 在Firefox中使用Flashgot插件管理迅雷下载 魅族M8远程控制电脑
最近评论
  • 实在抱歉,这两天比较忙,没看邮箱,没有名额了已经,再问问其他老师吧。
    老杨·3 天前·留言本
  • 老师你好,这学期考虑接毕设指导吗?具体可以老师您可以查看邮箱,申请已提交到邮箱
    BroMikey·3 天前·留言本
  • 感谢支持。可以买个鸿蒙设备玩玩
    老杨·2 周前·同步日历-我的第一款鸿蒙应用(鸿蒙CalDav客户端)
  • 没有鸿蒙设备,吆喝一声支持老杨的产品
    乱云/Akay·2 周前·同步日历-我的第一款鸿蒙应用(鸿蒙CalDav客户端)
  • 先从减少手机使用时间开始。
    shanshan·2 月前·信息焦虑综合症
  • 所以必须得自己下定决心痛改前非,而不是跟自己讲条件。
    shanshan·2 月前·第二青春计划失败
  • 这种平台挺多的,但是应该没啥用,能有啥情绪价值比躺着刷手机更好呢?
    老杨·2 月前·第二青春计划失败
  • 已经遇到了,额外支付了170,托运登机行李,还不是托运行李。
    老杨·2 月前·春秋航空让人长见识
  • 那很好,恭喜你
    老杨·2 月前·PUA
  • 可以尝试改变。
    老杨·2 月前·信息焦虑综合症
  • 现在很多人离开AI已经不知道怎么工作了。
    老杨·2 月前·别成为AI的奴隶
  • 建议开发一个适合P人的工作生活计划平台,完不成没什么惩罚、但是完成了有大大的情绪…
    shanshan·2 月前·第二青春计划失败
文章分类
选择分类
  • 人工智能13
  • 人生感悟121
    • 共产主义1
    • 能量哲学12
    • 自然辩证法12
  • 信息技术235
    • C#笔记6
    • LaTex12
    • Linux18
    • RIME4
    • Ubuntu&Debian21
    • WordPress1
    • 基于Java的B/S系统构建10
    • 开源开发3
    • 病毒相关3
    • 编程的坏习惯4
    • 网上办公系统9
  • 往事随风41
    • 我在大学那几年18
    • 童年趣事12
    • 精彩生活5
  • 情感随笔113
  • 文学创作69
    • 小说68
  • 生活记录220
    • 博士进行中6
    • 美国一年22
    • 老杨学游泳4
  • 评论杂谈169
关注公众号

COPYRIGHT © 2026 老杨说话的地方 版权所有

THEME KRATOS YANG Modified BY 老杨

鲁ICP备17014997号-4

鲁公网安备 37021302000754号