The better you understand what you are doing, the better you will do it.

很多人都有这样的疑问:软件工程师?到底是干嘛的?

工程师和科学家的概念,原本就没有出租车司机和厨师那样分明。科学家努力探索大自然,以便发现一般性法则(general principles),工程师则遵照此既定原则,从而在数学和科学上,解决了一些技术问题。科学家探索世界以发现普遍法则,但工程师使用普遍法则以设计实际物品。科学家研究东西,工程师建立东西,这一想法,可视为表达这句话,”科学家们问为什么,工程师问为什么不能呢?”(”Scientists ask why, engineers ask why not?”)。

探索世界发现未知和使用已知的一切建立新的秩序和逻辑之间一个很大的区别就是目的性(Teleonomy),工程师做的事情和大部分工作一样,都具有很强的目的性,而在日常生活中,带着越强的目的性做事,往往意味更快地接近目标。比如出租车司机和厨师。对于科学家来说,研究性质的工作往往不带有那么强的目的性,甚至可以说说有的时候科学家研究的目的就是研究本身。

软件也是工具,人类是乐于制造工具并且使用的群体,但是由于人类发展这么多年,一个工具的制造者和使用者所在的群体已经逐渐分化,作为个体你不可能有太多精力去关注电脑是怎么造出来的,尽管你每天都要用它;但是如果把整个人类当做一个整体,你就会发现扮演好自己的角色并且和其他的部分协调从而让人类这一个大的群体发挥伟大力量会重要的多。

Know yourself,无论是从个体的角度还是群体的角度。

当然在某些特殊情况下使用工具和制造工具之间的界限并不那么明显,比如你使用一个软件,很明显你是使用一个工具;比如你使用一种语言去写软件,这个时候你既是制造者也是使用者,你是这个语言的使用者,同时你是这个软件的制造者;那比如你用一种语言去写另外一种语言呢,要是这样会不会无穷无尽呢?而在这种情况下你还敢说你是一个软件工程师而不是计算机科学家吗?

问题的关键是在无数条分支和多层级的逻辑的引导下跑的太偏而不至于迷路。

工程师需要有很强的目的性,工具存在的意义是使用,而人类本身就是使用工具的最高层,既然一切工具的本源都是服务人类,为什么不从一开始就关注人类本身,也就是我们自己呢?

And,remember your target.

工程师不是科学家,造工具只是少数人的事情,大部分时候工程师存在的意义是使用工具解决人们实际的需求,就好比一个武学高手信手拈来各种招式杀人于无形,杀人才是目的,招式永远只是手段。