[讨论] Clean Code vs Efficiency

楼主: gitignore (git)   2016-05-25 08:25:42
最近上班在思考这问题
假如今天有个 O(log n) 的方法可以写出一个东西
但是程式码无法简化 以后维护的人应该也会很痛苦
因为不直观
另一个就是程式码非常简洁 但就一定是O(n) 甚至 O(n^2)
不知道大家会倾向于哪种?
我个人是比较喜欢clean code 因为过一阵字自己回来维护也比较快上手
但是感觉在学校学这么多 就是要能写出效率较好的程式码
作者: leafwind (莉芙温)   2016-05-25 08:30:00
模组化加详细算法文件,让后人决定要不要改。我觉得跟 clean 冲突的通常是开发时间而不是执行效率
作者: landlord (91)   2016-05-25 08:38:00
O(log n), 然后职责拆分出去,替他写足单元测试
作者: hungys (hungys)   2016-05-25 08:58:00
如果是 critical 的 operation 当然是用 O(log n)
作者: atst2 (atst2)   2016-05-25 08:59:00
现实情况是,clean跟不是clean的效率差通常只是O(log n)与O(log n)+C的差而已差到级数不一样的时候,连算法都不同了,来讨论clean不clean的根本没有意义
作者: sextitanic   2016-05-25 09:14:00
如果很频繁使用到就用比较快的写法,然后写说明文件
作者: hichcock (快乐一整年 ^^~~~)   2016-05-25 09:16:00
想都不想...一定选 logn 的, 个人习惯
作者: atst2 (atst2)   2016-05-25 09:20:00
如果是指像iteration vs. recursion这种情况的话我会写明这是某种recursion算法的iteration版本
作者: ssccg (23)   2016-05-25 09:21:00
程式只要让人看的懂在做什么就好,不用看的懂那个算法的
作者: atst2 (atst2)   2016-05-25 09:21:00
之后要维护的人,应该自己要有能力去确认.
作者: meowyih (meowyih)   2016-05-25 09:29:00
假议题, 要用哪种算法要用文件说明, 不是让人看 code自己理解的 = =a
作者: leafwind (莉芙温)   2016-05-25 09:34:00
我还是觉得这跟 clean code 无关
作者: neotek   2016-05-25 09:45:00
用efficency的解法然后写doc阿*efficiency
作者: BlazarArc (Midnight Sun)   2016-05-25 10:03:00
算法不是用code来理解的 你要先profile瓶颈如果不是瓶颈你用效率差但是容易懂的根本无关紧要瓶颈的地方就是用比较好的算法加上文件
作者: MysterySW (飯糰丸)   2016-05-25 10:15:00
第一个想到的是temmplate programming 编译出错的讯息难以言喻 有些语法错误甚至要执行才会出现
作者: qrtt1 (有些事,有时候。。。)   2016-05-25 10:18:00
附上文件的连结啊,有时候使用到特殊的公式,都直接附 url
作者: sopoor (爱染秋雨醉笺札)   2016-05-25 10:18:00
我觉得程式的重点是后续维护,再来才是效能
作者: yr (Sooner Born Sooner Bred)   2016-05-25 10:40:00
看 n 多少啊 XD
作者: Yshuan (倚絃)   2016-05-25 11:13:00
data多大?效能不好的点老板接受度?
作者: johnny94 (32767)   2016-05-25 11:33:00
这跟clean code 无关+1
作者: coronach (...)   2016-05-25 11:51:00
看n多大,nˋ真的很大那就是效能优先然后好好写文件注解
作者: CRPKT (crpkt)   2016-05-25 12:17:00
一楼正解,单元拆好你高兴实作两套也没问题
作者: elements (Helianthus annuns)   2016-05-25 12:20:00
case by case,该怎么决定要靠经验
作者: er230059 (CQH)   2016-05-25 13:31:00
O(log n)也可以clean code啊
作者: ripple0129 (perry tsai)   2016-05-25 13:35:00
没有必要极端化啊,舍弃部分效能换取可读性,或反之。个人觉得这问题是类比的,不是数位的非零即一突然发现log n到n交界点似乎是有点非零即一XD
作者: yyc1217 (somo)   2016-05-25 14:50:00
看n多大+1
作者: TeaEEE (爱不趴 不爱趴)   2016-05-25 17:30:00
这个问题就像问你选择爱情还是面包
作者: Hikkiaholic (= =a)   2016-05-25 20:57:00
真正效率瓶颈不在code 在人 开发效率才是重点选哪个? 选存在的那个还没写出来的东西就是不存在
作者: sarafciel (Cattuz)   2016-05-25 21:57:00
会跟时间复杂度放在天秤上取舍的一般是内存用量,而不是clean和重构执行的难易度 因为要影响到维护难度的层次是整个软件的结构大小 而单个算法通常是不会写到这么大量的结构去支持他运作的 如果有 那我会去买人家的library来用(X)
作者: ns1234 (FAR)   2016-05-25 22:22:00
跟clean code 无关+1.
作者: ACMANIAC (請肥宅救救肥宅)   2016-05-26 01:51:00
这问题可以很明确的,好比如果程式有 99% 的时间耗在其他部份,只有 1% 时间耗在你的算法,这时候你把它从 O(n) 写到变 O(log n) 拿不到显著的好处。很多时候问题会是出在软件开发速度和维护性上。
作者: CLFJ   2016-05-26 04:25:00
如果最多只有500笔资料要处理,你写成O(n^5)都没有关系...
作者: dreamnook (亚龙)   2016-05-26 09:11:00
看N多大+1
作者: doranako (真爱无限)   2016-05-26 09:44:00
算法跟clean code应该无关,还是指程式执行时间?
作者: sysc (和平时多准备)   2016-05-27 20:56:00
一定是O(logn) clean code 是误导用的好效率的code 看不懂的人是他自己的问题 理解力不足现在这时代最需要的是有效率可以最正确达成效果的现在最需要的是不管怎么混乱的code 都能够用极快速度理解的能力这才是对的不能期待每个地方的法则都是要维持code看起来漂亮有些地方要的是极快速 但是不看图无法理解的做法
作者: kyuudonut (善良老百姓)   2016-05-28 12:07:00
binomial heap跟Fibonacci heap写起来都很复杂 相对于隔壁的binary heap......
作者: zanyking (最后的六年级生)   2016-05-28 12:54:00
CleanCode != easyCode成人写文章不能还在this is a boo
作者: feeya (24 August 升格为乡民)   2016-06-13 14:36:00
两个都写 把不用的那一个注解掉 但是留着以后维护弹性多了 选择题比申论题好写多了

Links booklink

Contact Us: admin [ a t ] ucptt.com