有一种旅行,叫生活

本文是翻译,版权归原作者所有



在庆祝我活了 40 年之后,我觉得,我应该分享一些学到的趣事……

有一种旅行,叫生活

从这里说起吧……

你会死去。这意味着你还活着。趁你还有机会,现在就做一件(些)事情吧。

青春和个体

「年少时总是挥霍青春」——George Bernard Shaw

  • 年轻是我的事情,我的,我的。好吧,因为我只是在找一条指引生活的道路。
  • 因此,对于我们自己、以及我们的家人和同侪之间,我们为了包容而挣扎、而适应,然后被接受……彼此感受到了爱的温暖,归属感缓解了我们彼此之间的焦虑,还有个体。
  • 我们为了成为自己,用思想、服饰、音乐等让自己不一般:我想成为一名宇航员。我穿 Diesel 牛仔裤,因为它时髦。这种品牌和产品完全凸显了我的个性。Facebook 是年纪大的人们才玩的东东,一点儿都不酷,我想酷一些。等等……
  • 按照相同方式,我们扩大交际圈。宗教、俱乐部、体育、集体露营、种族偏见、以及任何志趣相投的团体,变成了包容的工具。有时候,它支持某些东西,有时候则反对。凡事皆合理,也绝对是真实的。我们都这样认为,对吧?
  • 青春期是杂乱无序的时光。
  • 教育,教育,教育。学习怎样学习的方法,学会约束和日程,活到老学到老。
  • 我很高兴,因为我不再年轻。

成年、成熟、衰老

「你很容易就能判断一个人的性格,只需看看他是如何对待和他没有关系的人」——Malcolm S. Forbes

  • 你只是浩瀚宇宙当中的一粒尘埃。当你死去的时候,生活仍在继续。可望的是,你最亲密的朋友将铭记和庆祝你给他们留下的印象。在一个世纪里,没人会记住曾经存在过的你。
  • 你的 20 多岁的时光不是用来浪费的。你的整个生命也不都是用来浪费的,学会吸取教训、下一次才能少干些蠢事。继续犯傻吧。
  • 不要在意人们如何看待你。他们可能没有关注你,他们可能在打量自己,又或者你是如何看待他们的。真是可笑。
  • 倍感欣慰的是,你迟早会意识到,生活和我、和我没有关系。生活是一粒尘埃,记住了吗?
  • 不要锋芒毕露。不要成为混蛋,也不要成为易于征服的人。要有主见。喝酒但不要酗酒。自私一点没有错,太自私就不好了。找到一个平衡点。
  • 生活中,唯一不变的就是变化。不管你多么艰难地反抗,生活都要前行。再次强调,你只是一粒尘埃。
  • 不要用年龄来衡量自己,它只是一个数字。活到 30 岁或 40 岁,并不比你有了第一个孩子、或失去了一名家人而有更多的影响。那些才是真正的生活转折点。
  • 其实,生活是由故事组成的。圣诞老人、神话故事、政治叙事(political narrative)、广告等。种类繁多。
  • 仔细看孩子的眼睛,就可以窥探到你生活的简单。更快的车、更大的房子以及更多的玩具,这些需求是我们社会的结构。如果你让生活保持简单,你就能随处看到生活的欢乐。

金钱、职业和圣地

「金钱无法买到内心的平静。它无法治愈破碎的关系、或为逝去的生活注入意义。」—— Richard M. DeVos

  • 金钱买不来幸福,但是它很重要。你的生存需要金钱,要搞清楚你需要多少金钱。
  • 为财务独立而奋斗,努力争取自由,做你想做的事情。
  • 记住,老板付你薪水,是因为你的时间和技能。

关系的重要性,非常重要。

在你花时间最多的五个人中,你就是这五个人的综合。」——Jom Rohn

  • 如果你有健康的人际关系,那么你将有健康的生活。
  • 和陌生人、或熟人一起庆祝,非常容易办到,但是不要和朋友失之交臂。
  • 和那些重要的人、真正在意你的人,培养感情。全身心接纳他们。
  • 沟通不畅、以及预期上的差异,将导致冲突。说清楚,专心倾听。
  • 礼貌很重要。比如「请」、「谢谢」。
  • 关心你的父母。你只有一个妈妈、一个爸爸。
  • 不要成为小混混,这一点也不酷。

「世界上最痛苦的事情……就是在这个世界上活着。」 ——Buffy Summers


SQL 新手指南

本文是翻译,版权归原作者所有



注:在我们推出的免费文本教程中,有一些最受欢迎的主题,本文是某系列「入门」的一部分。

为了跳到某些章节,请参考下面的目录表:

  • 介绍
  • 数据库的介绍
  • 四种基本的 SQL 操作(CRUD)
    • 创建数据
    • 读取数据
    • 更新数据
    • 删除数据
  • 结论

介绍

SQL 已经应用到了我们周围的各个角落,不管你信不信。操纵任何种类数据的每个应用程序都需要将数据存放在某处。无论它是大数据,还是只有简单数行的数据包;无论是政府、还是创业公司;无论是横跨多台服务器的大型数据库、还是运行着自己小型数据库的手机,SQL 无处不在。

但是,SQL 是什么呢?SQL 代表结构化查询语言,通常,其发音为“ess-que-el”。SQL 是数据库语言,专门为了和数据库通信而建立的。SQL 是一门简单的语言,和英语语言类似,因为命令和英语句子有着类似的结构。那些句子组织为声明式的语句,这样 SQL 也被叫做声明式语言【注1】。

SQL 的新手指南

在可视化地编写 SQL 查询语句方面,已经有很多可用的工具了,为什么还要学习一个全新的语言呢?当你用某些 SQL 工具时,重要的是理解 SQL 语言、理解可视化工具正在做什么、以及为什么那样做。有时候,需要手动写一些 SQL 语句,不仅因为这是最快的方法,而且这更强大、经常是完成预定目标的唯一方法。

数据库的介绍

我们刚才提到了,SQL 是数据库语言。那么,数据库是什么?数据库是一种存储机制,被设计为用来访问存储的信息及其操作。数据库里的信息被存储在称作表(table)的对象里。表的名字是其唯一身份,由列和行构成。列包含列名、列的数据类型以及该列的其它属性。行包含该列的记录或数据。数据库里的大部分表之间会有关系(relationship)或连接(link),一对一、或一对多的关系。这也是为什么这种数据库被称作关系模型数据库。

关于描述数据库结构,最容易的方法就是把它和 Excel 电子表格做比较,它们有着诸多相似。一个数据库就是一份独立的文件。电子表格里的 sheet 就是表(table),每个 sheet 有一个名字。列和行,都和数据库一样。SQL 语言用来创建新表、更改现有表,用来获取数据、更新数据或删除数据。

比如说,我们有一份知名电影的台词大集合,存放在任意单独的文本文件里。即使我们精心组织,用 Excel 电子表格存放,我们所面临的问题仍然是存在。用这种方式存储台词,我们无法快速地从一部电影里得到所有台词,或无法得到一个角色的所有台词。如果我们把文本文件或电子表格放入数据库,并创建带有关系的表,所有问题就迎刃而解了。关系型的真正涵义是什么?关系模型【注2】是描述数据、以及这些数据实体之间的关系的方法。在我们的例子中,关系就是每个台词和表之间的联系,电影名称存放在表里、或所有角色也存放在表里。

下面是一个简化处理的例子,只有一个表做示例,表名叫「Movie_quotes」。它有四列,一个列表示台词文本、一个列表示说台词的演员角色,一个表示电影,还有年份。我们收录了八句电影台词,我们的示例表看起来像是这个样子:

Movie_quotes
Q_TEXT Q_CHARACTER Q_MOVIE Q_YEAR
I’ll be back The Terminator The Terminator 1984
I find your lack of faith disturbing. Darth Vader Star Wars 1977
It’s a trap! Admiral Ackbar Star Wars 1983
Never tell me the odds. Han Solo Star Wars 1980
Do. Or do not. There is no try. Yoda Star Wars 1980
Stupid is as stupid does. Forrest Gump Forrest Gump 1994
My mama always said: Life was like a box of chocolates.

You never know what you’re gonna get.

Forrest Gump Forrest Gump 1994
Run, Forrest! Run! Jenny Curran Forrest Gump 1994

当讨论数据库时,值得一提的是,有一种全新的数据库,在需要存储数据的人们中间,产生了一种运动,它就是 NoSQL。它们是基于文档的系统,虽然它们正在变得非常流行,直到今天仍然有大量的关系型数据库在使用中。即使 NoSQL 数据库有某种查询语言,它们很大一部分(因为它们几乎都是在 SQL 之后才发明的)仍然和 SQL 有着某种相似性。

四种基本的 SQL 操作(CRUD)

有很多 SQL 命令,但是,有四种通常的 SQL 操作,可以对表及其数据做一些事情:

  • 创建 – 把数据填充到表里。
  • 读取 – 从表中查询数据。
  • 更新 – 修改表中已有数据。
  • 删除 – 从表中移除数据。

这些基本 SQL 操作的首字母组成了缩写「CRUD」,它们被视作每个数据库必有的、四个基本功能或特色的基础集。

通过介绍基本特色,我们将会介绍基本的、以及最重要的 SQL 命令:`CREATE`, `INSERT`, `SELECT`, `UPDATE`, `DELETE`, and `DROP`。

创建数据

首先,我们需要在数据库里创建表。创建新表,就用到了 `CREATE TABLE`。`CREATE TABLE` 语句的简单语法格式如下:

CREATE TABLE table_name
(column_1 data_type,
column_2 data_type,
column_3 data_type);

首先,`CREATE TABLE`关键词后面跟着表名。这是一个极好的例子,说明了 SQL 的简洁性、以及和英语的相似性。关键词后面跟着一个左圆括号,这里定义了额外的参数:列名和列的数据类型,然后跟上右圆括号。必须要提的是,所有的 SQL 语句应该以 `;` 结尾。

需要遵守的规则并不多。表名和列名必须以字母打头,后面可以跟上字母、数字、或下划线。它们的字符长度不能超过 30 个。用 SQL 保留字做为表名或列名(比如 `select`, `create`, `insert` 等)是被禁止的。

在例子中,最简单的列名可能是 `TEXT`, `CHARACTER`, `MOVIE`,和 `YEAR`。但是,问题在于这些列名都是保留字。为了避免任何可能的冲突,我们将创建以 `Q_` 做为前缀的列名。

数据类型因不同的数据库而不同,不过这里使用了最常见的类型:

  • `char(size)` – 固定长度字符串,用括号中的参数标明。
  • `varchar(size)` – 可变长度字符串,用括号中的参数标明。
  • `number(size)` – 数字值,括号中的参数标明了总长度。
  • `date` – 日期值。
  • `number(size, d)` – 数字值,总长度为 `size`,小数位用 `d` 表示。

数据类型规定了哪种类型的数据可以存储在指定的列里。如果 `Q_CHARACTER` 的列用于存储电影名字,那么这个指定的列就应该有一个 `varchar` (可变长度字符)的数据类型。存放电影年份的列的类型是 `number`,我们的例子中相应的列是 `Q_YEAR`。

对于期望的表结构,创建表的最终 SQL 命令如下:

CREATE TABLE Movie_quotes
(‘Q_TEXT’ varchar(200),
‘Q_CHARACTER’ varchar(20),
‘Q_MOVIE’ varchar(20),
‘Q_YEAR’ number(4));

这个 SQL 命令的结果将创建一个空表,各列情况如下:

  • `Q_TEXT` 可以接受 200 个字符长度的字符串。
  • `Q_CHARACTER` 可以接受 20 个字符长度的字符串。
  • `Q_MOVIE` 可以接受 20 个字符长度的字符串。
  • `Q_YEAR` 可以接受一个年份的四个数字。

表结构

接下来,用我们的电影台词数据填充这张表。有很多可用的 GUI 工具,来管理数据库中的表和数据。不过,写一个 SQL 脚本常常更快,该脚本基本上是 SQL 命令的集合,将被顺序执行。当你需要用大量数据填充表时,这种方式尤为方便。

向表插入或添加一行数据的 SQL 命令是 `INSERT`。格式如下:

INSERT INTO table_name
(column_1, column_2, ... column_n)
VALUES (value_1, value_2, ... value_n);

为了向表插入一行数据, `INSERT` 关键字跟着 `INTO` 关键字和表名。然后是列名,放在圆括号里,用逗号隔开,这是可选的,但是,指明要插入的列,以确保正确的数据插入相应的列,这是一种良好实践。最后一部分,用 `VALUES` 关键字定义了要插入的那些数据,数据列表以圆括号结束。请注意,字符串应该放在单引号里,数字不应如此。

用来填充例子中 `Movie_quotes` 表的 SQL 脚本,如下:

INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('I’ll be back', 'The Terminator', 'The Terminator', 1984);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('I find your lack of faith disturbing.', 'Darth Vader', 'Star Wars', 1977);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('It’s a trap!', 'Admiral Ackbar', 'Star Wars', 1983);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Never tell me the odds.', 'Han Solo', 'Star Wars', 1980);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Do. Or do not. There is no try.', 'Yoda', 'Star Wars', 1980);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Stupid is as stupid does.', 'Forrest Gump', 'Forrest Gump', 1994);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('My mama always said: Life was like a box of chocolates. You never know what you’re gonna get.', 'Forrest Gump', 'Forrest Gump', 1994);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Run, Forrest! Run!', 'Jenny Curran', 'Forrest Gump', 1994);

读取数据

数据库中有了存好的数据,现在我们可以查询数据,看看我们的表里存储了什么,我们还能用不同的方式过滤和分类数据。

`SELECT` 语句用于查询、或选择我们想从数据库中返回的数据。我们从非常简单的查询开始,但是 `SELECT` 有很多不同的选项和扩展,这为我们最终的需要提供了很大的灵活性。基本的 `SELECT` 语句的语法如下:

SELECT column_1, column_1, ... column_n
FROM table_name;

指出列名,决定了哪一列将被返回到结果里,以及按什么顺序。如果我们想选择所有的列,或我们不知道表中的确切列名,我们可以使用通配符 `*`,它将从数据库中选择所有列:

SELECT * FROM table_name;

对于本例,显示所有数据的查询,如下:

SELECT * FROM Movie_quotes;

数据表的数据展示

仅仅显示电影台词、年份的查询,如下:

SELECT Q_TEXT, Q_YEAR FROM Movie_quotes;

有时候我们不想从表中返回所有数据。当表中有大量数据、或我们在搜索匹配某些标准的特定数据时,就属于这种情况。对此,我们可以使用 `WHERE` 语句。`WHERE` 语句将过滤记录,限制从数据库中获取哪些记录、以满足具体定义的标准:

SELECT column_1, column_1, ... column_n
FROM table_name
WHERE column_name operator value;

注意,`WHERE` 语句是可选的,但是如果我们决定用到它,下面的操作符是可用的:

  • `=` – 等于。
  • `>` – 大于。
  • `<` – 小于。
  • `>=` – 大于或等于。
  • `<=` – 小于或等于。
  • `<>` – 不等于。
  • `BETWEEN` – 在两个值之间。
  • `LIKE` – 搜索一种模式。
  • `IN` – 针对一个列的多种可能值。

数学操作符无需解释了。`BETWEEN` 操作符搜索两个声明值的、中间的值,包括等于两端的情况。`LIKE` 模式匹配操作符是非常强大的操作符,支持选择和我们的规定类似的行。百分号 `%` 被用做通配符,以匹配任何可能字符,它可出现在具体字符串的前面或后面。

例如,为了得到来自电影《Stars Wars》中的台词,我们可以这样写:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’;

数据表 select 查询

请注意,`WHERE` 语句是大小写敏感的,下面的 SQL 语句将不会返回结果:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘STAR WARS’;

除了 `WHERE` 子句,还可组合逻辑运算符 `AND` 和 `OR`。如果我们对相同列使用多个 `AND` 逻辑操作符,那么我们应该考虑使用 `IN` 子句替代。

做为示例,我们返回来自电影《Star Wars》和《The Terminator》中的所有电影台词:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’ AND Q_MOVIE = ‘The Terminator’;

数据表 select 查询

就上面的例子,更好的写法就是使用 `IN` 语句替代:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE IN (‘Star Wars’, ‘The Terminator’);

至此,我们一直在讨论如何从数据库中过滤数据。返回的行将按照它们进入(提交到)数据库的顺序进行排序。为了控制数据显示的顺序,我们可以通过包含 `ORDER BY` 子句来过滤输出数据。`ORDER BY` 子句包含了指定分类顺序的一个、或多个列名:

SELECT column_1, column_1, ... column_n
FROM table_name
WHERE column_name operator value
ORDER BY column_name;

为了扩展我们刚才《Star Wars》电影台词的例子,现在按照年份排序:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR;

select 表,排序

一个列的排序,默认是按照从最低值到最高值升序排列。为了把列的排序改为降序,我们可以在列名后面加上 `DESC` 关键字:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR DESC;

select 表,降序排列

`ORDER BY` 语句不限于单个列。你可以包含逗号分隔的、列的清单来排序。返回的行将根据第一个指定列,然后按顺序根据接下来指定的列排序。切记,用来排序的列不必包含在被选择列的清单里。我们可以像这样来写查询:

SELECT Q_TEXT, Q_CHARACTER, Q_MOVIE FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR DESC;

更新数据

在我们开始插入数据之后,并没有被限制为只能读取数据。我们能够对任何行里的、任何列下的、任何数据进行修改。`UPDATE` 语句用于更新或修改记录。

`UPDATE` 的语法如下:

UPDATE table_name
SET column_name = new_value
WHERE column_name operator value;

当我们使用 `UPDATE` 时,慎重地构造一个 `WHERE` 子句是十分重要的。`WHERE` 子句指定了哪一条记录或哪些记录应该被更新。如果我们在执行 `UPDATE` 语句时、而没有使用 `WHERE` 子句,我们将更新指定列的所有数据。

让我们看看 `Movie_quotes` 表里的电影台词。我们让所有的台词以标点符号结束,《The Terminator》除外。对于如何使用 `UPDATE` 语句,这是一个极好的例子:

UPDATE Movie_quotes
SET Q_TEXT = ‘I’ll be back!’
WHERE Q_MOVIE = ‘The Terminator’;

之前解释了,如果我们不小心遗漏了 `WHERE` 子句,或我们故意把所有的台词行更新为「I’ll be back!」。通过单单选中电影《The terminator》所在行,我们就可以更新指定行的一列数据。

删除数据

当数据库被大量使用时,从数据库中移除陈旧的数据,迟早会变得有必要。我们能够只删除表中的一些行、或删除整个表。

`DELETE` 语句用于删除表中的行。该命令的语法如下:

DELETE FROM table_name
WHERE column_name operator value;

重申,和 `UPDATE` 语句一样,`WHERE` 子句指定了哪一条记录或哪些记录应该被删除。如果没有指定 `WHERE` 子句,所有的行和列将被删除:

DELETE FROM Movie_quotes;

假设我们不再喜欢电影《Forrest Gump》了,想从电影中删除其台词。为了从电影中删除所有台词,我们可以编写如下 SQL 命令:

DELETE FROM Movie_quotes
WHERE Q_MOVIE = ‘Forrest Gump’;

最终,我们有了足够多的电影。我们对电影台词不再感兴趣了,我们想把兴趣移到音乐上。我们开始收集歌词。根据我们目前所学到的 SQL 知识,修改数据库是非常简单的。

首先,我们需要清空数据库里、不再感兴趣的数据。为了删除包含所有行的表,我们可以使用 `DROP TABLE` 语句。切记 `DROP TABLE` 语句不同于使用 `DELETE` 语句,和删除表里的所有记录也不同。删除表里的所有记录,会留给我们表本身及其定义的所有表结构;包括列的数据类型定义和该表的其它相关的数据库信息。`DROP TABLE` 移除了表、移除表的定义,还有所有的行。

`DROP TABLE` 语句的语法如下:

DROP TABLE table_name;

为了从数据库中删除 `Movie_quotes`,我们可以这样写:

DROP TABLE Movie_quotes;

现在我们的数据库是空的,准备接受新数据。我们从所有的 CRUD 过程开始,创建名为 `Song_Lyrics` 的新表,根据我们新收藏的歌曲,建立一个歌词数据库。

结论

本文我们浏览了涵盖 CRUD 四个基本的数据库功能:如何创建新数据、读取数据、更新我们想要修改的数据、以及最后的如何删除不想要的数据。这包含了基本的、但是最重要的 SQL 命令,比如:`CREATE TABLE`, `INSERT INTO`, `SELECT`, `UPDATE`, `DELETE` 和 `DROP`。

这些基本的 SQL 命令支持大量的数据管理,但是每个介绍到的命令都有很多选项和额外的功能,有些是本文没有介绍的,要注意这一点。总之,当 SQL 开发人员新手在开始数据库工作、以及使用一门新语言 SQL 时,本文中的基本知识应该能为他们开个好头。


  • 注1:声明式编程(英语:Declarative programming)是一种编程范型,与命令式编程相对立。它描述目标的性质,让电脑明白目标,而非流程。声明式编程不用告诉电脑问题领域,从而避免随之而来的副作用。而指令式编程则需要用算法来明确的指出每一步该怎么做。声明式语言包括数据库查询语言(SQL,XQuery),正则表达式,逻辑编程,函数式编程和组态管理系统。https://zh.wikipedia.org/wiki/%E5%AE%A3%E5%91%8A%E5%BC%8F%E7%B7%A8%E7%A8%8B
  • 注2:用于数据库管理的关系模型(英语:Relational model)是基于谓词逻辑和集合论的一种数据模型,广泛被使用于数据库之中。最早于1969年由埃德加·科德提出。https://zh.wikipedia.org/wiki/%E5%85%B3%E7%B3%BB%E6%A8%A1%E5%9E%8B

译文:SQL 新手指南 》| 腊八粥

不要像作家那样写作

本文是翻译,版权归原作者所有



要把写作看成一门生意

要把写作看成一门生意

如果你想在任何创新领域「做点东西」,那么有些不可思议的事情是你不得不要做的。一些事情很可能让你美丽的艺术灵魂枯萎,就像被摄魂怪【注1】碰过的鲜花一样(通常,我总是忍不住引用乔安娜·罗琳【注2】)。你不得不把你的创新力当做一项生意来对待。

这对于写作尤为正确。现在,作家的处境已经有很大不同了,书籍交易和畅销小说的日子,早已远去。如果你今天还想完全靠当作家谋生,那么你需要把你的写作生涯,看做是一项你在从事的生意。

1.读者就是用户。他们的用户体验是什么?

这是最重要的观点。如果你想增加读者数量,就不要再把他们只是看做你的读者。

你不得不把他们当做客户和用户来考虑,他们找到你,是因为要寻找一种产品和体验,以满足他们的需求。

这意味着你需要三思,当你的文字呈现在纸上、或在 app 里,看起来有什么感受。互联网很庞大,都在等着引起你的用户或读者的注意。我已经注意到了,互联网上有猫,你该如何让你的读者专心而免遭打扰?

例子:

我发现,当我精雕某些重点句子或话语时,就能得到更多该作品相关的 tweet。我经常围绕一个重要概念撰写我的作品,并把重要概念用粗体标题或引用的方式,以抓住扫视阅读的读者。这就是面向用户体验的、对文字的精心加工。

2.监控、测试、学习、调整。

你需要测试你的作品。当你在线上发布了一篇、或提交给了出版商之后,根据需要,保持敏捷和变化是十分重要的。当你监控人们对你作品的反应时,这种增长作品和读者数量的过程,将容易得多。

例如,你刚开始写了一篇长文章,根据你经验的多样性,一篇文章有 2000 个字,不错。但是,如果你的读者数量没有增长,你就要尝试不同的文章长度、减少篇幅、以及或多或少地包含一些图片。

例子:

我不只是发布一篇文章。我写的文章,带有清晰的观点或信念,它将测试我的读者。

对于本文,我要测试的观点就是,当我的很多读者在创业阶段时,他们只是对学习如何写作感兴趣。当我和之前的文章比较统计分析和数据时,我就明白这种观点是不是对的。

3.不要看钱,要看读者。

不要把时间花在:让你的作品被其他人资助、或以书籍和定期付费专栏的形式追求金钱。这不会让你成为真正的作家。如果你总是尽量吸引守门人(gatekeeper)的注意,而不是走出去、以找到真正的读者,那么,你将错失一大群人,你本可以改变他们的生活。

和 10 个人一对一交流,他们就成了你的长期读者,这比你追求能够为你作品付款的 100 家出版商更加重要。当你有了足够多的读者,这些出版商要么踢坏你的门槛、要么等着你的来电。

例子:

从长期看,我还没有发布一篇文章。相应地,我在认真地监控阅读我作品的人们。我看了每一条 tweet,我尽量和大量读者做出个人回应。为了获得他们的信任和数量增长,我一直在和人们会面和联系。这很重要。

4.制定计划,并执行。

如果你不得不成为作家,那就不只是买一台高配笔记本和一套舒适的桌椅,然后就可以静候下一部伟大作品涌现到你的面前。不会是这样的。

我敢打赌,如果你没有计划,你最终一定是在看 Netflix【注3】而不是在写作。

定个计划,制定一份商业计划,和你做生意时的方式一样。这份计划应该说明你打算写什么、你打算怎样写作,以及你的目标、里程碑和关键的绩效指标是什么。你需要让这份文档在你未来的半年或一年的职业生涯里,成为一份完整的指南。

例子:

我用 Google Docs 表格保存我的计划。我或许有些极端了,因为我有一份未来两年的目录或书籍日程表。但是对于生意而言,拥有一份 2 年的计划是说得过去的。

5.重视营销

很多创业公司甚至都对此重视不够。你需要认真考虑,你该如何接触到读者,你该如何吸引他们。让你的营销计划成为撰写「商业机会书」的一部分,并认真对待。

你需要明白,你理想中的读者都是谁,并围绕他们构思角色性格。这有助于你决定和人们接触以及联系的方式,也有助于在可用性、可阅读性、设计和品牌方面,为你的选择提供参考。

只要你觉得合适,你的营销应该覆盖尽可能多的渠道,但是排在清单首位的应该是你自己的博客、你的社交媒体账号和邮件 newsletter。

例子:

我把 Medium 当做重要的营销渠道,带着明确的行动召唤来写每一篇文章,以推动我的读者,要么在 Twitter 上关注我,要么访问我的网站。我知道,根据我的风格和主题,Medium 对于我的读者而言,是个优秀的营销渠道,因为它和读者个性相匹配。

6.创新

你正在为网上的受众写东西。全世界的人们都能访问你的作品,都能被你的思想和文字感动。对于文字,我们之前从来没有一种分发渠道能有如此强大的力量。如果你停下来,想想成为一名网上作家所固有的力量,你会脑洞大开的。

因此,请思考一下创新。你该如何让数百万、数十亿的潜在读者更好地访问你的作品?你能做哪些不同的事情,你该怎样做才能让人们更加容易地享受你创作的文章?

例子:

在未来的几周里,我正打算做个试验,针对我的 Medium 文章来测试单个的着陆页。这些着陆页将经过良好设计和优化,打算把每篇文章大意提供给潜在读者,并把他们导入我的个人主页。我不知道这是否会奏效,但是我明白,以这样的方式来创新,属于正确的事情。

7.宏伟的梦想

你想成为世界上最伟大的作家吗?有这个梦想,没有什么错。建立你的站点(这里说的站点,是指你的网站、博客和所有的个人主页),梦想着有一天,你的文字会拯救某个人的生命、或为最优秀的电影提供灵感。当有作家坚持这种目标时,他们经常被看低、被视作傲慢。

但是,当企业家有类似的想法时,当他们想构建巨大的、令人难以置信的、惊天动地的东东时,他们却被称作有抱负。这种双重标准让人费解。宏伟的梦想不是技术明星的专利,每个在做东西的人,都可以有宏伟梦想。


如果你喜欢本文,请发布评论点赞!

Jon Westenbreg 是一名作家,祖籍南澳大利亚州的阿德莱德市。他拥有悉尼科技大学通信专业的硕士学位,现居住在悉尼。


  • 注1:摄魂怪(英文:dementor)是哈利·波特中的一种生物,被认为是世上最邪恶的怪兽之一。它们没有灵魂,却可以吸取别人的灵魂,人们要是和它们接触一定时间,就会发疯。他们在伏地魔复活前是阿兹卡班的狱卒。https://zh.wikipedia.org/wiki/%E6%91%84%E9%AD%82%E6%80%AA
  • 注2:乔安娜·罗琳,OBE(Joanne “Jo” Rowling,1965年7月31日-),通称J.K·罗琳(J. K. Rowling),是一位英国知名奇幻小说家,代表作为《哈利·波特》系列作品。她的《哈利·波特》畅销全球,热卖超过4亿本,成为史上最畅销的书籍之一;其同名改编电影也成为电影史上票房收入最高的电影之一。https://zh.wikipedia.org/wiki/J%C2%B7K%C2%B7%E7%BD%97%E7%90%B3
  • 注3:Netflix, Inc.,通常直接被称为Netflix,(NASDAQ:NFLX)是一家美国公司,在美国、加拿大、新西兰提供互联网随选流媒体播放,定额制DVD、蓝光光盘在线出租业务(在加拿大与新西兰仅提供流媒体播放)。https://zh.wikipedia.org/wiki/Netflix

我为什么回到了 Medium

本文是翻译,版权归原作者所有



有一段时间,我曾快乐地在 Ghost.org 上写博客。漂亮的单栏式、极简主义设计,已经不再是 Medium、Svbtle 等其它网站才有的风格,除此之外,她为我提供了优秀的仪表盘(dashboard)、「自托管」、以及温润的灰色文本,让我的感官倍觉愉悦。

那么,我为什么回到了 Medium?

尽管我对 Ghost.org 赞誉不少,但是,有些地方是它做得相当不够的:

  1. 缺乏评论系统。当我在 Ghost.org 上写博客时,我就像对着深渊呼喊。无法让我的读者做出回应,那么我写得有什么效果,是不知道的。
  2. 导出功能不强大。Ghost 把博文导出为一个巨大的 json 文件。Medium 导出的格式是 HTML 文件。如果某一天互联网受到了影响,我就需要博文的副本了,我更愿意它们有着良好的格式。
  3. 排版选项匮乏。我不打算撒谎:Medium 的 header 和 blockquote 的样式,绝对美得无与伦比。
  4. 更高的成本。如果你不在自己的服务器安装 Ghost(我没有服务器),那么你不得不每月支付 10 美元,才能让你的博客托管在 Ghost.org。这通常不是一个问题:我更乐意在财务上支持伟大的产品(因为这个理由,我为 Todoist Premium 每年支付 29 美元)。不幸的是,做为一个贫穷的毕业生,当时的手头较紧。为博客托管付款,不是奢侈的事情了,我现在能够负担得起。
  5. 没有可发现的选项。老实说,最初我讨厌 Medium 集成阅读「suggestions」和「collections」的方式,但是在这个站点待的时间越长,我就越意识到这种方式是多么地有意思。它把 Livejournal、博客圈和 Xanga 网站的、过去的「博客世界」风格带回来了。这让我有了理由,要撰写条理清晰的思考,而不是乱写一通,因为在某个地方、某个人可能在阅读我写的文章。
  6. 没有自动保存。算不上大问题——当我在 Word 里打字时,每隔几句话就按一次 Ctrl+S,因此落了个偏执狂的名声,但是我真的为自动保存功能点赞。在 Medium,如果我的浏览器崩溃了,我不需要担心优美文章的某些段落会丢失。和 Ghost.org 不同,你需要手动点击「保存草稿」。2004 年时才没有自动保存呢!

Medium 不是十全十美的

最大的问题在于,我不能修改文章的发布日期。当我把 Ghost.org 上的文章「导入」后,它们都被分配为导入时的日期,而非原始发布日期。我不得不逐个手动写上「首发于[某个日期]」。

另外,我好像是为一个巨大的刊物写作,而不是我自己在互联网上的一隅。拥有一个网站 和 拥有一个 MySpace 主页,是不同的——前者完全属于你自己,而后者只是沧海一粟,类似网页太多太多。

不管怎么说,Medium 是目前最好的选择,因此我仍将守在这里。


测量快乐,帮助我们打造一支更好的团队

测量快乐,帮助我们打造一支更好的团队

本文是翻译,版权归原作者所有



快乐的员工更有生产力,你们当中有些人给我取了外号,叫 Captain Obvious,因为这是你内心所感受到的。另一些人偶然发现相关研究对此已做了证明

不过,还有一些人说,商务没有必要让人们开心,它和赚钱有关。对此,我强烈反对。

快乐的客户是商务的终极目标。钱只是客户快乐所带来的结果,因为客户愿意买单、把你推荐给他的朋友和商业伙伴、带着他的下一个想法来找你,客户一定是快乐的。

快乐的团队

快乐的团队是有效率的团队。他们将不需要思考他们不快乐的原因,而能够专注在交付上。他们彼此更渴望帮助和支持,和明显,和快乐的人们一起工作,你将更加舒心、更有动力(在研究了激励团队的方式之后,你应该看看我们 CEO 的观点)。快乐的团队也是一支可持续的团队,你挪走了离职的主要原因之一。快乐的团队成员对待他人、对待客户,更有同理心,更愿意提供最好的客户服务。

测量快乐

如何发现你的团队是否快乐?不要去猜,一定要问

一些人不善言辞,因此你注意不到有问题的环节,直到他们有一天发飙,因为这个问题几个星期以来一直让他们不爽。另一些人善于表达,有时候可以看到他们的心情变化,从周日早上平静、慵懒,瞬间转变为暴怒。然而当你问他们时,他们会告诉你没事,不必担心。因此,不要臆测,而要问问

在我参与的最近两个项目过程中,我引入了一种所谓 Niko Niko 日历

Niko 日历

Niko 来自于日本,表示笑脸,这是该日历的核心思想——在具体的时间,每个团队成员每天在日历上标注出他的心情,开心、一般或悲伤的笑脸。这个日历是项目白板的一部分,放在显眼位置,紧挨着项目燃尽图【注1】,因此它不会不被注意到,DeSmart 团队的每个人都可以查看我们项目组的心情。

Niko 日历

在每个工作日,我们开日常 Scrum 会议时,我们通常记录前一天的心情。为什么要在 Scrum 会议中?因为那时候我们都聚在一起,总结昨天的工作并开启新的一天。这也是我们说出不开心理由的最佳时机。

是的,它有用!

在我们团队,它起到了很大作用,比如压力的扩散、注意到已经被忽视的问题等。当我第三次在一行里标注「一般」笑脸时,就会听到「为什么如此糟糕?」之类的问题,这并没有多罕见。当有人把红色的、悲伤的笑脸画在白板上时,团队会要求给出「解释」!它开启了对话,因此我们能够就「房间里的大象」【注2】一起做些事情。

当然,存在一些风险,某些人可能会受到其他人心情的影响,或者隐藏他们真实心情,以避免这些问题,因为他们在回答过程中可能会觉得不舒服——但是这更像是团队分享的信任和价值的问题。Niko 日历只是一个工具而已。

当我们使用这个工具时,我们没有想当然地认为 Niko 日历能产生积极影响。我们决定一试,它不需要什么成本,我们喜欢它。

难道你自己不想尝试,并分享团队快乐的故事吗?

为了上手简单,我们准备了一个模板,两周的冲刺(sprint)、或一次长达两周的冲刺。你可以在这里找到

Niko 日历-两周的 sprint 模板


  • 注1:燃尽图(英语:burn down chart)是用于体现剩余工作量的工作图表,由横轴(X)和纵轴(Y)组成,横轴表示时间,纵轴表示工作量。这种图表可以直观的预测何时工作将全部完成,常用于软件开发中的敏捷软件开发方式,也可以用于其他类型的工作流程监控。https://zh.wikipedia.org/wiki/%E7%87%83%E5%B0%BD%E5%9B%BE
  • 注2:“房间里的大象”,这是英语中的一句成语,意思是一件事明明存在,但大家却视而不见,集体回避它。比如性,许多中国父母从不告诉孩子们它究竟是什么,所有与之相关的话题都在屏蔽之列,直到他们有一天自己撞上这只“房间里的大象”,如果足够幸运,他们的心灵也许不会受到伤害。 http://book.douban.com/review/4984932/