Actionary

A man is valued by his works, not his words!

Why We Need Visual Task Board

The department which I’m working on, it’s thought be the first team adopted Scrum in China, so our people mostly seems ourselves is the Scrum forerunner in China althrough there might be another place is ahead of us. Year and year, day after day, we did various of Scrum practices, And while the R&D is growing in size, and with people change in the organization, people have been forgetting the rationale behind these practices, and thinking Scrum is such practices, such practices are Scrum. But one day, we were questioned by our naive boy: Why?

Today, let’s clarify why we need visual task board? Why we not use excel instead, or some on-line task management tools such like Trello?

Understanding the team situation likes looking at a picture

Pasting the task on the wall with different priorities, moving forward accord to the progress. The task will be moved from “TODO” column to “DONE” column, it’s easier understand the team work iteration item progress. If we at a time point, the most of task cards is still under the “TODO” column, it means we have a lot of work to do; if the most of task cards is under “DONE” column, we can understand it’s not far from our target.

“IN PROGRESS” reflects team daily work. If too many tasks are under this column, it means there is something wrong about the task assignment – either the task estimation has some problems or team is too optimistic. The total size of the tasks under “IN PROGRESS” shall be mostly equal as the team daily capacity.

Of cause, we can use various of color cards to represent the regular planning tasks or interrupting tasks, based on the interrupting tasks number, we can understand how well we did sprint planning.

Adding “BLOCKING” column, we can clearly find out how many tasks are blocked by other teams. We can make various of changes to task board based on team needs, task board shall illustrates the team work situation clearly. Team member just raise his/her head, he/she can understand how well we work on our task, the progress is leading, or delay. Team work is transparent for everyone, any one in any time can understand team situation from task board.

Programmers are “lazybones”

I remember one words said: the innovators are lazybones. Because they are lazy, so they are motivated to innovate something instead of hard working. And later, this words has been evolved to: the high IQ people is lazybones. It comes “Innovators are high IQ people”. And now, programmers seems themselves as high IQ people, so programmer shall play as lazy style. Innovator == lazybones; innovator == high IQ people; high IQ people == lazybones è if you want to make self look like high IQ people, play lazybones, so that’s the logic. Do you know the question in Quora: Do intelligent lazy people achieve more in life than intelligent active people?

So, to lazybones, require him/her to look for a document and open it, it’s very difficult, because he/she thinks there were too many steps. We can image that if we require lazybones to read a document which located on a website:

  1. Visiting the website
  2. Looking for the document
  3. Downloading the document
  4. Opening the document via MS office (WTF office, why you are so slow)
  5. Reading, and there are page up and page down

Same reason, how to make lazybones care about the task board? If we use excel to keep the tasks, what the situation will be:

During the daily meeting, Scrum Master opens the laptop, and then all team member gather around the only 15 inch laptop screen, you guys open your big eyes as bigger as possible, and focus on only 10 font size words to make the task updating. In another scenarios, you do not expect the lazybones never will open this document any more, since opening this excel will cost too many steps – and then in time task updating is a problem.

If we have task board, all tasks are written on the cards, and they’re clearly pasted on the wall. You just give a sight, you can find out the task, for the task updating, you only need to move the cards. See, easy.

It’s not only a wall, it’s team flag

How prove team existence? Name, flag. Every day, all team member gathering under the wall, it’s solid entity, you will found that, this wall represents the team. Team member will think this is our team platform, we have something to do on this place. So during we create the task board, it means we are creating the team flag.

End

I can understand, you prepare a lots of reason here to prove why you need excel to keep the task list. That’s fine, give your comments below, let me understand your reason first. I just want to say, the confident team, ready to show muscle. Be a “lazy” and high efficiency team, start from build a visual task board.

  • EOF -

程序员上网扫盲

最近常常被很多朋友问到这样的问题:

  • 你们是用什么工具做了这么炫的presentation?
  • 你们从哪里找来这么标准的回答,我提的问题就是那个?
  • 你们从哪里了解到这么好玩的东东?
  • 你们怎么可以认识到这么多的大牛?
  • 你们都从哪学来这么多的知识呀?

我们总是告诉他们:

  • 我用prezi做的展示,酷吧,你也可以。
  • 我常常登录quorastackoverflow,所以我明白问问题的技巧和查找答案的方法。
  • 我用feedly订阅了很多的RSS,并且分类,定期阅读,开阔了我的眼界。
  • 我会“科学上网”,在twitter上follow了@codinghorror @mfeathers @KentBeck @unclebobmartin 等很多大牛,我知道他们在干嘛,跟他们互动,大牛没有想的离得那么远。我们在github上fork大牛的项目,给他们提pull request,离大牛更近了。
  • courseracodeschool是我常去的网站。

总之,问题林林总总,总是关心我们工作及获取信息的方式。首先,应该肯定提出问题的这些朋友还保持着程序员的猎奇的心态,对未知领域的好奇心,正是这些好奇心,激励着我们往前走,又有多少人连这点好奇心都没有了呢?而从另一个角度,我们又感到一丝丝的担忧,IT行业在互联网上发生翻天覆地的变化,而我们很多朋友却依旧固步自封,原地不动。

我们应该庆幸生活在这个时代,这样的时代互联网给我们提供了取之不尽的资讯,但是,我们又多么不幸地生活在了这样的时代,这样的时代可以让一个中学生迅速成为你的竞争对手,成为程序员的门槛已经不高,10+程序员已经展露头角。不学习,总会被取代掉。鉴于此,朋友建议我做对程序员上网做做扫盲,对很多人来说,这些网站都是“老地方”,但我相信同样会有很多人会认为这是个新去处。

开源社区Github

Sourceforge,google code离我们越来越远,而github却离我们却越来越近。这家公司虽然地处湾区,在地理位置上来说,与我们隔着一个太平洋的距离,可是github.com却成为每一个geek必去的网站,越来越多的开源项目进驻,越来越多的公司用它来做项目开发。这是一家提倡社交化开源,社交化开发的公司,该公司只有一个员工有一个固定的title,那就是CEO,其他员工的title都是经常性的变更,有时叫“黑暗骑士”,有时叫“终结者”,员工遍布全球,办公地点有的在家里,咖啡店,Office,而有的则可能在旅行的路上。

软件开发已经没有传统的地域限制,github提供了这样的一个技术平台,提供社交化的虚拟社区,人人可以提交代码,人人可以review代码。要开展一个项目,你只需在网站上建一个repository,剩下的就去邀请那些极客了,给他们一根网线,他们会用各种名词”clone”,”fork”,”pull request”跟你交流。如果有一天,你听到一个人跟你讲,请fork一下我,千万别感到奇怪。你需要掌握的知识就是编程和git的使用,很高兴,互联网给了免费的图书让你学习git。据说,现在很多大公司会通过github上的信息,网罗他们需要的程序员,又一个大数据的案例

又据说,现在美国白宫也在正尝试通过github的协作方式来完成一些文章和政策文档的编撰工作。白宫已经开始了,你还等什么呢?登录github.com,fork我吧。

问答类网站 Stackoverflow & Quora

记不记得上世纪90年代末本世纪初的时候,很多程序员会泡在CSDN论坛上,回答各种问题,积累专家分。只是有点可惜,这家公司不知道自己应该做什么,又是做博客,又是办杂志,又是搞社区,据说现在也倒腾了一个github-like类网站。随着永恒的九月的现象,越来越多的低质量问题和答案充斥其中,后来很多人选择离开这样一个技术讨论平台。

Stackoverflow就是这样一个成功的网站,这是一个属于程序员的网站,由大牛 @codinghoner Jeff Atwood开发的一个供程序员提问及回答讨论的网站,你可以在这里提出关心的技术问题,只要分类OK,很快就会有人给你解答,如果对一些问题感兴趣,你可以收藏该问题。专家分积累到一定程度,会给你一个勋章,这吸引着越来越多高质量的问题和答案,以致于现在流传着这样一句话:世界上只有两种开发模式,到github上clone代码,或者到stackoverflow上复制代码。

这是一个来自经典stackoverflow的问答,看过之后相信你会爱上这个网站。现在很多公司的招聘信息上已经明确要求应征者提供其github和stackoverflow帐号,这可比大学考试分数靠谱多了。

Quora相比stackoverflow就是另一种风格。同样是问-答类网站,Quora涉及的问题会更大一些,stackoverflow会深入技术细节。但两者的相似之处都是因为吸引了很多的大牛,和保持一贯高质量的问答,这是他们成功的经要。

在线教育 Coursera & Codeschool

我们常常吐槽,说国内没有一所好的大学,没有碰到好的老师,一切如此糟糕境遇的原因都是他们:我是一块好的璞玉,没有人打磨,所以就是这样。

如果你还在抱怨这些原因的话,那你大可不必了。虽然你这辈子可能鲜有走出国门,走进更高的学府的机会,而网上公开课程给你提供了这些便利。且不说风靡的哈佛公开课程《公平与正义》等视频在互联网上到处可见,更为专业性的网上课程网站Coursera.com提供了更为专业的服务。网站会提前给出即将开展的课程安排,用户根据自身需要,选择课程,在安排的时间段学习课程,网站提供了视频,slides,录音,完成老师布置的作业,你还可以跟老师互动,向老师提问(当然,这很难做到逢问必答)。在一定的时间内完成课时,并且作业达到一定分数,课程结束后,你会收到一份证书。据说这份证书目前比某些大学的毕业证更靠谱。如果你过不了语言关,不要紧,有些课程的视频配有中文字幕,你的学习过程就像看美国大片。此外,译言网上中文课堂是译言网与Coursera合作最近刚上线的项目。

记得去年参加了斯坦福的Andrew Ng教授的一个课程Machine Learning,因为吸引人很多人的参课,首期就超过10万人注册课程,并且反响异常热烈,该课程获得了去年coursera年度最受欢迎课程的荣誉。你想,一下子你就多了10万个同学,这是什么样的概念,多选几门课程,你同学数都可达百万级。

做为程序员,要想精通多门开发语言的Hello World程序,只要花上一个小时,要想精通多门语言的Game of Life程序,只要花上一周。网上编程教育网站codeschool就是这样一个网站。它提供多种开发语言让你选择,并且由你选择学习路径,入门,进阶,高级等等,一应俱全。就Ruby语言来说,有Ruby Basics, Starting Rails, Advanced Ruby, Rails Edge, Railstesting,Rails Best Practices。足不出户就可以成为开发高手。如果你真想成为大拿,现在就登录这些网站注册课程吧。

RSS订阅

记得前几个月,当google说要在七月份把google reader关掉的时候,有许多有阅读RSS订阅的人焦虑了一阵子。不要告诉我你不知道有什么是RSS订阅,如果真不知道,请登录到google.com在查询栏输入“什么是RSS订阅”。如果你告诉我你不用google,而是用baidu,那你就活该当个outer。

现在好了,feedlydigg都提供google reader的平滑过度,而且提供了很好的用户体验。像feedly还提供了免费的Andriod和iOS应用,Windows Phone上也有nextGen Reader来支持feedly,这难道还不够吗?

有人会说,光有工具还不够,内容呢,哪里来?我获取内容的途径一般来自Hacker News, Reddit,还有我在社交网上follow的那些大牛分享的网站,天天积累,越来越多。不要告诉我你不知道Hacker News,这个网站的founder,可是大名鼎鼎的Paul Graham,《黑客与画家》的作者,著名的天使投资人,最早以lisp程序员而闻名。

我一直认为,在信息爆炸的时代,能通过人肉再过滤一层的信息会更值得读,时间有限,你不可能什么都读,就像看电影一样,我们一般都选择得分高的电影,或者朋友推荐的。像Hacker News和Reddit就是帮我们排序的。

现在手机上还有一款不错的软件,叫做flipboard,它收集了各路信息,然后帮你汇总分类,也是不错的一个神器。如果你还在担心英文阅读的困难,我可以建议两个途径:

  • 恶补英语,常常读,让看英文资料成为一种习惯
  • 如果你真的在语言上不可救药,那看中文网站吧,现在有很多志愿者把他们认为不错的资料翻译成中文,如译言网外刊IT评论网。也有汇集牛人博客的网站,如IT牛人博客聚合

每天花上1个小时做订阅的阅读,当这成为一种习惯,你也会成为信息的受益者。当然,你的目标要成为一位分享者,只有分享才会让我们的时代更加丰富多彩。

编程训练平台 Cyber-dojo & oDesk

编程是一项技能,所谓拳不离手,曲不离口,做为训练自己的编程能力,cyber-dojo提供了这样的一个平台,你只需setup起来,获得一个ID,就可以选择一门开发语言和练习题目,开始你的编程训练。我们可以以一个Scrum团队一起来完成,以TDD的形式,成员之间乒乓交换,即先一个人pass单元测试,重构代码,再写一个failed掉的单元测试,这时另一个人接手重复上述过程,一直不停换人,直到完成整个题目。

我想,一群人能在一起写写代码,不停地交换彼此的想法,编程技能提高得肯定很快。如果开始阶段不是太容易掌握活动的引导,找一位好的引导人也是一个不错的选择。

其实oDesk不完全是一个训练平台,它的目的是用于软件的分包和承包,你可以把自己的个人信息和技能写上,给出你需要的佣金,然后参加项目的承包竞标。这是一个非常好玩的事情,非常接近真实生活中的招投标过程,当然,这里的招投标也是真实的。如果你准备好了,你可以试试自己的价值,利用业余时间参加一些这里的项目也是一件不错的事。

我听说过两件oDesk的趣事,一件是分包的事。据说一位牛人,他在他们公司的绩效特别好,交待给他的事,他都很好地完成掉了,所以,他工资特别高,但最后发现,他的工作都被他在网上分包给了中国的一些开发者。还有一件是关于承包的,有一位程序员决定环球旅游,然后他带好了电脑,还有上网的辅助设备,在旅途上,边看风景,边在oDesk承包项目,而且赚到了比在前公司工作还多的收入。

在线协作平台 Google Doc(Drive),Google Hangout, Dropbox, Trello

除了github可以提供一套协作的流程外,Google Doc也或者叫Drive,也是个好东西,现在我们几个朋友之间常用这个工具来协作完成一些slides,文档,或者excel。还记得最早用Google Wave的时候,现在Google Doc跟它相比,可是巨大的飞跃。此外,我们还用Dropbox来存储我们需要的东西,如做远程的git repository,做一些文稿的协作撰写。

当我们在协作过程中遇到任何问题需要交流的时候,Google Hangout提供了视频会议功能。而这些都是免费的服务,我们用Gmail收发邮件,Google Calendar做日程安排。一切都自然而流畅。

如果你的团队是用Scrum或者Kanban之类的开发模式,需要用到团队的任务的Backlog的话,那么Trello将会是一个不错的辅助工具。你能通过它定制列表,如你可以定制一般Scrum的列表:TODO, In Progress, Done等,也可以定制Kanban的列表:User Story,设计,编码,测试等互为依赖的状态列表。另外,你团队成员的状态也会显示在上具上,你可以清楚地知道谁在负责哪个任务,也可以即时地与之联系。

除之此外,作为程序员,你可以在coderwall上把你的Profile建立起来,它会根据你在github上的项目和开发语言,给你列出一枚枚徽章。然后与朋友或同事在coderwall上建立团队,我们目前给公司在coderwall上建了一个团队,目前全球排名已经到了七百多名,如果你会加入的话,我们的排名会更靠前。

社交网站 twitter, facebook, linkedin, glassdoor, ifttt

这是最不需要分享的章节,只是我们生活在四周砌满高墙的国家,所需要做的只是“科学上网”,那么你听说过fqrouter, goagent吗?follow对人也很重要,我记得有位朋友跟我讲,他的微博里都是公知和五毛,天天吵,烦死了。我跟他讲,因为你本身想成为公知或五毛,所以才会有那么多的公知和五毛在他的微博里,如果你不想要他们的争吵,unfollow他们,帐号在你手里。

还有,你知道在什么时间发的言会被更多人阅读吗?你知道你的哪些粉丝最有影响力吗?你知道你的粉丝的活跃程度吗?因为你是个程序员,你所要做的就是掌握这些社交网站的API,写下一个应用,所有数据都会出来,是不是很有意思。另外,你有ml的能力(machine learning,不要误解),可以学习你的粉丝或好友的行为,这时,你可以合理安排好你上微博的时间。会突然发现,生活变得与众不同。

不要沉迷社交网站,不要让其成为朋友之间唯一的沟通渠道,让朋友变成网友。一直以来,我不太愿意上QQ,从大学毕业戒掉QQ快10年了,原因是一上QQ,很多好友会向你说Hello,而你不得不客气地回复他们,被打断多次,之后只要我再上QQ,我都保持潜水的状态。上周我做过一个实验,我把QQ以在线的形式让它显示在那,我想统计一下我会收到多少打断,除了第一天上午收到四个好友的Hello,到第二天只有1个给我Hello,第三天,没有人再理我了,我并没有我自己想像的重要。:)

所以,当别人习惯了你的状态,你就不会显得那么重要了,不要总是打开微博看刚发出去的微博有多少@,有多少评论,只有不停地提高发出去的信息质量,@和评论就会多,而多了之后,当你习惯了,也就没那么重要了。

ifttt却是更高级的上网技,它是if this then that的缩写,this指的是触发行为,that是被触发的行为。也就是说,你在这一个网站上做的一个具体的行为,会触发另一个网站的行为。比如,我想在feedly但凡我mark成shared的文章,都需要分享在twitter上,那么这里的this就是指的在feedly上mark成shared,而that就是指的在twitter上发推。用户可以在ifttt上定制自已需要的触发器,目前该网站支持绝大多数热门的应用和社交网站的服务。到时你可就可以通过它管理多个社交网站了,而不需要在多个网站之间copy-paste。

BFD还是DFD,时间在哪里

大哥,信息太多了,我学习是广度优先还是深度优先呢?好问题。一般来讲,我会先BFD来一趟,发现热点,然后DFD,通过Wikipedia深入下去,再找书来读。上次我在微博上做了一下调查,大多数朋友都是BFD。

时间怎么安排,上班的时候干项目,下了班还被项目干(支持电话不断),还要带小孩,陪老婆,没时间啦。我记得有次在google buzz里跟一些朋友讨论过这个话题。大体上是晚上回家只陪小孩,和小孩一起睡,早上比小孩早起,做阅读。班车上,地铁里看RSS订阅,把所有碎片都用起来。其实看起来很难,习惯了应该也就这样,还记不记得上中学那会儿,早上要出操,还有上早自习,那时是怎么过来的?最近流传着12位早起的IT大佬的段子,不是要求大家成为大佬,而是我们不能光看到别人的光芒,而忘了他的付出。我记得还有一篇文章讲成功人士工作的第一个小时都干什么,同样值得学习。

结语

写得越多,越发现停不下来,因为还有很多好用的东西值得写下来,如分享幻灯片的slideshare,可以做出很炫幻灯片的prezi,常常收听的TED等等。随着国内的互联网企业的发展,也越来越多的中文资讯网站办得越来越好,像豆瓣,36氪,果壳等等。我们所需要做的,只是定好目标,合理安排好时间。另外,圈子很重要,与肝胆人共事,从无字句处读书,你身边的朋友会是你学习的老师,他们follow什么样的人,他们读什么样的文章,他们怎么样安排生活,都是你参考学习的对象。我很开心认识了这么多的朋友,他们告诉了我很多不知道的好玩意儿,教会我“科学上网”,我才能写下上面那么多的废话。

要成为码农不难,要成来好的程序员不简单,先让自己不out,从现在开始。:\

Speaking Codermetrics in ScrumGathering Shanghai 2013

因为一篇post – 我为什么翻译《程序员度量》,受邀参加Scrum Gathering Shanghai 2013的活动,话题是《程序员度量》。说真的,对这个话题我没有太大的自信,很容易触到一部分人的神经,而我本身又是一个不太善于争论的人。谢谢孙妮和老窦的鼓励。我决定从另外角度来说程序员度量的这件事——从我们之前的失败案例看起(起码从我的角度是这样)。我想从这样的角度会引起更大的共鸣,让大家明白其中的种种。作为一种反思的素材供大家参考,这是有帮助的。

现场的反映超出了我的预期,认识到有很多的朋友在关注这个问题,也有的朋友正在经历类似的煎熬和困惑:

  • 短期的激励无法满足长久的发展
  • KPI来限制团队或成员的工作行为,发现长久之后,丢失了一个研发团队本应有的激情和创新
  • 绩效考核
  • 度量的数据无法收集,或无法保证数据的有效性及一致性
  • 是否需要花大量的精力来做这个事情

可能持反对意见者从这些问题会立刻得出这样的结论:度量方法害死了。

我本身亲历过这样的过程,而且很有幸多经历了几个角色,能更多地有同理心地去思考这些问题。如果真的需要度量,是否可以从几个方面做一些改进:

  • 不做排名比较
  • 不做限制工作行为的事
  • 只获取团队动态的洞察力,用于管理者对团队的认识及发展调整
  • 只做对你可以控制的面的度量,限定度量的范围
  • 从你开始一个度量,也从你结束一个度量,不留下给别人利用你的度量耍流氓的机会。A制定度量的时候是为了获取团队动态,而B可能就会用来做团队排名。

说多无益,只是想请大家审慎地做出对人的度量这回事,目的和策略的不同,同样的事情,最后出来的结果是不同的。