突然发现想在博客园发起一个有价值的讨论其实很难

为什么会有如题的感叹呢?
其实,我们本来只是想和大家探讨一下TDD in HTML & JavaScript的可行性和最佳实践.

首先想到用blog,可是,既然我只是想讨论,如果写一个blog一定很短,并且没有直接有价值的内容,所以,往首页放貌似是不合适的.但是不放首页其实没有几个人能看到的.就算我厚脸皮放到首页,也是很快就会被沉下去的.

那么,别的呢?

博问?看起来只是给新手问问题的?

小组?我不得不先加入一个小组,但是,我能发到多个小组吗?貌似不行,因为毕竟不是论坛的分类.好吧,就算我不介意选择一个小组加入.看看所有小组最近更新,最近6小时内只有8个回复.这样的整体活跃程度,我很难想象我期待的讨论能起到效果.

闪存?很推特,但是,很不合适讨论稍复杂一点的问题.

没有了.

 

//其实,我本来想给dudu发这样一个站内短信.但是打了不少字,发个短信觉得有点可惜了.所以,厚脸皮放博客首页一会儿和大家讨论一下吧,其实很快也就沉下去了~~ :]]

posted @ 2010-07-10 20:56 Teddy's Knowledge Base Views(1893) Comments(29) Edit 收藏

 回复 引用 查看   
#1楼2010-07-10 21:06 | 帝之晓      
那应该在论坛里面讨论比较好
 回复 引用 查看   
#2楼2010-07-10 21:14 | Cheney Shue      
要讨论到论坛去,这里是博客,博客就像是日记,自己看看,朋友看看就够了。无所谓要放首页,无所谓有没有价值。
 回复 引用 查看   
#3楼[楼主]2010-07-10 21:14 | Teddy's Knowledge Base      
@帝之晓
你说得没错,如果是类似JavaEye这样的论坛,应该能起到期望的效果。博客园当然是博客为主,这没问题,但是,应该不希望对这样得很自然的讨论的需求没有一个有效的支持吧?不然,有这样的需求时,我岂不是不得不去别的地方?

 回复 引用 查看   
#4楼[楼主]2010-07-10 21:21 | Teddy's Knowledge Base      
@Cheney Shue
对于Blogging需求,你说得当然没错,自己看看,朋友看看,觉得对别人有价值再考虑放到首页就行了。但问题是,我就是想讨论。博客园虽然以博客为主,但是,首页,是不是能更好的支持这种对讨论的需求呢?

 回复 引用 查看   
#5楼2010-07-10 21:21 | Nick Wang (懒人王)      
javascript的TDD是可行的,也有很多现成的工具支持。

比较常见的工具
TDD: jsunit
BDD: jspec


javascript在测试方面和其它动态语言一样,由于是弱类型的,比较好mock或者stub。麻烦的地方是没有重构工具支持,当你重构代码时,要手工维护测试的修改,比较麻烦。而且万一遗漏了某些东西,比如拼写错误,不好排错(没有编译时检查)。


最佳实践嘛,javascript类或方法中不要直接访问DOM元素,而是应该将DOM element作为参数传进来,这样就可以解耦,易于测试,也易于维护。

还有需要注意的是,由于浏览器兼容性问题,要在不同的浏览器中跑测试,保证都能通过。

 回复 引用 查看   
#6楼2010-07-10 21:22 | sun8134      
博问 作用还没用好啊

发挥下有成为论坛的潜力 的

 回复 引用 查看   
#7楼2010-07-10 21:23 | Jeff Wong      
我看小组里的不少讨论看上去很“激烈”的,但是和楼主这里说的有价值的讨论可能偏离很远,看看他们讨论的标题你就知道了。
 回复 引用 查看   
#8楼[楼主]2010-07-10 21:24 | Teddy's Knowledge Base      
发现一个bug:在firefox下,修改已发布的留言功能不工作,编辑完后点击“修改”按钮没效果。
 回复 引用 查看   
#9楼[楼主]2010-07-10 21:35 | Teddy's Knowledge Base      
@Nick Wang (懒人王)
unittest了就算tdd了?测试框架其实是很好写的,少则几十行代码,多则几百行代码就足够。但tdd很重要的一点,除了test first,就是重构,没有很好的重构工具支持,一旦几百几千行的js代码放这里,tdd的实施几乎不太现实。

在我看来,近两年,由于Script#和JSC这样的工具的出现,才使得大规模的JS的TDD,越来越成为可能。

至于最佳实践,你说得顶多是一些tips,离最佳实践的程度可差太远了。

 回复 引用 查看   
#10楼2010-07-10 21:45 | Mainz      
上Discuz!论坛就搞定了
 回复 引用 查看   
#11楼2010-07-10 21:49 | Nick Wang (懒人王)      
@Teddy's Knowledge Base

如果你有几百几千行代码没法手工重构,那么原因是:
1. 你的手工重构技能还不够,看《重构》,练习。现在动态语言这么流行,ruby,python,javascript,没有哪个语言是有好的重构工具的,但是伟大的产品和代码依然存在。不能什么都依赖于工具,有工具自然好,没工具咱也要能干活。

2. 代码设计不够好。如果不能将一次修改的东西限制在一个较小的范围内,本身就说明设计有问题,难以维护。只能改进设计,用更短的方法,更小更内聚的类。

另:我好像没提过unittest,我说的是TDD。工具就是工具,怎么用是人来决定的,不能说用jsunit就不是TDD,或者用xx就是yy不是zz。

 回复 引用 查看   
#12楼2010-07-10 21:51 | Nick Wang (懒人王)      
接上:我不懂tips和best practice之间有什么区别,或者说是如何定义的,你能解释一下么?
 回复 引用 查看   
#13楼[楼主]2010-07-10 22:00 | Teddy's Knowledge Base      
@Nick Wang (懒人王)
对一个公司来说,TDD的效果当然有吸引力,但是实施TDD的成本却也是非常重要的.而且,TDD的一个好处,正是先有可运行(哪怕是糟糕的设计)的测试和代码,不断重构,引导出好的设计,和正确的实现.

TDD是一个方法,是一种流程,而jsunit只是一个测试类库,无论如何,也不能把两者划等号吧?充其量只能说,jsunit这样的工具,能够支持对js代码做回归测试.但这也只是TDD的流程的每个迭代中的一个步骤而已.

 回复 引用 查看   
#14楼2010-07-10 22:05 | Nick Wang (懒人王)      
@Teddy's Knowledge Base
看来我没说明白,我的意思是,我用的是TDD。我只提到了jsunit,没说过unittest,可是你就认为我说的只是unittest,不是TDD。

TDD,重构可以引导出好的设计,前提是你知道什么是好的设计。如果一个人不知道什么样子的设计是好的设计,那么用了tdd,重构也搞不出好的设计。

 回复 引用 查看   
#15楼[楼主]2010-07-10 22:09 | Teddy's Knowledge Base      
@Nick Wang (懒人王)
参见wikipedia:
http://en.wikipedia.org/wiki/Best_practice

best practice是一种典范,是直接可重用的解决方案.而tips,只是小技巧小提示罢了,他们的成熟度不在一个级别上.

 回复 引用 查看   
#16楼2010-07-10 22:12 | Astar      
博问正在发展
 回复 引用 查看   
#17楼2010-07-10 22:15 | Nick Wang (懒人王)      
@Teddy's Knowledge Base
whatever

反正我觉得这就是我的best practice,或者叫good practice,因为没什么是best的。

 回复 引用 查看   
#18楼[楼主]2010-07-10 22:17 | Teddy's Knowledge Base      
@Nick Wang (懒人王)
"TDD,重构可以引导出好的设计,前提是你知道什么是好的设计。如果一个人不知道什么样子的设计是好的设计,那么用了tdd,重构也搞不出好的设计。"
-你的这句话不能说错,但是,beck发明tdd时候说的是,tdd能够帮助发现不好的设计.相对于凭经验看出代码中的坏味道,tdd可以让你直接感受到坏设计的对你的折磨,因为坏的设计一定会导致你花更多的effort来维护你的tdd测试代码.这样一定程度上就能激励你和引导你应用好的设计,并且证明你的设计是好是坏.

 回复 引用 查看   
#19楼2010-07-10 22:26 | Nick Wang (懒人王)      
@Teddy's Knowledge Base
据我对身边人的观察,有些人天天在TDD,但是仍然无法“仅靠”TDD而不依赖于其它人的帮助、或者其它的文章、书籍,而获的设计上的进步。

Kent Beck说的没错,但是现实中依然有很多人在花着大量的effort维护测试和生产代码,却完全不觉得需要改变些什么。

归根到底,工具方法都代替不了人。

PS:跑题跑的有点远了,就到这里吧。

 回复 引用 查看   
#20楼[楼主]2010-07-10 22:37 | Teddy's Knowledge Base      
@Nick Wang (懒人王)
:) 确实有点跑题了,不过你是指跑了"博客园发起有价值的讨论很难"这个题,还是TDD in HTML & JavaScript这个题? 呵呵,貌似都跑了~~

对于"TDD in HTML & JavaScript"这个话题,我想讨论的本意是,假设,我们已经有了for js的代码重构的工具,回归测试的工具,甚至是mock的工具,相对于后台代码的特殊性,HTML & JavaScript的代码,哪些可以测试,应该如何测试.如你所说,如dom,尽可能解耦当然是增加可测试性的核心思想之一.

 回复 引用 查看   
#21楼2010-07-10 22:58 | FantasySoft      
在博客园里面讨论,有点勉为其难了。博客作为信息的一种组织形式,本身就不适合针对某个话题进行树状聚合。
 回复 引用 查看   
#22楼2010-07-11 00:02 | 蛙蛙王子      
在博客园北京俱乐部的MSN群里讨论呀,呵呵
 回复 引用 查看   
#23楼2010-07-11 00:44 | Jeffrey Zhao      
好的讨论主要还是要靠维护和引导的,比如StackOverflow到处都是有价值的讨论。
 回复 引用 查看   
#24楼[楼主]2010-07-11 00:55 | Teddy's Knowledge Base      
@Jeffrey Zhao
引导相当重要,但是,平台也很重要.StackOverflow首先是一个很好的讨论的平台,我不知道哪里有没有人工的filter或者引导,但是,至少很多牛人会乐于在那里讨论,而且,平台本身提供的很多机制确实都很够吸引人来讨论和分享,而且还很好玩.

 回复 引用 查看   
#25楼2010-07-11 01:08 | 亚历山大同志      
博客园的讨论需要发起争议性话题,比如 .net sucks之类
 回复 引用 查看   
#26楼2010-07-11 10:02 | K#      
博客园里,不太适合正经的讨论!呵呵
有点奇怪吧!

 回复 引用 查看   
#27楼2010-07-11 13:11 | 斯克迪亚      
一般我的做法就是把自己针对此问题的想法写出,或者是列出自认为可行的方案,再或者就是想尽写出出现环境和需要解决的问题,然后让大家一同来探讨。
而就讨论质量来说,确实不很理想,有很多过客,也有很多不细看文章内容就开始大肆批驳的,也有带着宣泄心理回复的……有价值的回复占据比重不大,但总体来说,讨论还是有益的。

 回复 引用 查看   
#28楼2010-07-15 09:42 | Tony Zhou      
引用亚历山大同志:博客园的讨论需要发起争议性话题,比如 .net sucks之类


 回复 引用 查看   
#29楼2010-07-23 16:18 | Carol Xiong      
呵呵,难得Teddy发一遍Chinese杂文呀,每次在踩进你的blog时,只能匆匆路过之后,感叹自己我的技术太菜呀。。。;)