关于程序设计,掐指算来也写了快有十年的程序了,之前很长的一段时间都是以算法类的竞赛为主,对于程序结构的设计,总是胡乱写写,能跑通就算ok了。来公司后, 接触了一些大一点的项目的设计,设计的重要性就凸现出来了。

为了更好的设计(不能说到完美,但是至少不要把自己和用户弄晕),我写点自己的一些感悟(有自己思考的,也有和公司的前辈讨论得到的),不能说本系列是一篇指导性的文章,权当是抛砖引玉,希望能够大家不吝赐教,多多讨论。

对于程序设计,常常是有下面的一个过程:

1)给出了需求,对需求进行思考,考虑用某种结构去实现

2)对于结构的思考觉得可以满足了需求,开始程序设计

3)设计的过程中发现某些地方有效率问题、可行性问题、或者某些不能满足需求的问题 - 在当前的基础上进行修修补补

4)设计的过程中用户提出了一些新的需求 - 在当前的基础上进行修修补补

5)为了调试、测试的方便,在程序中的一些临时代码也忘了清除,使得程序看起来乱七八糟

6)重复2)3)4)的过程,直到看起来满目苍夷的程序完成需求,交付项目

7)过了半年一年,用户有了一些新的需求,或者发现了一些bug,当重拾代码时,发现代码已经不忍卒读了

每次经历这样的一次情况,内心中都有一种煎熬的感觉,觉得程序越写越背离了当初设计的初衷,代码连自己都不想去看,哪里能算优秀的程序呢。有时候觉得很懒,喜欢给自己找一些借口,比如项目做完了的时间可以学习一下其他的东西,看看论文什么的,或者说省一点时间去陪陪家人。其实设计和算法一样,都是非常有价值的东西,就像IPad和笔记本的比较一样,IPad就因为设计的新颖,和各处的精益求精,让全世界的人为之疯狂。

最近和同事进行讨论,自己也想了想,可以从下面的一些方面来学会如何进行良好的设计:

想要设计应该先去多看看别人优秀的代码,从代码中体会大师的设计。设计模式只是设计的一小方面,我觉得更重要的是类、函数的功能设计,让这些函数不管从接口上还是从内部的实现上,都是去做一些比较干净的功能。这样不管自己去写,别人去读,或者加入新的函数和类等,都更加方便。

对于一些书(比如Effective C++等)中间讲的知识不一定要生搬硬套的去使用,而可以从别人的代码中看看大师们是怎样用这些技巧的,比如imp指针这种技巧,我觉得就不适合在普通的接口中使用,这种技巧不同于人的直接思维,在原本简洁的借口后面包装了一个不太漂亮的“影子”。也不利于编码和理解、调试。

对设计,应该是跨越语言的范围的,对于不同的语言,也同样可以看到很多美好的设计,比如Java中非常多的开源项目就可以有很多可以去参考学习。比如我们目前正在做的分布式机器学习库就可以去参考一下Apache的Mahout,里面对问题的处理方式应该是一致的。对于同一种语言开发出来的程序,可以去看看语言的技巧如何正确的使用。

对测试,我个人习惯不太好,总喜欢在测试的时候加入一些cerr等代码,有时又会忘记了删除,让代码看起来会不太好看,对于单元测试,也不太清楚怎样去写良好的单元测试,这也是后面得去慢慢学习的内容。

对设计,应该是一个精心去雕琢的过程,尽量能够保持在自己能力内的完美,然后这也是日积月累的工作,没有捷径可走,只有多看多学才行。

如何进行良好的程序设计(1)相关推荐

  1. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  2. CUDA C++程序设计模型

    CUDA C++程序设计模型 本章介绍了CUDA编程模型背后的主要概念,概述了它们在C++中的暴露方式.在编程接口中给出了CUDA C++的广泛描述. 使用的矢量加法示例的完整代码可以在矢量加法CUD ...

  3. 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...

    全国高等农林院校"十一五"规划教材 C语言程序设计 孙力 主编 中国农业出版社 内容简介 本书是全国高等农林院校"十一五"规划教材之一. 全书共11章,分别介绍 ...

  4. c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...

    12月12日,郑州工程技术学院副院长甘勇一行莅临我校讲学和指导工作.黄河交通学院评建办公室主任汤迪操.教务处处长贾宗璞,智能工程学院领导班子.主任及骨干教师参加了本次会议,会议由智能工程学院党总支书记 ...

  5. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  6. 《Java程序设计》第十一周学习总结

    20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...

  7. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  8. 20172324 2018-2019-1《程序设计与数据结构》实验2报告

    20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  9. 20172329 2017-2018-2 《程序设计与数据结构》实验五报告

    这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...

  10. c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...

    C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...

最新文章

  1. Android 获取apk签名的fingerprint
  2. 解决Parameter ‘__frch_item_0‘ not found. Available parameters 问题
  3. linux 进程参数文件 /proc/pid/cmdline 简介
  4. kotlin 一个加号引发的血案
  5. Sublime插件开发 启动Anaconda并运行对应Python脚本
  6. MySQL(一)——安装、创建数据库表、DML语言
  7. Idea问题:“marketplace plugins are not loaded”解决方案
  8. Apache应用实例:建立yum服务器
  9. ADO.NET 核心对象简介
  10. 09-排序1 排序 (25 分)
  11. 获取线程名称 java 1615387415
  12. MySQL sql_model问题研究
  13. 统计进仓和出仓数量随时间变化的剩余数量流程图
  14. 优秀博客 --敏感词汇过滤
  15. informix(南大通用)sql语法的差异
  16. 搭建内网文件共享服务器,如何搭建共享服务器实现办公室文件共享?
  17. Prizmo Pro for Mac(OCR文字扫描识别软件)
  18. 一些文字游戏....
  19. Linux【shell】 shell编程
  20. 001-ps怎么制作透明图片

热门文章

  1. 使用C#获取IP地址方法
  2. 【10】48. Rotate Image
  3. JavaScript闭包小窥
  4. 题目1076:N的阶乘
  5. AndroidOS体系结构
  6. 关于自动增涨外链的畅想
  7. 解决问题 “You don't have permission to access /index.html on this server.”
  8. 操作系统实验报告16:CPU 调度
  9. App设计灵感之十二组精美的外卖App设计案例
  10. LeetCode Algorithm 1566. 重复至少 K 次且长度为 M 的模式