2009-12-31

开发者如何保鲜自己的技能?

开发者如何保鲜自己的技能?

作者 张凯峰 发布于 2009年12月24日 上午8时27分

开发者如何保护好自己在技能上所作的投资,让自己的技能保质保鲜,是一直以来头疼但又必须面临的问题。William Jordan为大家总结出了六点
 
  1. 阅读。阅读,阅读,再多读些。找到你想要了解的编程主题相关的图书或者网站,就开始阅读。亲手试过每一个出现的范例并理解它们。
  2. 厂商认证。通过一些认证可以让自己的简历强大起来,比如微软就会为各个层次的角色提供认证考试。你可以通过这样的认证来向你未来的雇主展示自己的领域技能,并证明能胜任新的工作。课程可能会比较贵,如果有时间可以在网络上选择免费的资源。
  3. 听课或参加研讨会。许多厂商也会提供在线或离线的学习研讨会。也有大量关于编程主题的网络广播。你可以花时间去学习这些,掌握新的工具。
  4. 授课。一些本地的大学会提供成人继续教育课程,并寻找行业专家来授课。准备这样的课程并向别人讲授,对自己是一个很大的提升,而且可能因此获得报酬。
  5. 从实践中学习。想着去做一个小型项目,如果想不出来,就看看周围有没有慈善团体或小公司需要这样的工作。此举并不是为了赚钱,而是通过实现技术来增强你自己的技能。你也可以到Getafreelancer或者 Scriptlance注册成自由开发者来完成一些项目。同样你可能因此而获得收益。
  6. 撰写文章并回答问题。有很多这样的网站让你来撰写文章或者回答其他开发者的问题,比如CodeProjectStackoverflow。在你为撰写文章或者回答问题而研究并编写代码时,你同时也在学习。此外你也在赢取良好的名声。

各位InfoQ的读者,你是怎么保鲜自己的技能的呢?



Pomodoro-敏捷方式的时间管理

Pomodoro-敏捷方式的时间管理

作者 Chris Sims 译者 金明 发布于 2009年10月13日 下午10时43分

社区
Agile
主题
敏捷技术
标签
Agile2008

一项名为“Pomodoro”的个人时间管理方法正日益受到敏捷从业者的欢迎。Pomodoro包含了很多与敏捷团队采用的实践相近似的做法:时间盒、频繁检查和调整、预估、对低技术含量工具的偏好,以及对保持可持续节奏的强调。 Francesco Cirillo从上世纪80年代就开始研究这项技术,当时他还是一个学生,一直在寻找一种方法,提高其学习时间的质量、减少使他不能专注的干扰和打断。

于是我就跟自己打赌——这很有帮助,因为如同受到羞辱——“你能不能学习——真正学习10分钟?”我需要客观的验证,一个时间指示器,然后我发现了一只形状像pomodoro(意大利语里的“西红柿”)厨房定时器。

在接下来的几年里,该技术一直在演变。直到1992年,它形成了基本的形式,一直沿用至今。在Pomodoro技术里面,不间断的25分钟被称为一 个Pomodoro,每项工作在若干个Pomodoro内完成。在每个Pomodoro结束时,有一个短暂的休息;每3或4个Pomodoro结束时,安 排有一个较长的休息时间。

该技术也包括一些轻量级的规划和跟踪。在一天的开始,创建一天中的目标列表,然后预估每个任务分别需要多少个Pomodoro才能完成。工作量超过 7个Pomodoro的任务应该被分解;少于1个Pomodoro的任务应该联合在一起,直到占满一个完整的Pomodoro。

打断和干扰则是被快速记录下来,在当前的Pomodoro结束之后再做处理。在一些罕见的情况下,如果不能用这种方式处理中断,当前的Pomodoro就会被停止并视为无效。Francesco指出,下一个Pomodoro会进展得更好。

在过去几年中,Pomodoro技术已经引起了敏捷社区的关注。Staffan NoteberAgile2008大会的相关讲演是如此受欢迎,以致于被选为在大会结束时再来一遍。Staffan在Agile2009大会上再次针对这项技术做了演讲,同时Renzo Borgatti也做了一个讲演,名字是:You say tomato, I say Pomodoro

如果想对Pomodoro技术了解更多,Francesco有一本45页的书和一张单页的备忘单,都可以从Pomodoro技术网站下载。

您是否尝试过Pomodoro技术?欢迎您留下您的评论,跟大家分享使用它的经验。

查看英文原文:Pomodoro - An Agile Approach to Time Management



用"蕃茄"来减轻时限压力

用"蕃茄"来减轻时限压力

作者 麦天志 发布于 2009年6月3日 上午4时59分

社区
Agile
主题
敏捷实施,
团队协作

Francesco Cirillo发明了"蕃茄技巧"(Pomodoro Technique,"蕃茄"在意大利文就是"Pomodoro")来集中精神处理手上工作,更有效应付限期的压力,一直受到不少注目,如果大家在工作时候也遇到集中精神的问题,希望这方法帮到您。

其实如果大家对Scrum有所认识, "蕃茄技巧"不会太难理解的,Henrik Kniberg就有以下描述

“蕃茄”很像Scrum﹣但是在”微型”层次,虽然可用在结对和团队,它最初设计为个人使用的,对我来说就像一人以二十五分钟为迭代的Scrum,而且有很多相同的好处。 :o)

Staffan Nöteberg写了一个简单介绍,需要的工具很简单:

  • 计时器,在厨房协助煮食计时的
  • 白纸,单行纸更好
  • 铅笔,有橡皮更好

然后就可以准备一天的工作日程:

  • 列出今天要完成的重要工作
  • 从工作清单上选出要完成的工作
  • 把计时设定为二十五分钟
  • 集中精神在这段迭代(或者称作"蕃茄")工作
  • 时间到了后休息五分钟
  • 每四个"蕃茄"休息更长时间,例如15-30分钟
  • 完成一天的工作后,从纪录上分析进度,并思考如何改善

Staffan还强调不要在"蕃茄"中转换其他工作任务,其他事情,可以在完成该"蕃茄"后完成,"蕃茄技巧"有以下好处:

  • 控制复杂性﹣把工作细分,一项工作不能多于七个蕃茄,专心25分钟工作,而不用考虑预设方案。
  • 逆转对时间的依赖﹣消除时限的顾虑,结果是完成一个"蕃茄",多一"X"记号代表工作有所进展,有系统地减少中断让我可以更好安排以往被动的行动。
  • 抽离﹣中间休息时间让我工作时更专心,休息过后,更可以看到完整的情况。
  • 回馈及改善过程﹣每30分钟纪录简单的数据并于每日点算,这是改善过程的决定因素,我想找出精益开发中所谓的浪费。
  • 可维持进度﹣短迭代能维持我的工作动力,小休让我对工作有重新判断,消除中断让我更专心,改善过程消除浪费。
  • 对决定的警觉性﹣人类脑袋不适合同时多工,在"蕃茄"(迭代)中我可以集中工作,在"蕃茄"之前我选择工作清单上最重要的工作,下班前我寻求过程改善,这些是频密进行的重要事情,但不是混在一起。

这套技巧也不是解决所有问题(当然从来没有一个方法可以解决所有事情),这篇文章指出在这技巧下仍然要解决团队沟通的问题,敏捷项目一直强调沟通,虽然这技巧没有提到团队如何沟通,但相信敏捷团队本身亦要好好维持沟通。

如果大家對這小技巧感興趣可以參下以下文章:

大家对这个新的方法有什么想法呢?不妨也一同分享。



“番茄”让时间变成我们的朋友

“番茄”让时间变成我们的朋友

编者按:InfoQ中文站不久前发布了两篇与Pomodoro时间管理方法相关的新闻《用“蕃茄”来减轻时限压力》和《Pomodoro-敏捷方式的时间管理》,本文可算是前文的延伸和实践验证。作者是AgileChina 2009大会上的讲师,本文即来自他在自己团队内部实践经验的总结。

在我们所有的对手中,最强大的是时间。面对时间,我们丝毫没有欺骗的机会,时间一分一秒的流逝,最终的胜利者总是时间。我们经常会觉得“哦,两天过 去了,任务丝毫没有进展,明天就是截止日期了,该怎么办?”我们经常忙于应付一个接一个的任务,没有时间去学习充电,享受生活,并由此陷入很大的焦虑情 绪。随着社会不断发展,工业文明极大地丰富了人际间的交流手段以及获取信息的手段,我们的时间利用效率却变得越来越低了。沉下心思专心做一件事情,对绝大 多数人来说已经变成一件不可能的任务。究其原因,主要有两个:

  • 干扰太多。人们不能专心把一件事情做完后,再去做另一件事情。经常是正在全神贯注工作的你,突然收到一封邮 件,接着放下手头的事情,回邮件。发出邮件后,切换回原来任务。每一次任务切换,往往要花更多的时间完成原来的任务。(平均每次切换要使原任务增加25% 的时间。引用3、 4)。设想一下,很多人一天要查看邮件50次、100次,还有MSN、电话等等。
  • 缺少明确的目标和优先级。所有时间都在应付紧急任务,不停地救火。这些紧急任务可能来自于老板、团队其他成员也可能来自于家人、朋友。为了应付新的紧急任务,经常要放下手头工作,在完成新任务过程中又出现中断,最终在不停的任务中断和切换中迷失了方向。一天下来不知道忙了些什么。

排除干扰,确保首先完成最高优先级的任务,是提高个人时间利用效率必须解决的问题。这与敏捷软件开发(Scrum、XP、Lean)要解决的问题何 其相似。针对软件开发中的类似问题,九十年代起Ken Schwaber、Jeff Sutherland、Kent Beck、Martin Fowler等大师们提出的敏捷开发解决方案,其中包括时间箱、不受干扰的迭代、具有优先级的代办任务列表、拉动(Pull)任务、承诺、计划与反省等 等。无独有偶,从九十年代初开始,意大利人Francesco Cirillo也基于相同的策略设计并发展了番茄技术(The Pomodoro Technique,Pomodoro意大利语“番茄”)来管理我们的个人时间。用到的工具很简单,一个厨房定时器(Pomodoro Timer),三个简单表格(当天任务列表 To-Do,任务清单Activity Inventory和记录历史数据的表格Records)。

番茄时段

在敏捷开发中一个迭代的周期通常是一到四周,番茄技术的一个迭代是25分钟,称为一个番茄时段。跟敏捷开发的迭代类似,在一个番茄时段开始时需要从 当天任务列表中找出目前最高优先级的任务,然后不受干扰地去完成该项任务,一直到定时器的铃声响起。每个时段结束后可以有三五分钟时间自由支配,然后再开 始新一个时段。在敏捷开发的迭代过程中,团队只会集中精力完成当前迭代中的任务,不会对新的任务需求做出响应,所有的新任务都放到产品 Backlog。在番茄时段中,个人也是采用相同的策略,在紧急情况下,新的任务会放到当天任务列表,作为一个当天的一个未计划任务;而一般的任务,只需 要在任务清单上加一个新的任务项目。然后不受干扰地继续当前的工作。即使任务完成时,定时器还没有响,处理方法也很简单,用剩余的时间去“重构”完成的任 务,使它更好一点儿。

工作日程表

以下以一个使用番茄技术的程序员的工作日程表为例。

在这个日程表很好地融入了戴明环PDCA(计划Plan;执行Do;检查Check;纠正Act)。每一天总是从计划番茄时段开始,最后一个番茄时 段以分析反省结束。每天的历史记录一般包括计划执行情况、未计划任务情况、估计与实际,干扰次数,干扰内容等等。通过这些历史数据我们可以很容易地观察自 己:

  • 计划执行是否有效
  • 估计是否准确,偏差有多少
  • 未计划任务有多少,分别做什么
  • 工作中的干扰多不多,主要干扰有哪些

通过切实的数据对自己的时间利用情况有了清晰的了解后,我们就可以在反省中有针对性地设计解决方案。如此不断反复时间效率就会不断得到提高。

消除干扰

番茄技术最大的好处是能够帮我们集中精力,消除干扰。每个番茄时段只有25分钟,除非是十分紧急的情况,一般情况下都是可以在完成当前时段后再去响应。通常我们会遇到两种干扰:

  • 内部干扰,主要是自己想做某些事情,比如喝水、查邮件、网上聊天、上网等等。针对内部干 扰,主要有两种解决方法,第一种就是有针对性的计划一些处理这种任务番茄时段,比如上面日程表中的专门用来处理邮件的时段;另外一种方法就是利用番茄时段 之外的时间,比如那些自由支配的时间以及午饭时间。
  • 外部干扰,比如电话、同事来问问题 等。与内部干扰不同,外部干扰需要与其它人打交道,因此需要采用不同的策略。具体策略是“通知Inform,商量Negotiate,晚些时候响应 Call Back”。可以用留言机接电话,邮件也可以暂时放到收件箱中稍后处理。如果有人当面过来,可以告诉他:“我先忙完手头工作,二十分钟后去找你。”,然后 继续手头的工作。晚25分钟或者一两个小时对通常意义上的紧急任务来说,是可以接受的。对对方来说需要等待25分钟可能不是什么很大的问题,但是对自身来 说却有极大的意义,我可以继续专心把我手头上最重要的事情。当然很难避免的,也会出现不得不取消当前番茄时段,着手处理十分紧急的任务的情况,这其实跟在 Scrum中取消当前Sprint一样,只有万不得已才会为之。

每当有干扰的时候,都要在每日任务列表上做一下标记,如果需要,同时在每日任务列表(如果是紧急任务)和任务列表上填加一个未计划任务。把干扰放入 任务列表使得我们有机会重新思考一下每一个任务是否那么重要,是否真的需要,很可能过了一段时间我们任务列表上的很多任务变得不必要了。另外,所有的干扰 都被显式地标记在每日代办任务列表和历史记录表上。每天都可以反思每天的干扰次数以及内容。干扰数据能够是我们更有意识地关注时间效率的问题,促使我们通 过重新计划,调整策略等等方式把干扰降到最低。比如对于电话太多的情况的一个有效的策略是,每天应该固定一段时间把电话放到留言,到会议室去办公,然后告 诉其他同事,在紧急情况在哪里能够找到自己。而对于邮件太多的情况,可以多安排几个番茄时段集中处理邮件。

任务计划与估计

番茄技术的另一个好处是给我们提供了一种全新的估计和计划的手段。在任务列表上的每个任务都需要有一个规模估计值,这个值其实是标明完成该任务需要 花的番茄时段的数目。由于每个时段都是不受干扰的“纯”投入的时间,因此可以通过番茄时段数目有效地把任务的规模与时间建立联系。通过把实际花费的番茄时 段数目与估计值相比较,分析,可以帮助提高自身的估计能力。同时,通过分析历史记录中非计划任务的数目以及内容,也可以帮助我们对自身的时间利用情况有更 好的了解,从而更有助于计划个人的时间。

转变时间的观念

番茄技术能够改变我们对时间的态度。时间变成了一个个番茄时段。每一段25分钟,滴答滴答从25分钟减到0。从而给我们一种紧迫感(Eustress),督促我们尽快完成任务,尽快做决定,从而有效的提高效率。效率的提高能够有效地提升自信心和成就感。

关于番茄技术的详细介绍可以参见它的网站(引用1)以及The Pragmatic Bookshelf的新书《Pomodoro Technique Illustrated》。

引用

  1. The Podomoro Technique
  2. The Pompatus of Pomodoro, PragPub Issue #5, November 2009
  3. Manage Your Effort Not Your Time, Harvard Business Review, October 2007
  4. Perfection: An Unrealistic Goal - The Challenge of Being Agile

作者简介:滕振宇(Daniel Teng),Irdeto BSS高级软件经理,CSP,敏捷教练。创建并领导Irdeto BSS上海研发团队,负责大型付费媒体计费以及客户管理系统软件产品的开发。



2009-12-28

35 个你也许不知道的 Google 开源项目

Google是支持开源运动的最大公司之一,它们现在总共发布有超过500个的开源项目(大部分都是利用它们的API来完成),本文将列举一些有趣的开源项目,其中很可能有不少你不知道的哦。

文本文件处理:

Google CRUSH (Custom Reporting Utilities for SHell)

CRUSH是为命令行或shell scripts处理特定文字数据而制作的一系列工具,这里有指南

C++库和源代码:

Google Breakpad

一个开源的多平台崩溃报告系统。

Google GFlags

Gflags是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string。指南在此

Google Glog

Glog库可执行应用级的登陆,提供基于C++式的登陆API,可用于Linux、BSD和Windows。指南见此

Google PerfTools

这个工具可让开发创建更强大的应用程序,特别是那些用C++模版开发的多线程应用程序,包括TCMalloc, heap-checker, heap-profiler 和cpu-profiler。指南见此还有这里

Google Sparse Hash

非常节省内存的hash-map。指南见此

Omaha – Google Update

Omaha,也就是Google Update,它可以保证你的软件随时升级到最新版本,目前很多Windows下的Google软件都是用Omaha升级的,包括Google Chrome和Google Earth,当然你也可以用于自己的应用程序。指南看这里还有这里

Protocol Buffers

Protocol Buffers是一种可扩展编码序列数据的方式,Google在几乎所有内部RPC协议和文件格式都使用了Protocol Buffers。指南见此它可以用于很多语言而且被一些IDE所支持,比如NetBeans

互联网:

Google Code Pretiffy

这是一个Javascript模块和CSS文件,它可以让HTML页面里的部分源码高亮显示,支持C/C++, Java, Python, Ruby, PHP, VisualBasic, AWK, Bash, SQL, HTML, XML, CSS, JavaScript, Makefiles和部分Perl,不支持Smalltalk和所有的CAML。例子见此

SpriteMe – easy “CSS spirtes”

SpriteMe使你可以更轻松的创造CSS Sprites(俗称雪碧……)就是把网站要用到的图片都堆在一张图片里,用CSS控制调用哪个区域。它有一个自己的官网在这里

Redacisaurus

Reducisaurus是一个压缩CSS和JS文件的网络服务,基于YUI压缩算法,运行于App Engine。

JaikuEngine

JaikuEngine是一个运行于App Engine的微博系统,由jaiku.com运营。要查看移动客户端的源码可以看这里这里还有介绍

Selector Shell

Selector Shell是一个基于浏览器的测试工具,它可以让你看到CSS在不同浏览器里的样式,用Javascript写的,你可以在这里测试

Google Feed Server

Google Feed Server是一个开源Atom发布协议服务,基于Apache Abdera框架,允许开发者快速为当前数据源(比如数据库)配置feed。指南见这里这里

Melange, the Spice of Creation

这个项目的目标是创建出一个适合开源贡献流程的框架,比如Google Summer of Code TM (GSoC)项目。使用这个框架你就可以用Google App Engine来运行Google Summer of Code项目,和其它类似项目比如Google Highly Open Participation TM Contest和GHOP。指南见此

NameBench

它可以查找最快的DNS服务器给你的电脑用,在Mac OS X、Windows和UNIX系统下都有命令行也有用户界面可以帮你测试,这是Google工程师用20%自由时间写出来的。

Rat Proxy

一个半自动化的大型被动网络应用安全审查工具,专为精确的探测而优化,文档在此

TopDraw

Top Draw是一个图形生成程序,使用简单的文字脚本,基于JavaScript编程语言,Top Draw可以创造出非常复杂和有趣的图形。支持Mac OS 10.5以上系统,使用XCode开发。

etherpad

开源的EtherPad,这是一个基于网络的实时合作文档编辑器,这个项目主要是为了演示代码而开发,帮助那些想在自己服务器部署Etherpad的人使用,这里有如何安装的指南。EtherPad使用JavaScript、Java和Comet服务器来建造实时协作服务。

Chromium

Chromium是开源版的Chrome浏览器,Chromium的目标是建立一个新一代的强大网络应用程序,它与Chrome有很多不同之处。这里有指导如何在Linux上编译Chromium

V8 Google’s open source JavaScript engine

V8是Google的开源JavaScript引擎,用C++写成,用于Chrome浏览器之上。V8使用ECMAScript的ECMA-262 第三版可运行于Windows XP、Vista、Mac OS 10.5和使用IA-32或ARM处理器的Linux。V8可独立运行也可嵌入到任何C++程序里使用,这里有指南

Chromium OS

Chromium OS是开源版的Chrome OS操作系统,提供快速、简单而安全的网络体验,源码在此

Android

Android是第一个免费、开源而且可完全自定义的移动平台,提供完整的堆栈:一个操作系统、中间件和重要的一用应用,它包含丰富的API可以让第三方开发者开发出强大的应用程序。

MySQL工具:

Google MySQL Tools

各种管理、维护和改进MySQL数据库性能的工具,由Google编写,包括:

  • mypgrep.py:一个类似pgrep的工具来管理MySQL连接
  • compact_innodb.py:可导出和重载所有表格的密集型innodb数据文件

Google mMAIM

mMAIM的目标是对MySQL的监控和分析更简单,且可以和任何环境整合使用。它可显示主/从同步状态,一些性能状态,可以返回大量“show”命令的状态等等。

其它:

Stressful Application Test (stressapptest)

Stressful Application Test试图让来自处理器和I/O到内存的数据尽量随机化,以创造出模拟现实的环境来测试现在的硬件设备是否稳定,Google就在使用它,现在是Apache 2.0许可,这里有介绍安装向导指南

Pop and IMAP Troubleshooter

它用于诊断并解决客户端到邮件服务器的连接问题。

OpenDuckBill

Openduckbill是一个Linux下简单的命令行备份工具,可用于监视文件/目录在有变化后是否标记为备份,并传输这些变化到本地备份目录、远程NFS导出分卷或是用rsync命令导出到远程SSH服务器。见安装向导

ZXing

ZXing(发音类似Zebra crossing)是Java的开源多格式1D/2D条码图像处理库,目的是使用内置在手机上的摄像头拍照并对条码进行解码,而不必与服务器通讯,它被用于Android系统。这里有向导支持的设备列表

Tesseract OCR Engine

Tesseract OCR引擎是1995年UNLV Accuracy测试的前三名之一,在1995和2006年之间它的进展不大,但依然是当前精度最高的OCR引擎。这个源码可读取二进制、灰阶或彩色图片 并输出文字,内置一个TIFF阅读器可读取非压缩的TIFF文件,增加libtiff后也可读取压缩图片。指南问答

Neatx – Open Source NX server

Neatx是一个开源NX服务,类似NoMachine公司商业的NX服务。NX协议比VNX更强大,它们的区别主要在:

  • NX是X11客户端所以不会发送位图
  • NX可兼容X、VNC和Windows版的Remote Desktop
  • NX可缓存数据
  • NX安装简单

另外一个可选的项目可以看看Google的FreeNx

PSVM

它是这个文件的代码,这是一个SVM的“支持所有核心”的版本,可多机并行运行,实例见此

GO

Google开发的新编程语言,谷奥有报道

The Google Collections Library for Java

这是一系列与Java 5以及更高版本有关的库,Google花钱给买过来了。

Google styleguide

每个主流的开源项目都有它自己的向导形式,比如一系列的演示代码。如果这些代码都按照“Style”的形式来演示,会更友好。

Via 0×1fff Blog