关于书评写作
概述
本文主要整理了关于书评写作的几篇文章的内容,这些文章是:
而上述文章又来自于完全写作指南。
通用写作 checklist
整理自夏丏尊的《文章作法》,所谓 6W:
- Why:写作目的是?(叙述、趣味、评论等)
- What:要写什么?(旅行经历、一个命题等)
- Who:写给谁看?(以理解作者与读者的关系,且行文应因人而异)
- Where:写作的情境、场合(在乡村、程序员、学术圈等)
- When:文章主题所属的时代、季节等
- How:如何写?(体裁、简述/详述、直白/委婉、布局等)
本文主要整理了关于书评写作的几篇文章的内容,这些文章是:
而上述文章又来自于完全写作指南。
整理自夏丏尊的《文章作法》,所谓 6W:
这本书从文学性上来讲,只能说勉强还行,但是其中金智英的经历实在太真实了,可以说让人触目惊心,将这些遭遇放在中国也毫无违和感。女性生活的整个经历,从成长、教育到职场、婚姻和育儿,充满了大量的男性难以想象的问题:性别刻板印象、性别歧视、性别规训、机会平等等等。其中的性别规训尤为突出,正如福柯所说的,性别规训是一种弥漫于整个社会的、像毛细血管似的“微观权力“。它的触手渗透到社会的方方面面,对人们的日常生活的每个细节都不放过。金智英的多数遭遇,也正符合第二波女权主义提出的”the personal is political“,因为身边的人”好像也都是这么做的“。
与其说金智英是得了育儿抑郁,不如说是她在压抑之下无法正常发声,只能通过变换的形象代替自己发声吧。
总的来说,比较“硬”的、有诸多事实和主题,或是讲亲身经历的文章和报道至今耐读,而当时用作批评和鼓吹,或基于一时的政治风潮而写的“观点型”文章,则光辉不再。
这两篇文章未能收录于此供读者评判,但它们佐证了筛选文集的难度:我对其中一篇所描述的事件颇有共鸣,对另一篇则没有,但这两篇文章都失之淡然。
这一点,连同我为《太平洋事务》写的第一篇稿子所得的40美元稿费(我用来买了一台留声机和《蝴蝶夫人》选段《晴朗的一天》的唱片),让我觉得,我的职业生涯已经开始。
我一直认为,让一个人背负深刻烙印的是他步入成熟的那些年,而不是他出生的那一年。所以,我认为我自己是19世纪30年代的孩子。我有信仰,我猜二十几岁的人都会有(在我那代人中确实是这样)。我信仰正义和理性最终会获得胜利。
对于这些选文凑在一起是否提供了某种历史哲学的问题,我回答起来一直都甚为小心,因为我害怕各种哲学。它们隐藏着历史学家试图操控事实以充实自己理论体系的危险,导致历史强于意识形态,弱于“事实是如何发生的”。我不敢保证,一个长期写作历史的人不会遵行某种原理和准则。我想,后面的这些文章展现的是历史的一种偶然和循环,一种人类行为,就像平静的河水在无穷无尽的各种田野中流过,时代和人的好与坏交织共存,横流和逆流交替来回,任何一种简单的归纳都无法涵盖。至于应该怎样,我相信,事实应该早于论点;相信编年叙述(chronological narrative)是骨架和血液,它让历史更接近于“事实是如何发生的”,更易于恰当地理解原因和作用;我还相信,历史应该以当时的所知所识来叙述,而不是带着事后诸葛亮的视角,否则结论不足为信。虽然我没有做原创性声明,但这些原则都是我自己在多年的技艺习练和职业实践中发现的。
refs:
Different parts of PDF file:
Also, the Carousel Object System.
from a de facto to an ISO standard.
1985年,Adobe 引入了 PostScript Page Description Language。同年,Adobe 也开发了 Adobe Illustrator。这两款产品引发了桌面 publishing 的革命。但 Adobe 的创建者们感觉还缺少了点什么。
参考:《Go in Action》第六章
goroutine
运行代码Go 运行时 scheduler 能够有效地管理所有 goroutines。scheduler 在 OS 之上,将 OS 的线程绑定到 logical 处理器,后者执行 goroutine。
并发同步源于 CSP 范式,CSP 是一个消息传输模型。它通过在 goroutine 之间的数据通信来同步数据,而非 lock。在 Go 中,消息传输的核心数据类型是 channel
。
OS 调度线程,使之执行于物理处理器上,Go 运行时调度 goroutines,使之执行于逻辑处理器上。每个逻辑处理器则独立地绑定在单个 OS 线程上。
1 | go build -race |
error
的信息可以通过前缀来增加信息,如 image: unknown format
。
向调用者报告错误通常的方法是返回一个 error
,但有时候一个错误发生,意味着严重的或很难预料到的错误(比如本应是无限循环,却退出了),此时退出程序也许更为合适,这是 panic
的用场。
通常来说,应避免使用 panic
,但凡程序还有救的话。一些特殊情况是,程序启动时无法连接到主数据库,那么继续执行下去也无意义,此时可以 panic
。
在 panic
调用后(包括自定义 panic
,以及 slice 索引越界等运行时错误),当前函数执行立即结束,开始释放 goroutines,执行 defferred 函数。如果释放过程到了程序的 top level 代码,程序就终止了。
但还是可以通过 recover
来重新获得 goroutine 的掌控,继续执行程序。
recover
停止上述释放过程,返回 panic
的参数,recover
只能用于 deferred 函数。
参考:
How to Write Go Code
Organize Local Code
Common Project Layout
Effective Go
Go 程序以 package
组织。package
是一组在同一目录下的源代码文件集合。
一个代码库包含一个或多个 module
。module
是一组相关的 Go package
。Go 代码通常仅包含一个 module
,名为 go.mod
的文件声明了 module 路径。
go.mod
在代码库根目录,其定义的 module 包含了该目录下所有的 package。
module 的路径可作为 import 的前缀,同时也说明了 go
命令如何定位并下载之。引用路径是字符串值,package 的引用路径是 module 的子目录,比如:
1 | github.com/google/go-cmp/cmp |
但标准库中的 package 不需要 module 路径前缀。
每个源文件可以包含自己的 init
函数,以进行必要之设置。init
在所属 package 内的所有变量初始化之后(这又在所有引用的 package eval 之后)执行。
init
可用于在程序真正执行之前验证和修复程序状态,也可进行配置、初始化变量等等。
所有的 init
函数会被编译器发现,并在 main
函数之前调用之。
对于简单的程序,repository 下只有一个 module
,通过 go.mod
选择一个名称,如果想少打点字,使用 local name,而非完整路径。
在项目内添加不同的目录,其中含有的代码的部分即是 package,这样让代码组织更清晰。package 下可以继续嵌套。
如果要引用本地其它 repository 的 package,使用 replace
。如果要发布代码,使用完整路径。