伍斌,英文名Ben,悟道者,ThoughtWorks敏捷咨询师。著有《驯服烂代码:在编程操练中悟道》,译有《测试驱动数据库开发》和《优质代码》。自1993年大学毕业以来,先后做过程序员、测试工程师、项目经理和软件开发咨询师。2013年4月创办全栈开发者的编程操练社区“bjdp.org北京设计模式学习组”。微信号:wubinben28,微信公众号bjdp_org,网站wubinben.com,新浪微博@伍斌_Ben。


About Me

Software Craftsman
 
* Focusing on TDD/ATDD/BDD, taming bad code and refactoring
Bridging the gap between Western craftsmanship and Chinese Traditional culture.
* Founded the 1st Mandarin-speaking Refactoring Dojo Community in Beijing - www.bjdp.org

* Writing 2 books in Chinese -  "Taming the Bad Code" and "The Executable Documents"

Pursuing the immortality of career of Chinese programmers

我制作的有备编程操练录屏

4段SWF格式的“将FizzBuzz编程操练重构到责任链模式”录屏已经上传到百度云,下载后,打开HTML文件即可观看,期待指点!下载链接:http://t.cn/8kTKkVT ,代码下载:https://github.com/wubin28/KataFizzBuzz

 

我对编写软件代码的一些观点

如果用郑人买履的成语打比方,那么书上的敏捷原则和贴在墙上的企业文化,就好比郑人家里用来量脚的那把尺子。很多人非得拿着那把尺子才会买鞋,却偏偏忘记自己还有一双脚。——2014.04.03

烂代码就是那些能够运行的、而且需要修改其中的bug或在其中增加新功能的、但对于代码的编写者、测试者和维护者来说反馈迟缓的代码。这里的反馈包括了解代码行为、验证代码行为、和在这些代码之上修改bug或新增功能等方面的反馈。 在软件开发中,下面这种场景是不是很常见?“添加一点小需求,就冒出两个bug!之前谁写的这代码?!关联来关联去,也没说明。(感谢微博网友“@张克强-敏捷307”的反馈)”添加小需求时就会出bug,造成小需求完工拖延,这就是在添加新功能时的反馈迟缓。——2014.03.14

一些刚刚接触测试先行的开发方法的匠友问:“我该如何一开始就编写测试代码?我真不知道该测什么。”其实很简单,只要您能找到要测试的功能中,所有您期望的那些相对“不变”的东西,比如正在被客户使用的公共接口和内在的业务逻辑,然后用测试代码的Assert语句来确保这些不变的东西一直不变就行了。——2014.02.06


我赞同Martin Folwer在《重构》一书中有关代码注释的观点,并在此基础上引申一步,即好的代码注释应该“只”用来描述“为什么(Why)”会有相应的这段代码和您暂时没有搞清楚的事情,而不要包含这段代码“做了什么(What)”和“如何做的(How)”,因为如果您能做到每个方法不超过5行,那么What应该由方法名和类名来定义,而How应该由上述不超过5行的代码来定义。反之,若注释包含了What和How的内容,就说明要么代码有腐臭,要么程序员有画蛇添足的毛病。——2014.02.06


“从内而外”地先编写接口的实现代码,再编写接口的客户端代码,就好比女人逛超市,看到什么好东西都想买,采购了多余的东西造成浪费;“从外而内”地先编写期望的调用接口的客户端代码,再编写接口的实现代码,就好比男人逛超市,掏出纸片上的购买清单,拿货、掏钱、走人,精益适用。——2013.12.24


有关软件的任何文档的编写和修改工作,就如同“刻舟求剑”,无论你多么敬业地创建和维护文档,一旦你写完收笔,时刻变化的需求、设计和代码,就会使你刚刚写好的文档,成为“刻舟求剑”故事中的那艘刻在船身上的记号,让你无法找到你真正想要找的“剑”。——2013.12.23

在现代的IDE集成开发环境中,只要写好你期望但尚不存在的接口,你就能使用快捷键方便地让IDE帮你创建那些尚不存在的类、方法、变量等等代码。而传统的先实现你所期望的接口代码,再编写调用这些接口的客户端代码的方式,有点像你去一家餐馆吃饭,先不向服务员点菜,而是先直奔后厨,炒出你想要的菜,再自己端出来享用一样,超级费力。省事的办法是先在这些IDE中点出你期望的菜,然后咱们专业的IDE就会殷勤地为你一样一样地将菜端上桌。——2013.12.23

结对编程能够为程序员之间相互传递知识提供良好的机会。如果在团队内部长期坚持结对编程,且每天交换结对搭档,一方面可以整体提升团队的开发技能,另一方面也可以解决因负责某模块开发的程序员生病、休假等原因造成的开发人力资源短缺的问题。——2013.12.23

软件开发起源于科学计算,那时需求变化很小且逻辑相对清晰,测试可以按照瀑布模型放到最后由独立于程序员的测试人员完成。但是在如今日新月异的互联网时代,需求与业务逻辑经常根据市场而频繁变化,传统的瀑布模型中的测试所提供的反馈早已跟不上变化的速度。测试需要由开发+测试+需求人员协作完成。——2013.12.19

我觉得大部分国内程序员所面临的“真正的问题”,与其说是在项目中面临的编程问题,不如说是如何持续提升自身编程手艺的问题。所以有了解决“持续提升手艺”这个真正问题的支撑,我们要用“编程操练”来解决这个问题。 ——2013.12.13

我认为文档和代码注释都会过时的根本原因,可以在刻舟求剑的成语中找到。相比之下,git的提交注释会比代码注释好很多,因为前者是历史记录,后者是一时新鲜的网络流行语。——2013.12.12

烂代码不是怪兽,而是无知的婴儿。精心养育它,它就有可能成为好代码。弃之不管,它就死路一条。——2013.12.10

有匠友说,烂代码不必重构,直接推翻重写。是呀,一个被遗弃而冻饿致死的婴儿,人们只好掩埋了。但愿新出生的婴儿不要也沦为下次被掩埋的境地。——2013.12.10

我曾跟一国内互联网领先公司的CTO提起精益节约成本的话题,他说:成本?我们不缺钱,我们要的是速度。他忘记了成本除了金钱,还有时间。我觉得在互联网环境下,时间成本要比金钱成本优先考虑。——2013.12.08

假如您是古时在杭州做买卖的有钱人,春节前打算带着太太、孩子和一些贵重礼品及货物回北京老家过年。因担心长途旅行不安全,需要请镖局护送。镖局要说:“请您全家自行旅行,到京后通知我们来清点一下人数、礼品、货物即可。”那您还请他们保镖个嘛?!现在QA的绝大多数测试工作就是这样的事后清点,代码在开发过程中没有保护。若要保护好正在开发的代码,好的做法是QA、程序员和需求人员一起讨论确定ATDD/BDD验收测试实例化需求表格,用验收测试驱动生产代码的开发。这里的验收测试实例化需求表格,既是指明方向的规格,同时也是保护代码开发的自动化测试。——2013.12.07

软件生产代码写好后,无论后补的是白盒测试代码还是黑盒测试代码,都不如测试先行的TDD\ATDD\BDD更有效率和安全。理由就如同我这个比喻,后补测试就好比那个只做事后清点的镖局。如果用BDD驱动dev写代码,此时BDD就是真保镖。——2013.12.07

ODC 是一种合作开发模式,有两种情况,分别是Offshore Dev. Center (离岸实施)和Offsource Dev. Center (人员外包实施).看来只要解决虚拟团队远程办公的沟通障碍,让程序员、测试、需求人员三者密切合作,最后达到反馈及时有效,ODC同样也适合需求易变的项目。 ——2013.12.07

@_嘉利_ "我听过一种挺有趣的说法:所谓建筑的比喻其实是 软件的设计和编程等都算建筑的设计阶段, 编译器干的活才是建筑的施工阶段。"有道理。一个持续集成CI系统一天可以把整个系统编译打包10多次,换句话说,就是每天都可以把大楼推倒,重新盖10多次。软件的施工成本太低了。建筑的比喻不适合软件。——2013.12.06

简单的事重复做能成小工,重复的事用心做能成大师。——2013.12.06

通过切身体会,我个人确实从编程操练(code kata)和编程道场(coding dojo)中掌握了不少自己以前欠缺的技能,如TDD/ATDD/BDD/驯服烂代码等等,并依此为基础,撰写本人的拙作《驯服烂代码》和《TDD/ATDD/BDD编程操练》。这让我更加坚定了“活到老、练到老”的决心。——2013.12.06

              我做过的演讲

              My Favorite Links

              Beijing Design Patterns Study Groups (BJDP), a Mandarin-speaking refactoring dojo community founded by me on April 6th, 2013.

              Juven Xu (许晓斌), my colleague in OutSofting Consulting company, author of "Maven实战". 

              Mike Long, a software engineer and the organizer of Beijing Software Craftsmanship Meetup Group enjoying facilitating coding dojos.

              Michael Feathers, the author of my favorite book Working Effectively with Legacy Code

              Bradley Braithwaite, a freelance developer with over a decade of experience currently based in Haute-Savoie, France

              Agical - Improve Your Business by Improving Your Code. Free draft book Behead Your Legacy Beast about refactoring and restructuring relentlessly with the Mikado Method.

              Dong Wu Talk Show 冬吴相对论.

              Code.org Gets Gates, Zuckerberg, and More to Talk About Importance of Coding with captions in Simplified Chinese (IT巨头联手公益广告:那些学校没有教的 字幕版)

              Agile Testing with Lisa Crispin 

              Copyright 2013 ~ 2014 © Ben Wu (伍斌) Beijing, P.R. China

              Make a Free Website with Yola.