a

基础知识

本课程的主要内容,是介绍如何使用 Javascript 进行现代 Web 应用的开发 。 主要议题是使用 React 实现单页应用,以及使用 Node.js 实现 RESTful 和 GraphQL web 服务,来支撑 React 应用。 今年还推出了一门全新的的课程——TypeScript。

本课程还包含一些其他的议题,包括如何调试你的应用、如何配置、如何管理运行时环境以及如何使用 NoSQL 数据库。

Prerequisites

【所需基础】

课程参与者需要具有良好的编程技能,基本的网络编程知识和数据库知识,能够掌握 Git 这个版本管理系统的基本使用。 你当然还要有坚持不懈的精神、独立解决问题和搜寻信息的能力。

除此之外,不需要有 JavaScript 或其他课程的相关知识。

Course material

【课程材料】

课程是这么设计的,你应该一次只学习一章节,并在继续学习下一章节之前,把之前的章节都学透彻。

课程中包含练习,练习是穿插其中的,以便之前的学习材料提供足够的信息,来协助你解决每个练习。 你可以边学习课程边做练习,也可以在通读每一章节的内容后,再来完成练习。

课程中很多章节的练习,是构建一个整体应用的一部分,一次只有一小块。但也有一些练习,是开发一个应用的多个模块。

课程是将一个示例应用从小做大的过程,也就是逐章节地对代码进行改进。 因此可能最好的学习方法是紧跟代码的修改进度,并独立地对代码进行小修改。 每一章节、每个步骤的示例代码都可以在 GitHub 上找到。

Taking the course

【参加课程】

本课程共分十个章节,由于历史原因,第一章节被编号为 0。 课程每一章节的内容,大概需要一周(平均 15-20 小时)的学习时间,但完成课程的进度是十分灵活的。

从第 n 章跳转到第 n + 1 章之前,最好对第 n 章的议题有足够的了解。 在教学方法论上,本课程使用了 掌握学习法(mastery learning),其精髓就是让你在完成上一章节足够的练习之后再进入下一章节。

至少要完成没有带星号(*)的练习。 带星号的练习虽然对标你的期末成绩,但跳过它们并不妨碍你做下一章节的必选练习。

完成课程的速度十分自由,练习在 2021 年 1 月 10 日 23:59 之前都可以进行提交。

我们对各章节已提交的练习所用时间做了统计,可以在提交系统中找到。

Grading

【课程成绩】

课程可以当做 3 个学分的短期课程选修,也可以作为 5-9 个学分的完整课程进行学习,这取决于所提交的练习的数量。

学分的数量和最终成绩是由提交练习的数量决定的,也就是说没有星号的练习也会计入你的最终成绩。

如果你想获得大学学分,还有一个必须通过的课程考试。 这次考试不会计入你的成绩。 学分是开放大学所提供的,如果要 申请大学学分,你必须有一个芬兰的社保号码。

一旦你完成了足够的练习后,满足成绩通过的条件,你可以从 提交系统下载课程证书。 获得课程证书,不需要芬兰社保号码。

3 credits

【如何获得3学分】

想要获得三个学分,你必须提交 0-3 章节的所有必修(不带星号)练习。

想要获得大学学分的话,3 个学分的课程也要求通过课程考试。 考试是在 Moodle 上完成的。 一旦已经注册,就可以通过开放大学的课程页面访问 Moodle 系统。

最后一次的考试时间是 2021 年 1 月 10 日。 请注意,这也就是说您最晚必须在 2021 年 1 月 9 日报名参加考试

考试结果可以在考试后 4 周内从提交系统的“我的提交”标签中找到(7 月份的考试可能会较晚)。 记得在提交系统中保存你的学号!

3学分的课程只有及格/不及格两种状态。

如果只想获得课程证书,你不需要参加课程考试或注册公开大学课程。

这 3 学分课程以后可以拓展到 5-9 学分的版本。 如果你从一开始就是朝着 5-9 学分努力的,那就没有必要参加 3 学分的课程考试。

5-7 credits

【如何获得5-7学分】

如果想获得 5-7 学分,学分数和最终成绩是根据第 0-7 章节提交的练习(包括标星练习)总数计算的。

学分和最终成绩计算方法如下表所示:

完成练习数 学分数 成绩
138 7 5
127 6 5
116 5 5
105 5 4
94 5 3
83 5 2
72 5 1

如果想要获得大学学分,5-9 学分课程也要求通过课程考试。 考试是在 Moodle 上完成的。 一旦注册,就可以通过开放大学的课程页面访问 Moodle 系统。

最后一次的考试时间是 2021 年 1 月 10 日。 请注意,这也就是说您最晚必须在 2021 年 1 月 9 日报名参加考试

你必须提交 5 学分的足够的练习数才能参加考试。 实践说明,在提交了刚满足数量的练习之后就立即参加课程考试是十分不明智的。 5-9 学分的考试也是一样,不计入你的成绩。

考试结果可以在考试后 4 周内从提交系统的“我的提交”标签中找到(7 月份的考试可能会较晚)。 记得在提交系统中保存你的学号!

如果只想获得课程证书,你不需要参加课程考试或注册公开大学课程。

8 and 9 credits

【如何获得8-9个学分】

通过提交第 8 章节 GraphQL 的至少 22/26 个练习,就可以获得一个额外的学分。 第 8 章节可以在学完第 5 章节之后的任何时候完成,因为其内容独立于第 6 章节和第 7 章节。

通过提交第 9 章节 TypeScript 的至少 24/27 个练习,就可以获得一个额外的学分。 建议在完成 0-7 章节的所有内容后,再学习第 9 章节。

第 8 和章节第 9 章节的练习不计入 5-7 学分课程的成绩。

How to get your credits

【如何获得学分】

注意,为了获得大学学分,你需要一个芬兰社保号码。

如果你想要获得学分,在 考试提交系统我的提交页面保存好你的赫尔辛基大学的学号。

fullstack content

如果你不是赫尔辛基大学的学生,你可以通过公开大学注册这门课程来获得一个学号。

当你提交了足够的练习、成绩合格、通过考试并经由练习提交系统让我们知晓你已完成课程后,你就会获得学分:

fullstack content

提醒我们后,你在大约四周的时间就能在网页上看到你的成绩了。

Course certificate

【结业证书】

即使你没有因为考试而注册公开大学,只要你完成了结业所需的足够的练习数量,你就可以从 提交系统 中下载课程的结业证书。如果只想要获得结业证书,你不需要提供芬兰社保账号。

Expanding a previously completed course

【拓展之前完成的课程】

如果你已经参与过这门课程,无论是在大学课程还是公开课,你都可以基于之前的课来进行拓展。

Expanding Full stack open 2019

【拓展全栈公开课 2019】

你可以续接你上次学习的进度! 如果您希望重新提交整个章节的内容,请与课程负责人联系。

Expanding other course instance

【拓展其他课程】

你可以用之前已经提交的章节内容来代替本课程的内容。 例如,如果你之前已经完成了 3 个学分的课程,你可以用之前完成的内容来替换这门课程的 0-3 学分的内容。但你只能按顺序替换章节,例如你不能学完了第 1 章节,但想要替换第 0 和第 2 章节的内容。

此外你只能按整个章节进行替换。 例如,如果你已经完成了一个章节 50% 的练习,那你就不能替换,需要重新开始这个章节的课程。

可以利用 提交系统我的提交标签来“学分转换”以前完成的章节。

如果你已经通过了课程考试(不包括 3 学分的课程考试) ,并且正在拓展你的课程,你就不需要再做考一次试了。

Changed since the last year

【与去年相比课程的改变】

  • 对于0~4章节,只有一些很小的改动。
  • 第5d章节,端到端测试 利用了Cypress.io 这个库,这几乎是全新的内容。使用自定义钩子(custom hook)的内容已经从第5章节转移到了第7章节,并添加了一些新的内容。
  • 第6章是讲Redux的,主要介绍了新的基于hook的redux API。
  • 第7章的react-router 也更新为使用hook-api。由于Semantic UI React 缺乏维护,其内容已经被替换为了 MaterialUI library 的内容。
  • 第8章 GraphQL有了较大版本的升级,尤其引入了Apollo Client,它终于有了稳定的基于hook的api。
  • 第9章是全新的内容。

去年的课程内容可以通过https://fullstackopen-2019.github.io/进行访问。

Submitting exercises

【练习提交】

练习是通过 GitHub 提交的,并在提交系统中将练习标记为已完成。

如果要将来自不同章节的练习提交到同一个代码仓库,那么可以使用一些合理的命名规范来命名自己的目录。 您当然可以为每个章节创建一个新的仓库。 如果您使用私有仓库,需要添加 mluukkai 作为 collaborator合作者。

一个章节的练习必须 一次提交完。 也就是说,当你已经提交了一个章节的练习,你就不能再向这个章节提交任何其他的练习内容了。

我们有检测剽窃的系统来检查提交给 GitHub 的练习。 如果通过模型匹配的结果说明你的代码可以在 GitHub 上找到,或者如果多个学生交上了同一个代码,那么这种情况将根据赫尔辛基大学的剽窃政策进行处理。

许多练习都是一点一点地构建一个较大的应用。 在这种情况下,只提交完整的应用就行了。 你可以在每次练习之后都 commit 一下,但这并不是强制性的。

Sign up for the exam

【报名考试】

要获得官方大学的学分,你需要通过开放大学 Moodle 系统的课程考试。 请注意,只有当你有芬兰社保号码才能报名考试!

按照下面的指引进入本课程的 Moodle 系统:

  • 注册开放大学

  • 等待 24 小时,激活你的赫尔辛基大学用户 ID。 您将在第二天收到关于激活流程的说明

  • 登录到公开大学的课程导航页面,你就可以找到 Moodle 系统的注册密钥

  • 用你的赫尔辛基大学用户名和注册密钥登录到 Moodle 系统

请注意!

  • 是否如上面指示的,等待了24小时 呢 ?
  • 您只需要登录 Moodle 系统来参加考试,获取课程证书是不需要登录的。

  • 在 2021 年 1 月 9 日之前,都可以通过开放大学注册参加考试

  • 只有成功注册开放大学课程,并按照说明完成课程的学生才能获得该课程的学分

请注意,您还必须将您的学生 ID 号保存到 提交系统中的“我的提交”视图中。

Full stack project

【全栈项目】

开放大学将提供价值 1-10 学分的全栈项目。

该项目是利用 React 和/或 Node 实现一个应用。 在 React Native 中实现一个移动应用也是有可能的。

学分的数量是根据工作时间来计算的。 一个学分大约是 17.5 小时的工作量。 这项工作会被评级为合格/不合格。

通过结对编程来参与这个项目是可行的。

有关更多信息,请参见 开放大学的网页。

Interview promise

【面试保证】

我们的合作伙伴包括Houston Inc, Terveystalo, ElisaSmartly.io 它们承诺每个完成课程和项目作业,并获得最高学分(9 + 10)的人都可以获得工作面试。

这意味着学生如果愿意的话,可以向这些合作伙伴申请参加工作面试。 本门课程的老师,Matti Luukkainen,将给已经完成课程,并获得最高学分的学生发送面试指引。

但你必须是芬兰居民才能参加面试。

Before you start

【旅途开始之前】

本课程推荐使用 Chrome浏览器,因为它为网页开发提供了最好的开发工具。 另一个替代品是 Firefox 的开发版,它提供了同样的功能特性。

课程练习需要提交到 GitHub,因此必须安装 Git,并且您应该知道如何使用它。 有关 Git 的说明可以在这个教程中找到。

安装一个能够很好支持 web 开发的文本编辑器。这里强烈推荐使用 Visual Studio Code

不要使用 nano、 Notepad 或 Gedit 来进行开发。 NetBeans 对于 web 开发来说也不是很好。 与 Visual Studio Code 相比,它也显得有些重。

同时记得安装 Node.js。 课程材料已经在 10.18 版本中验证过了,所以不要安装任何更老的版本。 安装说明在 这里

Node package manager npm 也会随 Node 安装好了。我们会在课程中频繁地使用npm。Node 同样带来的npx, 我们也会使用到几次。

Typos in the material

【教材中的拼写错误】

如果你发现材料中有一个拼写错误,或者有些东西表达不清楚,又或者只是简单的语法错误,请在 https://github.com/RichardStark/fullstack-hy2020.github.io 向仓库中的教材内容提出 pull request。 例如,这个页面的 markdown 代码可以在仓库中的 https://github.com/RichardStark/fullstack-hy2020.github.io/edit/source/src/content/0/zh/part0a.md 找到

在每个章节的底部是一个内容建议的链接对讲课材料提出修改。 通过点击链接,就以编辑该页面的源码啦~