0%

程序编译的过程

一个程序的编译,需要完成词法分析、语法分析、中间代码生成、代码优化、目标代码生成。
而编译的过程包括预处理preprocessing、编译compilation、汇编assembly和链接linking。

  1. 词法分析。词法分析指的是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,然后把字符串的源程序改造成单词符号串的中间程序。在编译程序时,这一过程是自动完成的。编译程序会对代码的每个单词进行检查,如果单词发生错误,编译过程就会停止并显示错误,这时需要对程序中的错误进行修改。
  2. 语法分析。语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语句。例如,需要检查表达式、赋值、循环等结构是否完整和符合使用规则。在语法分析时,会分析出程序中错误的语句,并显示出结果。如果语法发生错误,编译任务是不能完成的。
  3. 中间代码生成。中间代码是源程序的一种内部表示,或称中间语言。程序进行词法分析和语法分析以后,将程序转换成中间代码,这一转换的作用是使程序的结构更加简单和规范。中间代码生成操作是一个中间过程,与用户无关。
  4. 代码优化。代码优化是指对程序进行多种等价变换,使得变换后的程序能生成更有效的目标代码。用户可以在编译程序时设置代码优化的参数,可以针对不同的环境和设置进行优化。
  5. 目标代码生成。目标代码生成指的是产生可以执行的应用程序,这是编译的最后一个步骤。生成的程序是二进制形式的机器语言,用户只能运行这个程序,而不能打开这个文件查看程序的代码。

简介

pkg-config 主要解决软件库的依赖问题,特别是在不同的平台,安装的软件目录不同的情况下,可以很优雅地解决。这一切都是自动的,不用担心库文件放在什么地方。

1
pkg-config - Return metainformation about installed libraries

比如对于同样安装了gtk的系统而言,使用下来命令

1
pkg-config --libs --cflags gtk+-2.0

MacOSX输出为:

1
-D_REENTRANT -I/usr/local/Cellar/gtk+/2.24.31_1/include/gtk-2.0 -I/usr/local/Cellar/gtk+/2.24.31_1/lib/gtk-2.0/include -I/usr/local/Cellar/pango/1.40.14/include/pango-1.0 -I/usr/local/Cellar/harfbuzz/1.7.5/include/harfbuzz -I/usr/local/Cellar/graphite2/1.3.10/include -I/usr/local/Cellar/pango/1.40.14/include/pango-1.0 -I/usr/local/Cellar/atk/2.26.1/include/atk-1.0 -I/usr/local/Cellar/cairo/1.14.12/include/cairo -I/usr/local/Cellar/pixman/0.34.0_1/include/pixman-1 -I/usr/local/Cellar/fontconfig/2.12.6/include -I/usr/local/opt/freetype/include/freetype2 -I/usr/local/Cellar/libpng/1.6.34/include/libpng16 -I/usr/local/Cellar/gdk-pixbuf/2.36.11/include/gdk-pixbuf-2.0 -I/usr/local/Cellar/libpng/1.6.34/include/libpng16 -I/usr/local/Cellar/glib/2.54.3/include/glib-2.0 -I/usr/local/Cellar/glib/2.54.3/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/Cellar/pcre/8.41/include -L/usr/local/Cellar/gtk+/2.24.31_1/lib -L/usr/local/Cellar/pango/1.40.14/lib -L/usr/local/Cellar/atk/2.26.1/lib -L/usr/local/Cellar/cairo/1.14.12/lib -L/usr/local/Cellar/gdk-pixbuf/2.36.11/lib -L/usr/local/Cellar/glib/2.54.3/lib -L/usr/local/opt/gettext/lib -lgtk-quartz-2.0 -lgdk-quartz-2.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl -Wl,-framework -Wl,CoreFoundation

CentOS输出为:

1
-pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng15 -I/usr/include/libdrm  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype

可以看出还是有很大差别的,所以对于下面的示例程序:

1
2
3
4
```

编译的时候,直接使用下面的命令即可,而不用关注操作系统。

gcc -o test main.c pkg-config --libs --cflags gtk+-2.0


没有规矩不成方圆 sort

Linux sort 命令用于将文本内容进行排序。

官方定义为:

sort - sort lines of text files

语法

1
2
$ sort [OPTION]... [FILE]...
$ sort [OPTION]... --files0-from=F

常用的参数为

  • -c 检查文件是否已经按照顺序排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -r 以相反的顺序来排序。
  • -k field1[,field2] 按指定的列进行排序。

这里假定测试文件名为testfile

1
2
3
4
5
6
7
LiSi            80

ZhangSan 70

WangWu 90

MaLiu 88

默认无参数

在使用 sort 命令以默认的式对文件的行进行排序,命令如下:

1
2
3
4
5
6
7
8
$ sort testfile 



LiSi 80
MaLiu 88
WangWu 90
ZhangSan 70

sort 命令默认情况下将第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

根据第N列排序

对于测试文件而言,或许我们更希望使用数字来统计排序,此时可以使用-k N参数,其中N为列数

1
2
3
4
5
6
7
8
$  sort testfile -k 2



ZhangSan 70
LiSi 80
MaLiu 88
WangWu 90

指定分隔符,进行排列

此时默认的分隔符为空格,如果是其他分隔符,比如分毫

检查是否已经排序

在某些情况下,或许只想看看文件是否已经排序,使用-c参数 :

1
2
$  sort -c testfile
sort: testfile:2: disorder

如果没有排序会有输出,而排序的话就没有输出。

逆序排列

如果希望看一下数字从高到低的培训,使用-r参数:

1
2
3
4
5
$  sort testfile -k 2  -r
WangWu 90
MaLiu 88
LiSi 80
ZhangSan 70

对一个使用冒号分隔的文件的第二项进行排序

$ sort -t: -k 2 names.txt

对使用tab分隔的第三项进行排序**(department_id),**并去掉重复项

$ sort -t: -u -k 3 names.txt

passwd文件的第三项进行排序**(userid)**

$ sort -t: -k 3n /etc/passwd | more

基于ip地址对**/etc/hosts**文件排序

$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

与其它命令组合在一起使用

ps –ef | sort : 对进程列表进行排序

ls -al | sort +4n : 使用升序对ls -al的输出以文件大小进行排序(第5项)

ls -al | sort +4nr : 使用降序对ls -al的输出以文件大小进行排序(第5项)

Linux的 sort 命令

Linux sort 命令用于将文本内容进行排序。

官方定义为:

sort - sort lines of text files

语法

1
2
$ sort [OPTION]... [FILE]...
$ sort [OPTION]... --files0-from=F

常用的参数为

  • -c 检查文件是否已经按照顺序排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -r 以相反的顺序来排序。
  • -k field1[,field2] 按指定的列进行排序。

这里假定测试文件名为testfile

1
2
3
4
5
6
7
LiSi            80

ZhangSan 70

WangWu 90

MaLiu 88

默认无参数

在使用 sort 命令以默认的式对文件的行进行排序,命令如下:

1
2
3
4
5
6
7
8
$ sort testfile 



LiSi 80
MaLiu 88
WangWu 90
ZhangSan 70

sort 命令默认情况下将第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

根据第N列排序

对于测试文件而言,或许我们更希望使用数字来统计排序,此时可以使用-k N参数,其中N为列数

1
2
3
4
5
6
7
8
$  sort testfile -k 2



ZhangSan 70
LiSi 80
MaLiu 88
WangWu 90

检查是否已经排序

在某些情况下,或许只想看看文件是否已经排序,使用-c参数 :

1
2
$  sort -c testfile
sort: testfile:2: disorder

如果没有排序会有输出,而排序的话就没有输出。

逆序排列

如果希望看一下数字从高到低的培训,使用-r参数:

1
2
3
4
5
6
7
8
$  sort testfile -k 2  -r
WangWu 90
MaLiu 88
LiSi 80
ZhangSan 70



  • -b 忽略每行前面开始出的空格字符。

  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。

  • -f 排序时,将小写字母视为大写字母。

    -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。

  • -m 将几个排序好的文件进行合并。

  • -M 将前面3个字母依照月份的缩写进行排序。

  • -n 依照数值的大小排序。

  • -o<输出文件> 将排序后的结果存入指定的文件。

  • -t<分隔字符> 指定排序时所用的栏位分隔字符。

  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

你是唯一的 uniq

.. note::
安得有车马,尚无渔与樵。
宋·王安石《游章义寺》

Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

官方定义为:

uniq - report or omit repeated lines

uniq 可检查文本文件中重复出现的行列。

语法

语法比较简单,直接用就可以。

1
$ uniq [OPTION]... [INPUT [OUTPUT]]

常用的参数为:

  • -c--count 在每列旁边显示该行重复出现的次数。

  • -d--repeated 仅显示重复出现的行列。

  • -u--unique 仅显示出一次的行列。

假定有1个文件为testfile,内容如下:

1
2
3
4
5
6
7
8
9
10
11
testfile
Hello 1
Hello 2
Hello 2
Hello 3
Hello 3
Hello 3
Hello 4
Hello 4
Hello 4
Hello 4

默认无参数

使用uniq 命令可以删除重复的行,不管有多少重复的行,仅仅显示一行。

1
2
3
4
5
$  uniq testfile
Hello 1
Hello 2
Hello 3
Hello 4

统计出现频次

如果希望统计每一行出现的频次,可以使用-c参数,其中第一行输出为出现的次数

1
2
3
4
5
$  uniq -c testfile
1 Hello 1
2 Hello 2
3 Hello 3
4 Hello 4

仅仅显示重复的行

在某些情况下,或许只想看到有重复的列,使用-d参数 :

1
2
3
4
$  uniq -d testfile
Hello 2
Hello 3
Hello 4

仅仅显示不重复的行

而某些情况下,或许只想看到不重复的列,使用-u参数:

1
2
$  uniq -u testfile
Hello 1

Linux的 uniq 命令

Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

官方定义为:

uniq - report or omit repeated lines

uniq 可检查文本文件中重复出现的行列。

语法

语法比较简单,直接用就可以。

1
$ uniq [OPTION]... [INPUT [OUTPUT]]

常用的参数为:

  • -c--count 在每列旁边显示该行重复出现的次数。

  • -d--repeated 仅显示重复出现的行列。

  • -u--unique 仅显示出一次的行列。

假定有1个文件为testfile,内容如下:

1
2
3
4
5
6
7
8
9
10
11
testfile
Hello 1
Hello 2
Hello 2
Hello 3
Hello 3
Hello 3
Hello 4
Hello 4
Hello 4
Hello 4

1⃣ 默认无参数

使用uniq 命令可以删除重复的行,不管有多少重复的行,仅仅显示一行。

1
2
3
4
5
$  uniq testfile
Hello 1
Hello 2
Hello 3
Hello 4

2⃣ 统计出现频次

如果希望统计每一行出现的频次,可以使用-c参数,其中第一行输出为出现的次数

1
2
3
4
5
$  uniq -c testfile
1 Hello 1
2 Hello 2
3 Hello 3
4 Hello 4

3⃣ 仅仅显示重复的行

在某些情况下,或许只想看到有重复的列,使用-d参数 :

1
2
3
4
$  uniq -d testfile
Hello 2
Hello 3
Hello 4

4⃣ 仅仅显示不重复的行

而某些情况下,或许只想看到不重复的列,使用-u参数:

1
2
$  uniq -u testfile
Hello 1

Linux which命令

Linux which命令用于查找一个命令,不像findfind是用来查找文件的。

官方定义为:

which - locate a command

改名了会在当前环境变量中查找符合条件的命令。

语法

1
$ which [-a] filename ...

这个命令基本没有参数,只有一个:

  • -a print all matching pathnames of each argument

如果找到相关的指令并可执行,将返回0.

默认无参数

查找命令并显示具体路径:

1
2
$ which bash
/usr/bin/bash

可能会输出不同,取决于环境变量。

显示所有命令

一个命令,可能会有多个版本,或者同一个版本的多个位置,可以使用-a参数来检索。

1
2
3
$ which -a bash
/usr/bin/bash
/bin/bash

一个小小无聊的尝试

Ubuntu操作系统中,看看下面的命令:

1
2
$ which which
which: shell built-in command

显示为内建指令

扩展

如果确认程序或者命令已经安装,但是就是找不到这个命令,如下:

1
2
$ which command
command not found

这个时候就需要确定环境变量的配置PATH,可以通过下面的命令来查看:

1
2
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

此时可以从输出中看到,所确认命令的路径是否在当前环境变量中,如果没有的话,就需要考虑添加进来了。

Linux which命令

Linux which命令用于查找一个命令,不像findfind是用来查找文件的。

官方定义为:

which - locate a command

改名了会在当前环境变量中查找符合条件的命令。

语法

1
$ which [-a] filename ...

这个命令基本没有参数,只有一个:

  • -a print all matching pathnames of each argument

如果找到相关的指令并可执行,将返回0.

1⃣ 默认无参数

查找命令并显示具体路径:

1
2
$ which bash
/usr/bin/bash

可能会输出不同,取决于环境变量。

2⃣ 显示所有命令

一个命令,可能会有多个版本,或者同一个版本的多个位置,可以使用-a参数来检索。

1
2
3
$ which -a bash
/usr/bin/bash
/bin/bash

3⃣ 一个小小无聊的尝试

Ubuntu操作系统中,看看下面的命令:

1
2
$ which which
which: shell built-in command

显示为内建指令

扩展

如果确认程序或者命令已经安装,但是就是找不到这个命令,如下:

1
2
$ which command
command not found

这个时候就需要确定环境变量的配置PATH,可以通过下面的命令来查看:

1
2
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

此时可以从输出中看到,所确认命令的路径是否在当前环境变量中,如果没有的话,就需要考虑添加进来了。

如何阅读一本书? – 范多伦,艾德勒

法国学者巴斯卡(Pascal)在三百年前就说过:“读得太快或太慢,都一无所获。”注:读书不能太快或太慢!要有所把握

介绍四种不同层次的阅读—基础阅读(elementary reading)、检视阅读(inspectional reading)、分析阅读、主题阅读(syntopical reading)。

注:四种层次的阅读

阅读越主动,效果越好。这个读者比另一个读者更主动一些,他在阅读世界里面的探索能力就更强一些,收获更多一些,因而也更高明一些。读者对他自己,以及自己面前的书籍,要求的越多,获得的就越多。

注:主动阅读

阅读的目标:为获得资讯而读,以及为求得理解

注:阅读的目标

运用阅读以增加资讯与洞察力,与运用阅读增长理解力

注:阅读的目标

要避免这样的错误—以为读得多就是读得好的错误—我们必须要区分出各种不同的阅读形态。这种区分对阅读的本身,以及阅读与一般教育的关系都有很重大的影响。

注:读的多并不一定是读的好

敏锐的观察、灵敏可靠的记忆、想像的空间,再者当然就是训练有素的分析、省思能力。这么说的理由在于:阅读也就是一种发现—虽然那是经过帮助,而不是未经帮助的一个过

注:阅读的技巧

二个层次的阅读我们称之为检视阅读(inspectional reading)。特点在强调时间。在这个阅读层次,学生必须在规定的时间内完成一项阅读的功课

注:第二个层次

分析阅读就是全盘的阅读、完整的阅读,或是说优质的阅读—你能做到的最好的阅读方式。如果说检视阅读是在有限的时间内,最好也最完整的阅读,那么分析阅读就是在无限的时间里,最好也最完整的阅读

注:第三个层次,分析阅读

如比较阅读(comparative reading)。在做主题阅读时,阅读者会读很多书,而不是一本书,并列举出这些书之间相关之处,提出一个所有的书都谈到的主题。但只是书本字里行间的比较还不够。主题阅读涉及的远不止此。借助他所阅读的书籍,主题阅读者要能够架构出一个可能在哪一本书里都没提过的主题分析。因此,很显然的,主题阅读是最主动、也最花力气的一种阅读。

注:最复杂的主题阅读

层次所可能碰到的各种紧急状况与问题的程度就会明白了。然而,除非我们在所有的阅读层次都投下努力,否则我们社会里有关阅读的整体。特别就一本教人如何阅读的书来说,它的读者必须有某种程度的阅读能力才行。

?(1)先看书名页

注:略读的方法1

2)研究目录页,对这本书的基本架构做

注:略读的方法2

3)如果书中附有索引,也要检阅一下—大多数论说类的书籍都会有索引

注:略读的方法3索引

4)如果那是本包着书衣的新书,不妨读一下出版者的介绍

注:略读的方法4出版商说明

(5)从你对一本书的目录很概略,甚至有点模糊的印象当中,开始挑几个看来跟主题息息相关的篇章来看。如果这些篇章在开头或结尾有摘要说明(很多会有),就要仔细地阅读这些说明

注:略读的方法5随便挑几章看看

6)最后一步,把书打开来,东翻翻西翻翻,念个一两段.有时候连续读几页,但不要太多。就用这样的方法把全书翻过一遍,随时寻找主要论点的讯号,留意主题的基本脉动。最重要的是,不要忽略最后的两三页。就算最后有后记,一本书最后结尾的两三页也还是不可忽视的

注:略读的方法6主动寻找资讯

头一次面对一本难读的书的时候,从头到尾先读完一遍,碰到不懂的地方不要停下来查询或思索。

只注意你能理解的部分,不要为一些没法立即了解的东西而停顿。继续读下去,略过那些不懂的部分,很快你会读到你看得懂的地方。集中精神在这个部分。继续这样读下去。将全书读完,不要被一个看不懂的章节、注解、评论或参考资料阻挠或泄气。如果你让自己被困住了,如果你容许自己被某个顽固的段落绑住了,你就是被打败了。在大多数情况里,你一旦和它纠缠,就很难脱困而出。在读第二遍的时候,你对那个地方的了解可能会多一些,但是在那之前,你必须至少将这本书先从头到尾读一遍才行。

注:读书对的方向!不能因为某个章节不懂而停滞不前,至少完整读下来,多注意那些理解的章节

亚当·斯密(Adam Smith)的经典作品《国富论》(The Wealth of Nations

注:国富论

每一本书,不论是多么难读的书,在无关紧要的间隙部分就可以读快一点。而一本好书,总会包含一些比较困难,应该慢慢阅读的内容

注:快慢的把握

要矫正眼睛逗留于一点的工具有很多种,有些很复杂又很昂贵。无论如何,任何复杂的工具其实都比不上你的一双手来得有用,你可以利用双手训练自己的眼睛,跟着章节段落移动得越来越快。你可以自己做这样的训练:将大拇指与食指、中指合并在一起,用这个“指针”顺着一行一行的字移动下去,速度要比你眼睛感觉的还要快一点。强迫自己的眼睛跟着手部的动作移动。一旦你的眼睛能跟着手移动时,你就能读到那些字句了。继续练习下去,继续增快手的动作,等到你发觉以前,你的速度已经可以比以前快两三倍了

注:矫正眼睛经常逗留,跟不上脑袋的速度,用手做工具

在阅读一本书的时候,慢不该慢到不值得,快不该快到有损于满足与理解。不论怎么说,阅读的速度,不论是快还是慢,只不过是阅读问题一个微小的部分而

注:阅读时的速度把握

最后,在第一次阅读一本难读的书时,不要企图了解每一个字句。这是最最重要的一个规则。这也是检视阅读的基本概念。不要害怕,或是担忧自己似乎读得很肤浅。就算是最难读的书也快快地读一遍。当你再读第二次时,你就已经准备好要读这本书了。

注:对难懂的书先速读一遍,然后? 再研究第二遍

在阅读的时候想要保持清醒,或昏昏入睡,主要看你的阅读目标是什么。如果你的阅读目标是获得利益—不论是心灵或精神上的成长—你就得保持清醒。这也意味着在阅读时要尽可能地保持主动,同时还要做一番努力—而这番努力是会有回馈的。

注:阅读的时候保持清醒

关于一本书,你一定要提出四个主要的问题。

(1)整体来说,这本书到底在谈些什么?你一定要想办法找出这本书的主题,作者如何依次发展这个主题,如何逐步从核心主题分解出从属的关键议题来。

(2)作者细部说了什么,怎么说的?你一定要想办法找出主要的想法、声明与论点。这些组合成作者想要传达的特殊讯息。

(3)这本书说得有道理吗?是全部有道理,还是部分有道理?除非你能回答前两个问题,否则你没法回答这个问题。在你判断这本书是否有道理之前,你必须先了解整本书在说些什么才行。然而,等你了解了一本书,如果你又读得很认真的话,你会觉得有责任为这本书做个自己的判断。光是知道作者的想法是不够的。

(4)这本书跟你有什么关系?如果这本书给了你一些资讯,你一定要问问这些资讯有什么意义。为什么这位作者会认为知道这件事很重要?你真的有必要去了解吗?如果这本书不只提供了资讯,还启发了你,就更有必要找出其他相关的、更深的含意或建议,以获得更多的启示。

注:读书时要提出的四个问题

如何让一本书真正属于你自己

如果你有读书时提出问题的习惯,那就要比没有这种习惯更能成为一个好的阅读者。但是,就像我们所强调的,仅仅提出问题还不够。你还要试着去回答问题。理论上来说,这样的过程可以在你脑海中完成,但如果你手中有一枝笔会更容易做到。在你阅读时,这枝笔会变成提醒你的一个讯号。

注:如何让一本书属于你

俗话说:“你必须读出言外之意,才会有更大的收获。”而所谓阅读的规则,就是用一种比较正式的说法来说明这件事而已。此外,我们也鼓励你“写出言外之意”。不这么做,就难以达到最有效的阅读的境界。

你买了一本书,就像是买了一项资产,和你付钱买衣服或家具是一样的。但是就一本书来说,付钱购买的动作却不过是真正拥有这本书的前奏而已。要真正完全拥有一本书,必须把这本书变成你自己的一部分才行,而要让你成为书的一部分最好的方法—书成为你的一部分和你成为书的一部分是同一件事—就是要去写下来。

为什么对阅读来说,在书上做笔记是不可或缺的事?第一,那会让你保持清醒—不只是不昏睡,还是非常清醒。其次,阅读,如果是主动的,就是一种思考,而思考倾向于用语言表达出来—不管是用讲的还是写的。一个人如果说他知道他在想些什么,却说不出来,通常是他其实

注:让书成为自己的

知道自己在想些什么。第三,将你的感想写下来,能帮助你记住作者的思想

做笔记有各式各样,多彩多姿的方法。以下是几个可以采用的方

注:做笔记的方法

※ 三种做笔记的方

注:三种做笔记的方法

※ 培养阅读的习惯

所谓艺术或技巧,只属于那个能养成习惯,而且能依照规则来运作的人。这也是艺术家或任何领域的工匠与众不同之处。要养成习惯,除了不断地运作练习之外,别无他法。这也就是我们通常所说的,从实际去做中学习到如何去做的道

注:培养阅读的习惯

第七章 透视一本书

每一本书的封面之下都有一套自己的骨架。作为一个分析阅读的读者,你的责任就是要找出这个骨

注:透视一本书的骨架

一本好书,就像一栋好房子,每个部分都要很有秩序地排列起来。每个重要部分都要有一定的独立

注:好书像一个好房子

分析阅读的第一阶段,或,找出一本书在谈些什么的四个规则:

注:找出一本书在说什么的方法

一般来说,阅读的过程与商业上的过程正好相反。商人通常是在找出提案是什么后,才会达成共识。但是读者却要先与作者达成共识,才能明白作者的主旨是什么,以及他所声明的是什么样的判断

注:判断作者的主旨

?(5)诠释作者使用的关键字,与作者达成共识。

(6)从最重要的句子中抓出作者的重要主旨。

(7)找出作者的论述,重新架构这些论述的前因后果,以明白作者的主张。

(8)确定作者已经解决了哪些问题,还有哪些是未解决的。在未解决的问题中,确定哪些是作者认为自己无法解决的问题。

注:分析阅读的第二个阶段

我们的建议尤其适用于所谓巨著。一般人总是抱着热忱想要阅读巨著,但是当他绝望地感觉到自己无法理解这本书时,热忱很快便消退了。其中一个原因,当然是因为一般人根本不知道要如何好好地阅读一本书。但还不只如此,还有另一个原因:他们认为自己应该能够读懂自己所挑选的第一本书,用不着再读其他相关的著作。

注:巨著读法

许多伟大的作品不只是互相有关联,而且在写作时还有特定的先后顺序,这都是不该忽略的事。后人的作品总是受到前人的影响。如果你先读前一位的作品,他可能会帮助你了解后人的作品。阅读彼此相关的书籍‘,依照写作的时间顺序来读,对你了解最后写的作品有很大帮助。这就是外在辅助阅读的基本常识与规则。

注:读巨著前先读一些基础著作

读一本好书,却会让你的努力有所回报。最好的书对你的回馈也最多。当然,这样的回馈分成两种:第一,当你成功地阅读了一本难读的好书之后,你的阅读技巧必然增进了。第二—长期来说这一点更重要—一本好书能教你了解这个世界以及你自己。你不只更懂得如何读得更好,还更懂得生命。你变得更有智慧,而不只是更有知识—像只提供讯息的书所形成的那样。你会成为一位智者,对人类生命中永恒的真理有更深刻的体认。

注:读一本好书的好处

好的阅读,也就是主动的阅读,不只是对阅读本身有用,也不只是对我们的工作或事业有帮助,更能帮助我们的心智保持活力与

如何阅读一本书? – 范多伦,艾德勒

法国学者巴斯卡(Pascal)在三百年前就说过:“读得太快或太慢,都一无所获。”注:读书不能太快或太慢!要有所把握

介绍四种不同层次的阅读—基础阅读(elementary reading)、检视阅读(inspectional reading)、分析阅读、主题阅读(syntopical reading)。

注:四种层次的阅读

阅读越主动,效果越好。这个读者比另一个读者更主动一些,他在阅读世界里面的探索能力就更强一些,收获更多一些,因而也更高明一些。读者对他自己,以及自己面前的书籍,要求的越多,获得的就越多。

注:主动阅读

阅读的目标:为获得资讯而读,以及为求得理解

注:阅读的目标

运用阅读以增加资讯与洞察力,与运用阅读增长理解力

注:阅读的目标

要避免这样的错误—以为读得多就是读得好的错误—我们必须要区分出各种不同的阅读形态。这种区分对阅读的本身,以及阅读与一般教育的关系都有很重大的影响。

注:读的多并不一定是读的好

敏锐的观察、灵敏可靠的记忆、想像的空间,再者当然就是训练有素的分析、省思能力。这么说的理由在于:阅读也就是一种发现—虽然那是经过帮助,而不是未经帮助的一个过

注:阅读的技巧

二个层次的阅读我们称之为检视阅读(inspectional reading)。特点在强调时间。在这个阅读层次,学生必须在规定的时间内完成一项阅读的功课

注:第二个层次

分析阅读就是全盘的阅读、完整的阅读,或是说优质的阅读—你能做到的最好的阅读方式。如果说检视阅读是在有限的时间内,最好也最完整的阅读,那么分析阅读就是在无限的时间里,最好也最完整的阅读

注:第三个层次,分析阅读

如比较阅读(comparative reading)。在做主题阅读时,阅读者会读很多书,而不是一本书,并列举出这些书之间相关之处,提出一个所有的书都谈到的主题。但只是书本字里行间的比较还不够。主题阅读涉及的远不止此。借助他所阅读的书籍,主题阅读者要能够架构出一个可能在哪一本书里都没提过的主题分析。因此,很显然的,主题阅读是最主动、也最花力气的一种阅读。

注:最复杂的主题阅读

层次所可能碰到的各种紧急状况与问题的程度就会明白了。然而,除非我们在所有的阅读层次都投下努力,否则我们社会里有关阅读的整体。特别就一本教人如何阅读的书来说,它的读者必须有某种程度的阅读能力才行。

?(1)先看书名页

注:略读的方法1

2)研究目录页,对这本书的基本架构做

注:略读的方法2

3)如果书中附有索引,也要检阅一下—大多数论说类的书籍都会有索引

注:略读的方法3索引

4)如果那是本包着书衣的新书,不妨读一下出版者的介绍

注:略读的方法4出版商说明

(5)从你对一本书的目录很概略,甚至有点模糊的印象当中,开始挑几个看来跟主题息息相关的篇章来看。如果这些篇章在开头或结尾有摘要说明(很多会有),就要仔细地阅读这些说明

注:略读的方法5随便挑几章看看

6)最后一步,把书打开来,东翻翻西翻翻,念个一两段.有时候连续读几页,但不要太多。就用这样的方法把全书翻过一遍,随时寻找主要论点的讯号,留意主题的基本脉动。最重要的是,不要忽略最后的两三页。就算最后有后记,一本书最后结尾的两三页也还是不可忽视的

注:略读的方法6主动寻找资讯

头一次面对一本难读的书的时候,从头到尾先读完一遍,碰到不懂的地方不要停下来查询或思索。

只注意你能理解的部分,不要为一些没法立即了解的东西而停顿。继续读下去,略过那些不懂的部分,很快你会读到你看得懂的地方。集中精神在这个部分。继续这样读下去。将全书读完,不要被一个看不懂的章节、注解、评论或参考资料阻挠或泄气。如果你让自己被困住了,如果你容许自己被某个顽固的段落绑住了,你就是被打败了。在大多数情况里,你一旦和它纠缠,就很难脱困而出。在读第二遍的时候,你对那个地方的了解可能会多一些,但是在那之前,你必须至少将这本书先从头到尾读一遍才行。

注:读书对的方向!不能因为某个章节不懂而停滞不前,至少完整读下来,多注意那些理解的章节

亚当·斯密(Adam Smith)的经典作品《国富论》(The Wealth of Nations

注:国富论

每一本书,不论是多么难读的书,在无关紧要的间隙部分就可以读快一点。而一本好书,总会包含一些比较困难,应该慢慢阅读的内容

注:快慢的把握

要矫正眼睛逗留于一点的工具有很多种,有些很复杂又很昂贵。无论如何,任何复杂的工具其实都比不上你的一双手来得有用,你可以利用双手训练自己的眼睛,跟着章节段落移动得越来越快。你可以自己做这样的训练:将大拇指与食指、中指合并在一起,用这个“指针”顺着一行一行的字移动下去,速度要比你眼睛感觉的还要快一点。强迫自己的眼睛跟着手部的动作移动。一旦你的眼睛能跟着手移动时,你就能读到那些字句了。继续练习下去,继续增快手的动作,等到你发觉以前,你的速度已经可以比以前快两三倍了

注:矫正眼睛经常逗留,跟不上脑袋的速度,用手做工具

在阅读一本书的时候,慢不该慢到不值得,快不该快到有损于满足与理解。不论怎么说,阅读的速度,不论是快还是慢,只不过是阅读问题一个微小的部分而

注:阅读时的速度把握

最后,在第一次阅读一本难读的书时,不要企图了解每一个字句。这是最最重要的一个规则。这也是检视阅读的基本概念。不要害怕,或是担忧自己似乎读得很肤浅。就算是最难读的书也快快地读一遍。当你再读第二次时,你就已经准备好要读这本书了。

注:对难懂的书先速读一遍,然后? 再研究第二遍

在阅读的时候想要保持清醒,或昏昏入睡,主要看你的阅读目标是什么。如果你的阅读目标是获得利益—不论是心灵或精神上的成长—你就得保持清醒。这也意味着在阅读时要尽可能地保持主动,同时还要做一番努力—而这番努力是会有回馈的。

注:阅读的时候保持清醒

关于一本书,你一定要提出四个主要的问题。

(1)整体来说,这本书到底在谈些什么?你一定要想办法找出这本书的主题,作者如何依次发展这个主题,如何逐步从核心主题分解出从属的关键议题来。

(2)作者细部说了什么,怎么说的?你一定要想办法找出主要的想法、声明与论点。这些组合成作者想要传达的特殊讯息。

(3)这本书说得有道理吗?是全部有道理,还是部分有道理?除非你能回答前两个问题,否则你没法回答这个问题。在你判断这本书是否有道理之前,你必须先了解整本书在说些什么才行。然而,等你了解了一本书,如果你又读得很认真的话,你会觉得有责任为这本书做个自己的判断。光是知道作者的想法是不够的。

(4)这本书跟你有什么关系?如果这本书给了你一些资讯,你一定要问问这些资讯有什么意义。为什么这位作者会认为知道这件事很重要?你真的有必要去了解吗?如果这本书不只提供了资讯,还启发了你,就更有必要找出其他相关的、更深的含意或建议,以获得更多的启示。

注:读书时要提出的四个问题

如何让一本书真正属于你自己

如果你有读书时提出问题的习惯,那就要比没有这种习惯更能成为一个好的阅读者。但是,就像我们所强调的,仅仅提出问题还不够。你还要试着去回答问题。理论上来说,这样的过程可以在你脑海中完成,但如果你手中有一枝笔会更容易做到。在你阅读时,这枝笔会变成提醒你的一个讯号。

注:如何让一本书属于你

俗话说:“你必须读出言外之意,才会有更大的收获。”而所谓阅读的规则,就是用一种比较正式的说法来说明这件事而已。此外,我们也鼓励你“写出言外之意”。不这么做,就难以达到最有效的阅读的境界。

你买了一本书,就像是买了一项资产,和你付钱买衣服或家具是一样的。但是就一本书来说,付钱购买的动作却不过是真正拥有这本书的前奏而已。要真正完全拥有一本书,必须把这本书变成你自己的一部分才行,而要让你成为书的一部分最好的方法—书成为你的一部分和你成为书的一部分是同一件事—就是要去写下来。

为什么对阅读来说,在书上做笔记是不可或缺的事?第一,那会让你保持清醒—不只是不昏睡,还是非常清醒。其次,阅读,如果是主动的,就是一种思考,而思考倾向于用语言表达出来—不管是用讲的还是写的。一个人如果说他知道他在想些什么,却说不出来,通常是他其实

注:让书成为自己的

知道自己在想些什么。第三,将你的感想写下来,能帮助你记住作者的思想

做笔记有各式各样,多彩多姿的方法。以下是几个可以采用的方

注:做笔记的方法

※ 三种做笔记的方

注:三种做笔记的方法

※ 培养阅读的习惯

所谓艺术或技巧,只属于那个能养成习惯,而且能依照规则来运作的人。这也是艺术家或任何领域的工匠与众不同之处。要养成习惯,除了不断地运作练习之外,别无他法。这也就是我们通常所说的,从实际去做中学习到如何去做的道

注:培养阅读的习惯

第七章 透视一本书

每一本书的封面之下都有一套自己的骨架。作为一个分析阅读的读者,你的责任就是要找出这个骨

注:透视一本书的骨架

一本好书,就像一栋好房子,每个部分都要很有秩序地排列起来。每个重要部分都要有一定的独立

注:好书像一个好房子

分析阅读的第一阶段,或,找出一本书在谈些什么的四个规则:

注:找出一本书在说什么的方法

一般来说,阅读的过程与商业上的过程正好相反。商人通常是在找出提案是什么后,才会达成共识。但是读者却要先与作者达成共识,才能明白作者的主旨是什么,以及他所声明的是什么样的判断

注:判断作者的主旨

?(5)诠释作者使用的关键字,与作者达成共识。

(6)从最重要的句子中抓出作者的重要主旨。

(7)找出作者的论述,重新架构这些论述的前因后果,以明白作者的主张。

(8)确定作者已经解决了哪些问题,还有哪些是未解决的。在未解决的问题中,确定哪些是作者认为自己无法解决的问题。

注:分析阅读的第二个阶段

我们的建议尤其适用于所谓巨著。一般人总是抱着热忱想要阅读巨著,但是当他绝望地感觉到自己无法理解这本书时,热忱很快便消退了。其中一个原因,当然是因为一般人根本不知道要如何好好地阅读一本书。但还不只如此,还有另一个原因:他们认为自己应该能够读懂自己所挑选的第一本书,用不着再读其他相关的著作。

注:巨著读法

许多伟大的作品不只是互相有关联,而且在写作时还有特定的先后顺序,这都是不该忽略的事。后人的作品总是受到前人的影响。如果你先读前一位的作品,他可能会帮助你了解后人的作品。阅读彼此相关的书籍‘,依照写作的时间顺序来读,对你了解最后写的作品有很大帮助。这就是外在辅助阅读的基本常识与规则。

注:读巨著前先读一些基础著作

读一本好书,却会让你的努力有所回报。最好的书对你的回馈也最多。当然,这样的回馈分成两种:第一,当你成功地阅读了一本难读的好书之后,你的阅读技巧必然增进了。第二—长期来说这一点更重要—一本好书能教你了解这个世界以及你自己。你不只更懂得如何读得更好,还更懂得生命。你变得更有智慧,而不只是更有知识—像只提供讯息的书所形成的那样。你会成为一位智者,对人类生命中永恒的真理有更深刻的体认。

注:读一本好书的好处

好的阅读,也就是主动的阅读,不只是对阅读本身有用,也不只是对我们的工作或事业有帮助,更能帮助我们的心智保持活力与