跳到主要内容

程序员提高效率的 10 个方法

· 阅读需 10 分钟

1. 早上不要开会 📅

每个人一天是 24 小时,时间是均等的,但是时间的价值却不是均等的,早上 1 小时的价值是晚上的 4 倍。为什么这么说?

因为早晨是大脑的黄金时间,经过一晚上的睡眠,大脑经过整理、记录、休息,此时的状态是最饱满的,适合专注度高的工作,比如编程、学习外语等,如果把时间浪费在开会、刷手机等低专注度的事情上,那么就会白白浪费早上的价值。

2. 不要使用番茄钟 🍅

有时候在专心编程的时候,会产生“心流”,心流是一种高度专注的状态,当我们专注的状态被打破的时候,需要 15 分钟的时候才能重新进入状态。

有很多人推荐番茄钟工作法,设定 25 分钟倒计时,强制休息 5 分钟,之后再进入下一个番茄钟。本人在使用实际使用这种方法的时候,经常遇到的问题就是刚刚进入“心流”的专注状态,但番茄钟却响了,打破了专注,再次进入这种专注状态需要花费 15 分钟的时间。

好的替换方法是使用秒表,它跟番茄钟一样,把时间可视化,但却是正向计时,不会打破我们的“心流”,当我们编程专注度下降的时候中去查看秒表,确定自己的休息时间。

3. 休息时间不要玩手机 📱

大脑处理视觉信息需要动用 90% 的机能,并且闪烁的屏幕也会让大脑兴奋,这就是为什么明明休息了,但是重新回到工作的时候却还是感觉很疲惫的原因。

那么对于休息时间内,我们应该阻断视觉信息的输入,推荐:

  • 闭目养神 😪
  • 听音乐 🎶
  • 在办公室走动走动 🏃‍♂️
  • 和同事聊会天 💑
  • 扭扭脖子活动活动 💁‍♂️
  • 冥想 or 正念 🧘

4. 不要在工位上吃午饭 🥣

大脑经过一早上的编程劳累运转之后,此时的专注度已经下降 40%~50%,这个时候我们需要去重启我们的专注度,一个好的方法是外出就餐,外出就餐的好处有:

  • 促进血清素分泌:我们体内有一种叫做血清素的神经递质,它控制着我们的睡眠和清醒,外出就餐可以恢复我们的血清素,让我们整个人神经气爽:
    • 日光浴:外出的时候晒太阳可以促进血清素的分泌
    • 有节奏的运动:走路是一种有节奏的运动,同样可以促进血清素分泌
  • 激发场所神经元活性:场所神经元是掌控场所、空间的神经细胞,它存在于海马体中,外出就餐时场所的变化可以激发场所神经元的活性,进而促进海马体活跃,提高我们的记忆力
  • 激活乙酰胆碱:如果外出就餐去到新的餐馆、街道,尝试新的事物的话,可以激活我们体内的乙酰胆碱,它对于我们的“创作”和“灵感”起到非常大的作用。

5. 睡午觉 😴

现在科学已经研究表现,睡午觉是非常重要的一件事情,它可以:

  • 恢复我们的身体状态:26 分钟的午睡,可以让下午的工作效率提升 34%,专注力提升 54%。
  • 延长寿命:中午不睡午觉的人比中午睡午觉的人更容易扑街
  • 预防疾病:降低老年痴呆、癌症、心血管疾病、肥胖症、糖尿病、抑郁症等

睡午觉好处多多,但也要适当,15 分钟到 30 分钟的睡眠最佳,超过的话反而有害。

6. 下午上班前运动一下 🚴

下午 2 点到 4 点是人清醒度最低的时候,10 分钟的运动可以让我们的身体重新清醒,提高专注度,程序员的工作岗位和场所如果有限,推荐:

  • 1️⃣ 深蹲
  • 2️⃣ 俯卧撑
  • 3️⃣ 胯下击掌
  • 4️⃣ 爬楼梯(不要下楼梯,下楼梯比较伤膝盖,可以向上爬到顶楼,再坐电梯下来)

7. 2 分钟解决和 30 秒决断 🖖

⚒️ 2 分钟解决是指遇到在 2 分钟内可以完成的事情,我们趁热打铁把它完成。这是一个解决拖延的小技巧,作为一个程序员,经常会遇到各种各样的突发问题,对于一些问题,我们没办法很好的决策要不要立即完成, 2 分钟解决就是一个很好的辅助决策的办法。

💣 30 秒决断是指对于日常的事情,我们只需要用 30 秒去做决策就好了,这源于一个“快棋理论”,研究人员让一个著名棋手去观察一盘棋局,然后分别给他 30 秒和 1 小时去决定下一步,最后发现 30 秒和 1 小时做出的决定中,有 90% 都是一致的。

8. 不要加班,充足睡眠 💤

作为程序员,我们可能经常加班到 9 点,到了宿舍就 10 点半,洗漱上床就 12 点了,再玩会儿手机就可以到凌晨 2、3 点。

压缩睡眠时间,大脑就得不到有效的休息,第二天的专注度就会降低,工作效率也会降低,这就是一个恶性循环。

想想我们在白天工作的时候,其实有很多时间都是被无效浪费的,如果我们给自己强制设定下班时间,创新、改变工作方式,高效率、高质量、高密度的完成工作,那是否就可以减少加班,让我们有更多的自由时间去学习新的知识技术,进而又提高我们的工作效率,形成一个正向循环。

9. 睡前 2 小时 🛌

  1. 睡前两小时不能做的事情:
    • 🍲 吃东西:空腹的时候会促进生长激素,生长激素可以提高血糖,消除疲劳,但如果吃东西把血糖提高了,这时候生长激素就停止分泌了
    • 🥃 喝酒
    • ⛹️ 剧烈运动
    • 💦 洗澡水过高
    • 🎮 视觉娱乐(打游戏,看电影等)
    • 📺 闪亮的东西(看手机,看电脑,看电视)
    • 💡 在灯光过于明亮的地方
  2. 适合做的事情
    • 📖 读书
    • 🎶 听音乐
    • 🎨 非视觉娱乐
    • 🧘‍♂️ 使身体放松的轻微运动

10. 周末不用刻意补觉 🚫

很多人以周为单位进行休息,周一到周五压缩睡眠,周末再补觉,周六日一觉睡到下午 12 点,但这与工作日的睡眠节奏相冲突,造成的后果就是星期一的早上起床感的特别的厌倦、焦躁。

其实周末并不需要补觉,人体有一个以天为单位的生物钟,打破当前的生物钟周期,就会影响到下一个生物钟周期,要调节回来也需要花费一定时间。

我们应该要以天为单位进行休息,早睡早起,保持每天的专注度。

参考

以上大部分来源于书籍 《为什么精英都是时间控》,作者桦泽紫苑,是一个脑神经专家。

10 分钟把你的 Web 应用转为桌面端应用

· 阅读需 6 分钟

在桌面端应用上,Electron 也早已做大做强,GitHub桌面端、VSCode、Figma、Notion、飞书、剪映、得物都基于此。但最近后起之秀的 Tauri 也引人注目,它解决了 Electron 一个大的痛点——打包产物特别大

我们知道 Electron 基于谷歌内核 Chromium 构建,打包后无论应用多小,至少都得 70M 起步,而 Tauri 使用操作系统内的 Webview1,运行时才会去动态连接 webview,这使得它的打包速度非常快、打包后的应用更小

Tauri 跟 Electron 一点不同,Electron 使用 JavaScript 编写后台服务,而 Tauri 则使用 Rust,Rust 这两年势头很猛,更安全、性能更好,很多应用都开始转入 Rust 的怀抱,相信不久后也会是前端必学基础。

本文就基于 Tauri 作为构建桌面端应用框架,仅需一点时间,就可以将一个 Web 应用转为桌面端应用

1. 打开一个 Web 应用

我们以 FocusTide 这个应用为转换对象,它是 GitHub 开源的一个计时 Web 应用:

首先我们先 Clone 该仓库到本地:

$ git clone git@github.com:Hanziness/FocusTide.git

然后我们安装并且运行起来:

# 安装依赖
$ yarn install

# 启动服务,在 localhost:3000
$ yarn dev

2. 安装 Tauri 依赖

我们以 Mac 为例,Mac 下需要安装 CLang 和 MacOS 相关开发依赖:

$ xcode-select --install

安装 Tauri:

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

这条命令会安装下载 Rustup,它会下载安装 Rust 相关依赖,当安装成功后控制台会显示:

$ Rust is installed now. Great!

其他操作系统安装 Tauri:

  1. Windows 下安装 Tauri:https://tauri.app/zh-cn/v1/guides/getting-started/prerequisites/#windows
  2. Linux 下安装 Tauri:https://tauri.app/zh-cn/v1/guides/getting-started/prerequisites/#linux

3. 将 Tauri 集合到项目中

在 Web 应用内,先安装 Tauri 相关的 npm 包

$ npm install --save-dev @tauri-apps/cli

pakcage.json 增加脚本命令:

"scripts": {
"tauri": "tauri"
}

接着跑 Tauri 初始化项目命令:

$ npm run tauri init

这条命令执行之后,会在当前 Web 项目产生如下 Tauri 项目:

执行之后,会有一些问题需要我们去填写

  1. What is your app name? 应用名。这个名字会作为打包后应用的正式名称。

  2. What should the window title be? 默认窗口名称。这个会作为我们打开应用窗口的名称,后续我们不需要这个窗口的话我们可以在 tauri.conf.jsonhiddenTitle 字段去隐藏它。

  3. Where are your web assets (HTML/CSS/JS) located relative to the < current dir $gt; /src-tauri/tauri.conf.json file that will be created? 生产环境下的文件路径。也就是前端项目打包之后的项目路径,这个路径相对于 /src-tauri/tauri.conf.json 路径。FocusTide 项目打包产物放在项目的 dist 文件夹中,所以我们填 ..dist

  4. What is the URL of your dev server? 开发环境下的服务路径。FocusTide 项目开发下的服务路径为 http://localhost:3000

  5. What is your frontend dev command? 前端启动开发命令。FocusTide 项目启动开发命令是 yarn dev

  6. What is your frontend build command? 前端打包命令。FocusTide 项目的打包命令是 yarn generate

执行后,生成 src-tauri,接着我们就可以把项目跑起来了:

$ npm run tauri dev

可以看到,我们的应用在窗口跑起来了:

4. 打包发布

如果开发 OK,我们就可以把应用打包出来。

$ npm run tauri build

执行打包命令后,打包应用会存放在 src-tauri/target/release/bundle 下,可以看到,打包产物非常小:

Tauri 打包过程中,会更根据当前系统平台打包,比如 Mac 下只能打包 .dmg.app 包,Windows 下打包 .msi.exe 包。

5. 部署

下载后,如果我们要公开这个应用,需要部署应用,这里我们推荐 Laf ,我们可以使用它的云存储#文件管理,把我们的应用上传上去并且得到下载链接:

6. 最后

整个转换过程其实非常简单快速,如果你花费了超过 10 分钟的话,那我们深表歉意。如果你要继续深入使用桌面后台服务,可以查看 Tauri 官网

最后,我把转换后的 FocusTide 项目放到了个人 GitHub 上,并且取名为「来做」,目前仅限 Mac 端,欢迎下载 👏🏻

Footnotes

  1. Tauri vs. Electron: A comparison, how-to, and migration guide: https://blog.logrocket.com/tauri-electron-comparison-migration-guide/

bit, byte, KB, GB, MG, TB, PB

· 阅读需 1 分钟

1bit 是计算机中最小的数据单位,1bit 就对应一个高低电位。

1bit×8=1byte1bit \times 8 = 1byte 1byte×1024=1KB(kilobyte)1byte \times 1024 = 1KB (kilobyte) 1KB×1024=1MB(megabyte)1KB \times 1024 = 1MB (megabyte) 1MB×1024=1GB(gigabyte)1MB \times 1024 = 1GB (gigabyte) 1GB×1024=1TB(terabyte)1GB \times 1024 = 1TB (terabyte) 1TB×1024=1PB(petabyte)1TB \times 1024 = 1PB (petabyte)

在 UTF-8 编码中

  1. 一个 US-ASCII 字符只需要 1byte
  2. 带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字符需要 2byte
  3. 其他语言(包括中日韩文字、东南亚文字、中东文字等)使用 3byte
  4. 极少数语言用 4byte

简单好用的 SemVer: 如何命名你的应用版本

· 阅读需 1 分钟

SemVer 是目前较为流行的命名版本的规范,它的全称是 Semantic Versioning Specification,语义化版本命名规范。

它对版本的命名构成主要为:

  • X,Major 版本,版本迭代,会有兼容问题
  • Y,Minor 版本,更新功能,不应该有兼容问题
  • Z,Patch 版本,修复 Bug,更小程度的变动,不会有兼容问题
  • Pre-release,预发布版本,主要是 alpha、beta、insiders,正式发布前的不稳定版本,用于内部、社区、提前体验的用户
  • Build,一般是打包构建时的 commit id

SemVer 的规则简单明了,学习成本极低,这大概就是为什么 SemVer 如此流行的原因了。

[1] https://semver.org/spec/v2.0.0.html [2] https://www.baeldung.com/cs/semantic-versioning

什么是 IP 欺骗?

· 阅读需 5 分钟

什么是 IP 欺骗?

伪装源地址的 IP 欺骗包(Spoofed IP packets)通常用于攻击中,它的目的是在攻击中避免源地址被侦测得到。

IP 欺骗是创建具有修改源地址的 Internet 协议 (IP) 数据包,以便隐藏发送者的身份、冒充另一个计算机系统或两者兼而有之。 这是一种经常被坏人用来对目标设备或周围基础设施发起 DDoS 攻击的技术。

发送和接收 IP 数据包是联网计算机和其他设备进行通信的主要方式,是现代互联网的基础。 所有 IP 数据包都包含一个位于数据包主体之前的标头,并包含重要的路由信息,包括源地址。 在普通数据包中,源IP地址是数据包发送者的地址。 如果数据包被欺骗,源地址将会被伪造。

ip-spoofing

IP 欺骗类似于攻击者发送一个数据包给某个人,这个人会拿到一个错误的返回地址。如果收到数据包的这个人想要停止发件人发送数据包,通过阻止虚假地址的数据包的手段是起不到作用的,因为地址相当容易更改。相关地,如果接收方想要响应返回地址,他们的响应包会去到别的地方,而不是真正的发送者。 伪装数据包地址的能力是许多 DDoS 攻击利用的核心漏洞。

DDoS 攻击通常会利用欺骗,目的是用流量淹没目标地址设备,同时掩盖恶意源地址的身份,阻止缓解措施。 如果源 IP 地址被伪造并不断随机化,阻止恶意请求变得相当困难。 IP 欺骗还使执法和网络安全团队难以追踪攻击的肇事者。

欺骗还用于伪装成另一个设备,以便将响应发送到该目标设备。 NTP 放大和 DNS 放大等容量攻击就是利用这个漏洞。 修改源 IP 的能力是 TCP/IP 设计所固有的,使其成为一个持续的安全问题。

与 DDoS 攻击相关联的是,欺骗攻击还可以伪装成另一个设备,以避开身份验证,获得访问或“劫持”用户会话的权限。

如何防止 IP 欺骗(包过滤)

虽然无法防止 IP 欺骗,但可以采取措施阻止欺骗数据包渗入网络。 一种非常常见的欺骗防御措施是入口过滤,在 BCP38(最佳通用实践文档)中进行了概述。 入口过滤是一种数据包过滤形式,通常在网络边缘(network edge)设备上实现,它检查传入的 IP 数据包并查看它们的源头。 如果这些数据包上的源头与它们的来源不匹配,或者它们看起来很可疑,则数据包将被拒绝。 一些网络还将实施出口过滤,它查看离开网络的 IP 数据包,确保这些数据包具有合法的源头,以防止网络中的某人使用 IP 欺骗发起出站恶意攻击。

Reference

[1] What is IP spoofing? https://www.cloudflare.com/learning/ddos/glossary/ip-spoofing/

不用中间变量实现数值交换

· 阅读需 2 分钟

介绍三种不用中间变量实现数值交换的方法,

1. 加减法

假设有变量

let a = 2, b = 5

交换

a = a + b // a = 7

b = a - b // b = 2

a = a - b // a = 5

缺点:

  • 只能处理数值
  • 数值太大相加的时候可能会溢出

2. 乘除法

有加减法那么就自然可以联想得到乘除法:

a = a * b // a = 10

b = a / b // b = 2

a = a / b // a = 5

缺点:

  • 会有精度损失
  • 被除数不能为 0

3. 异或法

异或是一种数学运算,不同为 1,相同为 0:

结果
000
011
101
110

在计算机中进行异或运算,需要先把数值换算成二进制,a 的二进制为 010b 的二进制为 101

a = a ^ b // 010 ^ 101 = 111

b = a ^ b // 111 ^ 101 = 010

a = a ^ b // 111 ^ 010 = 101

缺点:

  • 无法处理浮点型变量

总结

三种方法都是奇技淫巧,仅供学习使用,生产环境最好不要用。

并发和并行的简单区分

· 阅读需 3 分钟

刚开始学并发和并行时总是整得有点懵,现在终于下手来好好梳理着两者的关系了。

首先并发的单词是 Concurrency,词根 con - 的意思是“一起”,而 current - 词根的意思是“当前”,所以总的意思就是“一起发生的事情”

并行的单词是 Parallelism,词根 parallel - 是平行、并列的意思,所以总的意思就是“平行发生的事情”,也可以说“同时发生的事情”

举一个知乎答主提到的一个形象的例子:

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。所以我认为它们最关键的点就是:是否是『** 同时 **』。

从这位知乎答主的我们其实就能够知道:并行是并发的一种特殊情况。 并发只要求有处理多个任务的能力,而并行要求有 ** 同时 ** 处理多个任务的能力

借此,我们来梳理一下多核 CPU 和单核 CPU 的并发、并行性

首先是针对单核 CPU,单核 CPU 很明确,一个时刻只能做一件事情,所以它不可能具备并行性,但它可能具备并发性(如果这台 CPU 支持处理多个任务的能力的话)

其次是多核 CPU,多核 CPU 就是多个单核 CPU 组成的,那么同一时刻处理多个任务就是一件轻而易举的事情了,也就是具有了并行性(有并行性就一定有并发性,前面我们已经说了并行性是并发性的一种特殊情况)

另一个角度看待对数

· 阅读需 1 分钟

之前一直对对数 loglog 一直不太了解,最近看到算法图解中给对数的另一个解释,挺有意思的,在此记录一下,比如有一个对数:

log28log_28

它可以看做多少个 2 相乘等于 8,答案当然是 3,毕竟 23=82^3=8

2×2×2=82\times2\times2=8

上面的角度是以底数为主的,再推而广之一下,若以真数为主,也可以看作是 8 连续除以多少个 2 等于 1

8÷2÷2÷2=18\div2\div2\div2=1

简要介绍进制和 ASCII 码表

· 阅读需 5 分钟

1. 什么是进制

  • 进制 进制全称“进位计数制”,一种计数方式,比较常用的是十进制
    • 十进制 十进制就是逢十进一,所以十进制有 10 个数字表示——0,1,2,3,4,5,6,7,8

生活中除了十进制还有很多常见的进制,可能你没有注意到,比如时钟,秒数是 60 进制,秒针从 0 走到 59 后,再走一分钟逢 60 进一成为一分钟。

再说计算机,计算机中也可以采用十进制来代表数字,那为什么偏偏要用二进制呢?原因很简单,因为二进制只有 0 和 1,表示起来很简单。

那为什么说二进制为什么简单呢?因为计算机底层也是硬件,每次硬件在两条路径和十条路径中选择肯定前者来得轻松,只不过为了达到同样目的地,二进制需要多走几步。

2.话说二进制

我们先来看看十进制是怎么表示的,假设我们现在有一个十进制的数字 (3107)10(3107)_{10}

注意

  1. 这里数字 (3107)10(3107)_{10} 用括号括起来,下标是10,表示它是10进制 这个下标就是用来表明它是什么进制的,比如 (3107)8(3107)_{8}注意此时它的下标是 8,那它就不是十进制了,而是八进制了 另外,为什么平时不这些写呢?因为十进制太通用了,不写默认它就是十进制
  2. 除了这种表示方法,常用的还有后缀字母表示法,你可能遇到过: 比如 3107H,在数字后面加上字母H,表明它是个十六进制的数字

这个 (3107)10(3107)_{10} 我们拆开来看的话:

3×103+1×102+0×101+7×1003×10^3+1×10^2+0×10^1+7×10^0

我们再来看一个二进制数字(1101)2(1101)_2,它也可以表示为

1×23+1×22+0×21+1×201×2^3+1×2^2+0×2^1+1×2^0

看到这里你应该能明白到为什么叫做十进制和二进制的原因了吗?

再说进制的转化,二进制转十进制很简单,你把

1×23+1×22+0×21+1×201×2^3+1×2^2+0×2^1+1×2^0

接下来按十进制来计算

8+4+0+18+4+0+1

就等于 (13)10(13)_{10},直接写成 (1101)2(1101)_2=(13)10(13)_{10}

3.什么是ASCII码

  • ASCII ((American Standard Code for Information Interchange)美国信息交换标准代码),名字怪长的,我们只着眼于代码这两个字就好了

我们知道,计算机表示数字是比较简单的,但如何表示文本呢?比如 a、b、c、d 这些英文,甚至是标点符号、汉字等等

前人做了一个很好的替换,就是先建一个表,表中存放着这些文本符号

文本符号
a
b
c

再给这些文本编个顺序

号码文本符号
0a
1b
2c

你要取的时候,按照号码来就好了,想要 a 输入 1,想要 b 输入 2,依次类推(这时你可能会明白一点“代码”的意思)

那么 ASCII 码表是作为较早期的符号表,多早呢?1967年,当时美国人发明的,要知道美国人用的语言就 26 个字母,再加上一些乱七八糟的符号等等,用 128 个字符就能够涵盖了

那为什么是 128 这个数字呢?在前面提到,计算机是用二进制表示的,从 0 号开始编码,一直到 127 号,刚好就是 128 个号码

那么最小号码是 0 号,最大号码是 127 号,那么如果我们能用数字表示最大的号码,那么比他小的号码也都能表示,而 (1111111)2(1111111)_2 就等于 127,我们展开来看

1×26+1×25+1×24+1×23+1×22+1×21+1×201×2^6+1×2^5+1×2^4+1×2^3+1×2^2+1×2^1+1×2^0

另外,这个(1111111)2(1111111)_2 一共有7位,所以也可以说成用 7 位表示的ASCII码表

首字母大写规范指南

· 阅读需 7 分钟

不管是在生活写作中,还是创建 Pull Request,或者给开源项目提交 Issue 的时候,我们都需要用到英文标题,那么对于哪些部分需要首字母大写,则是一件头疼的事情,下面详细列出英文中首字母大写规范,此规范来自 Scribendi,这是一家超过 20 多年的对英文作品和文档进行编辑和校对的团队,其首字母大写规范吸纳了 Chicago, MLA, and APA 等首字母大写规范而成,极具参考价值。

@[toc]

一、人名,地名,物品 📍

人名、地名还有特定的物品和事件都需要首字母大写:

Example:

  • The Burj Khalifa is the tallest tower in the world.
  • In China, the Dragon Boat Festival is celebrated in late June.

二、季节,月份,方位 🍃

季节单独使用不需要首字母大写,和其他特定的人名或者事件结合在一起的话需要大写。

  • My favorite season is autumn. // 不需要大写
  • I love the Summer Olympic Games. // 需要大写

月份需要首字母大写:

  • I'm going on vacation in April.
  • The conference is scheduled for September.

方位和季节一样:

  • The café is five minutes south of the station.
  • The landscape in Northern Ontario is stunning.

三、职称 🧑‍💼

职称需要首字母大写:

  1. 作为人名的一部分,或者跟特定人联系在一起的时候。

    • Hi, Professor Clarke. How are you?
    • This is Quality Assurance Manager John Smith.
  2. 求职信

    • I am writing to apply for the Content Marketing position.
  3. 信的签名行:

Example
Sincerely,
Anna Garcia, Human Resources Manager
...

除上面的情况外,不需要首字母大写:

  • My professor drinks a concerning amount of coffee.
  • The man at the desk is John Smith, our quality assurance manager.

四、信封和电子邮件:开头语和结束语 ✉️

信封和电子邮件的开头语和结束语的第一个单词和主要单词都需要大写:

Exmaple
Dear Hiring Manager,
I am writing to apply for the Research Assistant position.
...
Best regards,
Jessica Turner
...

五、学术科目和课程名称 🧑‍🏫

对于学术科目涉及到,只首字母大写那些专有名词,比如语言、国家或者文化:

  • I like my Spanish literature class, but biology is where I truly shine.
  • This semester, I'm studying sociology, psychology, English, and French.

对于特定课程,需要首字母大写,并且其中的次要单词则不用:

  • Let's grab some coffee together after our East Asian Studies lecture.
  • Next semester, I really want to take the Introduction to Scandinavian Lanuages course.

普通的研究领域不需要首字母大写。

六、作品标题 📚

对于英语作品,比如书籍、文章,还有电影,首先,第一个单词首字母大写,然后,主要单词需要首字母大写,次要单词都不用,除非它是第一个或者最后一个:

  • I'm reading The Old Man and the Sea.
  • My presentation on Bury My Heart at Wounded Knee is due tomorrow!

6.1 带有连字符复合词的标题 🧲

对于带有连字符(-)的标题,首先,第一个单词首字母大写,然后,主要单词需要首字母大写:

  • I preordered Harry Potter and the Half-Blood Prince.
  • Can I borrow your copy of The Encyclopedia of Over-the-Counter Medicines?

6.2 带有拼写数字和分数的标题 📟

标题中的拼写数字和分数全都首字母大写:

  • Where's my copy of Twenty-First-Century Design Trends?
  • I'm writing my next book, Only Three-Quarters Left: A History of Office Lunch Thieves.

6.3 带有物种学名的标题 🐷

当带有物种学名,只需要首字母大写第一个单词:

  • My assigned reading today is Antilocapra americana: Its Habitat and Lifestyle.
  • I've added "Meep Meep": The Habits of Geococcyx californianus to my reading list.

七、冒号后面的首字母大写 🚧

如果冒号(:)后面有两个及以上的完整句子,句子第一个单词首字母必须大写。如果是一个句子的话,且句子第一个单词是专有名词时首字母大写。

  • Garlic is my roommate's favorite ingredient: She uses it in almost everything. I think she uses it a bit too much.

另外两种情况是不需要首字母大写:

  1. 冒号后面接的不是完整句子,不需要首字母大写,对于专有名词也是:
    • I add a secret ingredient to my meatballs: cinnamon.
  2. 冒号后面接的是一串术语名词,不需要首字母大写,除非是专有名词:
    • First aid kits should always contain a few basics: bandages, disinfectant, and sterile gloves.

八、分号后面的首字母大写 🚛

只有当分号(;)后面是专有名词时才需要首字母大写:

  • I love the rain; my cat clearly hates it.
  • Jeff starts every morning with a cup of coffee; Colombian brews are his favorite.

九、引用 🪗

如果引用("")中是完整句子,并且该完整句子是一个独立的从句,则第一个单词需首字母大写:

  • Einstein said, "Love is a better teacher than duty."
  • As my Great-Aunt Ethel used to say, "You should always pack an extra pair of socks."

如果不是,则不需要:

  • The BBC article reported that Queen Elizabeth "adores her pet corgis."
  • Multiple students complained about the new chairs, calling them "an affront to humanity."

附录

  • 完整句子 Complete Sentence:一个完整的句子至少包含主语和谓语。
  • 主要单词 Major Words:指名词、代词、动词、形容词,以及副词。
  • 次要单词 Minor Words:指冠词、连词,以及介词。

最后

GitHub 仓库 Capitalization Rules,仓库中包含 Scribendi 的规范 PDF,有需要的朋友可以自取 🤓。