我的编程经历(一)

缘起

混沌未分天地乱,茫茫渺渺无人见。

故事要从小学说起,我有一个似乎是与生俱来的习惯——拆东西,尤其是电子产品。诸如充电器、手电筒、剃须刀…我喜欢研究内部电路板上面的元件,去搜索它们的名字、作用、参数之类的。不过这些都是后话,因为本文主题是“编程”。电子元件里面有一个很有趣的东西,叫做单片机,可以通过编程实现各种功能。这是我学编程的最初动机。

启蒙

时人不识余心乐,将谓偷闲学少年。

那是一个风和日丽的下午,记得我还读初中二年级,当时从家兄的课本堆里发现了一本《C语言程序设计》(谭浩强著)。我如获至宝,利用周末之余读了起来。可惜本人天资愚钝,很多及其基本的东西都无法理解。比如说为什么一定要有函数(function)?为什么要把一个代码块叫做函数?返回值有什么作用?好在,本人也不算特别愚钝,一下就理解了 x = 1 和数学里面的 x = 1 有什么区别,真是可喜可贺。

由于理解能力有限,谭先生的大作本人囫囵吞枣,勉强算是翻完了,只是两手空空(四舍五入就是一无所获)。毕竟,盲人骑瞎马能有什么收获。当然,还有一个比较大的原因就是当时没有电脑,没法调试代码,只能干读。所以很快我就去折腾其他东西去了。

前面说的“其他东西”也和编程有关,那就是修改安卓APP。记得当时 android 4.0 还发布不久,自从某一次我把安装包文件后面的 .apk 改成 .zip 之后就发现了一个新世界。我发现应用界面上的图片还有一些文字都能在解压后 .zip 里面找到,我当时试着把应用启动页面的图片替换成其他图片,以为这样就可以把应用内部显示的图片改成自己想要的,可惜最后我发现安装修改后的安装包一直显示失败。查了很多资料才发现原来安卓系统会校验安装包的完整性,替换了里面的文件之后就不能用了。

经过持续的搜索,我才找到制敌之策,并成功修改了APP里面的内容。说来惭愧,我当时的一大爱好就是找一些很有趣的APP,然后把里面的开发者改成自己,或者在里面加一段话:“本应用由XXX开发”。再发给同学炫耀,并且乐此不疲。

很快,我就不再满足于这种玩法。因为这种方法有一个很大的限制,就是只能修改显示的内容,不能修改运作逻辑。比如只能把某个按钮显示的文字改成其他的,但是改变不了按钮点击之后会发生什么。

年少无知的我决定去提问,去百度知道上面提问(现在回忆起来真想嘲讽当时的自己)。显然,百度知道作为一个面向普罗大众的平台没法解决这类问题。后来我有开始混贴吧,在贴吧大佬的手把手教程下我终于学会了修改一些简单的逻辑,比如让一个单机游戏里的人物生命值小于零了也不会死。不过更复杂的逻辑还是不能独立完成,只能跟着教程一步一步操作。我还从贴吧大佬那里得知了一个重要信息:要想搞好逆向工程,先要学会正向开发。

那是 一个Kotlin还没有火的时代,官方钦点的开发语言是Java,由于孱弱的硬件性能,基于web方案都没法在移动端使用(当时也没有考虑那么多)。所以我就决定开始学习Java,又是一次机缘巧合家兄赠予了一本《Java编程思想》,作者是 Bruce Eckel. 可以说这本书影响了我的编程生涯,作者的名字也是少有的几个我能拼出来的外国人名(狗头)。为了解决没有电脑调试的尴尬局面,我还找到了一个可以在手机上写Java的工具——AIDE。由于可以实时运行代码看效果了,同时外国人写的书对名词的解释更加详细,所以我学习Java还算比较顺利。


未完待续…