前言 关于程序语言理论
Tower of Babel
创11:1 那时,天下人的口音、言语,都是一样。
创11:4 他们说:“来吧!我们要建造一座城和一座塔,塔顶通天,为要传扬我们的名,免得我们分散在全地上。”
创11:6 耶和华说:“看哪!他们成为一样的人民,都是一样的言语,如今既作起这事来,以后他们所要作的事,就没有不成就的了。
创11:7 我们下去,在那里变乱他们的口音,使他们的言语彼此不通。”
创11:8 于是,耶和华使他们从那里分散在全地上;他们就停工不造那城了。
——《圣经·旧约·创世记》
前言
最近程序语言理论渐渐火起来了,据我所知,前几年还是不那么受到重视的,现在遍地都是各种口号,各大语言都把函数式语言的一堆特性塞进来,各种类型系统什么的也都被挖了出来。唔,程序语言理论受到重视了,好事。
我爸妈见我又在电脑前面趴着,不是很高兴。他们对我学编程是抱有一种同情的态度的,都知道现在的程序员很累的,是吧。见我这么认真,他们又不好意思说什么。
真是的,你以为我会傻到要去做一个程序员啊。
跟不少人了解到的差不多,程序员确实已经变成越来越累人的职业了。二三十年前,编程可能还是一个有创造性的技术活,现在,大多数程序员干的是体力活,不停地打代码而已。
不过其它的行业我想也差不多吧。你可以看看现在的老师,工程师,作家,艺术家…大多数人在干的都是无聊的工作,而且还在浪费社会资源。我不是说他们不应该工作。
只是政府不得不说,每个人都是社会的重要成员,职业没有高低之分。因为如果不这么说,社会可能早就崩溃了。
担忧国家和别人对你我都没好处,相信我。
还是先担心一下自己吧。
我的学习经历
和好多有雄心壮志的人一样,我刚上初中就接触了算法竞赛。
居然有好多人是小学就开始竞赛的。天啊。
我坚持了整整一年。已经算是有恒心有毅力的了。因为我不是为了拿奖,我是学完课内的东西以后闲得慌,觉得编程是个很神奇的东西,就想学一学。
啊,还有一个很重要的原因。我当时还挺爱玩游戏的,我特别期待自己编个游戏,游戏编不了编个外挂也行…都好几年了,就别纠结我当时怎么想的了。
一年以后,我不得不放弃这个远大的理想。每次考试只有我是最突出的低分,题目都看不懂,我怎么继续待在班里。
嗯,一年了,我不知道递归是个什么东西,完全没听说过数据结构 (Pascal 里的 record),排序算法死记硬背记下来一个。遇到重复的代码就复制粘贴(复制粘贴还不知道快捷键的话说)…
现在看见挣扎着学了一年,还搞不懂各种排序算法的人,我心里想,唉,走我的老路。算了,让他们去走吧,省的他们入了 PL 这个大坑。要是有谁来求助我再说。
现在想想,怎么可能会有人来求助我。“你学什么?” “PL,程序语言”
“程序语言有什么好学的//就是会程序语言吗” “……”
“……”
退出竞赛班,我当然很受打击,但我最开始的兴趣只是编游戏而已,听说编游戏好像没有算法竞赛这么难,我就上网自己找教程。然后就接触到了那个有名的 Cocos2d-x (现在已经是 Cocos Creator 了,据说挺不错的,我用 TypeScript 也写过一点东西,你们可以一试),又去借了一本超级厚的 C 语言教程,那本书跟 C 语言文档没多大区别,幸好我当时没有傻到要背下来。
那是一段无聊的黑历史。然而那本书真正把我带上了编程的正路,是它最后一章,ADT,我看到列表这个结构的时候被深深地震撼了。我真的没有想到,计算机原来还能干这种事…
虽然书里的代码其实很烂,但这是我第一次对编程产生了兴趣。接着我就借到 lua 语言的教程,居然把函数闭包、递归、面向对象 这些东西都搞清楚了。那是我第一次知道,原来程序语言还能有这么多有意思的东西,让我明白了编程不只有算法,在那些竞赛的人还在用 Pascal 写以后再也用不到的代码时,我就不知不觉走上了另一条轻松的多的路。
遗憾的是,我到现在也没有完成过我的游戏,但我学习了好几个游戏引擎,把前端搞完了又学了后端的各种知识,然后偶然遇到了那本书,SICP,彻底入了 PL 这个坑,然后就把以前学的统统忘光了。而且连游戏也不喜欢了。后来只要有人问我怎么样防止沉迷游戏,我就告诉他,去学学编程就行。
编程到底在干什么
小时候,我觉得那些能把手机电脑玩溜的人都好厉害。我问他们某个软件怎么用,他们总能从一大堆迷人的菜单里给我指引出一条道路,有时还会打开黑黑的窗口,敲进去一串外星文字,太佩服了。
我以前心目中的黑客就是这样子的,电影里面那种科学狂人的形象。我虽然一点也不想变成那种人,但我想有一天,我可以在电脑上干超级炫酷的事,而且别人谁也看不懂我在捣鼓什么秘密~~~
接触的多了,我开始怀疑是自己不适合,编程真的是这样的吗。我从未获得过那种思如泉涌的感觉,也从来没有过在终端里疯狂地敲命令。我写代码都是慢悠悠的,写完了再反复地删改。我没练过打字速度,但我的思维永远不会跟上我的手速。经常删掉的代码是最后写出来的好几倍,一个屏幕的代码就要好几个小时不止。
不过还有更让我尴尬的。别人听说我学过一点编程,也把我想象成我之前想象中的神秘的黑客。所以呢,他们当然不会遇到什么编程难题,但每次电脑坏了,U盘坏了,软件崩了,就来找我修;想买个硬件或软件,来问我哪个好;电脑不会使了,来问我某个功能在哪……
我真的对此一无所知啊!你去问你爸都肯定比我靠谱。我学了点编程,但看起来就是完全不懂电脑的人。要跟别人解释,我就是怎么也讲不清楚,为啥我能告诉你这软件是什么原理,但我就是不会用,为啥我能 10 分钟轻松写出各种小游戏,1个小时写出极其高端的网页,让你以为我是世界高手一样,但一些看起来毫无水平的算法,软件里的小功能,可以让我折腾好久好久,甚至死活也写不出来。
渐渐地我明白了,编程,对自己来说就像造物主干的事,是程序员决定了人们怎么使用电脑。你如果有哪个软件不会使,那是程序员没设计好。编程不光要把程序写对,还需要一点艺术感,需要精心的设计。那些所谓的黑客的形象,也许就缺少这种品味,同时也导致了很多人的误解。
关于设计问题,我准备专门写一篇博客,甚至录一个视频来讲,因为它真的是编程最重要的东西之一,但也是最容易被忽视的。
学生和程序员们
不知从何说起……
比如说麻省理工吧,程序语言专业,以前大家都知道过去用的教材叫 SICP,等我了解到的时候,发现他们已经高调地把 SICP 撤了,新版的教材要开始教 Python 了!
然后我战战兢兢地去看了他们的新版教材,这…这不还是 SICP 吗,你就是把代码用 Python 改写了一下吧… 结果呢,多了一堆要记的语法,动不动就上 class,不好好写循环非要写递归,这是想坑害谁呢。
我心里说,这是麻省理工要没落的节奏吗。一查官方论调,
1980年代,大部分的时间都是在思考,然后写那些自己感觉好像是能运行的代码。
但现在不一样了。你得先读乱七八糟的文档,然后试验程序的输入输出,以此来理解这些别人的程序是怎么运行的,(然后拣好用的用)。这工作方式跟以前完全不同了,所以需要换一个课程。
——原文出处(较后面的部分,我是意译的)
这种风气盛行已经不只是几年了。程序界有句著名的话,叫“不要重复造轮子(don't reinvent your wheels)”,意思就是,因为前人已经发明出来轮子了,自己就好好用就得了,不要再想着是不是可以自己发明轮子,结果发明了各种形状样式的轮子,最后发现不过是圆的好用。前人已经帮你发明出来了。所以,别人总是会说,
既然有现成的库和引擎拿来用,为什么要自己从底层开始写,
有这么多语言可以选择,为什么还要研究程序语言,
把别人的代码复制过来就行,自己也不用学什么高级的算法了。
这些想法看起来都很不可思议吗?
这不都是从小就受到的教育吗。逻辑都一模一样: 打游戏一点用都没有,所以你不要打游戏了…
学的这些东西用不着的,所以就别学了。
把这一堆术语和算法背熟了,就能通过面试了。
这几个软件用熟了,就能在别人面前装逼了。
这个框架的 API 写溜了,就能飞快地完成工作了。
最后新出了个什么东西,赶紧翻一遍它的手册,源代码什么的瞅两眼,然后就能去网上讲课了……
多数情况下,我们只是一个使用者。我们不用造字,只要会说话写字就可以。我们不用关心电脑是怎么发明出来的,点点鼠标大家都会上网的。
这个世界太过复杂,我们没空关心这么多东西。但对于研究语言的人来说呢,难道是像高考一样,“比喻的修辞有什么作用”吗? 你们知道的,学语文又不仅仅是背诗、背好词好句,学语文至少要学会把自己的话说好,而不是把好词好句拼凑起来。
大家都明白语文怎么学,但好像不太明白数学、计算机怎么学。
数学有那么多公式已经让人吃不消了,计算机更是无穷无尽了。老师上课不就是,讲公式,讲完了做题,什么? 我讲的这么清楚,你还不会做题? 这不是直接套公式就好了吗?
今天讲了一堆的语法,你们回去自己背吧。
今天又讲了一堆的算法,你们回去自己好好练习吧。
所以很多人学的死去活来的,明明我都背熟了,但题还不会做啊。看来我是不适合学的,放弃了。
这就是我上初一刚学编程的时候,一整年的状态。我记得我五年级刚接触奥数的时候,也是这样的状态来着。
我反正是差点就成为文科生了。所以直到现在,我还是不喜欢把人分为文理科生来看待。
我以前写过这样一段话,对大多数人,如果你觉得数学这类学科太难太抽象,根本就不是你智商不够,也不是你不够努力,责任应该通通推给老师。老师就应该把这些东西讲的容易,而不是像一些所谓的大数学家或教授那样,拿抽象的不尊重人的方式在你面前显摆自己有多厉害。
正是人们自己把编程搞得越来越难的。
有人不理解编程的关键概念就在不停工作。
人们熬夜,加班加点,昏昏欲睡地写出各种很蠢的 bug,结果花上更多时间调试,
人们面对不停发展的硬件,软件,语言,框架,沉浸在新的宗教里,宣传着新的口号,被淹没在新的东西里面
世界上哪有那么多新的东西,哪有那么多东西值得你花上一辈子的时间去学习。
我不是说人不应该学习,而是我们都应该在意一下我们到底在学些什么东西了。背公式,刷题,这应该叫做学习吗? 别人总在说,1.你要好好学习,因为这门学科以后是很有用的。2.你成绩这么差,就代表你这门学科没学好。
以前我对这种理论深信不疑,但现在我才发现,人们太高估老师和学校了。关于这两句话,其实逻辑都一点问题也没有。拿数学举例吧,编程也一样的。数学有用,我们要好好学数学,我赞同。你这题不会做,说明你没学好,我赞同。
但问题就在于,这都不能得出你要学习的结论。
因为,学校里教的数学,不应该被叫做数学。
已经有过不少数学家指责过,现在学校中的数学,已经成为一个独立的数学分支,并把它叫做“奥林匹克数学”。它从内容上已经偏离了数学的方向,在思想方法上已经不算数学了。老师总是说数学思维,那到底什么是数学思维? 我也不知道。但我可以肯定的是,从背公式开始,我们就已经不是在学数学了。
我的母亲是一个优秀的数学家。有一次我问她几何难不难,她说一点也不难,只要你用“心”来理解所有的公式。如果你需要超过5行公式,那你就走错路了。
—— Dijkstra
历史
不要忘记历史。
Jonathan Blow: 阻止文明倒塌。我想说的话都在这里了。请认真看完。真的太伤感了。
知识的传承是有代价的。
现在的书这么多,为什么我们还在提倡读古代的名著呢?
因为没有历史,就没有现在。这句话我下面会解释。
也许喜欢理科的人很容易忽视历史。历史就是看看故事,背一背人物事件,看起来没什么吸引力,还不如多做几道题。
是的,要看你能从故事里学到什么东西。不是要学什么道理和知识,而是明白这个学科的发展。其实越看历史,就越看不起现在的各种宣传,像宗教活动一样的发明。现在的多数科技,只是表面上在进步罢了。
文明在不努力的情况下,不是一成不变的,而是退步的。
为什么,因为人们会失去历史。
以数学为例,有多少人在背公式的时候,了解过这个公式是怎么来的? 我的老师也许会,但也是去查一查这是谁发明的,当时有什么小故事,然后上课的时候就有东西讲了,把这个公式的来龙去脉讲的清清楚楚,以为学生就会做题了。
原因往往比证明来得更加简单,更加深刻,但却更难发现。对于一个事实往往有多种多样的证明,然而导致这个事实的原因却往往只有一个。如果你只知道证明却不知道原因,那你往往就被囚禁于别人制造的理论里面,无法自拔。你能证明一个事物具有某种特性,然而你却没有能力改变它。你无法对它加入新的,好的特性,也无法去掉一个不好的特性。你也无法发明新的理论。有能力发明新的事物和理论的人,他们往往不仅知道“证明”,而且知道“原因”。
打个比方。证明与原因的区别,就像是犯罪的证据与它的原因的区别。证据并不是导致犯罪的原因。有了证据可以帮助你把罪犯绳之以法,可是如果你找不到他犯罪的原因,你就没法防止同样的犯罪现象再次发生。
这就是前面那篇文章提到的,
然后 Blow 给出的例子是 Bob Colwell,早期英特尔的首席芯片架构师,在计算机发展初期的时候接受采访的片段内容,背景是他们发现合作的零部件制造商TI(德州仪器公司)送来的产品不能稳定使用,质量残次。
Bob 去找 TI 质询,本来以为对方会说“那是你们不知道怎么使用,我们的产品是好的”,实际对方的答复是:“是,我们知道,我看看你的清单。哦,我们还有更多你们不知道的(不好使的产品)。” 实际情况是,TI 没有比任何其他竞争对手更差,摩托罗拉、Fairchild 也一样。这些硅制品让英特尔的芯片研发停滞不前,为何会如此?TI的人回答道:“第一代TTL(逻辑门电路)是那帮胡子花白的老头子做的,他们知道其中的道理;现在的工程师都是毛头小子,学校毕业过来搞生产,他们不知道内部组装的改变,会导致感应峰(inductive spikes)。” 这里的 spike 就是指每一个点的电压变化时,都会产生磁场,而磁场变化的相互干扰,没有被设计者纳入考虑,因为他们不理解。
这就是科技退步的原因。代际之间的交流和传承需要巨大的努力,这过程中有损失。如果代际的传承失败,文明就灭亡。
人们喜欢忘记历史,人们以为只要跟上现代的发展,就能有新的成就。所以人们大量地读书,学习新的知识,不停地做新的题目,水平越来越高超,产生了自己在不停进步的错觉。
这确实算是进步,但是不可能所有的人都像这样前进,你要往高走,但人由于基因限制,又长不了那么高,就需要别人给你垫着。
你看到手机应用市场里有那么多软件。是的,现在开发一个软件无比简单,甚至有不少从未接触过编程的人找不到工作,然后硬着头皮去干编程,然后做出一番东西的。网上有那么多“××天精通×××”的课程。所谓的人工智能、区块链又这么火… 但是不要忘了,脚下有多少人给我们支撑起这样一个平台。从逻辑电路、硬件到操作系统,各种语言和开发环境,不同的框架… 我们位于太高的位置,却能心安理得地容忍这一切知识的缺失。最简单的,到现在还有多少程序员,遇到自己编的程序出错,却看不懂错误信息,就在网上搜一下,照猫画虎解决问题?
那些算法和数学公式也是这样的,你可以把它和各种证明倒背如流,做题做得炉火纯青,但你可能不会关注,它是怎么发明出来的,你去找来它最原始的论文或演讲一看,就会大吃一惊,因为发明者所想的,跟后来你了解到的,简直是天差地别。
人们知道怎么把文学书籍传承下去,却不知道怎么把科学知识传承下去,这也许可以说成是自大,以为自己只要学学二手货就可以活下去。也许这只是没有意识到罢了。
科学正在失传。
很遗憾,我现在上数学课(我现在高三)也大半听不懂,去翻过去的书和论文,还是懵的。我能很明显地感觉到,有什么东西,是没有写在书和论文里的,是老师没有讲出来的,那些论文绝对不是简简单单靠公式套出来的,应该有更深的东西在引导他们。我觉得可以叫它直觉。
但现在这些东西都丢掉了,人们可以原原本本地写出这个公式,给出证明,却不知道这个公式是怎么来的了。就好像你能读懂某种失传的文字(比如甲骨文),你能把它翻译过来,但没有人会用那种文字说话写作了,更没有人能体会到那种语言的美。这时,我们就认定这种语言已经消失了,即使所有人都能读懂,也不能因此说它还存在。只有存在于人的心中才是存在。
现在再提这种事也许已经晚了,但还是有不少希望。在某些大学和公司里,还有很多人在真正地传承这些科学文化,我真心地感谢他们,有些人给了我莫大的启蒙,即使我们没有直接接触过。
更重要的是,我们可以成为他们的一员。
智商和直觉
当然,我听说过不少所谓智商超群的人,各个领域的。
刚开始,我在学校里非常自卑。因为别人学得快,上课内容很多人都提前学过了,我上课跟不上。特别是数学课,实在很可怕,满黑板都是板书,抄都来不及…
跟不上的办法很简单,干脆不跟了,自学去了。
没想到就这样,我找到了别人没有得到的东西。
注: 下面这段我写了之后很快就不喜欢了,但因为还是有点价值,就暂且不删了,放在这里。我想说的就是,1.一个数字有什么资格评价你? 2.聪明不重要。就是这样。
不知道有谁有兴趣去看看维基上关于智商的词条 (Intelligence quotient - Wikipedia),我没兴趣,如果有谁看完了,有啥有意思的东西给我讲讲,谢谢了。我大概浏览了一遍,你看,人的智商也是正态分布的,而且科学家们说,智商140以上就算罕见的超高智商了! 你照那个正态分布算一下? 大概0.5%吧,这不是人群里扫一眼就有吗。160以上呢,现在世界上75亿人口吧,还有两万多个,这已经是(公认的)爱因斯坦的水平了。没听说过吧,两万多个人,跟提出相对论的人智商是一样的,或者更高。
这不就是因为那群捣鼓智商测试的人是扯淡吗。那些智商测试分数高的,显然都是脑力好的,反应快的。这可能让大众产生了误解,认为我们需要思维快,智商高,才能有所成就。
如果真的是这样,人类真的要面临危机了。我随便上网一搜,就看到好些研究,比如说这个论文(随便挑的,还是群中国人,还有中科大的…) Solving Verbal Comprehension Questions in IQ Test,我没兴趣看内容,但如果结果属实的话,你想想计算机才学习了多久,计算出来的智商不肯定是成千上万吗… 而这个结果我其实已经预料到了。这些东西,最多就是偶尔玩一玩也许挺有意思。这就是给电脑玩的东西。只不过当然了,别人会觉得你很聪明。
智商是天生的,这没什么办法。但在我看来,智商是没有宣传里那么大的用处的。有多少时候会需要口算复杂的式子,需要在一堆凌乱的东西里找规律? 这些反人类的任务本来就应该交给电脑吧,人工智能,来拯救我们吧。
相比之下,爱因斯坦成为爱因斯坦,不是因为他的智商有多高,天赋有多好,而只是因为他创立了相对论罢了。要说相对论跟他的智商,真的关系没那么大。想象力,直觉,才是他最重要的品质。
以前我以为直觉只能是天生的,而且别人说直觉是不准的,还要靠逻辑来证明。我信了他们的话。现在我心里很清楚,别人说的根本就不是直觉,那应该叫瞎猜,凭经验的感觉,碰到没经验的东西,当然就不准了。直觉不靠经验,不靠特定的方法。
应该叫做,手中无剑,心中有剑:p
天才是1%的灵感加上99%的汗水。
要是没有这1%的灵感,所有的汗水也都是徒劳。
—— Cindi Myers
(关于爱迪生名言是否有后半句的调查报告)(作者辛苦你了)
经验和努力有它的作用,但只有经验和努力就是现在教育的失败。多数批评应试教育的,大概都是在说这么回事,教育太过重视努力了。(应试教育好东西呀,又让教育专家有工作干了,又让批评家有工作干了)。直觉是这些经验的来源,直觉告诉我,不再需要做题背书来获得经验,因为可以自己创造这些经验。
直觉不是天生的,而是培养出来的。
直觉不准,但是可以变得越来越准。
你可能觉得我像是在宣传邪教似的。没错,我就是这个出身的:p 我当然在乎是否有人信我说的话,但如果邪教帮不到你,你要信另一个更庞大的邪教,那就随便你了。
而直觉的方法就一句话,多了解点历史,多想想它是怎么来的,在当时,什么都不知道的时候,人们是怎么想到会有这个东西的。慢慢地,你就发现,本以为那么复杂的东西,都是后来人自找麻烦,它们本质上其实就一点点。那99%的汗水,都只是为了那1%的灵感。
复杂性
命运之轮(怎么又是知乎上的文章)自动忽略英文就可以看了,反正都是些名字。虽然我并不完全赞同,但数据还是可信的,有一句话很对,
语言/语言家族的发展,是不停的扩大,直到无法支撑自身的重量而倒下为止。
这里又是个 Dijkstra 讲的小故事, (又是王垠的博客…虽然我接触面也不窄,但就他们几个文笔好没办法。)
1969年,在阿波罗号登月之后不久,我在罗马的北约软件工程会议遇到了 Joel Aron,阿波罗计划的软件负责人。我知道每个阿波罗飞船上面的代码都会比前一个多4万行。我不知道“行”对于代码是个什么单位,但4万行肯定是很多了。我很惊讶他们能把这么多代码做对,所以我问 Joel:你们是怎么做到的?他说:做什么?我说:把那么多代码写正确。Joel 说:“正确?!其实在发射前仅仅五天,我从登月器计算轨道的代码里发现一个错误,这代码把月球的重力方向算反了。本来该吸引的,结果写成了排斥。是一个偶然的机会让我发现了这个错误。” 我的脸都白了,说:这些家伙运气真好?Joel 说:“是的。”
简洁通常就意味着正确,但大家都以复杂为骄傲,认为能掌握复杂的东西,就能显示出自己水平高超。
世界上有两种编程方法。一种是写得尽量简单,所以明显没有什么缺陷。一种是写得十分复杂,所以没有什么明显的缺陷。
—— Charles Antony Richard Hoare
不得不说,人们总喜欢拿数字来衡量别人,喜欢崇拜别人。比如说,有一次有同学一个晚上写了上千行代码,大家一个劲地惊叹,好像没有几个人在怀疑,他到底写了什么东西,以这种打字机的速度,写出来的东西,质量真的能够保证吗。
很多时候我在怀疑,现在的各个学科还能有多少进展,因为到了现在这个阶段,可能学一辈子都是别人已经发明的东西,自己很难再有什么突破了。
也许就是这样的,大学里水论文的人越来越多。辛辛苦苦研究出来的成果早就有了,自己毕不了业怎么办。
这和复杂度还是两码事。
现在一个软件动辄几十万上百万行代码,大型一点的甚至有上千万行,这怎么保证正确性,出了问题怎么找出处。软件还算好了,至少是在电脑这种理想的环境上运行的,在现实世界里运行的东西,我没法想象人们是怎么把握住这些的。
不过话说回来,现在的人们好像不喜欢简单了,至少学生是这样。好像简单的东西没有什么做的价值,只有挑战越来越难的东西,才能体现出自己有多强大,做出了别人都不会的东西,才会获得别人的吹捧。
人们喜欢挑战,喜欢大事,连科幻作品也是张口闭口的拯救宇宙、拯救人类,我说的就是你,三体,(那洋洋洒洒的描写…天啊)。连我们政治书上说的都没错,人民是历史的创造者。天天想着拯救什么人类啊,我们需不需要谁来拯救一下啊。
到最后,不还是发现自己总在别人后面,然后拿“结果不重要”来安慰自己。
有时候我发现,总想着要努力、挑战,到了最后,最简单的事情在自己面前也成为了一个难题。
可是理想中的简洁优雅,跟现实总是一对矛盾。很多时候,就是一个东西的简单把我吸引过去的。爱因斯坦就是这么坚信的,
自然界的一切一定会有简单的解释,因为上帝不是随意、独裁的。
他靠着这个坚信提出了相对论,但又无法接受量子力学的复杂,因此希望用简单的理论把物理统一起来。但结果只是很遗憾而已。
简单的东西好用,但是光用简单的东西,似乎不太能解决实际问题。
不管一开始被哪个学科吸引,到最后,我都被它的复杂度吓到。都是用简单的东西骗你入门,然后再把乱七八糟堆在你面前。
这些真的都是必要的吗。简化这些东西真的是不可能的吗。
再回到前面的话题,这其中很多细节,都是前辈一点点探索出来的,后人没有这种探索经历,我们如何知道这些细节的原理,难道我们只能照着教科书去做吗。
爱迪生发明灯泡时,失败了上千次。有人劝他放弃,爱迪生却说: “我已经成功了上千次,因为我证明了这些材料不适合做灯丝。”
现在上网一搜,大家都知道,钨丝是做灯丝最好的材料 (我知道爱迪生发明的不是钨丝),那么,有谁知道,那些失败的成千上万种材料是什么。你如果遇到了类似的问题,如何才能不再经历那上千次的失败呢。
这个例子已经过时了,因为已经有完善的化学理论,知道大概该用哪类材料了。但是自己如果没有体验过这些失败,你就不知道为什么会成功,你就无法避免下一次的失败,因为你不理解。
TI的人回答道:“第一代 TTL(逻辑门电路)是那帮胡子花白的老头子做的,他们知道其中的道理;现在的工程师都是毛头小子,学校毕业过来搞生产,他们不知道内部组装的改变,会导致感应峰(inductive spikes)。” 这里的 spike 就是指每一个点的电压变化时,都会产生磁场,而磁场变化的相互干扰,没有被设计者纳入考虑,因为他们不理解。
这就是为什么我们会说,失败是成功之母,没有失败就没有成功。这句话不是鼓励你如何面对失败的,而是在告诉你一个事实。为什么没有失败就没有成功,因为很少有人能碰巧成功,你需要知道为什么能成功,要明白这个原因,就只能经历失败。名言所有人都会背,但道理好像经常被误解。
有人会说,我就为了个小灯泡,哪有空去管那几千种不能做灯泡的实验呢。
是的,这就是我们需要关注的问题所在。
学科的信息太多,复杂度太高,从前的那种精通好几个学科的人不可能再存在了。连一个学科里都开始细分,而且越来越细,大学里的专业越来越复杂,公司里的分工也越来越复杂。
知识总量更多,我们就让每个人知道的比例变得更小来应对。
每个人对全局的把握一弱再弱,既难以传承知识,也难以做好自己的工作。
学习的方向如此受限,人们却能够心安理得,以为学了这个专业,工作就干这个专业就可以了。
而现在大家似乎相信,我们能承担的复杂性上限,是无限的。想象现在大公司里,那种极少数能够透彻理解整个系统的工程师退休之后,后继无人、且很难把整套知识传递给年轻员工的情况,答案已经很明显了。
这其实又是科技脆弱的时代。
真要说科技,科技要怎么样就让它去吧。除了科技,我要关心的事还多了去了
只有两个事情是无穷尽的,宇宙和人类的愚蠢。
当然,我现在还不能确定宇宙是无穷尽的。
—— 爱因斯坦
未来
所以结论呢。
我还不够格说什么结论,我还是只会成天说这个说那个,我还不知道该怎么做。
《百无一用》
“为什么是我?”他说,“所有的人都这么说。所有人鞋上都有一个结,一件他们不善于做的事情,一份把他们与其他人连接在一起的无能为力。社会依赖现今人们之间的这种不对称。可洪水呢?如果来了洪水,需要一条挪亚方舟呢?不是单单一个人就能完成要重新开始而需要做的那几件事。您看,您不会系鞋带,另一个人不会刨木头,又一个人还没有阅读过托尔斯泰的作品,还有一个人不会播种,如此等等。我多年以来就在寻找,请相信我,很困难,困难极了。看来人们应该手挽着手,就像盲人和瘸子一样,尽管吵架拌嘴,却不能分开行走。
《EVA 新世纪福音战士》(这评论是随便找的)
人是无法完全理解他人的,甚至能否完全理解自己也值得怀疑,但正因如此,人才会努力去了解自己和他人,所以人生才会有趣啊。
人也是,科技也是,说的话也是。