有一种言论是好的程序员的效率是差的程序员的10倍,那为什么那些差的程序员还能找到工作并且能一直做下去呢?我最近阅读了 DZone 上面的 Troy Hunt 的文章“Measuring code quality with NDepend” 。先不管 NDepend,Troy 分享了一个关于专业性的有趣的观点:

我一直想不通为什么软件行业的专业性的差异会如此巨大。对比医生或者飞行员,好的医生和不好的医生差别不会很大,而飞行员的差别应该更小。当然医疗事故和飞行事故也会发生,但那确实很偶然。但是软件行业垃圾代码,低质量软件的概率似乎要高很多很多。

2MVIE)Y}%$M$RO1JH(AQ6JN
Troy 的文章引起了我对专业性的思考,以及为啥不好的程序员也能找到工作并能一直做下去。我认为有三个主要原因,可以解释为啥竞争力,效率和专业性不是程序员职业生涯的决定性因素。
- 明星公司通过市场营销和技术竞争力创造伟大的产品。
- 外行无法分辨代码好坏。在漂亮的 UI 下面可能是技术灾难。
- 代码的好与坏可能需要10年的时间才能体现。
产品理念,市场营销,技术壁垒
像 Apple,Google 这样的明星公司,他们有非常好的产品理念,市场营销以及技术壁垒。这三样只要有其中两样就可以把产品做成功,例如好的产品理念和良好的市场营销加上一般般的技术水准。
我记得在 2000 年的 CeBIT 会议上,我当时所在的公司有一套非常好的网页发布系统,但是我们很难让大家了解我们。但是我们隔壁的公司穿着西装革履,非常健谈,他们的产品也不错(虽然我同事常常嘲笑他们的图像处理产品就像学校实验室的作业)。那个图像处理公司现在是移动图像软件领域的主要玩家。而我的老东家还是一家很小的公司。
外行无法分辨代码好坏
我不知道那家图像处理公司的代码如何,使用他们产品的用户同样不知道。但是我知道他们的用户界面设计很好。一款软件的界面与代码质量真的没有什么关系。即使你把代码给用户看,他也看不出来啥。但是建筑行业就不一样,大部分外行可以通过仔细查看外观来判断一栋楼的质量。
10年见分晓
对于用户来讲,他关心的只是软件是否最新版本,是否好用,是否漂亮。代码的质量往往需要在使用很长时间以后才能体现出来。一个软件维护了十年以后,具有良好的设计和编码的软件将依然很好用,而不好的软件可能已经被抛弃。不幸的是,糟糕的程序员可能在这十年中写了很多烂代码。时间会消磨一切,很多项目时间一长大家都不在乎这些了。而这些糟糕的程序员依然可以拿他们去年的漂亮项目出来找工作。

源链接

Hacking more

...