本篇文章由Duan Lian翻译自Carlos Oliveira的What all programmers have in common? 转载请注明
软件开发我也做过,什么样的程序员都见过。有些程序员很有才,而且高产。也有些人水平就不行了,水平不高还不思进取。
程序员的生产率差距还是很大的。在大多数情况下,牛人开发的速度是一般人的十倍,不管用什么语言或者开发工具。所以别想着用什么动态或者高级的IDE就变成牛人。
不管水平怎么样,大家都有个一样的毛病。在估计项目大概要用的时间上,大家都太乐观了。可以说大多数的开发项目延期都是因为这个毛病。
水平越不行,这个毛病就越麻烦,因为水平不行的人开发速度都很慢,而且质量也很低。不过即使是牛人,这个问题也一样存在。这个毛病之所以会出现,是因为我们往往忽略了开发过程中的关键问题。
举例来说,做一个东西,我估计编程要花20小时。没问题,但是这20小时没包括你跟客户开会的时间,没包括优化数据库的时间,甚至也没包括你把bug提交到Issue Tracker的时间。这些事情当然占用你的工作时间,别忘了在估计时间的是也这些时间都考虑进去。
缩小差距
不管你水平怎么样,都可以做一些事来尝试改善一下时间管理,下面是几条我试过而且效果不错的方法:
给你花费的时间记流水账。我们通常根本不知道时间到底花到哪了。这笔糊涂账的结果就是,我们把大量的时间花费在了没有什么价值的鸡肋事情上。记个流水账,你就知道哪里你用的时间太多了,哪里还需要更多努力。
将你的时间估计乘以一个放大系数。 你对时间分配大概有数了之后,就可以估计有多少时间花费在了软件开发上,有多少时间花费在了开发相关活动上。不同情况下这个系数是不一样的。举例来说,如果你有很多会议要开,那这个系数就要大的多。根据你的情况确定一个系数,并将这个系数应用到开发估计上。
学会说No。 做的东西的时候,你会想增加一些新功能进来,你的时间不会凭空增加。在这种情况下,你需要明确表示,时间不够完成额外的计划。”说No“要比项目最后延期好的多。
结论
程序员都一样,估计要用到的时间常常少于需要的时间。这很自然,因为大家都没有考虑那些额外的任务。仔细了解自己的工作流程,学着对你不能做的事情说不,我们都能把学着把好钢用在刀刃上。
继续阅读
- Mythical Man Month: an earlier view on scheduling issues for software development.
- Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software.
- A proposal for better software schedules, by Joel Spolsky.
(全文…)
07 十二 08 喷下M8
cnBeta上看M8和煤油喷多了,越来越觉得没有意思了。很多人还停留在拿苹果的单键鼠标说事的水平上。
M8能不采用WM,从CE制作出这样水平的UI,即使是90%抄袭也好,也是非常了不起的。别老拿抄袭说事,Apple reinvents the phone,以Meizu的家底,JW说再reinvents一次,大家会以为他在说笑话。几百年前牛顿就说了,站在巨人的肩膀上。
M8的解锁界面个人非常欣赏,解锁到不同的功能介面,这个是Apple所没有考虑到的贴心功能。咋一看没什么大不了的,但是差距就是一点一点积累出来的。Mac的Dashboard,被人说是噱头,Expose被人说是华丽的花瓶。Windows少了这些虽然也一样能用,但是鼠标一甩,那些乱七八糟的窗口还一动不动,总是有些郁闷的。用户是被惯坏的。
只是有些人喷的问题让人有点受不了。说iPhone系统没有多任务支持是个废品。别忘了,iPhone它就是个手机,它不是电脑,不是所有的用户都懂最小化和关闭有啥区别。不是所有的用户都关心,我现在还剩下多少可用内存,还能开几个程序。就是有多任务支持了又怎么样?屁大的手机屏幕,我还能分成两半使?你说可以应用程序快速切换,那么,现在iPhone的切换怎么样?难怪WWDC上iPhone的manager要嘲笑WM一翻。
我们使用统一的Push平台来解决后台驻留进程对电池、性能的影响,那么,这个问题微软是怎么解决的呢? 恩,任务管理器. 全场爆笑
微软的设计人员,智商其实挺高的,只是他们经常以为用户的智商跟他们一样高。
写M8评测的人,我也喷两句。大家心里都明白是在打软广告,拜托你也打的专业一些。把wm下的评测软件挨个拿来试试哪个能在M8下跑,能跑起来的试出来个指数,接着Excel做张图,这叫毛评测。你当是测CPU呢。有几个人能看的懂这些个玩意,多截两张操作界面的图,多整出点高质量的视频,比什么都实在。看看iPhone 3G的This is going to change everything那几个广告,好好学学广告该怎么整。
Tags: iPhone, M8, 苹果, 魅族
本本速度神速,Designed by ECUST已经出炉了。
有做网站,开博客业务的去找他吧,嘎嘎。

谁动了我的时间?这是个问题。
对于像我们这样一天耗费6+个小时在网上的人来说,这个问题似乎是无解的。MSN、QQ、校内、新浪新闻、BBS、pplive,每个程序、每个网站都在想方设法抢走你的时间。你的时间去了哪里?
你本来是要去查一篇文献的,打开浏览器,首页是新闻,那么就先看两眼再查吧。看了一会新闻,好不容易打开了文献数据库,这时你的qq响了,很久没见的朋友在跟你打招呼,于是你又打开了QQ聊了起来。
晚上没事干,看看校内吧。挨个看完了朋友圈的新鲜事,顺便留个言问个好。当你转回自己的空间,别人又给你留言了,于是回复,于是别人再回复你的回复。。。。。
每个人都有这样的经历,只是程度深浅不同而已。对大多数人来说,他们的本意并非是要消磨时间,只是现在的软件和网站都在想方设法让你把时间消磨在它们上面,你的时间就是他们的利润。
花钱花的特别厉害的时候,就想着记一本流水账,把每天花了多少钱记下来。只有人给时间做计划,但是很少有人对时间做记录。对我这样的人来说,计划总是有一堆的,但是能执行下来的确是很少的。常常对着电脑一个晚上最后也不知道到底都干了些啥。那么,为什么不做个记录器?记录我对着电脑做了些什么。我们有木马,有keylogger,做个这个东西不是难事。那么要记录些什么呢?1.进程 通过进程可以知道你在开哪些软件。但是,进程并不能告诉我们你在使用这么一堆软件中的哪一种。于是我们要记录2.当前活跃窗口。通过记录活跃窗口,能够记录下我在某一时间到底是在干什么。
常见的窗口标题就那几种,记录下来很容易。然后根据一定的模式进行归类,归类后即可获得使用时间的统计。比如含有Internet Explorer几个字的我可以认定为是在上网,含有Outlook或者ThunderBird可以认为在处理邮件。如此而已。
Tags: 时间, 时间管理
马上要开始一个让人期待的桌面应用程序项目了。单一平台,没有浏览器差异,完善的窗体设计器,好用的IDE,应该算是最佳的开发环境了。Visual Studio很贵,好在有人买单,嘿嘿。介个项目最重要的部分就是人机交互的设计,介个人机交互要怎么来做却是个很无厘头的问题。
什么是好的人机交互界面?
几乎所有讲UI的书都在批判什么样的UI很糟糕,很难用,怎么个糟糕,有多难用。没有一本书给出了好UI的标准答案。好吧,其实他们都说了,好UI的标准答案就是好看,好用的UI。全是废话。
KISS?
记得UNIX的信条吗?Keep It Simple, Stupid 这就是传说中的KISS原则,诞生于当爹的施乐发明图形界面之前。当儿子的苹果牢牢记住了Simple,当孙子的微软貌似就只留下了Stupid,而且还越来越Stupid了。XP的任务栏中出现了窗口组这么个东西,微软称之为“方便的”“改进”。就是这么个玩意,让我在在n多个IE窗口时本来只需要一个点击的动作变成了两个点击。后来出了个Vista,还出了多个版本,在高级版本中提供的Aero功能,又把我喝了一跳。这些年Mac OS的改进微软也是看在眼里急在心里,想抄Expose不小心来了个弄巧成拙。Aero 3D的排列放在那,看起来是3D排列的一排窗口,很酷,用起来怎么那么别扭?虽然是一排窗口,但是只能看到第一个窗口的内容,后面的被通通挡住了,要用鼠标滚轮滚动才能看清,既然这样,这个“快速”切换功能不知还有存在的意义否?
该怎么搞?
老乔在评论iTunes Store时说过一句很在理的话,
They cares nothing about MP3, what they want is music, music, music!
啥意思,换句话说。
用户才不管你用的是MySQL还是MSSQL,不过管你是用的C#还是VB,用户关心的只是色谱色谱色谱色谱!
Tags: Think
WYSIWYG:所见即所得 Word、Visio、Dreamweaver
WYTIWYG:所想即所得 LaTex、DOT、HTML&CSS
经过Word、Visio、Dreamweaver这一干软件的一番忽悠,WYSIWYG的观念早就到处泛滥了。但是WYTIWYG你听说过吗?Mac OS的拼写检查甚至还建议我改成WYSIWYG。

所想即所得是个很好的概念,易学,对于小规模的项目处理的得心应手。但是一旦到了多人协作的大规模项目,就显得非常力不从心了,不仅仅是难用,而是根本无法使用。想想两个作者和一个编辑一起用Word工作的情况,一个巨大的Doc文件,缓慢的打开速度,页面上乱七八糟花花绿绿的批注。不但影响工作效率,还非常影响心情,FRG!
再聊聊Visio,画巨型关系图的时候,根本无法两个人一起工作,同一份文件,一个人修改一部分,另一个人修改了另一个部分,两个人的修改却无法合并,这么重要的一个功能竟然缺失了。
一直想把CVS引入到文本工作的团队协作上,但是大家用的往往都是word,这造成了一个很严重的问题,版本控制中的一个重要环节─合并更改根本无法实施。
要想要团队写作顺利进行,文件格式必须是文本的,这样才能是diff等工具有用武之地。文本格式还必须是人能够辨读的文本,这样使用者才能进行合并更改。(把二进制文件用Base64编码一下那也是文本,但是人看得懂吗?)
那么,这样一种文本格式有没有?
当然有,从简单到不能再简单的纯文本,到有基本样式功能的RTF,再到旧的UNIX学院派的LaTex(发明Tex的高德纳是个天才,他发明的数据结构这门课现在还在折腾全世界CS系的童鞋们,嘿嘿)。
纯文本?一般用用问题不大的,但是不支持复杂的样式,在实际应用中意义不大。
那么RTF?和纯文本同样问题,虽然有样式支持,但是文件格式,如果让你手写出来,你写的10行里有6行是指定格式的废话,实用性也不大。
最后再看看LaTex。LaTex这个东西,功能非常强大,易用性也可以说还不错,就是有着*nix类程序的通病,组件多,配置多,学起来很烦。如果不是自然科学类的学术专著的话,有几位敢用LaTex来写,又有几家国内出版社愿意编辑LaTex的稿件。不过LaTex在学术界现在还是在广泛使用的,某些期刊是只接受LaTex格式的稿件的。
OK,那我们还能用什么?就说说挨踢业界的应用。一份开源类库文档?一本in Action书?说个大白话,不管什么需求,都是属于这两类的,网络出版或者印刷出版。现在就说说网络出版,你可以整成PDF甚至也可以像某些小说网站防盗链一样直接就来个JPEG图片,但是从方便读者的角度考虑还是使用HTML方便。大部分的HTML都是在Word里完成再由机器导出的,不够也可以反过来想想,问什么不可以直接手写HTML?
手写HTML,将LaTex式的WYTIWYG思想引入到写作的过程中。你不要像用Word一样想着这里应该加粗,那里应该加个下划线,这边应该右对齐。就用HTML标签来说明,这里是个关键字,那里是个重点段落。写文档的时候只要用HTML标签来标注,关键字应该怎么强调,重点段落应该怎么突出,可以留到后面让CSS来慢慢解决。
HTML是基于文本的,因此有极好的CVS兼容性。另一方面,HTML(XHTML)语法极为简单易懂,而且有极强的扩展性。各位看官不知道有没有听说过CHTML(Chinese How To Make Love?),利用一个特制的DTD把HTML变成了这样的样子。
<段落>这是一句话,这是一个表格<表格><行>这是第一行</行><行>这是第二行</行></表格></段落>
其实CHTML这个东西跟汉语编程一样无聊,这里就举个例子说明一下XHTML的可扩展性。我们在真正拿HTML来写的时候可以这么写。
这里是一段话,有一个<kw>关键字</kw>,还有一句Java代码<code>System.out.println(“Hello World!”);</code>
HTML比LaTex优越的另外一个重要因素是当团队中有人无法接受手写HTML时,可以采用DreamWeaver这样的工具(其实我觉得用DreamWeaver去点按钮还不如用多打几个字母方便)。
那么,印刷出版怎么办?我们也都知道,HTML对于Page的页面是很模糊的,而且在不同的浏览器中还有不同的渲染效果。现在有个思路,定制一个Gecko或者WebKit内核,定制一个DTD,扩展HTML加入所缺失的功能,以此作为渲染标准。不过现在也就是随便说说罢了。
Tags: WYSIWYG, WYTIWYG