大学编程经验之谈:程序员之最宝贵认知!
在我看来,大部分的写过许多程序的程序员在思想里都会某种程度的承认,承认自己只是一个普通的系代码的程序员而已,而这世界上确实有一些 真正的程序员。我们应该要认识到,在一个为企业开发应用的程序员和一个为谷歌写搜索算法的程序员之间,或和一个开发用来控制读写头从磁盘扇区读取数据的物理操作的芯片程序员之间,有着真正的不同?
上周,在听了老师说:“开发应用程序的都不是“真正的程序员,真正的程序员”编写的是有难度的东西,跟复杂的数学算法相关的东西。”我不禁想,这世界上,程序员不都一样吗,只是可能你学的比别人多,经验比别人多,所以自然厉害些。于是我提出了下面的问题。
是否真的有真正的程序员这一说法?
一开始,我并没有意识到这些问题,当一个个程序问题出现在我面前,随之又一个个问题被解决后,开始觉得,一种对程序开发的叛逆理解,我并不认为这种对编程和软件开发的认识和理解是我 独有的,或者说是个别现象。甚至IT精英也称呼自己并且认为自己是欺世盗名的骗子。
在逛论坛时,看到过很多这样的例子,从前读过Scott Hanselman的一篇文章让我产生很大的共鸣,因为有时候我也有和他相同的感觉。
在很多时候,我真的很怀疑,我是否真的有能力解决真正有难度的问题,而不是只是简简单单的写几行代码来欺世盗名。
有人要开始说了,有些代码还是很难理解的,不是每个人都能够来“欺世盗名”。
好吧,我不否认,当然会有一些 人正在写一些代码处理各种你我都不能理解的复杂问题,但他们写出来的的代码,为什么我们就不能理解,为什么我们自己就写不出来,换句话说,他们跟我们这些余下的写代码的人究竟有多大区别啊?
重复一下开篇的问题,兴许我们能找到这个问题的答案:在一个为企业开发应用的程序员和一个为谷歌写搜索算法的程序员之间,或和一个开发用来控制读写头从磁盘扇区读取数据的物理操作的芯片程序员之间,有真正的不同吗?
在我回答这个问题之前…
让我们花几分钟时间谈谈所谓“程序员”所解决的问题,也让我花几分钟问大家一些问题。
你曾经遇到过的需要去解决的最有难度的问题是什么?
你是如何着手去解决 那些你所不能理解的问题的?
到最后,当你真正的解决了那个问题时,你是否觉得好像不是那么难?
当你回顾这段经历,回头来看这个问题时,你是否会发现,现在看来,它其实是个非常简单的问题?
你有很多疑问,我知道——可是我希望你在继续往下阅读前真正花时间思考一下我上面提到的这些疑问。
你是否理解“认知”和“现实”之间的差距? 这是非常重要的。很多人,包括我在内,都经常分不清两者之间的区别。大家都知道,我们对一个问题的认知经常跟这个问题的真实情况有很大差距。当我们还不理解一个问题时,我们会把这个问题想象的比它本身要复杂。但是,一旦我们理解了这个问题,我们会发现这实际上是一个很容易处理的问题。
让我来给你一个现实的例子。看一看下面这个数学公式。
![]()
我们现在可以把在看这个公式的人分成两类人。
- 对高等数学有相当了解的人,他们能立即认出这个公式,能马上知道它是干嘛的。
- 从来都没见过这样一堆符号的人,他们的即时反应会认为这是某种复杂的算法,可能需要几年的时间才能弄懂。
也许我说的并不很准确,但我想说的就是,在“会的人”和“不会的人”之间有一个清晰的分界线。
我可以用我们写代码的人已经熟悉的知识对这些符号做一个简单的解释。
准备好了吗?
这个公式跟下面这段代码是等效的:
- int total = 0;
- for(int i = n; i <= m; i++)
- {
- total += f(i)
- }
这说明了什么?
我想说的是,在数学算法中,在编程中,在我们的日常开发工作中,只有少数一些问题能称得上是有难度的问题,而且通常这些比较难的问题都能够分解成更小的问题(有时候需要多次分解),直到最后你需要处理的只是一个很简单的问题。
我写这篇日志的目的,基本上都是告诉大家要把复杂的事情简单化。我自己的生活也是这样,不谈以前,至少现在是吧。
如果你想成为一个成功的程序员,你想毕业后能有一份很好的工作,而不是去某某公司成天栽进代码堆,你就必须自己要学会如何做到这些,它会是你能学到的最重要的一门技能。(这仅是个人看法)
那么,现在来回答最初的问题一下,我不相信这世上存在真正的 程序员。我不认为在一般程序员和那些被视作在研究真正复杂问题或“真正的编程”的程序员之间有什么不同之处。
但不要误解我的意思,不要以为我是在说我不相信某些程序员会被其他程序员在技能高出好几个数量级。我敢大胆的说,真正优秀的程序员在效率是会比普通程序员高出10倍甚至20陪。
最后,我想说的是,我们有一个习惯,总是忘记:当问题被分解成更小的问题后,所有的问题都变得如此简单,而且所有的问题都能这样去分解。这个问题是一种能够阻挡你进步成为一个真正优秀程序员的问题,这是由于你自己的认知上错误导致的,你会把目前看上去复杂东西当作是不可理解的,甚至当成永远无法学会的。有个小例子可以说明,当你在开发一个对自己来说似乎是容易或复杂的应用时(暂不考虑它的难易,至少你对这个东西有认知),但这个时候,你可能忘记我刚才说的了,对于那些对编程一无所知的所有你的朋友和家人来说,这是一个多么困难或几乎不可能完成的事情。 最终结论: 这个世界上无所谓真正的程序员,如果真的有的话,那么你我都是。(原谅我的断言,这是个人看法而已)
仍然不赞同我的观点?
你的想法很好,你有这样思考的权利。
但我给你准备了一个难题。你想必一定是知道某位“真正的程序员”了。呵呵,也许你就是其中之一。如果是这样,我想要听你说说。请告诉我一个非常有难度以至于其他的人都不可能理解的复杂问题。
我并不是在挖苦你。我是很严肃的,如果你能够证明我错了,那就证明给大家看。我至今还未遇到过一个不能分解成简单可理解的小问题的难题。

浙公网安备 33010602011771号