diff --git a/1-getting-started-lessons/1-intro-to-programming-languages/translations/README.zh-cn.md b/1-getting-started-lessons/1-intro-to-programming-languages/translations/README.zh-cn.md new file mode 100644 index 00000000..240028e1 --- /dev/null +++ b/1-getting-started-lessons/1-intro-to-programming-languages/translations/README.zh-cn.md @@ -0,0 +1,192 @@ +# 编程语言概述与工具介绍 + +这节课涵盖了编程语言的基础知识,涉及到的内容适用于如今大多数现代编程语言。在“工具介绍”部分,你会了解到一些对开发者很有用的软件。 + +![Intro Programming](/sketchnotes/webdev101-programming.png) +> 涂鸦笔记作者:[Tomomi Imura](https://twitter.com/girlie_mac) + +## 课前小测 +[课前小测](https://nice-beach-0fe9e9d0f.azurestaticapps.net/quiz/1?loc=zh_cn) + +## 大纲 + +这节课我们将会介绍: + +- 什么是编程? +- 编程语言的种类 +- 程序的基本要素 +- 对专业开发者很有用的软件和工具 + +## 什么是编程? + +编程(programming) ,俗称写代码(coding),是向诸如计算机或移动设备之类的设备写入指令的过程。我们使用编程语言来编写这些指令,然后交由设备去解释(interpret)。这些指令的集合有许多叫法,常见的有*程序(program)*、*计算机程序(computer program)*、*应用程序(application / app)*和*可执行文件(executable)*。 + +*程序*可以是任何由代码编写的东西,比如网站、游戏和手机应用。尽管的确有办法不编写任何代码就创建一个程序,但是设备还是会去解析其底层逻辑,这个逻辑大概率是由代码编写的。所谓*正在运行*或是*执行代码*的程序所做的其实都是执行指令。你现在用来阅读这段文字的设备,也正在运行一个将文字输出到你的屏幕上的程序。 + +✅ 查一查:谁被认为是世界上第一位计算机程序员? + +## 编程语言 + +编程语言的主要目的是:让开发者可以构建指令并将它们传递给设备。设备只能理解二进制(一堆 0 和 1),这对*大多数*开发者来说实在不算是高效的交流方式,而编程语言正是人类与计算机之间沟通的桥梁。 + +编程语言有着不同的形式,也可能用于不同的目的。比如 JavaScript 主要用于 Web 应用,而 Bash 则主要用于操作系统。 + +对于设备来说看,解释*低级语言(low level languages)*的指令一般会比解释*高级语言(high level languages)*的指令需要更少的步骤。然而,高级语言因为其可读性和兼容性会更加常用。JavaScript 就是一种高级语言。 + +下面的代码展示了高级语言(以 JavaScript 为例)和低级语言(以 ARM 汇编代码为例)的区别: + +```javascript +let number = 10 +let n1 = 0, n2 = 1, nextTerm; + +for (let i = 1; i <= number; i++) { + console.log(n1); + nextTerm = n1 + n2; + n1 = n2; + n2 = nextTerm; +} +``` + +```c + area ascen,code,readonly + entry + code32 + adr r0,thumb+1 + bx r0 + code16 +thumb + mov r0,#00 + sub r0,r0,#01 + mov r1,#01 + mov r4,#10 + ldr r2,=0x40000000 +back add r0,r1 + str r0,[r2] + add r2,#04 + mov r3,r0 + mov r0,r1 + mov r1,r3 + sub r4,#01 + cmp r4,#00 + bne back + end +``` + +不管你信不信,*它们做的事完全相同*:打印斐波那契数列的前 10 位。 + +✅ [斐波那契数列](https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97)是一个由 0 和 1 开头,每个数字都是它之前两个数字之和的数列。 + +## 程序的基本要素 + +程序中的单条指令(instruction)被称作*语句(statement)*,常用一个字符或是空行来标识指令结束的位置,这种标识可被称为*终止符(terminates)*。程序的结束方式也因语言而异。 + +多数程序都需要用到从用户或其他地方获取到的数据(data),此时语句会根据这些数据来执行指令。数据会改变程序的行为,所以编程语言提供了一种临时存储此后会被用到的数据的方法。这些数据被称作*变量(variables)*。变量也是语句,用来指示设备将数据存到它的内存中。和代数学中的变量类似,程序中的变量也有独立的命名,其值在之后也可能发生改变。 + +有的语句可能不会被设备执行,这通常是开发者有意为之,否则就是发生了意外的错误。这样的控制可以让应用程序更加稳定和可维护。一般来说这些控制的切换会在满足特定条件的情况下发生。`if..else` 语句就是一个在现代编程语言中常见的用于控制程序的语句。 + +✅ 你会在此后的课程中学到更多关于此类语句的知识 + +## 工具介绍 + +[![Tools of the Trade](https://img.youtube.com/vi/69WJeXGBdxg/0.jpg)](https://youtube.com/watch?v=69WJeXGBdxg "工具介绍") + +在这一部分,你将会了解到一些能在你的专业开发之旅中颇有帮助的软件。 + +**开发环境(development environment)** 指的是一位开发者自己在编写软件时常会用到的工具和功能的集合。其中一些工具会按照开发者的特定需求被自定义配置,这些工具集也会随着时间发生变化,原因可能是开发者在工作或个人项目中改变了需求的优先级,抑或是切换到了另一种编程语言。开发环境往往因人而异。 + +### 编辑器 + +编辑器(Editors)是软件开发中最关键的工具之一,是你用来编写甚至运行你的代码的地方。 + +开发者选用编辑器还有这些原因: + +- *调试(Debugging)* 通过逐步或逐行地运行代码来发现漏洞和错误。一些编辑器自身带有调试功能,或者可以被自定义添加对特定编程语言的调试功能。 +- *语法高亮(Syntax highlighting)* 为代码添加颜色和文本格式以便阅读。多数编辑器都可以对语法高亮进行自定义。 +- *插件和集成(Extensions and Integrations)* 开发者可以根据自身需要为编辑器添加其原生本不包含的功能。比如,许多开发者需要为代码撰写文档来解释其工作原理,就会安装一个拼写检查插件来检查有没有拼写错误。多数插件都只支持特定的编辑器,多数编辑器也会提供搜索可用插件的方法。 +- *自定义(Customization)* 多数编辑器都是高度可自定义的,每一位开发者都能根据自身需要来自定义自己的开发环境。许多开发者还会编写自己的插件。 + +#### 主流编辑器和 Web 开发插件 + +- [Visual Studio Code](https://code.visualstudio.com/) + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) + - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +- [Atom](https://atom.io/) + - [spell-check](https://atom.io/packages/spell-check) + - [teletype](https://atom.io/packages/teletype) + - [atom-beautify](https://atom.io/packages/atom-beautify) + +### 浏览器 + +另一个关键工具是浏览器。Web 开发者需要用浏览器来观察它们的代码如何在网页上运行,还可以看到编辑器中编写的元素(如 HTML 元素)如何展现在网页上。 + +许多浏览器都提供了*开发者工具*(DevTools),包括一系列有用的功能和信息,用以辅助开发者收集和捕获它们应用程序的重要信息。例如当网页发生错误时,获知错误是何时发生的有助于帮助解决错误,而浏览器 DevTools 就可以被配置来捕获这个信息。 + +#### 主流浏览器和 DevTools + +- [Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium?WT.mc_id=academic-13441-cxa) +- [Chrome](https://developers.google.com/web/tools/chrome-devtools/) +- [Firefox](https://developer.mozilla.org/docs/Tools) + +### 命令行工具(Command Line Tools) + +一些开发者更喜欢使用较少的图形化界面来执行日常任务,因此选择使用命令行。开发代码需要大量的文字输入,一些开发者不喜欢自己在键盘上的工作流被打断,会使用键盘快捷键来切换桌面窗口、切换工作文件、使用工具等。大多数任务都可以通过鼠标完成,而使用命令行的一个好处就是无需再鼠标和键盘之间切换就能完成多数工作。命令行的另一个好处是它们是可配置的,所以你可以保存你的配置并随时修改,还可以将其导入到新的开发设备上。但开发环境毕竟因人而异,有人完全不想用命令行,有人则希望在命令行做所有事,还有一些人两种方式都乐意接受。 + +### 常用命令行选择 + +命令行选择基于你使用的操作系统会有所不同。 + +*💻 表示会预装在对应操作系统上* + +#### Windows + +- [Powershell](https://docs.microsoft.com/powershell/scripting/overview?view=powershell-7?WT.mc_id=academic-13441-cxa) 💻 +- [Command Line](https://docs.microsoft.com/windows-server/administration/windows-commands/windows-commands?WT.mc_id=academic-13441-cxa) (即 CMD) 💻 +- [Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-13441-cxa) +- [mintty](https://mintty.github.io/) + +#### MacOS + +- [Terminal](https://support.apple.com/guide/terminal/open-or-quit-terminal-apd5265185d-f365-44cb-8b09-71a064a42125/mac) 💻 +- [iTerm](https://iterm2.com/) +- [Powershell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-7?WT.mc_id=academic-13441-cxa) + +#### Linux + +- [Bash](https://www.gnu.org/software/bash/manual/html_node/index.html) 💻 +- [KDE Konsole](https://docs.kde.org/trunk5/en/applications/konsole/index.html) +- [Powershell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-7?WT.mc_id=academic-13441-cxa) + +#### 常用命令行工具 + +- [Git](https://git-scm.com/) (💻 <- 在多数操作系统上) +- [NPM](https://www.npmjs.com/) +- [Yarn](https://classic.yarnpkg.com/en/docs/cli/) + +### 文档 + +当一位开发者想要学点新东西,他们基本都会去找文档(Documentation)来学习如何使用。开发者会依靠文档来指引他们如何合理地使用工具和语言,并且从中获取更多关于实现原理的深层知识。 + +#### Web 开发常用文档 + +- [Mozilla Developer Network](https://developer.mozilla.org/docs/Web) +- [Frontend Masters](https://frontendmasters.com/learn/) + +✅ 查一查:既然你已经对 Web 开发者的环境有所了解,何不比较一下其与 Web 设计师的环境的差异? + +--- + +## 🚀 挑战 + +比较一些编程语言。JavaScript 和 Java 相互之间有什么独特的特征?COBOL 和 Go 之间呢? + +## 课后小测 +[课后小测](https://nice-beach-0fe9e9d0f.azurestaticapps.net/quiz/2?loc=zh_cn) + +## 复习 & 自学 + +尝试接触一些不同的编程语言,用一种语言写一行代码,然后用另外两种语言重写这一行代码,你有什么感悟吗? + +## 作业 + +[阅读文档](assignment.zh-cn.md) diff --git a/1-getting-started-lessons/1-intro-to-programming-languages/translations/assignment.zh-cn.md b/1-getting-started-lessons/1-intro-to-programming-languages/translations/assignment.zh-cn.md new file mode 100644 index 00000000..cba5ab16 --- /dev/null +++ b/1-getting-started-lessons/1-intro-to-programming-languages/translations/assignment.zh-cn.md @@ -0,0 +1,11 @@ +# 阅读文档 + +## 说明 + +[MDN 客户端工具文档](https://developer.mozilla.org/zh-CN/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Overview)中介绍了需要 Web 开发者可能需要用到的工具。从中选取三种本节课中没有提到的工具,并说明为什么 Web 开发者需要用到它们,搜索其中一种工具并给出它的文档。不要直接使用 MDN 中给出的示例。 + +## 评价表 + +| 优秀 | 良好 | 尚可进步 | +| --- | --- | -- | +| 解释了 Web 开发者为什么需要这些工具 | 解释了开发者如何使用这些工具,但却没有解释为什么需要它们 | 既没有解释为什么使用这些工具,也没有给出使用它们的方法 | diff --git a/1-getting-started-lessons/2-github-basics/translations/README.zh-cn.md b/1-getting-started-lessons/2-github-basics/translations/README.zh-cn.md new file mode 100644 index 00000000..5a97fc30 --- /dev/null +++ b/1-getting-started-lessons/2-github-basics/translations/README.zh-cn.md @@ -0,0 +1,318 @@ +# GitHub 介绍 + +这节课涵盖了 GitHub 的基础知识,这是一个可以用来存放代码和管理代码变更的平台。 + +![Intro to GitHub](/sketchnotes/webdev101-github.png) +> 涂鸦笔记作者:[Tomomi Imura](https://twitter.com/girlie_mac) + +## 课前小测 +[课前小测](https://nice-beach-0fe9e9d0f.azurestaticapps.net/quiz/3?loc=zh_cn) + +## 大纲 + +这节课我们将会介绍: + +- 在你的电脑上追踪你的工作 +- 与他人协同开发项目 +- 如何参与开源软件贡献 + +### 开始之前 + +开始之前,你需要确保安装了 Git,在终端(译注:即上一节课中介绍的命令行)中输入: +`git --version` + +如果没有安装 Git,请先[下载并安装 Git](https://git-scm.com/downloads)。然后用如下命令设置你的本地 Git 使用者配置文件: +* `git config --global user.name "your-name"` +* `git config --global user.email "your-email"` + +要检查 Git 使用者是否配置完成,可以输入: +`git config --list` + +你还需要一个 GitHub 账户,一个代码编辑器(比如 Visual Studio Code),并且要打开你的终端(或者其他命令行)。 + +如果你没有现成的 Github 账号,去 [github.com](https://github.com/) 创建一个。如果已经有账号,就登录进去并且完成个人资料的配置。 + +✅ GitHub 并不是世界上唯一的代码仓库,但是最知名的。 + +### 课前准备 + +你需要在本地(你的笔记本或 PC)创建一个项目文件夹,还需要在 GitHub 上创建一个公开的仓库(译注:后文会有指引),作为本节课中向其他人的项目提贡献的示例。 + +--- + +## 代码管理 + +假如你在本地有一个代码项目的文件夹,你希望开始使用 Git (版本控制系统)来追踪你的进度。有的人将使用 Git 比作给未来的你自己写一封情书,在数日、数周乃至数月后阅读你的提交信息(commit messages)时,你就可以想起你做出某个决定的原因,或者回滚(rollback)一次变更 —— 前提是你写了不错的提交信息。 + +### 任务:创建仓库并提交代码 + +1. **在 GitHub 上创建仓库**。进入 GitHub.com,在 “Repositories” 标签或者右上角导航栏找到 **New repository** 按钮。 + + 1. 给你的仓库取个名字; + 1. 点击 **Create repository**。 + +1. **前往你的工作目录**。在你的终端中,通过输入下方命令切换到你希望开始追踪的文件夹(即目录): + + ```bash + cd [文件名称/目录路径] + ``` + +1. **初始化一个 Git 仓库**。在你的项目下输入: + + ```bash + git init + ``` + +1. **检查状态**。要检查你的仓库状态,输入: + + ```bash + git status + ``` + + 输出看起来将会像这样: + + ```output + Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + + modified: file.txt + modified: file2.txt + ``` + + 一般来说 `git status` 命令会告诉你诸如什么文件已经 _被保存到_ 仓库内或者有一些你可能想要保留的变更之类的事。 + +1. **追踪所有文件** + 这个操作也叫做暂存(stage)文件或者将文件添加到暂存区(staging area)。 + + ```bash + git add . + ``` + + `git add` 命令加上 `.` 参数将会追踪你的所有文件和变更。 + +1. **只追踪选定的文件** + + ```bash + git add [文件或文件夹名] + ``` + + 如果你不想一次性将所有文件添加到暂存区,可以用这个命令仅仅添加选定的文件。 + +1. **取消所有文件的追踪** + + ```bash + git reset + ``` + + 这条命令可以帮我们取消暂存(unstage)所有文件。 + +1. **取消特定文件的追踪** + + ```bash + git reset [文件或文件夹名] + ``` + + 如果你在下次提交中不希望提交某个已经暂存的文件,可以用这条命令取消它的暂存。 + +1. **保存你的工作**。现在你应该已经将文件添加到了所谓 _暂存区_ 中,这是 Git 追踪你的文件的地方。为了永久地保存变更,你需要 _提交(commit)_ 这些文件。你可以用 `git commit` 命令创建一次 _提交_。一次 _提交_ 代表你的仓库历史中的一个存档点。输入下方命令来创建一次 _提交_: + + ```bash + git commit -m "first commit" + ``` + + 这会提交你暂存区中的所有文件,并带上一条提交信息 —— “first commit”。在以后的提交信息中你会想要加入更加准确的描述,比如一些表示你这次变更的类型的信息。 + +1. **将你的本地仓库连接到 GitHub**。现在 Git 仓库已经能在你的本地机器上正常运作,但是有时候你会想要将你的文件备份到别处,或者希望邀请其他人来一起参与这个仓库的协作。GitHub 就是一个可以满足你要求的好地方。我们此前已经在 GitHub 上创建了一个仓库,现在只需要将本地 Git 仓库连接到 GitHub 就可以了,用 `git remote add` 命令就可以做到。输入下面的命令: + + > 注意,在你输入命令前,需要前往你的 GitHub 仓库而页面来找到仓库的地址(URL),用它来替换命令中 `username/repository_name` 这一部分。 + + ```bash + git remote add origin https://github.com/username/repository_name.git + ``` + + 这会创建一个被命名为 “origin” 的 _远程仓库位置(remote)_,也可以理解为一个连接,指向你早先创建的 GitHub 仓库。 + +1. **将本地文件上传至 GitHub**。现在你已经创建了一个本地仓库和 GitHub 仓库间的 _连接_。让我们通过 `git push` 命令将这些文件上传至 GitHub,就像这样: + + ```bash + git push -u origin main + ``` + + 这样就会把你的提交上传到 GitHub 上你的 “main” 分支了。 + +1. **添加更多的变更**。如果你想继续搞点变更并且将它们传到 GitHub 上,你只需要使用下面的三行命令: + + ```bash + git add . + git commit -m "在这里填写你的提交信息" + git push + ``` + + > 提示,你可能还需要建立一个 `.gitignore` 文件来防止 Git 追踪一些文件并且让它们不会被上传到 GitHub,比如一些你写在本地仓库但并不想放到公开仓库的笔记文件。你可以在 [.gitignore templates](https://github.com/github/gitignore) 找到一些现成的 `.gitignore` 文件模板。 + +#### 提交信息(Commit Messages) + +一条好的 Git 提交信息标题(subject line)可以理解为下方句子的填空: +如果生效,这次提交将会 <你的提交信息标题> + +在标题内,使用祈使语气和现在时态,即使用 “change” 而非 “changed” 或 “changes”。 +同理,在正文(body,可选)中也要用祈使语气和现在时态。正文中需要包括更改的动机,并对比与更改前后行为的变化。确保你说明的是`为什么`,而不是`怎么做`。 + +✅ 花几分钟逛逛 GitHub。你能找到感觉非常棒的提交信息吗?你可以找到非常简洁的提交信息吗?你认为在一条提交信息中,传达什么信息是最重要和有用的? + +### 任务:协作 + +将项目放到 GitHub 的主要原因是让和其他开发者协作开发成为可能。 + +## 和其他人协作开发项目 + +在你的仓库中,前往 `Insights > Community` 来查看你的项目和推荐的社区规范的对比。 + + 这里有一些你可以改进你的项目仓库的点: + - **项目描述(Description)**。你为你的项目添加了描述吗? + - **README**。你有添加 README 吗?GitHub 提供了撰写 [README](https://docs.github.com/articles/about-readmes/) 的指南。 + - **贡献指南(Contributing guideline)**。你的项目是否有[贡献指南](https://docs.github.com/articles/setting-guidelines-for-repository-contributors/)? + - **行为准则(Code of Conduct)**。添加一份 [行为准则](https://docs.github.com/articles/adding-a-code-of-conduct-to-your-project/) + - **开源协议(License)**。或许是最重要的,添加一个[开源协议](https://docs.github.com/articles/adding-a-license-to-a-repository/) + + +所有这些资源对于新加入的团队成员都是很有好处的,这些一般是新的贡献者在看你的代码前会更先去看的东西,以确认你的项目是否值得他们在这上面花费时间。 + +✅ 尽管很多人都准备了 README 文件,但常常会因为太忙而疏于维护。你能找到一个这样的例子吗?注:这里有一些可以[用于创建优秀的 README 的工具](https://www.makeareadme.com/),你或许愿意试试。 + +### 任务:合并(Merge)一些代码 + +贡献文档帮助人们对项目做贡献,其中说明了你正需要什么样的贡献以及贡献的过程该是怎样的。贡献者需要完成一系列步骤才能在 GitHub 上参与你项目的贡献: + + +1. **复刻(Fork)你的仓库**。你可能希望人们 _复刻_ 你的项目。复刻意味着在他们自己的 GitHub 账户下创建你的项目的一份副本。 +1. **克隆(Clone)**。在这里他们将会将项目克隆到他们的本地机器上。 +1. **创建一个分支(Branch)**。你可能希望他们能创建一个 _分支_ 来进行他们的工作。 +1. **集中进行一个区域的修改**。要求贡献者每次贡献只专注做一件事,这样你才更可能 _合并_ 他们的工作。想象一下如果他们修了一个 BUG,添加了一个新特性,然后更新了几个测试,而你其实只想要其中的一个或两个更改时该怎么办? + +✅ 想一想分支在什么情况下对于编写和发布优质的代码非常重要?你能想到哪些使用实例? + +> 注意,要以身作则,对你自己的工作也要创建分支。任何提交都需要在当前“检出(checked out)”的分支上进行。使用 `git status` 来查看是哪一个分支。 + +让我们走一遍贡献者的工作流程。假设贡献者已经 _复刻_ 并 _克隆_ 了仓库,他们在本地机器已经有了一个可以工作的仓库: + +1. **创建一个分支**。使用命令 `git branch` 来创建一个他们希望用来包含计划进行的变更的分支: + + ```bash + git branch [分支名] + ``` + +1. **切换到工作分支**。使用 `git checkout` 来切换到指定分支并且更新工作目录中的文件: + + ```bash + git checkout [分支名] + ``` + +1. **干活**。现在你可以添加你的变更了,别忘了用下面的命令告诉 Git 你所做的工作: + + ```bash + git add . + git commit -m "变更内容" + ``` + + 确保你的提交有一个好名字,不论是对你自己还是你正在帮助的仓库维护者来说都有好处。 + +1. **将你的工作合入 `main` 分支**。在完成工作后,你打算将你的工作和 `main` 分支上的合并。`main` 分支可能同时有了一些新的变更,所以要先用以下命令确保将其更新至最新版本: + + ```bash + git checkout main + git pull + ``` + + 这时你想确认是否存在 _冲突(conflicts)_,即 Git 没法简单地将这些变化 _合入_ 你的分支的情况。为此运行下面的命令: + + ```bash + git checkout [分支名] + git merge main + ``` + + 这将会把所有 `main` 分支上的变更带入到你的分支上。运气好的话一切都会自动搞定,否则 VS Code 会告诉你哪些文件 Git _不确定_ 该如何合并,你只需要手动修改对应文件来解决冲突即可。 + +1. **将你的工作上传至 GitHub**。将你的工作上传至 GitHub 意味着两件事:把你的分支上传到你自己的仓库,然后开启一个 PR(Pull Request): + + ```bash + git push --set-upstream origin [分支名] + ``` + + 上述命令在你复刻的仓库中创建了一个分支。 + +1. **开启一个 PR**。接下来,你打算开启一个 PR。前往 GitHub 上你打算贡献的仓库,你将会看到一个消息条询问你是否想要创建一个新的 PR,点击后即可进入创建 PR 的界面。在这里你可以更改提交标题,给出更准确的描述。创建 PR 后,仓库维护者将会看到这个,如果 _一切顺利_ 的话他们会表示感谢并且 _合并_ 你的 PR。你现在就是一位贡献者啦! :) + +1. **清理**。成功合入一个 PR 后,做做 _清理_ 是一个好习惯。你会想要清理本地和你上传到 GitHub 的分支。首先让我们通过下面的命令来删除本地的分支: + + ```bash + git branch -d [分支名] + ``` + + 接下来请确保前往 GitHub 中对应仓库的页面并删除你刚才上传的分支。 + +`Pull request` 这个术语看起来有些憨,因为你确实打算把你的变更提交到这个项目中。但是在将你的变更合入到项目的 `main` 分支前,维护者(项目拥有者)或者核心团队需要考虑和检查你的变更,这意味着你实际上是在请求(request)维护者的变更决定。 + +Pull Request 是一个可以用来比较和讨论一个分支引入的改动的地方,并有代码审查、评论、集成测试等功能。优质的 Pull Request 严格遵照与提交信息相同的规则。如果你的工作是为了修复一个 Issues 面板中的事项,你可以在 PR 中提及这个事项。具体做法是写一个 `#` 加上事项的编号,比如 `#97`。 + +🤞如果一切顺利,所有的检查都通过后项目拥有者就会将你的变更合入项目🤞 + +使用这个命令即可将 GitHub 上对应远程分支的所有新提交更新到当前本地的工作分支上: + +`git pull` + +## 如何参与开源贡献 + +首先,让我们在 GitHub 上找到一个你感兴趣且愿意参与贡献的仓库(**repo**),你会复制一份它的内容到你的机器上。 + +✅ 一个寻找对入门者友好的仓库的好办法是[搜索 “good-first-issue” 标签](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/)。 + +![Copy a repo locally](../images/clone_repo.png) + +有很多种复制代码的方法,其中一种就是“克隆”仓库的内容,可以用 HTTPS、SSH 或者 GitHub CLI(Command Line Interface)来做到。 + +打开你的终端并且用类似下方的命令来克隆仓库: +`git clone https://github.com/ProjectURL` + +切换到正确的工作目录: +`cd ProjectURL` + +你也可以用 [Codespaces](https://github.com/features/codespaces) 来打开整个项目,这是 GitHub 内置的代码编辑器和云开发环境,或者用 [GitHub Desktop](https://desktop.github.com/)。 + +当然,你也可以直接下载代码的压缩包。 + +### 更多 GitHub 的有趣小知识 + +你可以收藏(star)、关注(watch)和/或复刻(fork)GitHub 上的任何公开仓库。可以在右上角的下拉菜单找到你收藏的仓库,这就像书签一样,但收藏的是代码。 + +项目都有一个事项面板(issue tracker),用于让人们讨论和这个项目相关的事项,事项面板基本都在 GitHub 的 “Issues” 标签页中,偶尔也会指明在其他地方。而 “Pull Requests” 标签页则是人们讨论和检查正在进行的变更的地方。 + +项目也可能会在论坛、邮件列表或者如 Slack、Discord、IRC 这样的聊天频道进行讨论。 + +✅ 看看你新建立的 GitHub 仓库,尝试做一些其他事,比如编辑设置、为仓库增加信息、创建一个 Project(类似看板),有很多可以尝试的东西! + +--- + +## 🚀 挑战 + +找朋友一起编辑彼此的代码。协作创建一个项目、复刻代码、创建分支,然后合并变更。 + +## 课后小测 +[课后小测](https://nice-beach-0fe9e9d0f.azurestaticapps.net/quiz/4?loc=zh_cn) + +## 复习 & 自学 + +了解更多 [如何提交贡献](https://opensource.guide/zh-hans/how-to-contribute/#%E5%A6%82%E4%BD%95%E6%8F%90%E4%BA%A4%E8%B4%A1%E7%8C%AE)。 + +[Git cheatsheet](https://training.github.com/downloads/github-git-cheat-sheet/)。 + +练习,练习,再练习。GitHub 在 [lab.github.com](https://lab.github.com/) 提供了很棒的学习路径: + +- [在 GitHub 的第一周](https://lab.github.com/githubtraining/first-week-on-github) + +你还可以在上面找到更多高阶的实验内容。 + +## 作业 + +完成 [在 GitHub 的第一周](https://lab.github.com/githubtraining/first-week-on-github) diff --git a/1-getting-started-lessons/3-accessibility/translations/README.zh-cn.md b/1-getting-started-lessons/3-accessibility/translations/README.zh-cn.md new file mode 100644 index 00000000..c2e9c18c --- /dev/null +++ b/1-getting-started-lessons/3-accessibility/translations/README.zh-cn.md @@ -0,0 +1,228 @@ +# 创造无障碍网页 + +![All About Accessibility](/sketchnotes/webdev101-a11y.png) +> 涂鸦笔记作者:[Tomomi Imura](https://twitter.com/girlie_mac) + +## 课前小测 +[课前小测](https://nice-beach-0fe9e9d0f.azurestaticapps.net/quiz/5?loc=zh_cn) + +> 互联网的力量存在于其普适性中,让包括残障人士在内的每个人都能访问互联网,是其中不可或缺的一方面。 +> +> —— Timothy Berners-Lee, W3C(万维网联盟)主席、万维网发明者 + +这段引言恰当地强调了创造无障碍网页的重要性。一个无法被所有人顺畅访问的应用按照定义来说是排他的,作为 Web 开发者我们应该始终将无障碍性牢记在心中。从一开始就关注到这一点,可以让你在确保每个人都能顺利访问你创造的页面这一方面做得很优秀。这节课中,你会了解到一些能帮助你确保你的网站资源无障碍的工具,也会学到该怎样将无障碍性牢记在心中。 + +## 相关工具 + +### 屏幕阅读器(Screen readers) + +屏幕阅读器可以说是最知名的无障碍工具之一。 + +[屏幕阅读器](https://zh.wikipedia.org/wiki/%E8%9E%A2%E5%B9%95%E9%96%B1%E8%AE%80%E5%99%A8)在视力障碍者中被广泛使用。就像我们会花时间来确保浏览器正确地传达了我们想要分享的信息, 我们也必须要确保屏幕阅读器也可以达到同样的效果。 + +一般来说,屏幕阅读器会从上到下用语音阅读一个页面。如果你的页面全是文字,阅读器传达信息的方式和浏览器会是基本相似的。当然,网页几乎不会只有文字,还会包含链接、图像、颜色以及其他视觉组件。我们也必须得确保这些信息可以被屏幕阅读器正确阅读。 + +每一位 Web 开发者都需要去熟悉屏幕阅读器。正如上面强调的一样,这是你的用户会用到的一种客户端。就像你很熟悉浏览器的操作一样,你也应该去学习如何操作屏幕阅读器。幸运的是,多数操作系统都内置了屏幕阅读器。 + +一些浏览器也有内置的工具和扩展程序,可以读出文字甚至提供一些基本的导航功能,比如[这些以无障碍为目的的 Edge 浏览器工具](https://support.microsoft.com/zh-cn/microsoft-edge/microsoft-edge-%E4%B8%AD%E7%9A%84%E8%BE%85%E5%8A%A9%E5%8A%9F%E8%83%BD-4c696192-338e-9465-b2cd-bd9b698ad19a)。这些也是重要的无障碍工具,但是工作方式和屏幕阅读器非常不同,所以不该被错误地用来作为屏幕阅读器的测试工具。 + +✅ 试用一下屏幕阅读器和浏览器文本阅读器。在 Windows 系统中默认带有[讲述人](https://support.microsoft.com/zh-cn/windows/%E8%AE%B2%E8%BF%B0%E4%BA%BA%E5%AE%8C%E6%95%B4%E6%8C%87%E5%8D%97-e4397a0d-ef4f-b386-d8ae-c172f109bdb1),也可以安装 [JAWS](https://webaim.org/articles/jaws/) 和 [NVDA](https://www.nvaccess.org/about-nvda/)。在 macOS 和 iOS 中默认装有[旁白](https://support.apple.com/zh-cn/guide/voiceover/welcome/10)。 + +### 缩放(Zoom) + +另一个视力障碍者常用的工具是缩放。最基本的缩放功能是静态缩放,通过 `Control + 加号(+)` 或者降低屏幕分辨率达成。这样的缩放会导致整个页面尺寸被调整,所以使用[响应式设计(responsive design)](https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Responsive_Design)对于提高了缩放级别的情况下的用户体验非常重要。 + +另一类缩放需要借助特定的软件来放大屏幕上的部分区域,就像一个真正的放大镜一样。在 Windows 上内置了[放大镜](https://support.microsoft.com/zh-cn/windows/%E4%BD%BF%E7%94%A8%E6%94%BE%E5%A4%A7%E9%95%9C%E5%8F%AF%E4%BD%BF%E5%B1%8F%E5%B9%95%E4%B8%8A%E7%9A%84%E5%86%85%E5%AE%B9%E6%9B%B4%E6%98%93%E4%BA%8E%E6%9F%A5%E7%9C%8B-414948ba-8b1c-d3bd-8615-0e5e32204198),也可以使用 [ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/) 这样有更多特性和更大用户群体的第三方软件。在 macOS 和 iOS 上则内置了[放大器](https://www.apple.com.cn/accessibility/vision/) + +### 对比度检查器(Contrast checkers) + +我们要谨慎地挑选网页上的配色,以照顾到色盲人群和难以区分低对比度颜色的用户的需要。 + +✅ 用类似 [WCAG's color checker](https://microsoftedge.microsoft.com/addons/detail/wcag-color-contrast-check/idahaggnlnekelhgplklhfpchbfdmkjp?hl=zh-CN) 这样的浏览器插件来检测一下你喜爱的网站的颜色使用情况。你学到了什么? + +### Lighthouse + +在浏览器开发者工具中,你可以找到 Lighthouse 工具。这个工具可以让你一睹一个网站的无障碍性(以及其他性能分析)。尽管并不建议完全依赖 Lighthouse,但将 100% 满分作为一个基础将会很有用。 + +✅ 在你的浏览器开发者工具中找到 Lighthouse 栏,然后用它分析任何一个网站。你发现了什么? + +## Designing for accessibility + +无障碍性(accessibility)是一个相对比较大的主题,为了帮助你更深入地了解,这里许多你可以参考的资源。 + +- [Accessible U - 明尼苏达大学](https://accessibility.umn.edu/your-role/web-developers) + +尽管我们没法在这里涵盖创建一个无障碍网站的方方面面,但下面还是提供了一些你会想要去实践的核心信条。从一开始就设计一个无障碍页面**总是**比回过头来让一个已经存在的页面变得无障碍会更容易。 + +## 不错的展示原则 + +### 使用安全色色板 + +每个人看待世界的方式都不尽相同,当然也包括颜色。当你为你的站点选择一套配色时,应该确保其对所有人都是无障碍的。这里有一个非常棒的[生成安全色色板的工具](http://colorsafe.co/)。 + +✅ 举出一个配色非常糟糕的网站的例子。你认为它糟糕在哪? + +### 正确使用 HTML + +使用 CSS 和 JavaScript 有能力让任何元素看起来在控制效果上是任何一种类型的元素。比如 `` 可以被用来创建出一个 `