如何进行良好的程序设计(1)
关于程序设计,掐指算来也写了快有十年的程序了,之前很长的一段时间都是以算法类的竞赛为主,对于程序结构的设计,总是胡乱写写,能跑通就算ok了。来公司后, 接触了一些大一点的项目的设计,设计的重要性就凸现出来了。
为了更好的设计(不能说到完美,但是至少不要把自己和用户弄晕),我写点自己的一些感悟(有自己思考的,也有和公司的前辈讨论得到的),不能说本系列是一篇指导性的文章,权当是抛砖引玉,希望能够大家不吝赐教,多多讨论。
对于程序设计,常常是有下面的一个过程:
1)给出了需求,对需求进行思考,考虑用某种结构去实现
2)对于结构的思考觉得可以满足了需求,开始程序设计
3)设计的过程中发现某些地方有效率问题、可行性问题、或者某些不能满足需求的问题 - 在当前的基础上进行修修补补
4)设计的过程中用户提出了一些新的需求 - 在当前的基础上进行修修补补
5)为了调试、测试的方便,在程序中的一些临时代码也忘了清除,使得程序看起来乱七八糟
6)重复2)3)4)的过程,直到看起来满目苍夷的程序完成需求,交付项目
7)过了半年一年,用户有了一些新的需求,或者发现了一些bug,当重拾代码时,发现代码已经不忍卒读了
每次经历这样的一次情况,内心中都有一种煎熬的感觉,觉得程序越写越背离了当初设计的初衷,代码连自己都不想去看,哪里能算优秀的程序呢。有时候觉得很懒,喜欢给自己找一些借口,比如项目做完了的时间可以学习一下其他的东西,看看论文什么的,或者说省一点时间去陪陪家人。其实设计和算法一样,都是非常有价值的东西,就像IPad和笔记本的比较一样,IPad就因为设计的新颖,和各处的精益求精,让全世界的人为之疯狂。
最近和同事进行讨论,自己也想了想,可以从下面的一些方面来学会如何进行良好的设计:
想要设计应该先去多看看别人优秀的代码,从代码中体会大师的设计。设计模式只是设计的一小方面,我觉得更重要的是类、函数的功能设计,让这些函数不管从接口上还是从内部的实现上,都是去做一些比较干净的功能。这样不管自己去写,别人去读,或者加入新的函数和类等,都更加方便。
对于一些书(比如Effective C++等)中间讲的知识不一定要生搬硬套的去使用,而可以从别人的代码中看看大师们是怎样用这些技巧的,比如imp指针这种技巧,我觉得就不适合在普通的接口中使用,这种技巧不同于人的直接思维,在原本简洁的借口后面包装了一个不太漂亮的“影子”。也不利于编码和理解、调试。
对设计,应该是跨越语言的范围的,对于不同的语言,也同样可以看到很多美好的设计,比如Java中非常多的开源项目就可以有很多可以去参考学习。比如我们目前正在做的分布式机器学习库就可以去参考一下Apache的Mahout,里面对问题的处理方式应该是一致的。对于同一种语言开发出来的程序,可以去看看语言的技巧如何正确的使用。
对测试,我个人习惯不太好,总喜欢在测试的时候加入一些cerr等代码,有时又会忘记了删除,让代码看起来会不太好看,对于单元测试,也不太清楚怎样去写良好的单元测试,这也是后面得去慢慢学习的内容。
对设计,应该是一个精心去雕琢的过程,尽量能够保持在自己能力内的完美,然后这也是日积月累的工作,没有捷径可走,只有多看多学才行。
如何进行良好的程序设计(1)相关推荐
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- CUDA C++程序设计模型
CUDA C++程序设计模型 本章介绍了CUDA编程模型背后的主要概念,概述了它们在C++中的暴露方式.在编程接口中给出了CUDA C++的广泛描述. 使用的矢量加法示例的完整代码可以在矢量加法CUD ...
- 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...
全国高等农林院校"十一五"规划教材 C语言程序设计 孙力 主编 中国农业出版社 内容简介 本书是全国高等农林院校"十一五"规划教材之一. 全书共11章,分别介绍 ...
- c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...
12月12日,郑州工程技术学院副院长甘勇一行莅临我校讲学和指导工作.黄河交通学院评建办公室主任汤迪操.教务处处长贾宗璞,智能工程学院领导班子.主任及骨干教师参加了本次会议,会议由智能工程学院党总支书记 ...
- php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例
本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...
- 《Java程序设计》第十一周学习总结
20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...
- 20175320 2018-2019-2 《Java程序设计》第2周学习总结
20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...
- 20172324 2018-2019-1《程序设计与数据结构》实验2报告
20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...
- 20172329 2017-2018-2 《程序设计与数据结构》实验五报告
这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...
- c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...
C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...
最新文章
- Android 获取apk签名的fingerprint
- 解决Parameter ‘__frch_item_0‘ not found. Available parameters 问题
- linux 进程参数文件 /proc/pid/cmdline 简介
- kotlin 一个加号引发的血案
- Sublime插件开发 启动Anaconda并运行对应Python脚本
- MySQL(一)——安装、创建数据库表、DML语言
- Idea问题:“marketplace plugins are not loaded”解决方案
- Apache应用实例:建立yum服务器
- ADO.NET 核心对象简介
- 09-排序1 排序 (25 分)
- 获取线程名称 java 1615387415
- MySQL sql_model问题研究
- 统计进仓和出仓数量随时间变化的剩余数量流程图
- 优秀博客 --敏感词汇过滤
- informix(南大通用)sql语法的差异
- 搭建内网文件共享服务器,如何搭建共享服务器实现办公室文件共享?
- Prizmo Pro for Mac(OCR文字扫描识别软件)
- 一些文字游戏....
- Linux【shell】 shell编程
- 001-ps怎么制作透明图片
热门文章
- 使用C#获取IP地址方法
- 【10】48. Rotate Image
- JavaScript闭包小窥
- 题目1076:N的阶乘
- AndroidOS体系结构
- 关于自动增涨外链的畅想
- 解决问题 “You don't have permission to access /index.html on this server.”
- 操作系统实验报告16:CPU 调度
- App设计灵感之十二组精美的外卖App设计案例
- LeetCode Algorithm 1566. 重复至少 K 次且长度为 M 的模式