`

学习计算机底层知识:兴趣和方法的重要性

阅读更多
一、兴趣的产生
        我在前段日子关注了一阵子号称与同类数据源框架产品执行效率快几十倍的BoneCP,也粗略的看了下其源码实现。其内部核心是采用了JDK5.0新增的并发框架来实现的。之后顺藤摸瓜的学习了下java.util.concurrent包中的内容,期间看了不少PDF资料,初步有了大致的了解,也就是说只停留了在API使用层面上。对这个并发框架的内部实现原理理解的不是很透彻,因为看懂源码也仅仅是在API内部看懂了,并不见得能够挖掘出它的本质。个人感觉今后若还以这样的方式学习新潮技术,路只会越走越窄。因此萌生了学习计算机底层知识的浓厚兴趣。
二、方法的运用
        1.背景
        介绍这些方法之前,先看看它们是在什么背景或情景下产生出来并运用的。
        我本人没有正式地系统学习过计算机底层知识的经历,诸如:操作系统、数据结构、编译原理等基础性科目,但是这些科目我零零散散地都有自学补习过,苦于基础知识晦涩难懂,并且也是自学的,所以都没有坚持下来,各个科目都是浮于表面的理解,没有过太深入性的思考。
        时光荏苒,做程序员已然有四年的光景了,至今不能确切了解,换句话说,不能够在脑海里画出一幅图:我编写的程序代码在计算机中是怎样地处理和执行。为此我感到有些惶恐,有些无助,有些不安。我居然对计算机是那么的不了解,根本就对计算机内部的处理流程没有一个正确的认知,也可以说就脑子就没这个弦。不过我仍然操纵着计算机,重复着编写重复性的代码工作,貌似还有来道趣的。当我知道要去深入学习计算机底层知识开始,我就认为那些行为仅供自娱自乐罢了。
        为什么说是自娱自乐?自己按照着框架开发者给出的文档,告诉你有他们提供了哪些功能,你按照文档上面一步一步地跟着做下去,就知道怎么使用了,这难道不是在自娱自乐么?先抛开了解框架的设计思想和读懂源码不说,主要关注的是这个框架是用到了什么底层知识。比如说Struts框架,他底层就是用到了HTTP协议。为了给我这四年的程序员生涯,以及以后,多少要有个交待,至少我要能知道计算机是怎么执行我写的代码。目的虽然是很简单的,不过确实能引出很多思路来,就看敢不敢去尝试,兴趣就是为达到既定目标的加速剂。
        2.书籍
        在写这篇博文之前,我已经自学一段时间了。阅读的书籍有两本:
        (1)《深入理解计算机系统(第二版)》
        这本书是以程序员角度来讲述计算机操作系统的知识点,覆盖面很全,侧重于编程层面。译者也是很用心的翻译,除了我遇到了不懂的知识点之外,至少我读到的前三章还未发现晦涩难懂的词句。
        (2)《汇编语言(第二版)》(王爽老师编著的)。
        这本书被网上很多朋友推荐,也确实不错,颠覆了以往此类书籍的编排方式;而且书中内容讲的也是明明白白,看的过程中不会遇到太大的阻碍。一些关于计算机系统的基础概念我都是从这本书中理解到的。
        3.方法
        (1)交叉阅读
        我一开始是直接读《深入二》,读到第三章的时候我就读不下去了,因为里面出现的许多概念我都是很模糊的,只能以“逻辑角度”去理解书中的内容,而不是从“物理(本质)角度”去理解的;再往下读的话不但效果不好,而且担心会绕弯路。我采取的方法就是先把这些概念搞清楚,搞透彻,能够在脑海当中形成“第一印象”,再继续前进。
        正好我在网上搜索有关计算机底层基础概念的相关内容时,发现了被很多人推荐去看的《汇编二》。下了一个电子版,慢慢细读起来。这时“进程”切换到了《汇编二》。恩,果然没错。这种方法起到了应有的作用,解决了我在《深入二》中遇到的大部分疑问,《汇编二》看到一定程度后,“进程”切换回《深入二》,如此反复交叉阅读,效果还是蛮不错的。一边能学习计算机系统,一边还能学习汇编语言。这两本书在某些知识点上还是相通的,所以说交叉着看不会事倍功半的。
        (2)屏蔽不相关的知识点
        在看《汇编二》这本书中,我理解了王爽老师为啥提倡“屏蔽知识”这个方法,它有效地提高了学习者在某一个知识点时的专注力,不会被其它知识点所干扰。
        也就是说在关注一个知识点的同时,肯定会引起连带的其它知识点;我们以理解遇到的知识点为目的,去学习其它知识点。要分清主次,切忌盲目学习,以免造成走弯路。我在学习的过程中利用了这个方法,起到了很好的效果。
        (3)练习题背后的深入思考
        这两本书每章每节后面都有大量的练习题或思考题,供我们去理解并运用先前学到的知识点。每道题都是有针对性的,也不是很难。实在不会做也没关系,基本上都是有答案的。但是,请记住,做之前一点要思考一阵子!越不思考就越不会思考。
        做完题目之后,还要进行一番深入思考。我思考的方向是这样的:这道题目用到的知识点为什么就能形成一道题(读着有点拗口,多读几遍就能理解了)。
        自己想想通过这道题目它考察了什么知识点?为什么这个知识点能这样用?为什么自己想不到这个知识点?还能不能将这个知识点扩深一下,换到其它问题当中去呢?多问问为什么,做题才有意义。只知道做题而不知道出题者的本意,这是在自寻死路(淡定~冷静~,这是出自一位悲情人物经常说的一句台词- -)。
        (4)以笔记的形式记录自己的思考
        时常做笔记,生搬硬套把书上内容搬到笔记上,不叫做笔记。哪怕把那段话用自己理解的方式变化一下都要有效果。笔记的内容主要是对某个概念或某个结论表达出自己理解后的文字,通过这种理解又能引申出什么知识点来,多记录这样的内容会很有益的。技术博客怎么写出来的,就是靠平时一点一滴的积攒形成的。
        另外把不懂的概念也记录下来,日后有空余时间了在回过头去查阅相关的资料,以免漏掉了这个知识点。
         4.感悟
        我个人认为网上一些大牛们常说的“要构建属于自己的知识体系结构”云云的话,我是这样理解的:一个知识点引发了另外一个或者是多个知识点,将这些知识点有效地组织起来,形成一种“体系结构”,并且这些知识点互相之间存在着必然的一种 “联系”,各条道路都会是相通的,只是之间的 “路径”不同罢了。因为是自学的,身边也没有老师指导,自己在学习的过程中,思考出的一些想法不敢保证有多准确的,但是敢保证不会偏离实际太多。
三、结束语
        兴趣和方法虽然在表面上是不相干的两个概念,但是在某种情景下,却产生着必然的内在联系。毫无一丝兴趣,再好的方法也是个花瓶;没有好的方法,就是再有浓厚的兴趣,也是举步维艰,直到兴趣全无,停止了前进。自学之路,苦多甜少,只要挺过一段必定会出现的困难期(瓶颈期),后面则会畅通无阻(我认为就该进入麻木期了)。现在对我来说,还未遇上那个未知的瓶颈,虽然这段期间出现很多很多的基础概念,都不是很理解,甚至是见都没见到过,其实这些都是小问题,通过网络搜索都可以查得到,搞得明明白白。知识体系结构慢慢的连接并形成起来,同时关注纵向的发展,也时常要记得横向的扩深(AOP思想?)。




13
3
分享到:
评论
10 楼 pipilu 2012-02-03  
写的太好了,非常细致,看后收获很大,感谢作者!
9 楼 lingfa0511 2010-12-07  
楼主已经付之行动了,偶还停留在想的层面,该自省下了!
8 楼 zhouyrt 2010-12-07  
兴趣的确很重要,它是前进的动力!有了兴趣,会思考,会记录,会行动..最后成功。楼主的分享写的十分细腻,深有体会。谢谢!
7 楼 深夜未眠 2010-12-03  
jallin 写道
非常感谢!
《深入理解计算机系统(第二版)》 我也买了,看到数据,类似浮点什么处理的时候,开始晕了!


那部分我其实也没怎么太看懂,不过没多大关系的~~~跳过那一段也是可以的,不影响往后看~
另外就是说关注点一定要明确,看书切忌死钻牛角尖,书中的概念等等描述性的内容不要死记硬背,理解为主~~~
6 楼 深夜未眠 2010-12-03  
mxswl 写道
作为过来人,我的忠告是,底层这东西,除非你特别有天赋,并能找到应用这些底层知识的相关职位,否则,了解一下就好,不要沉迷,因为太耗青春,你玩不起。


谢谢你的提醒~~~我本意是能了解多少就了解多少。
也算是对自己有个交待~~~
5 楼 mxswl 2010-12-03  
作为过来人,我的忠告是,底层这东西,除非你特别有天赋,并能找到应用这些底层知识的相关职位,否则,了解一下就好,不要沉迷,因为太耗青春,你玩不起。
4 楼 jallin 2010-12-03  
非常感谢!
《深入理解计算机系统(第二版)》 我也买了,看到数据,类似浮点什么处理的时候,开始晕了!
3 楼 dengzhangtao 2010-12-03  
很不错呢, 想你学习了
2 楼 byandby 2010-12-02  
     加油吧,我也不是 什么科班 出身 ,但是我们对底层的看法是一样的,以后我也会学。
1 楼 swen00 2010-12-02  
写的不错,偶收了...

相关推荐

    非计算机专业计算机网络课程教学探讨-.docx

    2.2 改进教学方法,改善教学效果2.2.1 "自顶向下〞教学法目前计算机网络理论知识的讲解主要是采用"自底向上〞的方式进行,由于直接从底层讲起,与实际网络应用难以一下子联系起来,学生学习的时候就会觉得无用...

    Reversing:逆向工程揭密

    但是软件逆向工程仍然算不上成熟,这主要表现在对理论和实践的研究都还处于早期的探究阶段,并未形成统一的、系统的、科学的软件逆向工程的理论和方法。从工程实际的角度来看,大体上可以将软件逆向工程分为两大类:...

    人工智能技术主要包括的五大部分.pdf

    机器学习 机器学习 机器学习就是让机器具备⼈⼀样学习的能⼒,专门研究计算机怎样模拟或实现⼈类的学习⾏ 为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善⾃⾝的性能,它是⼈⼯智 能的核⼼。...

    Linux管理员指南

    但是我必须承认:在计算机行业的巨头们认识到它的重要性之前,Linux并没有引起人们的注意(我最喜欢的一幅幽默画是:一只象征着Linux的企鹅被绑在一架巨大的涂有“IBM”标志的喷气机引擎上,画面的标题是“怎样才能...

    linux管理员指南

    但是我必须承认:在计算机行业的巨头们认识到它的重要性之前,Linux并没有引起人们的注意(我最喜欢的一幅幽默画是:一只象征着Linux的企鹅被绑在一架巨大的涂有“IBM”标志的喷气机引擎上,画面的标题是“怎样才能...

    antlr4权威指南

     最大的改变是ANTLR 4降低了语法中内嵌动作(代码)的重要性,取而代之的是监听器和访问器。新机制将语法和应用的逻辑代码解耦,使得应用程序本身被封装起来,而非散落在语法的各处。在没有内嵌动作的情况下,你...

    自己动手写操作系统(含源代码).part2

    黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如...

    自己动手写操作系统(含源代码).part1

    黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

Global site tag (gtag.js) - Google Analytics