浏览器的Tab管理

Chrome是我工作中最常用的浏览器,但是它的Tab管理确实是一团糟。经常会遇到工作一天之后,CHrome的浏览器Tab开了一堆,要找到之前的Tab简直比登天还难。

浏览器的窗口管理

在chrome大行其道之前,IE是流行的浏览器之一,IE在新建窗口的时候就真的是在你的桌面上新建一个窗口,也许当时的用户工作一天之后桌面上会是一堆的窗口?当时的网页功能肯定没有现在这么强大,不是所有的应用都是运行在网页上的。

chrome已经在IE的基础上进行了改进,通过Tab来管理新建的窗口,至少我们不用看到桌面上的一堆浏览器窗口。Chrome的界面UI设计在刚问世的时候也是以其简洁、快速著称的,它也因此赢得了市场。

问题从桌面上的一堆窗口变成了一条Tab栏上的一个个Tab。这条Tab栏是有上限的,一般来说在10个tab左右就已经填满了整条Tab栏。按照我自己的习惯同时开启的Tab远在这个数字之上,Chrome的Tab页面至少在40个以上,而且习惯开启新的Tab但是不习惯关闭Tab。当我们的Tab栏都看不清标题分不清哪个Tab是你要切换寻找的,这时候我还倾向于新建一个Tab,而不是在一大堆Tab中寻找之前的Tab(除非这上面有我依赖的数据,新建一个需要重新操作一遍)。一天的工作结束之后会发现这些窗口中很大一部分都是一次性的,没有意义的中间窗口,例如导航类型的页面,搜索中间页面等等。

Chrome也在改进Tab页面的设计 引入了Tab分组,支持在已经开启的Tab页面中搜索,但是实际使用中并没有多大程度地解决问题。

Edge、Arc等浏览器开始抛弃最原始的Tab栏的桎梏,开始尝试竖排的Tab页面管理。

为什么?

为什么我们的浏览器页面会变得如此拥挤? 拆解和分析一下这个问题,会发现我们的问题变成了,为什么我们要新建一个浏览器Tab?这个问题很简单:

  • 用户主动通过url打开Tab 比如我想要搜索一个主题,我会打开google进行搜索,或者直接在Tab栏搜索,这都会新建一个Tab
  • 网站的新建 这不是用户的行为,更多的是网页的设计,例如Google搜索完成之后会有google 的搜索结果页面,当我点击其中一个搜索结果的时候Google可以选择在新的Tab页面中打开搜索结果网页,也可以选择forward,覆盖现有的搜索结果。(现在baidu的默认是新建Tab,Google采用的是forward的方案)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Open Link in New Tab or Same Tab</title>
</head>
<body>
<a href="https://www.example.com" target="_blank">Open in New Tab</a>
<a href="https://www.example.com" target="_self">Open in Same Tab</a>
</body>
</html>

竖排标签管理

现代用户的屏幕大多是16:9甚至更加宽的比例,在空间上宽会比高更加富裕。竖排的标签不会因为标签过多导致标签名称被挤占,因为竖排之后标签管理的宽度是可调整的,新的tab排列是竖向的,标签名称是横向的,不在一个方向上。

树状标签管理

用户的标签是否可以组织成一颗二叉树一样的形式。

https://chromewebstore.google.com/detail/tree-style-tab/oicakdoenlelpjnkoljnaakdofplkgnd 看上去已经有人在做类似的尝试,先试用一下看。

目前在使用的是

https://chrome.google.com/webstore/detail/nelmjkbalflkmcnnnhjgiodpndcebfgo

插件基本实现了树状Tab管理的基础功能,由于是插件的原因,功能打磨上没有arc做得那么好,也占用了挺多屏幕空间

新建Tab

tree tab可以让tab页面之间的生成逻辑更加清晰,不知道有没有插件可以减少新Tab页面的创建。会不会改造的最后就是zuo c

计算机交互发展de历史以及畅想

计算机的发展经历了几个阶段

  • 纸带打孔 点
  • 字符终端 线
  • 图形化桌面 二维平面(黑白)
  • 触摸、语音、视频 二维平面(彩色)
  • 立体交互. 三维空间
  • 意识识别、脑机接口 高维度

这是个很有意思的比喻。推动计算机的交互发展基础其实是计算机输入输出的带宽不断提高。因为带宽和算力不断提高所以新的交互输入以及交流的方式成为了可能。

纸带打孔

计算机的上古时代,人类通过纸带来记录数据。上面可能包含代码和数据。但是可以想见这种机器的传输带宽是非常小的。

如果用几何图形来比喻的话,这时候还真的只是个点吧,代码是以点来存储的,计算机读取这些点来执行计算。

终端字符

计算机进入了终端命令的时代了,人们不再依赖点来存储自己的代码和逻辑了,使用计算机需要在一个黑框框里面输入一堆命令来让计算机执行需要的计算。但是这已经是非常大的进步了。

图形化窗口

施乐公司最先发明了图形化的窗口和操作系统。这个设计被苹果和微软带进了千家万户。计算机图形化也伴随着计算机的个人化,一切都变得更加容易操作了,计算机的易用性有了大大的提升。

很多人质疑图形化的界面是否有更高的效率,这些大多是习惯和热爱技术的人,往往不是一般用户。

二维平面的窗口让交互更加直观了。

移动计算

移动计算是桌面计算机的又一次小型化。手持设备的发展并没有和桌面计算机完全分开,但是移动设备的性能和实用性一开始都不足以完全替代桌面计算设备,但是从iPhone时代开始,移动设备的可用性慢慢达阈值,现在的iPhone以及可以开始运行一些3A大作了。使用手机但是不用电脑的用户也越来越多了。

空间计算

所有体验过空间计算(VR)设备的人都会在第一时间确定,是的这就是下一代的计算形态。人们从平面的电脑窗口和手机屏幕上进化到三位立体的交互界面了,多了一个维度的质的飞跃。

每一年都会被很多人认为是VR元年。人们很早就开始构建类似的设备了,技术一直在进步,但是都无法正真的实现空间计算。

我记得当年诺基亚有个侧滑的手机N97, 从设计和宣传上来说,人们对他的期待就是一台移动的小电脑,但是这一直都只是一种期待。那个时代的手机还是性能过于孱弱,无法替代桌面电脑。

VR的计算依赖基础技术的进步,需要达到一些基本的诉求,然后才能迎来自己的时代

  • 佩戴体验
  • 电池续航
  • 画面体验
  • 计算能力

脑机接口

这也许是空间计算之后的一个畅想了。之前的交互界面一直都是试图构建在人类的感官之上,通过视觉,手指来操作。

脑机接口是直接绕过这些感官,直接将所谓的“意识”和计算机相连,当我们想一件事情的时候,计算机就已经知道。我们不在受到交互界面的限制。

例如我在创作这篇文章的时候还是通过键盘来输入的,但是如果脑机接口成熟了,我都不需要键盘,我只要想到,文章自动输入到电脑上了,这无疑带来了输入带宽的极大提升。

还有一点,如果我们都能直接感知到一个人的想法了,那么文字还那么重要么,文字通常来说是具象的,是我们思维的一种投射。但是我们都能直接理解意识的本体了,我们还需要这种投射么,我们可以直接将我们的喜怒哀乐读取出来之后告知给另一个人,人们终于可以切身体会到另一人的想法,不再有文字这种中间媒介的传输损耗。

但是也有另一种想法,费曼说他的草稿纸就是他的思维,而不是先思考完毕再写在纸上。文字本身就是思维思考的过程,如果没有了文字,没有了草稿,也就不算是思考了。如果没有了媒介我们的想法何以承载呢?

Sony TX-900C

https://pic.xn--oxap.xyz/images/2024/02/25/IMG_5449.jpg
=538x717

换了个新的遥控器。新的型号增加了夜光还有寻找遥控器的功能。Sony终于是get things right 了。

如果你在淘宝上搜索一下,这玩意儿居然能卖到那么贵。

最简单的方式是在微信上找一下索尼售后的小程序,选一下预约换新。然后走一下这个流程,售后工程师会让你把钱打过去,然后他们把遥控器寄过来。

然后就耐心等待就行。

Boom

你有了一个新的小玩具。


题外话:

虽然这只是一个简单的遥控器,但是却让我思考了好多。我不想聊关于索尼的遥控器的设计是否合理的问题,已经有好多人说过这个问题了。我想聊一下为什么我,“我们”,经常会需要一个新的“遥控器”这个问题。

我们来简单地剖析一下这个问题,然后抽象提炼一下看:

单纯地看我为什么想要一个新的遥控器呢?

  • 因为旧的不好用
  • 因为我知道有一款新的好用的遥控器
  • 我还知道新的型号附带一些新的功能

我为什么可能想要一辆新车呢?

  • 如果我原本没车,那么一辆车可以让我极大扩展自己的生活半径,提升自己的生活幸福感
  • 要是我有,新换的车也许可以有新的功能,更智能的车机,更大的空间,也是是因为喜欢马斯克
  • 有了这么一辆新车,我们可以在节假日的时候载着全家人一起出去玩,哇,多么温馨的画面

我为什么想要一个新的iphone呢?

  • 哇,这可是新的iPhone呀,有个灵动岛,这可是最新的设计
  • 有了电影模式的摄像能力,可以给宝宝拍下更好的照片,这买的不是手机,这买的是童年呐
  • 有了新的type-c 的接口,这下我就不需要再出门带那么多的充电线了。All type C,see I have a good taste, lighting 是什么该扫尽垃圾桶的接口呀

我为什么想要一件新的衣服呢?

  • 我没有这个颜色,这个设计,这个款式的
  • 这个用来搭配的我的鞋子刚刚好非常合适
  • 可以在下次出游的时候穿出去,一定非常出片

我为什么想要xxxx

  • balalalalall
  • bablallalal
  • cxxxxxx

那么人们为什么想要一件新的东西呢?为什么有些人想要急迫地想要买一个新东西呢?在我对于换到手的新遥控器爱不释手的时候,丫丫可能并不理解为什么。从旁人的角度来看不就是个显示器么?他的基础功能有什么不一样么?并没有,一样都是遥控器,原来的遥控器就那么难按么?不见得,习惯了之后都可以盲按。我们花钱买了我们以为可以给我们生活带来更大便利的东西,我们甚至为之有些上瘾了?但是我发现这就是个新的遥控器,在功能本质上没有什么大的变化,我需要语音找遥控器么?一年可能都用不上几次,我一定要金属面板的遥控器么?塑料的怎么就不行了吗?人们会因为幻想买自己实际上不需要的东西。

怎么知道自己实际上是否需要一件东西呢?

我想到了一个简单的办法,不要从你自己主观的角度出发?不知你在使用这个遥控器,你的家人,小孩儿,朋友?老婆在用这个东西,你觉得你需要买个新的给他们么?有这个必要性么?如果没有那么大概率你也没啥太大的必要性买个新的给自己。

是的,我们生活在一个日新月异的世界,事物总是在进步的。消费主义能让人上瘾,感觉可以买到开心和快乐,但是这种多巴胺的分泌只会一次一次地拉高我们的期望,我们只会购买地更多。多巴胺是人类进步的动力,但是就像所有的工具和机制都需要一个合适的地方来发挥其作用一样,任何的机制也有可能被滥用。

当多巴胺分泌的时候人们的预期被拉高了,在没有新鲜的事物或东西能满足人们的欲求的时候,人类就会痛苦。就像是物理中的能量守恒定律一样,人类的快乐和痛苦通常来说也是守恒的。

这背后是我们对人类内在的奖励机制的理解。这套奖励机制的正确且合理的运行是个人平稳前进的基础。

正如前面所说,如果快乐变多了,随之而来的痛苦和平到会增多。如果我们主动地追寻困难或者有挑战的事情,那么平日里的日子也可以变出淡淡的幸福。

学习了解自己的奖励机制,利用它来引导我们前进的方向。

我需要一个新的遥控器么?

也需要,我需要他给我的奖励系统一些刺激

但是也许不需要,我需要的是给我的奖励系统一些刺激,而不是一个新的遥控器。

程序员中很多人喜欢折腾自己的博客,但是大多数折腾完成之后,写了几篇关于折腾博客的记录,之后便很少再去写新的文章了,这也是不知道自己到底要的是什么,是真的需要一个blog还是喜欢“折腾”这个过程本身。喜欢“折腾”其实没什么问题,但是不要为此让自己只是不停地折腾,人们总要“build” something,而不是一直拿着一把漂亮的工具但是并不构建什么东西,而是一直在打磨和装饰他的“🗡️”。

emacs的outline wiki 插件

不多说了,直接贴代码吧,也是从别人的配置上拿到的,在他的基础上加了一些功能(支持了搜索、刷新)。这就是emacs之道吧,看了别人的菜谱,自己也可以方便地抄过来改吧改吧,希望可以帮助到有需要的人。

依赖了helm 和markdown-mode

;;; outline-wiki.el --- Outline Wiki tools for Emacs -*- lexical-binding: t; -*-

;; Copyright (c) 2019 Abhinav Tushar

;; Author: Abhinav Tushar <[email protected]>
;; Version: 1.0.1
;; Package-Requires: ((emacs "26") (helm "3.7.0") (markdown-mode "2.4") (request "0.3.2"))
;; URL: https://github.com/lepisma/outline-wiki.el

;;; Commentary:

;; Outline Wiki tools for Emacs
;; This file is not a part of GNU Emacs.

;;; License:

;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.

;;; Code:

(require 'cl-lib)
(require 'helm)
(require 'markdown-mode)
(require 'request)

(defcustom outline-wiki-url "<wiki url>"
  "Root url for outline wiki.")

(defcustom outline-wiki-api-token "<your token>"
  "API token for outline wiki.")

(defvar-local outline-wiki-doc nil
  "Buffer local variable for keeping currently shown document.")

(defun outline-wiki-get-token ()
  "Open webpage for token generation."
  (interactive)
  (browse-url (concat outline-wiki-url "/settings/tokens")))

(defun outline-wiki-post-request (request-url data callback)
  "Send post request to outline API."
  (request
    (concat outline-wiki-url request-url)
    :type "POST"
    :headers `(("authorization" . ,(concat "Bearer " outline-wiki-api-token))
               ("Content-Type" . "application/json"))
    :data (json-encode data)
    :parser 'json-read
    :success (cl-function
              (lambda (&key data &allow-other-keys)
                (funcall callback data)))
    :error (cl-function
            (lambda (&key error-thrown &allow-other-keys)
              (message "Error: %S" error-thrown)))
    ))

(defun outline-wiki-share-url-p (url)
  (string-match-p (concat outline-wiki-url "/share") url))

(defun outline-wiki-get-id-from-url (url)
  "Get identifier from given URL.

This id is share-id or url-id depending on the type of URL."
  (car (last (split-string url "/"))))

(defun outline-wiki-get-doc-from-url (url callback)
  "Get document for the given URL and call CALLBACK on the
document."
  (let ((data (if (outline-wiki-share-url-p url)
                  `(("shareId" . ,(outline-wiki-get-id-from-url url)))
                `(("id" . ,(outline-wiki-get-id-from-url url))))))
    (outline-wiki-post-request "/api/documents.info" data (lambda (data) (funcall callback (alist-get 'data data))))))

(defun outline-wiki-doc-open (doc)
  "Open an outline DOC in a new buffer."
  (let ((buffer (get-buffer-create (concat "*outline-wiki:" (alist-get 'title doc) "*"))))
    (with-current-buffer buffer
      (erase-buffer)
      (insert (alist-get 'text doc))
      (goto-char (point-min))
      (markdown-mode)
      (setq outline-wiki-doc doc)
      (outline-wiki-mode))
    (set-buffer buffer)
    (switch-to-buffer buffer)))

(defun outline-wiki-doc-save (doc)
  "Push given DOC on the API. This unconditionally overwrites the
upstream so be careful with multiple editors."
  (message "Saving document")
  (outline-wiki-post-request
   "/api/documents.update"
   `(("id" . ,(alist-get 'id doc))
     ("text" . ,(buffer-substring-no-properties (point-min) (point-max))))
   (lambda (&rest _) (message "Document saved"))))

(defun outline-wiki-doc-open-in-browser (doc)
  "Open an outline DOC in default web browser."
  (browse-url (concat outline-wiki-url (alist-get 'url doc))))

(defun outline-wiki-doc-parent (doc &optional all-docs)
  "Pick and return parent of given DOC from ALL-DOCS."
  (when-let ((pid (alist-get 'parentDocumentId doc)))
    (cl-find-if (lambda (other) (string= (alist-get 'id other) pid)) all-docs)))

(defun outline-wiki-qualified-title (doc &optional all-docs)
  "Return fully specified title for given doc.

TODO: Show collection name also in front. That might need caching
      of some sort so not doing right now."
  (if-let ((parent (outline-wiki-doc-parent doc all-docs)))
      (concat (outline-wiki-relative-path parent all-docs) " › " (alist-get 'title doc))
    (alist-get 'title doc)))

;;;###autoload
(defun outline-wiki-doc-open-from-url (url)
  "Open doc from given URL for editing."
  (interactive "sOutline URL: ")
  (outline-wiki-get-doc-from-url url #'outline-wiki-doc-open))

(defun outline-wiki-save ()
  "Save doc showed in current buffer."
  (interactive)
  (if outline-wiki-doc
      (outline-wiki-doc-save outline-wiki-doc)
    (message "No outline document open right now")))

;;;###autoload
(define-minor-mode outline-wiki-mode
  "Minor mode for working with outline wiki documents."
  :init-value nil
  :keymap `((,(kbd "C-x C-s") . outline-wiki-save)))

;;;###autoload
(defun helm-outline-wiki-search (query-term)
  "Actions for outline wiki documents."
  (interactive "sQuery: ")
  (outline-wiki-post-request
   "/api/documents.search"
   `(("query" . ,query-term))
   (lambda (data)
     (let ((documents (mapcar (lambda (item) (alist-get 'document item)) (alist-get 'data data))))
       (helm :sources (helm-build-sync-source "documents"
                        :candidates (mapcar (lambda (doc) (cons (outline-wiki-qualified-title doc documents) doc)) documents)
                        :action `(("Open in buffer" . ,#'outline-wiki-doc-open)
                                  ("Open in browser" . ,#'outline-wiki-doc-open-in-browser)))
             :buffer "*helm outline*"
             :prompt "Open Doc: ")))))

(defun outline-wiki-doc-create (options)
  ;; new doc, options contains collections and new doc title
  (let ((title (car options))
        (id (cdr (assoc 'id (cdr options)))))
    (outline-wiki-post-request
     "/api/documents.create"
     `(("title" . ,title)
       ("collectionId" . ,id)
       ("publish" . t))
     (lambda (data)
       (outline-wiki-doc-open (alist-get 'data data))))))

;;;###autoload
(defun helm-outline-wiki-new (title)
  "New outline wiki document with TITLE."
  (interactive "sTitle: ")
  (outline-wiki-post-request
   "/api/collections.list"
   `(("offset" . 0)
     ("limit" . 25))
   (lambda (data)
     (letrec ((collections (alist-get 'data data))
              (cadi (mapcar (lambda (collection) (cons (cdr (assoc 'name collection)) (cons title collection) )) collections)))
       (helm :sources (helm-build-sync-source "collections"
                       :candidates cadi
                       :action `(("new document in collection" .  ,#'outline-wiki-doc-create )))
             :buffer "*helm outline*"
             :prompt "New Doc in: ")))))

;;;###autoload
(defun outline-wiki-doc-refresh ()
  "Refresh current outline wiki doc."
  (interactive)
  (if (null outline-wiki-doc)
      (message "no opened outline wiki")
    (outline-wiki-doc-open-from-url (cdr (assoc 'id outline-wiki-doc)))))

;; (outline-wiki-doc-refresh)

(provide 'outline-wiki)

;;; outline-wiki.el ends here

加上一些案件映射设置,让一切更加丝滑,在buffer保存的时候自动到outline wiki。

协同进化

硅基生命

人类发明了机器,机器又开始不断地演进,发展。一开始我们觉得这些机器很简单,其中不可能蕴含任何所谓“生命”的气息,但是技术的演化速度是指数级别增长的,现在这些机器的结构已经不是人类能够轻易理解的了(而且这一切还在继续)。我们无法确定是否在某一天开始意识也在其中悄悄萌芽。

人类与机器

我们已经无法离开机器了,他是我们工作生活的巨大助力。人类和机器的关系更像是自然界的共生关系;像人类和我们肠胃中的肠道菌群一样相互需要,只是不知道最终我们是菌群还是机器是菌群😀 。

冲突与矛盾

大多数科幻电影中畅想的硅基生命是另一个物种一样的存在,和外星人降临地球类似—–一山不容二虎。两种生命追求的是同一种有限的资源么?我想不是。硅基生命维持基本生存的基础是能源和算力,人类生活的基础是空间和食物(当然我们也需要能源),可是这两者几乎是互补的,硅基生的出现也加速了我们的生产效率本身也创造出了更多的资源,这是1+1>2的,为什么其中一方一定要消灭另一方呢?

卡片笔记写作法

这是一种整理和记录笔记的方式,将笔记作为自己的外脑,最大化地利用起来,希望可以产生出新的理念和想法,发生思维的碰撞。发明这个方法的是一个卢曼的社会学家,他也是(据说)使用了这套方法,自学并成为了以为杰出且高产的社会学家。

先把本书的目录结构整理如下

绪论,关于写作

要知道的

一般的笔记记录方法是什么?

一般大家都会在文献边上记录下自己的一些想法,还有的人可能会摘抄下来。笔记存在的价值一般就只有一段时间,过一段时间之后往往这样的笔记价值就大大降低了。

记笔记其实有两个目的:

  • 记录有价值的信息和自己的思考
  • 为后续的思考,整理加工提供素材

笔记作为我们的外脑的价值就在于此

什么是卢曼卡片法呢?

第一点,将所有的笔记记录在小卡片上,记录完成之后会有对应的分类:文献类、思考类。文献往往是现有资料在自己咀嚼之后的记录,思考是自己的想法。每张卡片都有一个自己的编号,不一定按照主题分类,只是用来做一个唯一的标志。

第二点,定期整理和回顾。卡片的好处是小,不是一本书一大份笔记,不同的笔记之间会有相互链接,整理的时候也可能发现新的连接关系。这样的定期回归就会将认知之间的关系,网状图构建起来,还有可能发展出新的认知。

要做的

要具备的能力

要注意的问题

基本原则

写作是唯一重要的事情

简洁最重要

没人完全从0开始

写作不是一个线性的事情。重点在于平时的积累和阅读,有了足够的输入才能有足够的输出。没有人是确定好选题,找资料,阅读然后再选择输出的。合理的流程是跟随自己的兴趣去了解,阅读,积累,笔记。在需要写作的时候从卡片中整理灵感和写作的主题,将他们整理成一片文章。写作不是一个线性的过程,而是一个循环过程。 这里有些类似代码的编写,往往合理的开发流程不是一蹴而就的流程,设定好需求,开发,上线。往往是一个慢慢迭代的流程,但是大多的开发流程设计中认为这是一蹴而就的过程,一旦上线需求就结束了,并不是这样的。windows的开发流程中也会设计这种tik tok的过程,需求实现一版本,优化一版本,不停地循环往复,在迭代中改进现有的逻辑和质量,也反思以往的不足。这才是一个合理的流程逻辑。

让工作推动你前进

寻找更加及时的反馈,可以让你更加爱上一件事情,学习和笔记也是。 卡片笔记法还有个好处是:随着卡片越来越多你能获得的链接数量是指数级别上升的(理论上)可以让你更加及时地获得反馈,这就能让你更好地爱上这件事情。

成功写作的六个步骤

明确区分独立又相互关联的任务

  • 一次只做一件事情,不要一心多用 保持专注一次只做一件事情,不要并发地去做事情,来回的上下文切换会导致效率低下,这个和计算机的处理方式有点像,上下文的切换是有成本的。协程、线程、进程之间切换的时候会涉及到context的保存和导出,成本太大了。
  • 每种任务需要的关注程度不一样 有些需要专注的思维,有些需要漫不经心地执行。例如编写大纲、草稿、校对等需要的专注程度都是不一样的
  • 写作不一定有明确的计划 我的理解是可以有一个大致的计划,作者原文是完全不要有计划,专家是不按照计划来的。 专家应该是说已经对一件事情了如指掌了,所以不需要一个细化的计划,但是这就是胸有成竹的专家。作为新手可以有一个大致的计划,防止自己找不到方向,但是也不要被这个计划给束缚住了。朝着专家的方向发展,做到胸有成竹。
  • 把写作作为自己的外脑,节省自己的精力 人的大脑是一个有限的机器,有限的存储,有限的记忆能力,有限的专注力。把笔记作为自己的外置硬盘,存储长期有价值的东西,cache中保存当前的工作上下文。一个长期合理的笔记流程可以让大脑不做那么多的决策,有助于把重要的事情放在第一,而不是被流程性的东西消耗太多的时间和精力。

下面是我自己的一些理解

阅读和理解

阅读的时候需要能够理解自己文献和输入,用自己的语言翻译内容,而不是照搬和copy原文

记卡片盒笔记

笔记的形式是卡片,内容体量不宜过大,简单但是精炼就行

发展想法

因为卡片之间是相互联系的,所以想法可以相互碰撞,可以发展出新的想法

分享你的洞见

从卡片盒里面发现了新的想法之后可以整理成完整的文章并将其分享出来

养成习惯

总结

卡片盒笔记方法的核心思路是将笔记的篇幅缩小,不要记录一本书一份笔记。而是一个想法一个笔记。让这些笔记之间可以相互链接,碰撞,成为思考时候的工具。