理解计算的本源,学习记录集:动机和态度

    从去年下半年开始,接触和陆续学习了关于函数式编程(FP)相关的技术和知识,并开始学习Scala编程语言,并设想使用之开发Android应用程序。已经这样做的人已经大有人在了,网上也有很多可以参考的资料。(参考此系列总结文,如何建立开环境。)

    在学习函数式编程的这半年以来,感受尤为深刻的就是我蹩脚的数学基础,比如对于什么是“Lambda演算”,理解近乎于零。而对于一些重要的基本概念,比如:函数是一等的、柯里化、闭包、惰性求值,等等,还是一知半解,不能真正谈得上理解。这些方面,网上已经有很多文章做了介绍,但是看过之后,还是似懂非懂,没有豁然开朗的感觉

为什么会这样?这些概念怎么被提出来的?

    对函数式编程的初步理解,我都写在《理解计算的本源,学习记录集:编程语言发展趋势,函数式编程》中了,文中没有涉及到计算理论的部分,仅仅一提而过,未敢深入说明。因为自己没有彻底理解,写了也是抄别人的,没什么意思。

    这几天继续深入学习后,遂冒出一个想法,就是把我对计算理论,以及函数编程的学习,总结出来。学习是阶段式进行的,所以总结也是阶段式的。我的想法,就是按照我学习的不同阶段,按阶段总结我对计算本源的理解,这大概是本学习记录的基本结构了。

    对于为什么要学习计算理论,理解计算的本源,我的看法,这要根据个人兴趣而定,也不是每一位做软件开发的人都一定要去学。但是,一旦你学习了、理解了,那么你就有了对软件开发的本质认识,对提高专业能力,是有莫大帮助的。有的人做软件是为了赚钱,有的人是出于兴趣,不管怎样,学习了这些知识,总是有帮助。

    做为一名科班出身的软件开发人员,回想自己的学习路线,探求本源是总的方向。一开始去思考OS是怎样工作的(软件开发的系统调用是怎么回事,OS的虚存管理是怎样的,等等),接着去思考计算机硬件是如何实现软件的功能的(计算机如何构造的、cpu的指令实现、逻辑电路、时序电路的原理,等等),现在开始继续探究计算机的本源是怎样的(函数式编程的根本含义是什么?Lambda演算的来源是什么?计算机的数学模型、计算机的能力限制、等等)。

    从初步的学习看来,要想去学习和理解计算的本源,相比之前,是需要更广泛的知识基础的,尤其是数学(离散数学)、计算理论,还有信息论相关的部分,这显然是个不小的难度,没关系,学习知识,就是要像狗啃骨头一样,慢慢地“啃”、持续的“啃”,就会有收获。

    会有一个问题,这和实际的编程、开发任务有多少的联系?我觉得学习有2个方面:

    1,可以快速、直接产生生产力的“技术类、工具类”的学习。比如想做Android开发,对Android Framework的学习,就属于这种。用我们中国文化中的说法,就是对“器”的学习,比如有一种新的工具,我们需要学习下工具怎么使用,才能更好的使用这种工具。

    2,间接的、但是影响深远的知识学习。这是“道”。比如去学习Android Framework中蕴含的架构思想,MVC模式, IoC模式等,一旦理解了,学会了,就不仅对开发Android 应用程序有用。“道”的知识显然具有应用的普遍性。

    简单来说,为了赚钱,我们要学习"器";为了发展、锻炼自己的大脑、追求学习的乐趣,更要学习"道"。没有前者,吃饭都是问题;没有后者,时间长了,就会倦怠,好像整天活着没什么意义似的。

    不过学习和理解计算的本源,由于它要求的知识基础广,所以也不是一个容易学习的过程。在本文集中,我想体现出学习的过程和方式,而不仅仅是结果。此文集是我规划的一个较完整的系列文章,也许会在较长的时间里,不定时的更新出来。

    谢谢阅读,任何问题可以联系我,我们一起讨论,共同进步。

posted @ 2013-01-04 14:50  Leo L.Cao  阅读(...)  评论(...编辑  收藏