如何读源码(新手读源码为什么困难)

前几个月写了一个android源码阅读工具,但担心有人不懂我写这个工具的目的在哪里,现在写写我对于读源码的一些体会。

学过英语的同学可以回想一下,当你一篇英语文章一个字都不认识,这篇英语文章给你的感受,这就是新手读源码的感受。

一个词的含义可以从字典上查,但一个一个查会耗尽人的耐心,也可以从上下文中多少看出来(自然语音基石word2vec充分证明这一点),但如果上下文中的单词你也不认识,那要如何下口呢?这就是学习一门新语言的难处,对应到源码阅读中,首先没有字典也不可能有字典,源码的文档也不能算是字典(下面我会说这里的“字典”是什么鬼),而想要通过上下文来理解你就会发现,你是对整个系统的陌生,而不仅仅是对某个函数。

系统就是语言:有人会觉得java是一门语言,系统只是使用这个语言写成的一本书,但你在使用框架享受无尽便利时,你好好想想,这像不像把一个复杂的概念简化成一个词的样子,当你在说出“资本主义”但没有读过资本论的时候,这像不像是你使用框架但没有读过源码的样子。那是什么给了词以含义,并不是计算机语言的文法,从小了看是函数的函数体,但你想想上一段的内容,其实是整个系统。不同的系统在个别函数或者代码段是相似的,但要把整个函数移到另一个函数,免不了要修改,这就像两门同源的自然语言,在个别词上相似,西班牙语humanas是人类的意思,英语好的人不用字典也能看个大概。但就算你精通英语,你也看不懂整篇的西班牙语,系统也是这样,两个系统是两门不同的语言,那么系统就是语言。再换一种说法,同一个系统,用两种计算机语言写出来,你学会了其中的一个,另一个不学也会用,从这个角度也可以说明系统才是语言本体,而不是计算机语言语法。
从这样的思路看,函数就是文字,函数的名字可以看作是文字,函数的函数体可以看作是对这个文字的解释(但显然这样的对文字的解释不经过总结是不能写成字典的),也可以看做句子。一个程序就是一篇文章了。

字典:自然语言可以有字典,那是因为存在能让所有人都感受到的实物与情感,字典中的解释都是依附于这些共识的,如果你回到古代,你是很难解释清楚什么是耳机的,因为耳机的存在依附于手机电脑,手机电脑不存在,你如何解释耳机呢(你同样解释不了充电器)。那么计算机的世界是否有这样的共识,是否有实实在在存在的实物(计算机的世界讨论情感还太早)?当然是有的,当你写一段代码有似曾相识的感觉,或者不用想就能实现一个小功能时,你就是碰到一个计算机世界的实物了,这种实物是计算机的指令作为自然,与我们的需求的碰撞(就象现实的自然与我们的现实需求的碰撞那样),只是这样的实物没有人去总结成规范,因此计算机语言是没有字典的。

文法(计算机语言的语法)能对应到什么:我也不知道,我也不想知道,因为觉得暂时没有什么用。

为什么要做这样的对应呢,我写的工具又到底有什么用呢?

我的大方向是想要总结上面说的那样一本字典的,但目前的方向只是想让代码的阅读尽量的自动化,将来在机器学习的加持下,发现那些实体也不是不可能。等字典写成了,写程序只需要需求分析,其他都自动完成也不是不可能。

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值