[转载地址]:http://www.aqee.net/the-myth-of-the-super-programmer/
上周我收到了一份邮件,一份让我心绪不宁的邮件。
邮件的作者基本上认为我在博客里和Pluralsight视频节目里谈论的都是非常浅显的话题,但发现我却虚伪的倡议面试内容应该设计的复杂些,应该为“真正的程序员”或超级程序员而设计。
这份邮件基本上表达了这样一种观点:开发应用程序的都不是“真正的程序员”,“真正的程序员”编写的是有难度的东西,跟复杂的数学算法相关的东西。
真有超级程序员吗?
我并不认为这种对编程和软件开发的认识和理解是他独有的,或是个别现象。甚至IT精英Scott Hanselman也称呼自己并且认为自己是欺世盗名的骗子。
Scott Hanselman的这篇文章让我产生了共鸣,因为有时候我也有和他相同的感觉。
有时候,我很怀疑,我是否真的有能力解决真正有难度的问题。
让我斗胆猜测一下,我猜测大部分的程序员在思想里都会某种程度的承认,承认自己只是一个普通的程序员,但这世界上确实有一些超级程序员,他们在做一些诸如控制硬盘缓存或为谷歌建立搜索索引等非常复杂的算法问题。
好吧,不否认,当然会有一些程序员正在写一些代码处理各种你我都不能理解的复杂问题,但他们跟我们这些余下的程序员究竟有多大区别呢?
在一个为企业开发应用的程序员和一个为谷歌写搜索算法的程序员之间,或和一个开发用来控制读写头从磁盘扇区读取数据的物理操作的芯片程序员之间,有真正的不同吗?
在我回答这个问题之前…
让我们花几分钟时间谈谈他们所解决的问题。
你曾经遇到过的需要去解决的最有难度的问题是什么?
你是如何着手去解决这些问题的?
到最后,当你真正的解决了这个问题时,你是否觉得好像不是那么难?
当你回顾这段经历,回头来看这个问题时,你是否会发现,现在看来,它其实是个非常简单的问题?
你有很多疑问,我知道——可是我希望你在继续往下阅读前真正花时间思考一下这些疑问。
理解“认知”和“现实”之间的差距。这是非常重要的。很多的程序员,包括我在内,都经常分不清两者之间的区别。
大家都知道,我们对一个问题的认知经常跟这个问题的真实情况有很大差距。当我们还不理解一个问题时,我们会把这个问题想象的比它本身要复杂。但是,一旦我们理解了这个问题,我们会发现这实际上是一个很容易处理的问题。
让我来给你一个现实的例子。看一看下面这个数学公式。
我们可以把在看这个公式的人分成两类人。
对高等数学有相当了解的人,他们能立即认出这个公式,能马上知道它是干嘛的。
从来都没见过这样一堆符号的人,他们的即时反应会认为这是某种复杂的算法,可能需要几年的时间才能弄懂。
也许我说的并不很准确,但我想说的就是,在“会的人”和“不会的人”之间有一个清晰的分界线。
我可以用你已经熟悉的知识对这些符号做一个简单的解释。
准备好了吗?
这个公式跟下面这段代码是等效的:
var total = 0;
for(int i = n; i <= m; i++)
{
total += f(i)
}
这说明了什么?
我想说的是,在数学算法中,在编程中,在我们的日常开发工作中,只有少数一些问题能称得上是有难度的问题,而且通常这些比较难的问题都能够分解成更小的问题(有时候需要多次分解),直到最后你需要处理的只是一个很简单的问题。
我的这个博客的目的,我的Pluralsight视频节目的目的,基本上都是告诉大家要把复杂的事情简单化。我自己的生活也是这样。
如果你想成为一个成功的程序员,你必须自己要学会如何做到这些,它会是你能学到的最重要的一门技能。
那么,现在来回答最初的问题——不,
我不相信这世上存在超级程序员。我不认为在企业应用程序员和那些被视作在研究真正复杂问题或“真正的编程”的程序员之间有什么不同之处。
但不要误解我的意思,不要以为我是在说我不相信某些程序员会被其他程序员在技能高出好几个数量级。我敢大胆的说,真正优秀的程序员在效率是会比普通程序员高出10倍甚至20陪。
我想说的是,我们有一个习惯,总是忘记:
当问题被分解成更小的问题后,所有的问题都变得如此简单,而且所有的问题都能这样去分解。
我想说的是,这个问题是一种能够阻挡你进步成为一个真正优秀程序员的问题,这是由于你自己的认知上错误导致的,你会把目前看上去复杂东西当作是不可理解的。
我想说的是,当你在开发一个对自己来说似乎是很容易的企业应用时,你可能忘记了,对于那些对编程一无所知的所有你的朋友和家人来说,这是一个多么困难或几乎不可能完成的事情。
仍然不赞同我的观点?
很好,你有这样思考的权利。
但我给你准备了一个难题。你想必一定是知道某位“超级程序员”了。也许你就是其中之一。如果是这样,我们要听你说说。请告诉我们一个非常有难度以至于其他的人有不可能理解的复杂问题。
我并不是在挖苦你。我是很严肃的,如果你能够证明我错了,那就证明给大家看。我至今还未遇到过一个不能分解成简单可理解的小问题的难题。
分享到:
相关推荐
超级程序员神话.上周我收到了一份邮件,一份让我心绪不宁的邮件。邮件的作者基本上认为我在博客里和Pluralsight视频节目里谈论的都是非常浅显的话题,但发现我却虚伪的倡议面试内容应该设计的复杂些,应该为“真正的...
开发 宝典 程序员 超级 程序员超级开发宝典 N多开发索引 开发 宝典 程序员 超级 程序员超级开发宝典 N多开发索引 开发 宝典 程序员 超级 程序员超级开发宝典 N多开发索引
《人月神话等程序员书籍》这个压缩包包含了程序员必读的经典书籍,对于任何希望在IT行业,特别是C++程序设计领域深入的人来说,这些资源无疑是宝贵的财富。书籍是知识的海洋,而这些经典之作则如同海洋中的灯塔,...
超级程序员不仅是技术专家,也是思想领袖,他们的影响力不仅体现在代码质量上,更在于他们对问题的独特洞察和深远影响。 总的来说,程序员的境界提升是一个不断学习、实践和反思的过程。从关注工具到关注人,再到...
【标题】"超级代码助手-程序员的好帮手"揭示了一个专为程序员设计的实用工具,旨在提高编程效率和代码管理能力。这个软件很可能是集成了多种功能,如代码片段存储、代码高亮、代码自动补全等,以帮助开发者更好地...
标题中的“程序员专用编程输入法”指的是专门为程序员设计的特殊输入法工具,旨在提升编码效率。这类输入法通常具有以下特点: 1. **快捷代码输入**:程序员输入法能够通过快捷键、组合键或者自定义短语来快速输入...
程序员项目交接文档概要 IT 项目交接文档概要是程序员在项目交接过程中的重要文件,它对项目的开发、测试和维护起着至关重要的作用。本文档概要将对程序员项目交接文档的主要内容进行概要介绍。 人事模块是程序员...
在编程领域,代码是程序员与计算机对话的语言,而程序员记事本则是程序员与代码对话的桥梁。随着技术的不断迭代和项目的日益复杂,代码片段的有效管理成为提升开发效率的关键。程序员记事本应运而生,它不仅仅是一个...
java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...
【标题】"超级适合程序员的简历模板.zip"和【描述】"超级好适合程序员的简历模板.zip"都指向了一个核心内容:这是一款专为程序员设计的高质量简历模板。这个压缩包可能包含了一系列精心设计的简历样式,旨在帮助...
程序员简历程序员简历.pdf
《程序员超级开发宝典》是每位开发者不可或缺的资源库,它深入探讨了编程世界的各个方面,旨在提升程序员的技能水平和开发效率。这本书籍涵盖了大量不为人知或未被广泛讨论的开发技巧和策略,旨在帮助程序员们在面对...
2000-2010历年程序员考试真题,对软考程序员的一些试题总结,包含答案;程序员考试上午科目和下午科目的考试形式与考核内容已经趋于稳定,考生应紧扣考试大纲和指南,有针对性地进行学习。