说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

论程序员的自我修炼

HTML文档下载 WORD文档下载 PDF文档下载
软件开发是个挑战,尤其是对于那些完美主义的程序员。为了想要成为更好的程序员,总会开发出一些特别的功能,在软件设计上想要做到零瑕疵,但事实上,完美的软件设计是根本不存在的,试着让你的软件“足够好”就好!

软件开发是个挑战,尤其是对于那些完美主义的程序员。他们需要制定大量的决策以及许多问题的解决方案,这对于有些人来说会感到很难。当然,你可以在线搜索到最佳实践方案或在StackOverflow上提问。但即便你找到了想要的答案,也未必能让你感到满意。你怀疑这个设计是否完美,事实上,真正完美的设计几乎为零。

设计难题接踵而来

想彻底解决设计难题是不可能的。这是因为每个需求都会浮现在你的脑海里,你会遇到设计领域里最大的挑战,比如选择数据还是表示层。我是使用MVC还是MVVM?哪种OPM工具适合我?我该如何处理多个数据库?等等。每个问题都会让你不知所措,并且所遇到的设计问题也在日益增长。每走一步都会使你觉得像是有座大山摆在你的面前。不堪负重的感觉让你想要逃避或者拖延解决问题的时间。但拖延并不能解决问题。

解决类似这样的问题最好的办法就是(Divide & Conquer)拆分 & 克服。你必须暂停思考脑海中的所有系统问题,试着将设计拆分成细小的模块,并且一个一个的查看可以做哪些简单的模块。如果可能的话,选择迭代开发方法。这样你就可以将思维专注在设计障碍上 ,那么你就能看到多个小山丘而不是整座大山浮现在你的脑海中。

此外,不要花费太多的时间来选择工具或者API或者规则引擎。这些工具仅仅是为了让我们工作起来更加轻松。相反地,把更多的 时间放在设计原理上,比如关注分离(Separation of Concerns)。SoC(系统芯片)会允许你改变任意软件层或者不影响其他系统的软件工具。

TDD(软件测试驱动开发)会让你鼓足勇气,让你在软件行业发生质的改变。不要忘了,在设计上花费的时间是远远不够的,正如Steve McConnell 在Code Complete这本书中所说:

“When areyou done [designing]? Since design is open-ended, the most common answer tothat question is “When you’re out of time.”


需求变更

为了生存,你的客户或者公司必须适应变化。而这就意味着需求将发生变化。你不可能只编写一款软件就能满足未来所有的需求。总会有些新的需求时不时的跳出脑海中。所以,不要试图掩盖未来的需求,尝试去编写满足目前需求的软件。

不要过量设计

如果你花费数天时间来开发某个特别的功能,而这个功能一年里为你的客户只减少五分钟,那么实际上你的工作是无用的。我能理解,有时我们无法阻止自己做出一些特别的改变,因为它似乎使我们觉得像是一个更好的程序员或者只是为了好玩而已,但是考虑到成本/效益,时间是宝贵的,把时间花费在其他方面或许会更好。


简洁原则

简化,当你需要存储某个对象到系统文件时,没有密集型的工作或者特别需求,编写一个自定义对象序列化是毫无意义的。我看到有些设计从工程学角度来看,它们像是杰作,但它们过于复杂。你不应该让你的设计过于复杂。有时,最好的解决方法就是简单。因此,请保持 KISS原则。

相信自己,鼓足勇气

设计其实是为了检验程序员成果的好坏。不同的程序员可拿出不同的设计思路。因为没有单一的解决方案,这可能会导致你为某个特性搜索所有的最佳方案, 但这并不意味着你应该停止学习或聆听他人的想法。在设计过程中,不是学习所有最佳实践就能适合你的问题。相信自己,做最好的设计,实施自己的设计思路。

重构是个非常好的做法。当出现坏代码时,试着用重构的方式来解决。从错误中学习,它将有助于你未来设计。


没有完美的设计

无论你做什么,最终都会以一款无法令你满意的软件而告终。正如 Hunt and Thomas在《The Pragmatic Programmer》中写道的:

“完美的软件是不存在的。在计算机历史上,没人设计出完美的软件。这是不可能的,也许你是第一个,除非你不接受这个事实,而浪费时间或者精力去追逐一个不可能实现的梦想。”

我很抱歉,但他们是对的。不要去追逐一个不可能实现的梦想,试着让你的软件“足够好”就好!

英文出自: Thingstocode

C#使用ICDBurn实现CD刻录 验证码识别基础方法及C#/.NET源码 傲逆软件CEO周鲁:核心游戏精神,在移动游戏创作中传承 Kim Dotcom推出新文件存储服务平台Mega 用户数一天达百万 美FCC:希望全美在2015年部署千兆以太网 iOS和Android双平台:帷千动媒SDK 3.0发布 移动周报:2013年移动App设计13大精髓 构建高可扩Web架构和分布式系统实战(下) API设计的十大最差和五大最佳实践 Hadoop:为什么RAID-0不行? 电子前沿基金会:实现互联网自由需翻越5座大山 安全无小事:2013年最令人期待的15家安全公司 移动电商:更喜欢用HTML5代替原生APP Talkingdata行业预警:移动游戏正在变成红海 微软无视W3C 拒绝遵循WebRTC标准 Linux下使用MongoDB+GridFS实现备份作业的优化和监视 AWS建新数据中心 老用户获益不易 铜导线退出历史舞台 激光传导速度将达100G bps 大众点评推出首个O2O开放者平台:高德、盛大加入 从APM角度上看:NoSQL和关系数据库并无不同 新浪微博商业化:大树底下真的好乘凉吗? 亲爱的GitHub,我们怎么访问不了你? 经典神作《魂斗罗》iOS版今日上线 专访最强夫妻店:“神庙逃亡2”开发背后的故事 我们做错了什么?3周了,一毛钱也没赚到! 开源产品系列:简单强大的模板语言JSON Template 十年历史的KDE bug修复 为什么函数式编程在Java中很危险? Android平台获X11协议支持,手机变身绘图板 Rackspace通过OpenStack和定制OCP服务器节省40%成本 美国人是如何利用大数据的应用来防止流感的蔓延 怎样得到DBGrid 中某一单元格的Focus,因为我要处理这样的问题,在DBGrid中输入的数据如果不正确,则focus不能离开此单元格。 VB中的Byte型数据在PB中是什么类型? 动了枪的青马 在sco unix 5.05的分区问题 help! where could I download NT serve pack 6.0 那位高手知道在solaris编程中,如何在按钮上加载图片? 我怎样发布自己的servlet 怎样确定对象类图的中类? 可以帮我解决一个关于linux的问题吗? 熟悉文件操作的高手请进来坐一下。 +++++++关于MS SQL SERVER2000的注册服务器问题+++++ 考过scjp的进去看一眼 请问DTD是不是将要为XML Schema所代替???现在主要哪一个呢? XiaoFang(奇奇) 你在哪里,十分感谢,再送100分! 关于输入框中输入空字符串的判断 zork(我是一条鱼……) 说明白些呀,用http代理怎么上qq? HK的书店 求教:关于CRC校验的问题 问题:有关查询结果排序. 为什么我用的是LoadString函数而编译显示错误时显示LoadStringW函数。两个有什么区别? 请问这个错误提示是什么意思呢?谢谢! OCI中的类型转换 麻烦大家看看下面的代码对吗?能否用MSChart显示MSHFlexGrid中指定的行(上下)和列(左右),谢谢谢谢 如何用vector做一个二维数组。如int a[4][4]的。该怎么做 仰天长笑,号称CSDN(“中国”软件开发网),却。。。 鼠标移出当前窗口时显示MessageBox如何做? 操作系统为solaris如何配置才能上internet网? 大虾留步! 根据日期查询数据库的问题(当天结账)急! 请问怎么去打开一个SQL SERVER的数据库,求救 怎样修改注册表? 如何把程序编译为只有一个EXE的文件?(对不起,我的分发光了!) OCP 试题之一 EhLib里TDBGridEh控件的SaveBookmark方法有何作用? 编程不需要创新,我同意 有一个朋友向我要类描述的rose表示的例子,我已经做好了,并上传到下面的网址上 福州的程序员请进................ 如何执行一个*.txt文档中的语句? 怎么在一个button被点击时,播放一段声音呢? OCP 试题之二 怎么用jb5创建一个corba工程? 怎么才能让程序永远在最前面 送分 请问乙肝表面抗原阳性(最最轻的那种,不是小三阳),进外企要不要?作公务员要不要紧?谢谢 怎么样才能处理像VB中的TREEVIEW中的NODECLICK的事件? 我想了解一下国内有多少公司用rose ASP500错误该怎么处理呢?新手请高手赐教!!本人在IIS的根目录下面访问HTM不会出现错误,但是在根目录下面建了虚拟路径有就出现了500错误。为什么? 每一个开发人员都应该拥有的东西 老问题:如何获得鼠标IBEAM的Handle? 用GetCursor()只能获得当前鼠标的Handle. 请问有法律高手在吗?急需要帮助,谢谢。 公里等于多少m每s 形容人的话特别多 有哪些词语?词语或者短句 要精悍. 刚接触滤油机,请问 滤油机中真空滤油机、离心式滤油机的工作原理以及两者间的区别.一般油品选择滤油机时,选择的标准有几个.但是俺要的是详细点的工作原理的过程(比如整个的离心式 植物油与动物油相比哪一种食用油更好呢?您又是比较钟爱于哪一种食用油呢? 390m/s等于多少千米每小时 词 形容以前说过的话个 语文阅读“以……为题有什么好处”这类题的答题步骤和方法? 16公里/小时等于多少m/s 1厘米=( )亳米 急求高考语文做试卷方法与技巧 我最重要的做题顺序不对··老是时间不够··请求帮助· 1500m/s等于多少千米每小时 形容说出的话有分量的词语有那些? 1-3/4-3/25等于多少? 板式滤油机、重庆港能滤油机的板式滤油机有什么功能? 1亳米等于多少丝 列两元一次方程一张桌子由桌面和四条桌腿组成,1立方米木材可制作桌面50张或制作桌腿条350.现有11立方米的要木材,问应如何分配木材,可以使桌面与桌腿配套,共能配成多少张桌子 教你如何在购买榨油机时选购好的榨油机 中国是五大经济特区:汕头、深圳、厦门、珠海、海南为什么汕头那么落后呢? 小数除法怎么算过程 榨油机级别是啥意思 20题,求图求解释,学霸大人在哪里 现在火车上让带白酒吗?最多可以带多少? 最善良的话——()言()语还有最恶毒的话——()言()语 中国现在总共有几个经济特区?除了广东的珠海、深圳、汕头,福建的厦门、海南省以及新疆喀什以外还有吗? 怎样才能在新课程背景下实施语文有效教学 最善良的话是什么言什么语成语 学霸,这题怎么做?求图 求文档:语文新课程实践与探究丛书(人教版)八年级上答案 趣填“说”“话”成语 最善良的话-——()言()语 1979 年以来,我国先后在深圳、珠海、汕头、厦门和海南省设立了经济特区,这种经济特区属于A. 自由贸易区 B. 保税区 C. 自由边境区 D. 多种经营的经济特区 语文七年级上人教版新课程实践与探究丛书语文七年级上人教版新课程实践与探究丛书24课答案 说了很多的话( )言( )语急 深圳,珠海,厦门,汕头,海南经济特区各成立于什么时候 新课标语文实践天地五年级17页3题怎么做?谢谢! 请问花生油自动油渣分离机过滤后的净油为何含有水份炸油有响声,问油能存放住吗? 深圳、大连、天津、浦东、珠海、青岛、温州、汕头、广州、上海、海南、烟台、厦门、珠江三角洲属于经济开发区 / 经济特区 / 沿海对外开放城市的是?题上没写 浅谈在新课程标准下如何开展语文阅读教学 离心式滤油机甩出来的油渣能榨出油吗 形容说了很多话的词语:( )言( )语越快越好! 4/5一3/5等于多少 变压器油滤油机~过滤型滤油机~变压器油真空滤油机?国内哪个品牌好? 形容话很多的词语 语 人到最后都是三尺六长,两尺六宽,地下十米,手里一把砂.最重要的是,这把砂,曾经跟我们一起过. 滤油机价格——液压油专用滤油机——重庆港能滤油机制造有限公司 形容话很多的四字词语:( )言( )语 花生油滤油机哪种过滤效果最好? 0.99的循环大还是1大 形容很多的语言 ( )言( )语 6寸多少米 谁能告诉我1大还是0.99的无限循环大 话多用什么词形容 板框板框滤油机的工作原理? (1)和(0.99的循环)那个大 引用一个女人恶毒用什么词语形容 三丈三尺折合多少米? 形容男性很像女的话用什么词形容他的美?他的美不是人妖的美,而是像小说、漫画里的人物很自然的美.形容的地方如:五官、身型、动作、气魄(注:不是人妖那种的气魄,比较自然) 滤油机,真空滤油机,板框滤油机.哪家好? 离心式滤油机滤出花生油为什么会臭油 1.2厘米=多少亳米 重庆真空滤油机 重庆高效真空滤油机 重庆双级真空滤油机 价格是多少?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn