题目中所指的程序员悖论的定义如下:
优秀的程序员常常会花大部分的时间去做他厌恶的工作,使用他同样厌恶的工具和技术。 |
这从某种意义上来说是个悖论。通常我们的直觉是,差劲的程序员才会把时间花在蹩脚的技术上,而优秀的程序员的时间是用在高新技术上的。没错吧?我在实践中发现了这个悖论,而直到后来我才明白原因。且听我一一道来。
程序员鄙视什么样的工作?
对于那些有经验的程序员而言,简直就是明知故问,不过在这里我主要是给非编程人士解释一下。
如果一件事完全可以自动化完成,那么那些优秀的程序员通常是对此不屑一顾的。如果强迫程序员去做完全可以让机器(通常是计算机)就可以办到的事,他会气得想揍你一顿。程序员的愿望是能让机器来干完所有的活,是所有哦,哈哈。而只有那些机器办不到的事,程序员才会有兴趣去捣鼓一下。
这是任何一个身心健康的程序员的本能想法。
下面给一个需要自动化完成的事例。假如程序员在浏览代码文档的时候,需要修正791行的bug。文件总共有1000行,但是他的文件编辑器只能显示30行。大多数人会直接选择向下滚动——滚动——滚动,然后一直到791行。但是作为优秀的程序员,能干这么愚蠢的事吗?他会写一个能自动跳转到具体行数的编辑器。例如,“Ctrl-L -> 791 -> Enter” 就是我所用的编辑器。
这个例子很简单,复杂的也有。
究其原因就是,一个优秀的程序员讨厌去做这种机械的、重复的事情,因为这些繁琐的小事会打断他们的思维过程。思维是那么的脆弱,一旦被打断,就像火车一样,需要整理一段时间之后才能再次启动。如果每隔5分钟就需要做点手动的工作,那么你的思维火车恐怕到不了任何地方。在日复一日的工作中,程序员需要使用各种工具各种技术来完成各种项目。所以无怪乎他们会喜欢那些“体力劳动”相对较小的工作,并且特别厌恶需要大量手动操作的项目工作。他们喜欢几乎都不需要手动的技术和工具(比如Python,Django 和git),讨厌需要大量手动的技术(这个我就不给例子了,大家自由发挥)。
但是因为工作需要,程序员在使用可爱迷人的自动技术的同时,也不得不使用面目可憎的需要手动操作的技术。这时候区别就来了,优秀的那些程序员会试着不去运用这些恼人的技术,但是也有他根本无法避免的时候。有时是因为他正写着的软件的需要,比如,所有程序员在做WEB程序时,无法避免的要使用令人头大的HTML语言。有时候这些落伍的技术不能被淘汰的原因仅仅只是因为大家都在用,而程序员需要和大家协作这么简单。
时间都被浪费在这些落伍的技术上
从这个角度来看文章开头提出的悖论就容易理解了。这种差劲的技术占用了程序员大部分的时间和精力,而那些好的技术则不是。每个程序员每天的时间和精力都是有限的,就因为软件本身的问题,使得他们把大部分的时间精力致力于那些让他们讨厌的技术和工作上。就是这个原因,那些优秀的程序员苦不堪言!
我特别希望能在文章的***提出解决这个问题的方法什么的,但是很遗憾没有。我们能做的就是尽量减少不好的技术,让它们滚出我们的生活,而对于那些不能避免的,牢记一个字——忍吧。