按:今天在网上看到阮一峰推荐的《Hype Driven Development》,忍俊不禁,联想到工作中的很多经历又百感交集。趁春节假期翻译出来(练练手),与大家共享。


软件开发团队所做的软件架构或技术栈的决策,很多并没有经过踏实的研究和对目标成果的认真思考,而是不准确的意见、社交媒体的信息,或者就些是“热闹”的玩意。我称这种作派为“热闹驱动开发(Hype Driven Development,HDD)”,眼见它的危害,我赞成更专业的做法,就是“脚踏实地的软件工程”。下面我们一起看看HDD的来龙去脉,想想能如何改进。

(more…)

最近的面试中我发现一个很有意思的现象。问“还记得数据库范式吗?”,大多数工作了几年的开发人员都答不上来,但是其中大多数人会补充说“虽然我不记得范式了,但我可以保证自己设计的数据库肯定都是符合范式的”。

身为技术人员,大家都知道逻辑的重要性,那么逻辑的结论就是:范式这东西完全不重要,不记得了也不妨碍使用,而且不会出错。这种结论似乎有点不合逻辑,所以有必要专门谈谈范式。

(more…)

按:本文的很多观点来自与七牛云存储首席架构师道哥(李道兵)的讨论,在这里对道哥表示感谢。

高校的计算机教育与时代脱节,这已经成为大家的共识。如果要问哪些课程脱节最严重,我的答案是“软件工程”。其他的课程虽然也有脱节,但多少有点用处:编程语言虽然不教怎么把程序写漂亮,至少教了语法;网络课程虽然没有形象直观的展示,毕竟通讯协议还在使用;数据库课程不讲数据库的安装和调优,关系代数理论仍然是不少问题的原型;数据结构与算法即便看起来与开发没有直接关联,有了概念总不会吃亏……

只有软件工程,是例外。顾名思义,“软件工程”讲的应当是把软件开发出来的学问。所以,它是名不副实的:如果你按照“软件工程”教的去做,多半开发不出来软件,至少开发不出好的软件。一方面大量毕业生不会写程序、写不出好程序,另一方面合格的“软件工程师”奇缺,对这种怪异的景象,名不副实的“软件工程”功不可没。

(more…)

大概六年前,我在一家名为“抓虾”的在线RSS阅读网站工作(如果你不清楚RSS阅读网站是什么,可以参考Google Reader)。阅读器都需要显示当前用户的未读数,抓虾的做法是给出精确的数字,明确告诉用户“你还有2456篇文章没读过”,Google Reader则显示为10+、100+等形式,告诉用户“我还有十多篇/一千多篇文章没读过”。初看看来,这只是一种普通的差异,但产品人员提出10+、100+的形式更好,原因我如今记不太清楚了,似乎是说这样给用户的心理压力更小,因为如果数字比较大,用户就不需要知道具体的数值,所以阅读体验更好。虽然程序员都并不认同这种理论,但因为分工不同,最终做开发的大伙还是完成了这个功能。“可想而知”的是,这个功能上线之后并没有带来明显的正面反馈。更好玩的是,过了一周,Google Reader的未读数竟然改成了准确数字!

前几周,我在twitter上说起这个故事,本来只是凑兴当个玩笑,收到的反应却出乎我的意料,因为反馈大都是对产品经理一边倒的负面评价。我又想到自己的一个朋友,他在某家以产品经理文化著名的大公司做开发,谈到理想的工作,他的要求是“找个产品经理少的地方就好了”。这样看来,程序员和产品经理的矛盾是普遍而且深刻的。

(more…)