一、兴趣的产生
我在前段日子关注了一阵子号称与同类数据源框架产品执行效率快几十倍的BoneCP,也粗略的看了下其源码实现。其内部核心是采用了JDK5.0新增的并发框架来实现的。之后顺藤摸瓜的学习了下java.util.concurrent包中的内容,期间看了不少PDF资料,初步有了大致的了解,也就是说只停留了在API使用层面上。对这个并发框架的内部实现原理理解的不是很透彻,因为看懂源码也仅仅是在API内部看懂了,并不见得能够挖掘出它的本质。个人感觉今后若还以这样的方式学习新潮技术,路只会越走越窄。因此萌生了学习计算机底层知识的浓厚兴趣。
二、方法的运用
1.背景
介绍这些方法之前,先看看它们是在什么背景或情景下产生出来并运用的。
我本人没有正式地系统学习过计算机底层知识的经历,诸如:操作系统、数据结构、编译原理等基础性科目,但是这些科目我零零散散地都有自学补习过,苦于基础知识晦涩难懂,并且也是自学的,所以都没有坚持下来,各个科目都是浮于表面的理解,没有过太深入性的思考。
时光荏苒,做程序员已然有四年的光景了,至今不能确切了解,换句话说,不能够在脑海里画出一幅图:我编写的程序代码在计算机中是怎样地处理和执行。为此我感到有些惶恐,有些无助,有些不安。我居然对计算机是那么的不了解,根本就对计算机内部的处理流程没有一个正确的认知,也可以说就脑子就没这个弦。不过我仍然操纵着计算机,重复着编写重复性的代码工作,貌似还有来道趣的。当我知道要去深入学习计算机底层知识开始,我就认为那些行为仅供自娱自乐罢了。
为什么说是自娱自乐?自己按照着框架开发者给出的文档,告诉你有他们提供了哪些功能,你按照文档上面一步一步地跟着做下去,就知道怎么使用了,这难道不是在自娱自乐么?先抛开了解框架的设计思想和读懂源码不说,主要关注的是这个框架是用到了什么底层知识。比如说Struts框架,他底层就是用到了HTTP协议。为了给我这四年的程序员生涯,以及以后,多少要有个交待,至少我要能知道计算机是怎么执行我写的代码。目的虽然是很简单的,不过确实能引出很多思路来,就看敢不敢去尝试,兴趣就是为达到既定目标的加速剂。
2.书籍
在写这篇博文之前,我已经自学一段时间了。阅读的书籍有两本:
(1)《深入理解计算机系统(第二版)》
这本书是以程序员角度来讲述计算机操作系统的知识点,覆盖面很全,侧重于编程层面。译者也是很用心的翻译,除了我遇到了不懂的知识点之外,至少我读到的前三章还未发现晦涩难懂的词句。
(2)《汇编语言(第二版)》(王爽老师编著的)。
这本书被网上很多朋友推荐,也确实不错,颠覆了以往此类书籍的编排方式;而且书中内容讲的也是明明白白,看的过程中不会遇到太大的阻碍。一些关于计算机系统的基础概念我都是从这本书中理解到的。
3.方法
(1)交叉阅读
我一开始是直接读《深入二》,读到第三章的时候我就读不下去了,因为里面出现的许多概念我都是很模糊的,只能以“逻辑角度”去理解书中的内容,而不是从“物理(本质)角度”去理解的;再往下读的话不但效果不好,而且担心会绕弯路。我采取的方法就是先把这些概念搞清楚,搞透彻,能够在脑海当中形成“第一印象”,再继续前进。
正好我在网上搜索有关计算机底层基础概念的相关内容时,发现了被很多人推荐去看的《汇编二》。下了一个电子版,慢慢细读起来。这时“进程”切换到了《汇编二》。恩,果然没错。这种方法起到了应有的作用,解决了我在《深入二》中遇到的大部分疑问,《汇编二》看到一定程度后,“进程”切换回《深入二》,如此反复交叉阅读,效果还是蛮不错的。一边能学习计算机系统,一边还能学习汇编语言。这两本书在某些知识点上还是相通的,所以说交叉着看不会事倍功半的。
(2)屏蔽不相关的知识点
在看《汇编二》这本书中,我理解了王爽老师为啥提倡“屏蔽知识”这个方法,它有效地提高了学习者在某一个知识点时的专注力,不会被其它知识点所干扰。
也就是说在关注一个知识点的同时,肯定会引起连带的其它知识点;我们以理解遇到的知识点为目的,去学习其它知识点。要分清主次,切忌盲目学习,以免造成走弯路。我在学习的过程中利用了这个方法,起到了很好的效果。
(3)练习题背后的深入思考
这两本书每章每节后面都有大量的练习题或思考题,供我们去理解并运用先前学到的知识点。每道题都是有针对性的,也不是很难。实在不会做也没关系,基本上都是有答案的。但是,请记住,做之前一点要思考一阵子!越不思考就越不会思考。
做完题目之后,还要进行一番深入思考。我思考的方向是这样的:这道题目用到的知识点为什么就能形成一道题(读着有点拗口,多读几遍就能理解了)。
自己想想通过这道题目它考察了什么知识点?为什么这个知识点能这样用?为什么自己想不到这个知识点?还能不能将这个知识点扩深一下,换到其它问题当中去呢?多问问为什么,做题才有意义。只知道做题而不知道出题者的本意,这是在自寻死路(淡定~冷静~,这是出自一位悲情人物经常说的一句台词- -)。
(4)以笔记的形式记录自己的思考
时常做笔记,生搬硬套把书上内容搬到笔记上,不叫做笔记。哪怕把那段话用自己理解的方式变化一下都要有效果。笔记的内容主要是对某个概念或某个结论表达出自己理解后的文字,通过这种理解又能引申出什么知识点来,多记录这样的内容会很有益的。技术博客怎么写出来的,就是靠平时一点一滴的积攒形成的。
另外把不懂的概念也记录下来,日后有空余时间了在回过头去查阅相关的资料,以免漏掉了这个知识点。
4.感悟
我个人认为网上一些大牛们常说的“要构建属于自己的知识体系结构”云云的话,我是这样理解的:
一个知识点引发了另外一个或者是多个知识点,将这些知识点有效地组织起来,形成一种“体系结构”,并且这些知识点互相之间存在着必然的一种 “联系”,各条道路都会是相通的,只是之间的 “路径”不同罢了。因为是自学的,身边也没有老师指导,自己在学习的过程中,思考出的一些想法不敢保证有多准确的,但是敢保证不会偏离实际太多。
三、结束语
兴趣和方法虽然在表面上是不相干的两个概念,但是在某种情景下,却产生着必然的内在联系。毫无一丝兴趣,再好的方法也是个花瓶;没有好的方法,就是再有浓厚的兴趣,也是举步维艰,直到兴趣全无,停止了前进。自学之路,苦多甜少,只要挺过一段必定会出现的困难期(瓶颈期),后面则会畅通无阻(我认为就该进入麻木期了)。现在对我来说,还未遇上那个未知的瓶颈,虽然这段期间出现很多很多的基础概念,都不是很理解,甚至是见都没见到过,其实这些都是小问题,通过网络搜索都可以查得到,搞得明明白白。知识体系结构慢慢的连接并形成起来,同时关注纵向的发展,也时常要记得横向的扩深(AOP思想?)。
分享到:
相关推荐
计算机专业英语是现代信息技术领域不可或缺的一部分,其重要性在当今全球化的科技环境中尤为突出。这篇演讲稿强调了学习计算机专业英语对于计算机科学和技术学生的关键作用。 首先,演讲者指出,由于许多最新的...
- **网络管理**:讨论网络管理的重要性和常用工具,如SNMP(简单网络管理协议)。 - **网络编程**:介绍如何使用编程语言实现网络通信,包括套接字编程等。 ### 结论 《计算机网络:自顶向下方法》第六版是一本...
安全风险管理的上下两部分课程强调了网络安全的重要性,包括风险评估、策略制定和安全事件应对等,是保障信息系统安全的基础。 Windows Mobile相关的安全解决方案教程,分别针对服务器和客户端,介绍了在移动设备上...
在计算机科学领域,学习顺序至关重要,因为它可以帮助你构建扎实的基础,逐步深入复杂的概念。以下是一个推荐的学习路径,涵盖了从基础知识到高级主题的关键知识点: 1. **操作系统**:操作系统是计算机的核心,它...
总的来说,非计算机专业《计算机网络》课程的教学改革旨在创建一个更适合非专业学生学习的环境,通过调整教学内容和方法,激发学生的学习兴趣,提高他们的网络技术素养,以适应日益信息化的社会需求。
语言入门阶段,要注重引导学生消除对C语言的神秘感,了解其重要性和学习方法,激发学习兴趣。了解C语言的历史和发展有助于产生熟悉感,同时认识到C语言在系统软件和应用软件开发中的广泛应用,如在PHP编程中的相似之...
通过深入研究这份PDF文档,我们可以了解到希捷3.5寸硬盘如何通过平推式底层通信设备和方法,实现与电信系统的高效协同工作,同时掌握如何优化通信性能、增强系统稳定性和保证数据安全的策略。这对于电信设备的设计、...
学生可以根据自己的需求和兴趣爱好,选择合适的学习路径和内容,提高自己的技术能力和知识水平。 详细的学习建议: 1. 计算机组成原理 计算机组成原理是计算机专业学生需要学习的重要内容。学习计算机组成原理需要...
“案例式 混合式”驱动“C语言程序设计”课程教学改革是指基于案例式驱动课程改革的意义、教学内容、教学方法、教学思考、评价体系等方面进行改革和实践,以激发学生的学习兴趣,提高学生的实践能力和软件编程能力。...
这种方法强调了自顶向下逐步理解网络协议和体系结构的重要性。 网络端系统:文中提到了端系统(Hosts),它们是构成网络的基本单元,包括个人计算机、工作站、网络服务器、邮件服务器、个人数字助理(PDA)和连接到...
通过阅读《深入理解计算机系统》mobi版,读者不仅可以获得理论知识,还能了解到实际操作中的技巧和实践经验,这对于软件开发人员、系统管理员以及任何对计算机系统感兴趣的读者来说都是一份宝贵的资源。在Kindle设备...
3. **突出重点**:自顶向下的方法强调了应用层的重要性,有助于学生关注到网络设计中最关键的部分。 #### 主要内容 - **应用层**:介绍了HTTP、FTP、SMTP等常见应用协议,以及它们是如何支持日常使用的网络服务的...
选择适合自己的编程语言,并结合个人兴趣和职业目标,脚踏实地地学习,避免快餐式的速成方法。 通过不断实践、阅读优秀代码、参与开源项目、交流讨论,你将逐步提高编程技能,达到融会贯通的境地。记住,编程不仅是...
5. 总评部分:对整个学习过程进行评价,不仅关注结果,更重视学习过程和方法,强调自我反思和进步。 这样的教学设计有利于调动学生积极性,促进因材施教,同时也适应了计算机技术快速发展的需求,使学生不仅能掌握...