瞎扯淡 追求优雅的代码是一条绝路?

edokeh · 2012年10月30日 · 最后由 heliang7 回复于 2012年10月31日 · 4235 次阅读

今天在公司开瞎扯淡会,聊到最近的工作,我提到说最近发现了一些新的用法,更优雅一些,改天推广给大家,旁边一个同事插话说:追求优雅的代码,就是一条绝路啊!

回来想了好久,追求优雅的代码,意义在哪里?收益在哪里?是否是浪费时间?是否值得? 元芳,你怎么看?

在公司写得代码,到后期,不指望质量能有多高,迫于进度压力,看起来能就行了,毫无成就感。

倒是自己的业余代码,是自己的狗狼的话,会不时重构一下。

人的审美不一样啊,在张三眼里很优雅的代码可能对李四是一种折磨在李四眼里可能很丑陋

匿名 #3 · 2012年10月30日

后面接手的人擦屁股的次数就知道代码是否优雅了。

不管白猫黑猫,抓到老鼠就是好猫。。。

饭是用来吃还是用来看的? 色香味俱全是一句空话么

#2 楼 @gaicitadie 那设计师这个职业可以消失了

匿名 #7 · 2012年10月30日

#2 楼 @gaicitadie 我觉得你是一个很有思想的人

#5 楼 @karma 设计师设计作品是给外行看的,同行不一定没有分歧。ruby 的优雅是给搭档看的

想起松本行弘那本书里面的一段,大意是 Matz 做项目前要起名字,后来发现那些名字起的好的项目基本都成功了,不成功的基本上都是名字起得不好的

#8 楼 @gaicitadie 设计师会认为外行完全不懂艺术,所以也不会做外行认为好看的艺术,他们最满意的作品一定是能另他们自我陶醉的;外行认为一个东西好不好看和他是不是外行也没有关系

#3 楼 @imsoz +1 !!!!! 擦屁股压力很大

#10 楼 @karma 视觉和代码的优雅是两回事,设计师的作品外行只需要欣赏就可以了。“代码优雅实现方式” 需要耗费精力去读甚至专门抽出来时间学习,让别人顺着你的思路去 “think different”,给个理由先?

设计出优雅的视觉效果是不需要花费时间学习并且不用的花费精力的?

就连骑自行车这么简单的事儿都能产生那么多的花样,代码为什么不能写的优雅? 极端来说即便人和人的审美毫无交集, 代码就可以随便乱写了吗?

#13 楼 @karma 设计师需要,外行大众不需要,俗人一眼就能看出来苹果手机好看。如果苹果手机还得先学习设计模式、美学才能用,谁还敢买?除了所谓的 geek 们。这还是满足了一个前提:苹果手机真的优雅。

前几天看到一个帖子讨论怎么重构这样的代码

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @news }
end

还有人提供了很多优雅的方案,用函数调用的方式渲染模板,这种所谓的优雅纯粹就是添乱。在作者的眼里,重构后的方案才是优雅的

#15 楼 @gaicitadie 即便你的同行没学习过设计模式他也能一眼看出你代码的好赖,你费尽心思实现的优雅,即便在他看来并不美,也比你随便写一坨丢给他好的多。 至于你列出的那段的代码,相信也是经过作者打磨重构出来的,实现了作者自认为的优雅;你所举的例子里不能说明代码该不该优雅,只能说能代码或许不该过度 “优雅”,不管是内行还是外行都知道这叫造作。 最后,你对例子的描述是不是有些逻辑的不通顺?

#16 楼 @karma “真正的优雅” 和 “过度的优雅” 由谁来裁决?在你眼里,所有应该的都叫 “优雅”,所有不应该的都叫 “造作”。还“不管是内行还是外行都知道这叫造作”,一下子就把内行和外行都给代表了。

#17 楼 @gaicitadie 谢谢你把我都代表了 update: 不小心点开了你的 twitter, 我觉得和你对话就是个错误, 所有发言已删除,请无视掉我

楼主不用担心自己是少数 愿意思考如何写出优雅代码的人比那些认为优雅代码没有意义的人成为更优秀的程序员的可能性大得多 当然从历史上看,成为优秀程序员的本来就是少数

If I have more time, I would write a more clear reply. -- :)

更多的时候,优雅本来就是自己的追求。你什么时候见过真正优雅的人担心别人觉得自己不够优雅的?

代码第一需要正确, 其次就是追求那个优雅了...

优雅没有统一的标准, 以衣服做类比的话, 我觉得"少"可以称优雅... 以信息论测量的话, 我觉得如果两段代码作用一样, 熵低的可以称优雅: 写起来不费劲, 读起来也轻松, 改起来也无鸭梨.

而我刚好有一段估算熵的脚本 ---- entropy.rb 哦!!! (你需要准备一个小词典, 这个词典应包含一些常用词和一段 matz 写的 Ruby 代码)

#! /usr/bin/env ruby
require 'zlib'
DICT = DATA.read
def zlen(s)
  z = Zlib::Deflate.new
  out = z.deflate(DICT + s, Zlib::FINISH)
  z.close
  out.bytesize
end
puts zlen($stdin.read) - zlen('')

__END__
下面的内容就是词典了

使用法:

entropy.rb < your_code.rb

Linus 大神说过:烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系

#22 楼 @williamherry 那是因为他们已经脱离了关心代码的层次了吧..而不是说他们不需要经历这个阶段.

噹噹噹噹,送给追求优雅的男淫们

simple is better.

我倒是觉得破窗理论的原因,还是要常常重构代码。优雅和 simple 之间找到平衡。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册