程序员与非程序员的思维差异
因为一些原因,程序员(高手和初学者都有)中有这样一种观念,认为跟普通人对比起来,他们的思考方式多少有些“不同”。同时,这种传言(myth)流传至今,以至于连非程序员都开始认同了。
据我所知,程序员思考的方式完全没有任何独特之处(我是说,作为一名程序员,我的观点有所偏颇,但我尽力保持公平)。
编程(采用的思考方式)趋向于采用下面几种“习惯”进行选择:
分析
逻辑性
排他性
不管这些“习惯”的重要性顺序排名是否合理,但是我们应该回过头看看,它们是如何适用于编程和编程之外的世界。
“分析”指的是,对系统进行观测,确定其功能,并且对比预测的结果确定系统的工作情况。一般来说,对程序工作原理进行建模,与此同时查看程序的代码,并且(用模型的模拟结果)与我们所期望的程序结果进行对比。
“逻辑性”讲究“论据”,通常用于推断某些东西是对是错及其原因。几乎所有计算机程序都有关于“是”与“非”的一些形式或者表现法,事实上,所有的语言都是为了这些概念设计的(逻辑编程)。
最后,排他性。排他性意味着你完全沉迷于某些东西,到了排斥所有或者大部分其他东西的地步。虽然排他性被普遍认为是一种消极特征,但是当你忙着 用计算机干活时,事实上它能便于你专注和沉醉于你正在做的事情。在大部分其他职业领域,排他性很可能对你的职业有很大的伤害,不过从操作的角度来说,计算 机是相对安全的,所以,当你在操作的时候用不着左顾右看,或者朝后看,所有的操作都显示在你面前的屏幕上。计算机编程人员甚至有一句话来形容这个区域中形 成的精神状态,当你身处其中的时候,整个世界好像消失了,你所有的感觉就只有跟电脑的对话而已。
还有什么其他职业会有这样的倾向?
分析,在科学的所有表现形式中都很重要,人们可以通过分析弄清楚事物的运作发展,它是科学方法的基石之一。化学、生物或者任何其他领域的东西可 能复杂难懂,当你是一名在这些领域工作的工程师,努力研究其中的事情时,分析也是相当方便的。事实上,到目前为止,我认为分析对于我们所有人而言是很重要 的,从小孩子拿起玩具扔掉并观察其下落,逐渐地开始研究地球模型的重力,到这个小孩35年后开发一些空间程序。当我们观察周围的世界并在有限的范围内运用 分析来预测未来的时候,分析是我们永远的伴侣。火车来的时候,不要穿过去,否则你会被压扁的。
实际上,逻辑是数学一个分支的正规表现形式,所以任何数学家和分析家,逻辑分析都是他们使用的工具之一。不过除了数学和编程之外,逻辑和“逻辑 思维”还有广泛的应用空间,每一个审讯嫌疑犯的警员都会用它来区别真话和谎言,律师用它来让法官或者陪审团相信只有他的委托人才是有理的,而不是其他人。 小孩用它来判断谁在撒谎。逻辑思维,就像分析一样,是我们永恒的伴侣,它适用于不同行业的所有人士或者某种程度上的,某些时候也适用于贸易,以及我们的日 常生活。如果你比大多数人更擅长逻辑思维的话,虽然每个人都有一定程度上的逻辑思维能力,但是你会发现某些任务执行起来会更加容易。
最后,排他性。这是一个棘手的问题,因为来自没有电脑的世界的大多数人容易消沉,但我在努力让它成为良性循环。如果一个科学家(或者研究这个问 题的人)紧紧抓住某些东西不放,无法入眠,是因为他们一直在思考问题,那同样是一种排他性。通常,在计算机上编程或者调试的时候,就会发生这种事;不过硬 件工程师、作家或者其他人或多或少也会有这种经历。
具备这三种特质有助于你安排你的编程生涯,不过我所知道的最好的程序员是那些在现实中对这三方面都有节制的人。他们不会忘记那样才是一个人,他 们与别人聊着术语,而不是漫无目的地闲聊,他们不相信自己的智力比别人好或者有所差异。编程就跟其他每一样事情一样,你会去做,是因为你喜欢它;如果运气 好的话,没有人会因为你脑袋上的耳垂形状而易做图你去做你不喜欢的事。
每个人——甚至那些连一行代码都没写过的人——都可以学习编程到一定程度,我见过很多相反的主张,但就个人而言,我还没见过我无法在几个星期之内教会编程基础的人,加入他们:
愿意学习
愿意花时间
这在经典的场景中或许会很难,但就个别而言,我相信会成功的。
显然地,有人存在心理缺陷,在那种情况下,他们也许不可能但可以明确地将世界划分为“可编程”部分和那对于我来说距离太远的“永不可编程”部 分。编程是一 种可以学习的技术,你也许不是下一个Linus Torvalds,但是如果你有足够的耐心并且持之以恒的话,你将有能力实现自己的目标。
程序员的思维跟其他人并不存在差异。
补充:Java , 非技术区