01 2009 档案
摘要: “叫我看看……”小P开始比较代码,“哦,在这个版本你用 game 代替了 queue,用 child 代替了 one, 但是有什么实质区别?”小P有些不解。
“嗯,这个是一个用问题域词汇编程而不是解决域词汇编程的例子,最大的优点是意图明确,容易理解,代码可读性强;另外一个好处是相对稳定——比如用 game 代替 queue——其一,评审代码的人可能会不明白这个queue是做什么的,为什么和下面的初始化函数格格不入,从而造成你频繁的回答大量的沟通性的问题,这将大大影响你生活的稳定性和质量;其二,如果我们将来——我是说如果——使用list数据结构来替换queue,避免了还要更改注释的风险——代码更新而注释陈旧,正是我们在进行项目开发时一个特别特别特别的n次幂严重的问题……而使用问题域的词汇,只要需求不发生变更,则我们就不需要修改什么而导致一些……代码人格上的分裂……”
阅读全文
摘要: “嗯,虽然理论上说只要保证你的代码缩进风格前后统一就可以了,但是在现实生活中我们不会也不允许千人千面,因为大家还是要互相交流的,让任何人去适应别人的缩进风格都是低效率和不公平的,因此形成了很多约定俗成的东西,哪怕它们不合理,但是它们的确形成了,而且你最好也遵守这样的规矩,如果你违背了这些东西,只能说明要么你是捣乱,要么你是绝对的新手。”
“哦?”
“这些有点像江湖黑话,如果你不是混江湖的,在打切口的时候闹了笑话,道上的兄弟一定会笑话你,新警察吧……”
“哈哈哈哈……”
“就我所知,目前江湖上有几种常用的黑话格式,K&R,BSD和GNU等,无论你采用哪一种,别人看了就知道你是道上混的,而且知道了你的山头,也就会高看你一眼……”
阅读全文
摘要: “我看不懂……”老P才看了30秒就决定放弃了。
“不会吧,我觉得我写得逻辑性还挺清楚的啊。”小P有些得意老C看不懂他写的代码,觉得可能自己写的逻辑过于高深了。
“……”老C沉默了半分钟,“这个不是C代码!”他肯定的说道,“所以我看不懂,也不想看懂。”
“?”小P有些奇怪,“这明明就是C语言写的代码啊,你看,我来给你解释解释……”
“哦,算了,这些根本不是C代码,我没有必要看懂。”
“那你说这些是什么?”小P有些不高兴了。
“这些是……”老C找着合适的形容词汇,“这些是猫爬过屏幕的脚印,我没有必要看懂脚印所代表的含义……”看到小P有些惊愕,然后开始有些生气,逐渐开始恼羞成怒了,老C赶快对他说:“呵呵,别生气了,我开玩笑的,不过,”老C的语气严肃起来,“这些的确是很糟糕的代码,哪怕它的算法多么高效,执行效率多么高,它都是糟糕的代码!”
阅读全文
摘要: “呵呵,”老C停止了和小P的说笑,觉得下午的疲倦一扫而空,“对了,刚才你在忙什么呢?”
“喔,我在做C++的练习题目。”
“是么?这么刻苦,厉害。什么题目?”
“呵呵,还挺有趣的,说是用C++的格式输出cout在屏幕上输出各种对齐的数据,用*号组成一个五角星,还有……”
“天,功不是这样用的,习不是这样学的……”老C有些囧,“扔掉那本烂书吧,没有这样学习C++的。”
阅读全文
摘要: “好像一段代码对其具体实现了解的越少,它的维护性就会越好?”小P有些猜测。
“呵呵,的确,那么我们通过各种不同的方法达到了什么样的看似相同的目的?”老C开始掉小P的胃口。
“信息隐藏?”小P不太确定。
“信息隐藏是手段,但不是目的。”老C很确定的否决掉小P,“我们达到的目的是控制问题的规模!”
老C觉得有必要给小P讲讲哲学:“我们写软件的目的是为了解决现实生活中的具体问题,没错吧?”
“没错,的确是这样,可是这个和C++有什么关系的?”小P觉得有些莫名其妙。
“那么你觉得使用高级的语言、先进的设计和合理的开发流程,问题的复杂度会降低吗?”
“那是啊,问题的复杂度当然会降低啊。”
“唉,错了,问题的复杂度不会降低的,因为问题的复杂度是客观存在,不会因为人主观的原因而改变!”
阅读全文
摘要: “*^*”小P看的有些眩晕,“我有些头晕,像晕车……”
“没有关系,只是你不熟悉罢了。”老C摸着下巴,“这就是我说的风格问题,因为思考问题的方式不同导致代码的风格看起一时难以接受而已。”
“哦?看来只是习惯问题?那么我再看看……”克服了晕车般的头痛,小P又看了几遍代码,感觉依照自己的C基础,看懂是没有问题的,毕竟自己还是很油菜的。“的确是习惯问题,但是为什么老C会这样思考问题呢?”小P想。
“因为信息隐藏……”
阅读全文