2020年/12月/31日

首页回退

房间里的的大象

今年最后一天,看了这篇极具价值的文章,分享一下,是Apache软件基金会副总裁Niclas Hedhman在2016中国开源年会上做的演讲

原文

“房间里的大象”是英语中的一种表达,指的是那些没有人敢谈论却又很明显的事情。
这个演讲,我想谈谈软件行业里没有人敢谈论的话题,但却能把我们带到另一个层次
几乎每个人都看到过漂亮的代码。这些代码简洁明了,而且很强大的。这种代码易于理解,易于使用,易于扩展。我们可以很快地完成工作,把事情做好。
然而,如果我们问人们,他们是否在漂亮的代码基础上工作,大多数人说没有。那么,这个代码是从哪里来的呢?嗯,很少有开发人员能写出这些漂亮的代码。
更加深层次的原因,是我们行业存在已久的危机。行业对人们所创造的东西几乎没有限制。需要学习的东西也多到令人震惊。

信息爆炸:

我们来看一些事实。我们的行业正在以一个惊人的速度在发展。几乎每周都有新技术出现,这种情况在过去的三十年中一直如此,我见证了这一切。
行业对人们所创造的东西几乎没有限制。需要学习的东西也多到令人震惊。
开源现在是一个公共领域,我们几乎不需要从头开始。
我们在已有的平台上工作,以新的方式将已经存在的合起来,再加上自己的创新,就发布了这个产品,其他人可以再在这个基础上创造。
这造成了产量以史无前例的速度加速产出。
程序员中,有一半都工作经验都不足五年。
实际情况可能更糟,因为还有很多程序员将在未来在10-15年离开这个行业。所以,我们行业非常缺乏经验,而且一直缺乏经验。
更糟糕的是,由于技术的大环境变化如此迅速,在一项技术过时之前,没有足够的时间来积累经验,然后所有人又开始使用另一个技术了。
这导致同样的错误是一次又一次的循环发生。
大多数程序员不会发明新技术供别人使用。我们使用热门的技术。
我们相信,其他人已经知道何种技术适合我们。我们也不会动脑去思考。
我再说一遍,我们不会批判地思考,并且我们想信仰宗教信条一样,相信别人告诉我该怎么做,我就应该怎么做。
在工作中,我们听比我们更资深的人的话,这些人通常是那些有一些成绩的同事。
但如果这是一个大公司,那么这些同事的话就会涉及办公室政治,或有为了赢得声望的因素,我们应该对这些人的话产生质疑。
我们的行为像一个宗教教派,也产生了许多神话,有的是偶然,有的是刻意而为。
大多数软件不仅是难以改变,而且一旦用了就往往不能结束。
一旦写好软件,部署好,要想摆脱它,门都没有,无论这软件用起来多么琐碎或一无是处。
大公司的经理们的另一个最喜欢的神话就是,程序员是可互换的零件。
如果一个程序员离开了,我们就从大街上找择一个新的,代替他。
软件知识不在代码里,而存在于写代码人的大脑里。
但大多数抽象概念都是在我们写的程序中产生的。
我们创造出的抽象概念只是小聪明,概念不够清晰。
我们也没有很多创造抽象概念的经验,所以我们创造出的是混乱。我们创造的抽象概念往往很糟糕,一片混乱,不利于项目的完成。
我的观察结果是,没有一个方法像宣传的那么好。几乎所有的软件项目都依赖于大神。
能完成项目的人,无论用什么方法,都能完成。对于新的项目,大神们擅长的是开始着手做。
在维护或改进代码库的时候,大神是那些工作中不介意遇到糟糕代码的人。
程序员分类:
天才 只有1% 天才程序员向我们展示其简单而卓越的杰作,有着漂亮的设计,简洁的抽象,简单易用…… 写的代码库很简单,可重复使用,且功能强大。
良好 写代码库比较复杂。通常他们留下了很多未完成的地方 代码写得没那么好,缺乏测试机制。
一般 通常是大公司的维护软件的大神。如果测试中断,他们只需禁用测试 他们也不喜欢与那些良好的开发人员工作 因为这些人会留下存在依赖关系的抽象概念和代码库。
较差 不关心任何东西。他们只会工作,写代码,回家,然后重复这一过程。他们永远不会学习,他们不听取别人意见。即使告诉他什么是好的代码,什么事糟糕的代码,他们也不能分辨出来。
糟糕 代码写的不是很好。所以他们想学习,渴望成为更好的程序员 他们也往往会过渡成为良好的程序员,但有的也会变成比较差的程序员
员工高流动率的另一个方面是,许多程序员为了逃避写代码,去了其他类型的工作岗位,如管理,业务分析师,甚至一些完全无关的专业岗位,因为他们做程序员不快乐。
当我们看到别人写的漂亮代码,觉得很稀松平常。
但我们这些普通人太愚蠢了,看不到自身的局限性。我们知道最漂亮的代码长什么样,知道这是如何使用,但这并不意味着我们可以自己写出这种代码。虚幻的优越感和达克效应分支理论告诉我们,我们太愚蠢了,却不知道我们是多么愚蠢。

我们对自己的能力有信心,写了那些在正常情况下几乎不能运行的复杂软件,这些软件即使在特殊情况下也无法运行。
用手写代码写出每一个细节,但没有创造出可以传承知识,所以我们无法提高集体技能。
接吻原理-保持简单,直接(The KISS principle - Keep It Simple, Stupid.)。
当你写代码时,记住这是一件事。不要做额外的抽象。避免概括。避免继承(inheritance)。
不要写你认为你将来可能需要的代码。当没有更多的代码可删除,那么工作就完成了。
即使你正在工作的代码真的很混乱,很糟糕,请不要让这种情况变得更糟。
即使代码很糟糕,如果你改善一点点,就会变好一点点。如果每个人都一点点,最终代码会变好很多。还有,不要让你的队友让把代码搞得更糟糕!。