BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

敏捷咨询工具箱(一)──读书写代码活动

| 作者 钱安川 关注 0 他的粉丝 发布于 2010年12月23日. 估计阅读时间: 5 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

只要功夫深,铁杵磨成针

                      ──宋·祝穆

clip_image002

在我们咨询过程中,遇到一些开发技术很薄弱的团队,大部分人只会通过复制和粘贴的方式写代码,然后花费大量的时间进行修改和调试。有些开发人员还只是刚刚从学校毕业,几乎没有什么开发经验。面对这样的团队,如何教他们使用敏捷开发方法?如何教他们测试驱动开发?如何教他们简单设计呢?

如果连一门语言还没有完全吃透,还如何谈测试驱动开发和简单设计呢?这是一个很大的挑战。我回想起自己学习新语言的方法。前些时间我自学了SCALA语言,看完了《Scala程序设计:Java虚拟机多核编程实战》,但还是觉得很多概念没有吃透,然后我就把书合上,然后把书上所有的例子独立写了一遍,这时才能感觉自己是学了一门语言。于是我用同样的方法来训练这个团队:

一、找一本合适的书。

如果要快速吃透一门语言,最快的方法就是找一本好书,系统的把一门语言学习一遍,扫除语言的盲点。我们如何选择一本合适的书呢,我总结了三个条件:

  1. 选择国外大师的权威著作,这些大师应该有深厚的开发经验,这样可以从书上学到很多编程和设计的最佳实践。
  2. 书不能太厚,最好在200-300页左右,足够介绍完一门语言的常用特性和最佳实践。那些面面俱到的的厚砖头一般适合做参考手册。
  3. 书上的例子一定要经典,这样比较适合练习。

因为团队主要使用C语言,我就在Google上搜索了一下“C书籍推荐”,找到了很多网友推荐的Top C语言书籍。通过我几天的阅读和筛选比较之后,最后我为大家选择了《C程序设计语言》这本书,完全符合上面的三个条件。如果你是使用的其它编程语言,可以参考下面的读书列表:

二、具体的读书计划

选择书之后,就要有一个具体可行的读书计划,这样大家能有节奏的一步一步把书读完。因为大家都有一些C语言基础,所以我们把读书活动安排为每天的家庭作业,每周读完2章。我们的验收标准是:在不看书的情况下用TDD实现每章全部的例题(这个后面会有详细的介绍)。下面是我给大家制定的读书计划:

时间

内容

第一周

第1章 导言

第2章 类型、运算符与表达式

第二周

第3章 控制流

第4章 函数与程序结构

第三周

第5章 指针与数组

第6章 结构

第四周

第7章 输入与输出

第8章 unix系统接口

三、光看不练假把式

有了书,有了读书计划,当然这个还不够。这个活动的重点就是要写代码。这是读书写代码活动的验收条件。要求每个人在不看书的情况下,把书上的例题改造成测试驱动的代码。一章所有例题都改造完了,才算是把这章读完。比如:Hello World 的例子

#include
main()
{
   printf("hello, world\n");
}

要求把这个例子改造成测试驱动的代码。改造之后代码分别为:

测试代码:

TEST(test_case_name, test_greetings) {
   EXPECT_EQ("hello, world", greetings());
}

业务代码:

char[] greetings()
{
   return ("hello, world");
}

通过这样的训练,每个人不但可以系统的学习一遍C语言的知识,并且可以锻炼如何用TDD进行开发。

四、闭环──代码展示

如何保证每个人可以完成写代码活动并且达到预期的效果呢?我们搭建了一个Subversion,让每人把自己的代码提交上去。我们每天早上会有一个代码展示活动。准备一个投影仪,每个人花3-5分钟展示和讲解自己的代码,然后集体鼓掌表示认可,然后其他的同事提出问题和改进建议。这样有三个好处:

  • 让每人分享自己的代码和经验,这是对每人的认可和鼓励
  • 一个互相学习的氛围; 通过展示可以学习一下其他同事是怎么写代码,怎么写测试
  • 互相督促,如果没有完成代码,这时候就没有任何东西可以展示了

我们坚持了一个月之后,这个活动结束了。每个人都感觉很好,系统的把C语言掌握了一遍。一些有经验的一个开发人员也觉得,系统的学习之后消除了C语言的很多盲点。现在对C语言编程更有信心了,并且还学会了如何做TDD开发。

关于作者

钱安川,ThoughtWorks公司高级软件咨询师、敏捷过程教练、资深讲师、Team Leader、开发者、 BeiJing Open Party组织者和主持人。个人博客:敏捷开发训练

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

不错 by Jinian Xie

我们也在尝试类似的活动,接下来会跟着作者的方法再细化一下。

授人以渔 by 曹 云飞

授人以鱼,不如授人以渔。谢谢作者授人以渔,受益匪浅。

非常好 by q q

非常好,值得借鉴!

有利有弊 by White Pele

如果上面的方法是一个至少有过一两门实战开发经验的中高级程序员,的确是个快速掌握新语言的办法。

但是,对于刚毕业的新手,容易出现类似从书里或者网上copy paste来做课后例题的事情。即使他们是认真做了这些题目,也只会对语言一知半解,会觉得一门程序语言,写代码不过如此。

曾经我见过一个刚毕业不久的同学,告诉他需要对数据库处理添加事务。okey,半天后说加好了,一看,每条数据库操作前后都加上了transaction,呵呵。

学习之方法 by jiang yan

在学校就没有学好如何学习的人,入职后要重新学习。如果能主动的学习,又何必要被人逼着来读书写代码呢。

光说不练假把式 by Guo Eidson

作者练什么把式的?太极、八卦、形意?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

6 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT