Fix a few syntactic issues detected by Codacy
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
A Chinese translation of [TeachYourselfCS](https://teachyourselfcs.com/).
|
A Chinese translation of [TeachYourselfCS](https://teachyourselfcs.com/).
|
||||||
|
|
||||||
# 导航 Navigation
|
## 导航 Navigation
|
||||||
|
|
||||||
* [原网页 Original](https://teachyourselfcs.com/)
|
* [原网页 Original](https://teachyourselfcs.com/)
|
||||||
* [中文翻译 Chinese](TeachYourselfCS-CN.md)
|
* [中文翻译 Chinese](TeachYourselfCS-CN.md)
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
大致按照列出的顺序,借助我们所建议的教材或者视频课程(但是最好二者兼用),学习如下的九门科目。目标是先花100到200个小时学习完每一个科目,然后在你职业生涯中,不时温习其中的精髓🚀。
|
大致按照列出的顺序,借助我们所建议的教材或者视频课程(但是最好二者兼用),学习如下的九门科目。目标是先花100到200个小时学习完每一个科目,然后在你职业生涯中,不时温习其中的精髓🚀。
|
||||||
|
|
||||||
| 科目 | 为何要学? | 最佳书籍 | 最佳视频 |
|
| 科目 | 为何要学? | 最佳书籍 | 最佳视频 |
|
||||||
| --- | --- | --- | --- |
|
|-------------------------------------------|----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
|
||||||
| **[编程](#编程)** | 不要做一个“永远没彻底搞懂”诸如递归等概念的程序员。 | _[《计算机程序的构造和解释》](https://book.douban.com/subject/1148282/)_ | Brian Harvey’s Berkeley CS 61A |
|
| **[编程](#编程)** | 不要做一个“永远没彻底搞懂”诸如递归等概念的程序员。 | _[《计算机程序的构造和解释》](https://book.douban.com/subject/1148282/)_ | Brian Harvey’s Berkeley CS 61A |
|
||||||
| **[计算机架构](#计算机架构)** | 如果你对于计算机如何工作没有具体的概念,那么你所做出的所有高级抽象都是空中楼阁。 | _[《计算机组成与设计》](https://book.douban.com/subject/26604008/)_ | Berkeley CS 61C |
|
| **[计算机架构](#计算机架构)** | 如果你对于计算机如何工作没有具体的概念,那么你所做出的所有高级抽象都是空中楼阁。 | _[《计算机组成与设计》](https://book.douban.com/subject/26604008/)_ | Berkeley CS 61C |
|
||||||
| **[算法与数据结构](#算法和数据结构)** | 如果你不懂得如何使用栈、队列、树、图等常见数据结构,遇到有难度的问题时,你将束手无策。 | _[《算法设计手册》](https://book.douban.com/subject/4048566/)_ | Steven Skiena’s lectures |
|
| **[算法与数据结构](#算法和数据结构)** | 如果你不懂得如何使用栈、队列、树、图等常见数据结构,遇到有难度的问题时,你将束手无策。 | _[《算法设计手册》](https://book.douban.com/subject/4048566/)_ | Steven Skiena’s lectures |
|
||||||
@ -80,7 +80,7 @@ _[《计算机系统要素》](https://book.douban.com/subject/1998341/)_,又
|
|||||||
> 硬件是平台。
|
> 硬件是平台。
|
||||||
>
|
>
|
||||||
> — Mike Acton, Engine Director at Insomniac Games
|
> — Mike Acton, Engine Director at Insomniac Games
|
||||||
([观看他在CppCon上的演说](https://www.youtube.com/watch?v=rX0ItVEVjHc))
|
> ([观看他在CppCon上的演说](https://www.youtube.com/watch?v=rX0ItVEVjHc))
|
||||||
|
|
||||||
### 算法与数据结构
|
### 算法与数据结构
|
||||||
|
|
||||||
@ -171,7 +171,8 @@ _[《Readings in Database Systems》](https://book.douban.com/subject/2256069/)_
|
|||||||
|
|
||||||
对于项目练习,我们建议为诸如COOL的简单教学语言或者你所感兴趣的某个语言的一个子集写一个编译器。如果感觉这样的项目让人生畏,可以先从[Make a Lisp](https://github.com/kanaka/mal)开始,在一步步的指引下完成项目。
|
对于项目练习,我们建议为诸如COOL的简单教学语言或者你所感兴趣的某个语言的一个子集写一个编译器。如果感觉这样的项目让人生畏,可以先从[Make a Lisp](https://github.com/kanaka/mal)开始,在一步步的指引下完成项目。
|
||||||
|
|
||||||
[ ](https://book.douban.com/subject/3296317/) [](https://book.douban.com/subject/10482195/)
|
[](https://book.douban.com/subject/3296317/)
|
||||||
|
[](https://book.douban.com/subject/10482195/)
|
||||||
|
|
||||||
> 不要做一个只写样板代码的程序员。相反,给用户和其他程序员创造工具。从纺织工业和钢铁工业中学习历史教训:你想制造机器和工具,还是操作这些机器?
|
> 不要做一个只写样板代码的程序员。相反,给用户和其他程序员创造工具。从纺织工业和钢铁工业中学习历史教训:你想制造机器和工具,还是操作这些机器?
|
||||||
>
|
>
|
||||||
|
|||||||
@ -14,7 +14,7 @@ This guide is our attempt to definitively answer these questions.
|
|||||||
Study all nine subjects below, in roughly the presented order, using either the suggested textbook or video lecture series, but ideally both. Aim for 100-200 hours of study of each topic, then revisit favorites throughout your career 🚀.
|
Study all nine subjects below, in roughly the presented order, using either the suggested textbook or video lecture series, but ideally both. Aim for 100-200 hours of study of each topic, then revisit favorites throughout your career 🚀.
|
||||||
|
|
||||||
| Subject | Why study? | Best book | Best videos |
|
| Subject | Why study? | Best book | Best videos |
|
||||||
| --- | --- | --- | --- |
|
|---------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|-----------------------------------|
|
||||||
| **[Programming](#programming)** | Don’t be the person who “never quite understood” something like recursion. | _Structure and Interpretation of Computer Programs_ | Brian Harvey’s Berkeley CS 61A |
|
| **[Programming](#programming)** | Don’t be the person who “never quite understood” something like recursion. | _Structure and Interpretation of Computer Programs_ | Brian Harvey’s Berkeley CS 61A |
|
||||||
| **[Computer Architecture](#architecture)** | If you don’t have a solid mental model of how a computer actually works, all of your higher-level abstractions will be brittle. | _Computer Organization and Design_ | Berkeley CS 61C |
|
| **[Computer Architecture](#architecture)** | If you don’t have a solid mental model of how a computer actually works, all of your higher-level abstractions will be brittle. | _Computer Organization and Design_ | Berkeley CS 61C |
|
||||||
| **[Algorithms and Data Structures](#algorithms)** | If you don’t know how to use ubiquitous data structures like stacks, queues, trees, and graphs, you won’t be able to solve hard problems. | _The Algorithm Design Manual_ | Steven Skiena’s lectures |
|
| **[Algorithms and Data Structures](#algorithms)** | If you don’t know how to use ubiquitous data structures like stacks, queues, trees, and graphs, you won’t be able to solve hard problems. | _The Algorithm Design Manual_ | Steven Skiena’s lectures |
|
||||||
@ -74,7 +74,7 @@ Once you feel comfortable with the content of Nand2Tetris, our next suggestion i
|
|||||||
> Hardware is the platform
|
> Hardware is the platform
|
||||||
>
|
>
|
||||||
> — Mike Acton, Engine Director at Insomniac Games
|
> — Mike Acton, Engine Director at Insomniac Games
|
||||||
([watch his CppCon talk](https://www.youtube.com/watch?v=rX0ItVEVjHc))
|
> ([watch his CppCon talk](https://www.youtube.com/watch?v=rX0ItVEVjHc))
|
||||||
|
|
||||||
### Algorithms and Data Structures
|
### Algorithms and Data Structures
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ No matter the choice of textbook or other secondary resources, study of distribu
|
|||||||
|
|
||||||
## Frequently asked questions
|
## Frequently asked questions
|
||||||
|
|
||||||
#### What about AI/graphics/pet-topic-X?
|
### What about AI/graphics/pet-topic-X?
|
||||||
|
|
||||||
We’ve tried to limit our list to computer science topics that we feel _every practicing software engineer_ should know, irrespective of specialty or industry. With this foundation, you’ll be in a much better position to pick up textbooks or papers and learn the core concepts without much guidance. Here are our suggested starting points for a couple of common “electives”:
|
We’ve tried to limit our list to computer science topics that we feel _every practicing software engineer_ should know, irrespective of specialty or industry. With this foundation, you’ll be in a much better position to pick up textbooks or papers and learn the core concepts without much guidance. Here are our suggested starting points for a couple of common “electives”:
|
||||||
|
|
||||||
@ -190,39 +190,39 @@ We’ve tried to limit our list to computer science topics that we feel _every p
|
|||||||
* For machine learning: do Andrew Ng’s Coursera course. Be patient, and make sure you understand the fundamentals before racing off to shiny new topics like deep learning.
|
* For machine learning: do Andrew Ng’s Coursera course. Be patient, and make sure you understand the fundamentals before racing off to shiny new topics like deep learning.
|
||||||
* For computer graphics: work through [Berkeley’s CS 184](http://inst.eecs.berkeley.edu/~cs184/fa12/onlinelectures.html) material, and use [Computer Graphics: Principles and Practice](https://www.amazon.com/Computer-Graphics-Principles-Practice-3rd/dp/0321399528) as a textbook.
|
* For computer graphics: work through [Berkeley’s CS 184](http://inst.eecs.berkeley.edu/~cs184/fa12/onlinelectures.html) material, and use [Computer Graphics: Principles and Practice](https://www.amazon.com/Computer-Graphics-Principles-Practice-3rd/dp/0321399528) as a textbook.
|
||||||
|
|
||||||
#### How strict is the suggested sequencing?
|
### How strict is the suggested sequencing?
|
||||||
|
|
||||||
Realistically, all of these subjects have a significant amount of overlap, and refer to one another cyclically. Take for instance the relationship between discrete math and algorithms: learning math first would help you analyze and understand your algorithms in greater depth, but learning algorithms first would provide greater motivation and context for discrete math. Ideally, you’d revisit both of these topics many times throughout your career.
|
Realistically, all of these subjects have a significant amount of overlap, and refer to one another cyclically. Take for instance the relationship between discrete math and algorithms: learning math first would help you analyze and understand your algorithms in greater depth, but learning algorithms first would provide greater motivation and context for discrete math. Ideally, you’d revisit both of these topics many times throughout your career.
|
||||||
|
|
||||||
As such, our suggested sequencing is mostly there to help you _just get started_… if you have a compelling reason to prefer a different sequence, then go for it. The most significant “pre-requisites” in our opinion are: computer architecture before operating systems or databases, and networking and operating systems before distributed systems.
|
As such, our suggested sequencing is mostly there to help you _just get started_… if you have a compelling reason to prefer a different sequence, then go for it. The most significant “pre-requisites” in our opinion are: computer architecture before operating systems or databases, and networking and operating systems before distributed systems.
|
||||||
|
|
||||||
#### Who is the target audience for this guide?
|
### Who is the target audience for this guide?
|
||||||
|
|
||||||
We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplement your formal education with some self-study. The question of when to embark upon this journey is an entirely personal one, but most people tend to benefit from having some professional experience before diving too deep into CS theory. For instance, we notice that students _love_ learning about database systems if they have already worked with databases professionally, or about computer networking if they’ve worked on a web project or two.
|
We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplement your formal education with some self-study. The question of when to embark upon this journey is an entirely personal one, but most people tend to benefit from having some professional experience before diving too deep into CS theory. For instance, we notice that students _love_ learning about database systems if they have already worked with databases professionally, or about computer networking if they’ve worked on a web project or two.
|
||||||
|
|
||||||
#### How does this compare to Open Source Society or freeCodeCamp curricula?
|
### How does this compare to Open Source Society or freeCodeCamp curricula?
|
||||||
|
|
||||||
The [OSS guide](https://github.com/open-source-society/computer-science) has too many subjects, suggests inferior resources for many of them, and provides no rationale or guidance around why or what aspects of particular courses are valuable. We strove to limit our list of courses to those which you _really should know_ as a software engineer, irrespective of your specialty, and to help you understand why each course is included.
|
The [OSS guide](https://github.com/open-source-society/computer-science) has too many subjects, suggests inferior resources for many of them, and provides no rationale or guidance around why or what aspects of particular courses are valuable. We strove to limit our list of courses to those which you _really should know_ as a software engineer, irrespective of your specialty, and to help you understand why each course is included.
|
||||||
|
|
||||||
freeCodeCamp is focused mostly on programming, not computer science. For why you might want to learn computer science, see [above](#why).
|
freeCodeCamp is focused mostly on programming, not computer science. For why you might want to learn computer science, see [above](#why).
|
||||||
|
|
||||||
#### What about language X?
|
### What about language X?
|
||||||
|
|
||||||
Learning a particular programming language is on a totally different plane to learning about an area of computer science — learning a language is much _easier_ and much _less valuable_. If you already know a couple of languages, we strongly suggest simply following our guide and fitting language acquisition in the gaps, or leaving it for afterwards. If you’ve learned programming well (such as through _Structure and Interpretation of Computer Programs_), and especially if you have learned compilers, it should take you little more than a weekend to learn the essentials of a new language.
|
Learning a particular programming language is on a totally different plane to learning about an area of computer science — learning a language is much _easier_ and much _less valuable_. If you already know a couple of languages, we strongly suggest simply following our guide and fitting language acquisition in the gaps, or leaving it for afterwards. If you’ve learned programming well (such as through _Structure and Interpretation of Computer Programs_), and especially if you have learned compilers, it should take you little more than a weekend to learn the essentials of a new language.
|
||||||
|
|
||||||
#### What about trendy technology X?
|
### What about trendy technology X?
|
||||||
|
|
||||||
No single technology is important enough that learning to use it should be a core part of your education. On the other hand, it’s great that you’re excited to learn about that thing. The trick is to work backwards from the particular technology to the underlying field or concept, and learn that in depth before seeing how your trendy technology fits into the bigger picture.
|
No single technology is important enough that learning to use it should be a core part of your education. On the other hand, it’s great that you’re excited to learn about that thing. The trick is to work backwards from the particular technology to the underlying field or concept, and learn that in depth before seeing how your trendy technology fits into the bigger picture.
|
||||||
|
|
||||||
#### Why are you still recommending the Dragon book?
|
### Why are you still recommending the Dragon book?
|
||||||
|
|
||||||
The Dragon book is still the most complete single resource for compilers. It gets a bad rap, typically for overemphasizing certain topics that are less fashionable to cover in detail these days, such as parsing. The thing is, the book was never intended to be studied cover to cover, only to provide enough material for an instructor to put together a course. Similarly, a self-learner can choose their own adventure through the book, or better yet follow the suggestions that lecturers of public courses have made in their course outlines.
|
The Dragon book is still the most complete single resource for compilers. It gets a bad rap, typically for overemphasizing certain topics that are less fashionable to cover in detail these days, such as parsing. The thing is, the book was never intended to be studied cover to cover, only to provide enough material for an instructor to put together a course. Similarly, a self-learner can choose their own adventure through the book, or better yet follow the suggestions that lecturers of public courses have made in their course outlines.
|
||||||
|
|
||||||
#### How can I get textbooks cheaply?
|
### How can I get textbooks cheaply?
|
||||||
|
|
||||||
Many of the textbooks we suggest are freely available online, thanks to the generosity of their authors. For those that aren’t, we suggest buying used copies of older editions. As a general rule, if there has been more than a couple of editions of a textbook, it’s quite likely that an older edition is perfectly adequate. It’s certainly unlikely that the newest version is 10x better than an older one, even if that’s what the price difference is!
|
Many of the textbooks we suggest are freely available online, thanks to the generosity of their authors. For those that aren’t, we suggest buying used copies of older editions. As a general rule, if there has been more than a couple of editions of a textbook, it’s quite likely that an older edition is perfectly adequate. It’s certainly unlikely that the newest version is 10x better than an older one, even if that’s what the price difference is!
|
||||||
|
|
||||||
#### Who made this?
|
### Who made this?
|
||||||
|
|
||||||
This guide was written by [Ozan Onay](https://twitter.com/oznova_) and [Myles Byrne](https://twitter.com/quackingduck), instructors at the [Bradfield School of Computer Science](https://bradfieldcs.com) in San Francisco. It is based on our experience teaching foundational computer science to hundreds of mostly self-taught engineers and bootcamp grads. Thank you to all of our students for your continued feedback on self-teaching resources. Thanks too to Alek Sharma, Omar Rayward, Ammar Mian and Tyler Bettilyon for feedback on this guide.
|
This guide was written by [Ozan Onay](https://twitter.com/oznova_) and [Myles Byrne](https://twitter.com/quackingduck), instructors at the [Bradfield School of Computer Science](https://bradfieldcs.com) in San Francisco. It is based on our experience teaching foundational computer science to hundreds of mostly self-taught engineers and bootcamp grads. Thank you to all of our students for your continued feedback on self-teaching resources. Thanks too to Alek Sharma, Omar Rayward, Ammar Mian and Tyler Bettilyon for feedback on this guide.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user