作者H45 (!H45)
站内Programming
标题Re: [请益] 程式该怎麽越写越好呢
时间Mon Sep 7 07:07:35 2009
※ 引述《realmeat (真肉)》之铭言:
: ※ 引述《amppp (Monte-Carlo)》之铭言:
: : 我的感想:
: : 程式是逻辑思考的实现,是可以被数学化的,所以写程式应该要像写证明一般
: : 简洁清楚,虽然我也想一行程式只做一件事情,但是平行计算程式往往不能这样
: : ,这是序列式程式(serial code)才比较容易达成的。
: : 我的目标一直都是以最短程式码,可改变性程式码为目标。
: : 不断地练习,清楚的逻辑思考,进而建立自己写程式的习惯,好的习惯不会让自己
: : 陷於无穷debug回圈。程式写久了,新的程式只是剪下贴上间就完成了。
: 我的目标则是
: 程式码当中不使用到一行注解, 就能让别人了解你写的程式
程式码只能描述程式要做的事情,无法描述程式为什麽要做这些事。
描述程式码运作的原理与原因必须写在注解或外部文件
如果没有写这些额外的说明
就算其他人看懂程式每一个步骤,也没有办法完全理解其意义
举例而言:
window = create_window( image );
pixels = collect_pixels_from( window );
difference = calculate_difference_from( pixels );
similarity = infer_similarity_from( difference );
filtered_pixel = convolution( pixels, similarity );
上面五行简单的程式段落,看英文就知道
第一步是从 image 建立 window
第二步是从 window 收集 pixels
第三步是从 pixels 计算 difference
第四步是从 difference 推论 similarity
第五步是将 pixels 和 similarity 做 convolution 运算
程式码非常清楚地把程式做的事情写明白了,但是外行人没做过影像增强根本不懂为什
麽要做这些事情。
首先,为什麽要建立 window? window 是什麽? 做什麽用的? 看实作细节可能会懂
但是还不如直接在上面写些注解
// window 是 image 的某一小块区域,用来圈选增强单一像素所需要考虑的范围
再来,为什麽要收集 pixels?
// 收集 pixels 了解像素之间的关系,动态且适应性地决定每个像素对增强结果的
// 重要性。
然後,为什麽要计算 difference? 为什麽要推论 similarity?
为什麽要做 convolution? 整个流程到底试图完成什麽事情? 其目的是什麽?
这些事情并不是以变数命名或是函数命名就可以轻松交代的
仍然有很多事情,像是设计样式、多绪陷阱、演算法注记、TODO、FIXME、……等
还是得靠注解和文件帮忙补完
如果有那种完全没有注解与说明文件的程式码维护两年以上的
请务必告知我。
: 要做新的东西, 需要运用原本所写的功能
: 只要把档案搬过去就能work, 做到模组化
: 程式写到现在 感觉只是对不同的资料进行处理
: 看最底层只是 许许多多的指令, 按照自己设计的动作排序好
: 没有啥需要被证明的
: 对我来说真正的课题 则是在程式码的可读性以及可移植上才是重点
可读性和可移植性我也认为很重要
问题是,在完成了足够的可读性和移植性之後
是不是再补上一些注解和文件会更好呢 :D
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.33.235.24
1F:推 bondalin:这篇中肯!218.168.193.212 09/07 08:34
2F:→ ykjiang:立意是不错,但这个例子不好, 218.167.64.111 09/07 12:06
3F:→ ykjiang:此例注解应该指引该参考的文献即可 218.167.64.111 09/07 12:06
4F:→ ykjiang:背景知识只要引用来源即可, 218.167.64.111 09/07 12:07
5F:→ ykjiang:作者自创的东西才需要写进驻解里 218.167.64.111 09/07 12:08
6F:→ neverfly:以上一篇的思维,应该会希望你把程式抽出220.136.221.204 09/07 18:26
7F:→ neverfly:然後放在一个叫function_do_xxxx()的函式220.136.221.204 09/07 18:26
8F:→ neverfly:不过我觉得这种方法,跟注解是同样的事220.136.221.204 09/07 18:27
9F:推 cgcheng:指的是我的思维吗?不全然,太刻意 61.229.216.201 09/08 02:53
10F:推 cgcheng:以这个例子,注解写 影像增强 的专用英文 61.229.216.201 09/08 02:57
11F:→ cgcheng:最多附上网址就算很详尽了 61.229.216.201 09/08 02:58