From 5fa398d4badac798174e613cea23d796ccf43fc0 Mon Sep 17 00:00:00 2001 From: Zhe Wang Date: Sun, 16 Oct 2022 23:41:52 +0100 Subject: [PATCH] v0.0.1 --- .github/workflows/ci.yml | 16 +++ docs/QA.md | 51 ++++++++ docs/about.md | 16 +++ docs/advanced/advanced.md | 4 + docs/assets/logo.jpeg | Bin 0 -> 49517 bytes docs/books.md | 9 ++ docs/core/computer_science_crash_course.md | 30 +++++ docs/core/core.md | 138 +++++++++++++++++++++ docs/core/core_cn.md | 26 ++++ docs/core/cs50.md | 18 +++ docs/core/cs61a.md | 35 ++++++ docs/core/cs61b.md | 34 +++++ docs/core/leetcode.md | 13 ++ docs/core/mit_missing.md | 21 ++++ docs/core/nand2teris.md | 18 +++ docs/experiences/experience.md | 3 + docs/experiences/framework.md | 4 + docs/experiences/pick_language.md | 4 + docs/index.md | 102 +++++++++++++-- mkdocs.yml | 102 ++++++++++++++- overrides/main.html | 18 +++ overrides/partials/comments.html | 50 ++++++++ readme.md | 10 ++ 23 files changed, 708 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 docs/QA.md create mode 100644 docs/about.md create mode 100644 docs/advanced/advanced.md create mode 100644 docs/assets/logo.jpeg create mode 100644 docs/books.md create mode 100644 docs/core/computer_science_crash_course.md create mode 100644 docs/core/core.md create mode 100644 docs/core/core_cn.md create mode 100644 docs/core/cs50.md create mode 100644 docs/core/cs61a.md create mode 100644 docs/core/cs61b.md create mode 100644 docs/core/leetcode.md create mode 100644 docs/core/mit_missing.md create mode 100644 docs/core/nand2teris.md create mode 100644 docs/experiences/experience.md create mode 100644 docs/experiences/framework.md create mode 100644 docs/experiences/pick_language.md create mode 100644 overrides/main.html create mode 100644 overrides/partials/comments.html diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5d7fc8d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,16 @@ +name: ci +on: + push: + branches: + - master + - main +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.x + - run: pip install mkdocs-material + - run: mkdocs gh-deploy --force diff --git a/docs/QA.md b/docs/QA.md new file mode 100644 index 0000000..b70df6c --- /dev/null +++ b/docs/QA.md @@ -0,0 +1,51 @@ +--- +comments: true +--- + +!!! note + 泛泛还在为这个网站增加内容,如果你有希望了解的话题或者问题,欢迎下方留言! + +# 经典问答 + +## 转码难吗? + +不轻松,但是本站提供了一个 200 小时的学习方案。换句话说,付出 200 小时,你应该可以上岸了。 +不过,任何职业都是一个终身学习的过程,转码成功后还可以按照 [进阶课程](./advanced/advanced.md) +继续学习。当然,参与实际的工作项目以后,会学习到更多本行业的业务相关的知识。 + +## 在哪里下载电子书? + +两个主要的线上书店: + +- [Zlib](https://zh.b-ok.cc/) +- [LibGen](http://libgen.is/) + +## 我应该转前端还是后端还是其他?? + +这个问题比较难回答,[核心课程](./core/core.md) 中涉及的绝大部分内容都跟后端相关性更强,不过 +也有设计前端的技术栈,例如 CSS、JavaScript、HTML 这些。 + +另外,如果建立了良好的计算机框架,我们的选择面还是比较灵活的,前后端还是有一部分重叠内容。 + +## 我应该学习哪门计算机语言? + +如果你已经有了心仪的公司或者行业,你应该去调查一下这个行业的主流编程语言。 + +当然,如果你做完了 [核心课程](./core/core.md) 你应该已经可以比较轻松的写出主流语言: +C、Java、Python、JavaScript。 + +## 转码编译原理需要学吗? + +如果基础比较差,不需要。 + +## 转码需要学操作系统实现吗? + +不是必须的,特别是操作系统实现。 + +## 这个网站是怎么做的? + +使用了如下技术栈: + +- Github +- mkdoc + - Material 主题 \ No newline at end of file diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 0000000..199c27c --- /dev/null +++ b/docs/about.md @@ -0,0 +1,16 @@ +# 关于我 + +泛泛,土木工程本硕博,智力一般,非211本科,985硕博,对计算机有兴趣浓厚。 + +27岁萌生转码想法,28岁开始正式准备,29岁博士毕业,同年入坑量化对冲基金行业,31岁入职头部量化对冲基金高级工程师。 + +网络上大部分流传的转码故事以互联网为主,其他行业,比如量化对冲基金,资源较少。对于量化对冲基金和互联网的开发人员主要的区别在于业务知识,但是业务知识对于转码本身来说没有太多区别。因为对于转码人员,最缺乏的是基础知识和知识框架,这部分无论做什么业务都是必要的。而业务往往是根据自己感兴趣的方向决定的。 + +如果你对泛泛感兴趣:可以在 + +- [知乎](https://www.zhihu.com/people/wangzhetju) +- [小红书](https://www.xiaohongshu.com/user/profile/5d093f22000000001201fe8a?xhsshare=CopyLink&appuid=5d093f22000000001201fe8a&apptime=1666045905) +- [B站](https://space.bilibili.com/414096658/channel/series) +- [油管](https://www.youtube.com/channel/UCewwgakV1SB1IKu8305Hgsg/videos) + +找到我,那里有泛泛的抖机灵、心得体会、视频分享和回答。 \ No newline at end of file diff --git a/docs/advanced/advanced.md b/docs/advanced/advanced.md new file mode 100644 index 0000000..e243ba3 --- /dev/null +++ b/docs/advanced/advanced.md @@ -0,0 +1,4 @@ +# 进阶资源 + +!!! note + 在完成 [核心课程](../core/core.md) 之前不需要考虑这里的内容。 \ No newline at end of file diff --git a/docs/assets/logo.jpeg b/docs/assets/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..671c7f4ed43dab0d3dc8b28d72420abea8da60cc GIT binary patch literal 49517 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 tg= 计算机程序的构造和解释 + +这是来自 UC 伯克利的计算机本科第一门课。这门课与[神书](../books.md)《Structure and Interpretation of Computer Programs》 +同名,当然,这不是巧合。这门课的大部分内容就是根据这本书的内容改编的,相比于阅读原书,这门课配合 +了讲义、视频、作业、练习,让学生更加轻松的吸收 SICP 这本书中的精华。SICP 是每一个计算机学生 +都应该读的好书。 + +这门课作为我们核心课的第二门,主要是帮助我们从**软件抽象**的角度建立框架,课程主要采用友好的 Python 语言 +进行教学,讲解了程序设计的核心概念,比如变量、函数、递归、解释器原理、树的递归、数据抽象、语法、 +迭代器、对象、组合等等。 + +在熟悉 Python 以后,课程引入 Scheme,一种 Lisp 方言来讲解更加本质的编程原理,比如尾递归、 +解释器等等。SICP 原书通篇都是 Scheme 进行讲解的,原书作者解释是因为 Scheme 是最简单的可以 +诠释本书内容的语言。Lisp 固然是极好的语言,学习它对学习编程特别有帮助。 + +最后,课程海世纪了一些关于数据库和 SQL 的内容。 + +这么课程设计的非常好,即平易近人,有让人领略了 SICP 的精华。老师们还开发了一个可视化的 Python +执行解释软件,帮助学生理解程序的[执行原理](https://pythontutor.com/cp/composingprograms.html#code=def%20hi%28%29%3A%0A%20%20%20%20print%28%22hi%22%29%0A%20%20%20%20%0Ahi%28%29&cumulative=true&curInstr=4&mode=display&origin=composingprograms.js&py=3&rawInputLstJSON=%5B%5D)。 + +![20221019233759](https://raw.githubusercontent.com/wangzhe3224/pic_repo/master/images/20221019233759.png) + +所有的语言环境都已经为学生配置了线上版本,就开箱即用,避免了配置环境折磨新萌的问题。 + +所有的 Lab 都是交互式的,一步一步完成的,并且配有详细的解答。 + +- [课程链接](https://cs61a.org/) +- [B站链接](https://www.bilibili.com/video/BV1s3411G7yM?p=99&vd_source=da65fd0f11a3d90e543b48cf26e65fb7) \ No newline at end of file diff --git a/docs/core/cs61b.md b/docs/core/cs61b.md new file mode 100644 index 0000000..c1a6d3f --- /dev/null +++ b/docs/core/cs61b.md @@ -0,0 +1,34 @@ +--- +comments: true +status: new +--- + +# CS61B: Data Structures and Algorithms + +这是一个门中规中矩的数据结构和算法的入门课。实现语言是 Java,但是对于没有 Java 经验的学生来说, +只要进行其他语言的编程,这门课提供的 Java 入门教学足够完成该课程的所有 lab 和作业了。 + +关于 Java 的部分包括: + +- 类和对象 +- 递归 +- 接口和继承 +- 多态 +- 高阶函数 +- 迭代器、异常等等 + +数据结构和算法方面包括: + +- 抽象数据类型 +- 链表、列表 +- 树,B-Tree,红黑树 +- 散列 +- 堆和队列 +- 图和图算法 +- 排序 +- 搜索 +- 压缩算法 +- 软件工程 +- NP 问题 + +[课程链接](https://sp21.datastructur.es/) \ No newline at end of file diff --git a/docs/core/leetcode.md b/docs/core/leetcode.md new file mode 100644 index 0000000..610c7e5 --- /dev/null +++ b/docs/core/leetcode.md @@ -0,0 +1,13 @@ +--- +comments: true +status: new +--- + +# LABULADONG 的算法网站 + +这是网络上流传很广的一个刷题神奇,作者对数据结构和算法,特别是 LeetCode 的刷题套路有独到的见解。 +这个网站提供了一套非常好的刷题面试的框架。 + +对于学完数据结构和算法,比如 [CS61B](cs61b.md) 的同学来说,是最好的练手场所。 + +[课程链接](https://labuladong.github.io/algo/) \ No newline at end of file diff --git a/docs/core/mit_missing.md b/docs/core/mit_missing.md new file mode 100644 index 0000000..84b65bc --- /dev/null +++ b/docs/core/mit_missing.md @@ -0,0 +1,21 @@ +--- +comments: true +status: new +--- + +# MIT-Missing-Semester + +这门课非常有意思。传统的计算机教育为学生提供了非常丰富且深刻的话题,比如数据结构、操作系统、数据库、 +算法等等,但是却忽略了一个程序员的日常生活: + +- shell,bash +- git +- debug +- profiling +- vim +- sed, awk + +这些东西很零散,但是在程序员日常工作中非常有用。 + +- 课程网站: +- 课程视频: diff --git a/docs/core/nand2teris.md b/docs/core/nand2teris.md new file mode 100644 index 0000000..d56d946 --- /dev/null +++ b/docs/core/nand2teris.md @@ -0,0 +1,18 @@ +--- +comments: true +status: new +--- + +# Coursera: Nand2Tetris + +这门课呢,是非常好的计算机引论,他的角度与 [CS61A](cs61a.md) 不同,他是**自底向上**的,而61A +是典型的自顶向下。 + +这门课从布尔逻辑说起,讲到机器语言、计算机组成,再到寄存器、汇编、堆栈运算,最后来到高级语言部分, +讲述基本的编译原理,最后上升到操作系统。 + +**值得注意的是,这门课在讲解上述内容的时候并不是通过说教的方式,而是通过亲手制作的方式。所有的项目** +**跟下来后,你会用自己设计的计算机语言,自制的编译器,编译自己的写的操作系统,运行在自制的 CPU 模拟器上!** + +- [课程链接](https://www.coursera.org/learn/build-a-computer#syllabus) +- [课程网站](https://www.nand2tetris.org/):qa \ No newline at end of file diff --git a/docs/experiences/experience.md b/docs/experiences/experience.md new file mode 100644 index 0000000..29d1e6f --- /dev/null +++ b/docs/experiences/experience.md @@ -0,0 +1,3 @@ +# 转码心得 + +整理记录转码过程中以及转码以后得各种心得体会。 diff --git a/docs/experiences/framework.md b/docs/experiences/framework.md new file mode 100644 index 0000000..db1d10c --- /dev/null +++ b/docs/experiences/framework.md @@ -0,0 +1,4 @@ +# 转码最重要的东西 - 框架 + +!!! note + todo \ No newline at end of file diff --git a/docs/experiences/pick_language.md b/docs/experiences/pick_language.md new file mode 100644 index 0000000..bc6a8ad --- /dev/null +++ b/docs/experiences/pick_language.md @@ -0,0 +1,4 @@ +# 转码如何选择计算机语言? + +!!! note + todo \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 000ea34..d0ba030 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,17 +1,95 @@ -# Welcome to MkDocs +--- +comments: true +status: new +--- -For full documentation visit [mkdocs.org](https://www.mkdocs.org). +??? info "不要错过本站更新哦!如下订阅 ⬇️" + 1. 访问:https://github.com/wangzhe3224/zhuan-ma + 2. 点击 Watch -> Custom -> Release + 3. 泛泛会在每次内容更新后 release! + ![20221021225015](https://raw.githubusercontent.com/wangzhe3224/pic_repo/master/images/20221021225015.png) -## Commands +# 转码路线图 -* `mkdocs new [dir-name]` - Create a new project. -* `mkdocs serve` - Start the live-reloading docs server. -* `mkdocs build` - Build the documentation site. -* `mkdocs -h` - Print help message and exit. +> 注意;这**不是**一个计算机自学指南,这也**不是**一个 Leetcode 刷题指南。 +> 这是一个帮助你转码的路线图,希望通过它帮助你快速实现职业转变,并且为未来的职业打好基础。 -## Project layout +泛泛是不折不扣的大龄转码(27岁开始)人员,一路走来,磕磕绊绊,在这里把经验教训记录下来,希望可以 +帮助有需要的小伙伴。 - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - ... # Other markdown pages, images and other files. +本站的核心目的在于:根据不同的情况,列出最少的学习资料,高效建立正确的计算机知识框架。 + +[精简转码路线图](core/core.md){ .md-button } + +## 问题出在哪里? + +大家怀着不同的目的选择转码,为了兴趣、为了更好的收入、为了家人等等,无论如何既然选择,就应该坚持。 +而且,大家既然选择计算机作为自己未来的职业发展,也说明大家有了转码最重要的东西:**兴趣**。 + +我们应该明确几个事情: + +- 转码**不需要**学习所有计算机本科课程 +- 转码**不仅仅**是刷题 +- 转码的主要敌人: + - 资源太多,无从下手 + - 缺少时间 + - 缺少框架 + +### 资源太多了! + +其实上面这几个问题是相互联系的,我们只需要上网一搜就会发现很多计算机自学的资源合集,比如: + +- [计算机自学指南](https://csdiy.wiki/) +- [Path to a free self-taught education in Computer Science!](https://github.com/ossu/computer-science) +- [The Open Source Computer Science Degree](https://github.com/ForrestKnight/open-source-cs) + +这些资源都非常好,但是太多了!通常涉及计算机科学本科或者研究生的各种课程,就连每一个门类都会存在多种选择。 +这其实对于一个准备转码的人来说并不是一件好事,因为我们并没有概念应该学习那个或者哪一个更加适合自己。 +而且,作为转行想要参加工作的人来说,面面俱到的学习计算机本科的课程并不合理! + +另外,前面提到转码的敌人之一就是时间。如此多的课程、资源,我们怎么可能在一个想对较短的时间做完呢? +如果处理不得当,不仅打击自信心,还会影响我们找工作的进度。 + +这就引出我们的下一个话题:框架。 + +### 框架 + +无论是哪一个行业,参加工作以后都会有一种感觉,就是本科的学习的内容只有一小部分经常出现在工作中, +而大部分知识并不是用来经常使用,而是建立框架的。所谓**框架,就是一个行业思考问题的模式。** + +框架,是转码的人最为缺乏的东西。当开始学习计算机、学习编程的时候,面对我们经常感觉无从下手, +那种感觉就是不知道该从哪里开始动手解决问题, 甚至不知道该问什么问题。其实,我们并不缺乏解决问题的 +手段,比如数据结构、操作系统等等,我们缺少的是一个大局观,即这个问题该从哪里入手?是哪个部分的问题? +是编译错误?还是运行时错误?是内存错误?还是IO错误? + +框架就像是一个拼图的参考图,或者说一个心智模型,我们学习的各种的知识(转行前、转行后)都在无时无刻 +的丰富、拓展这个模型,这个框架。 + +框架对于计算机来说尤其重要,因为计算机科学的[[层状结构]],使得同样的方案出现在计算机的各个层面。 +比如缓存、映射、抽象和封装、设计模式等等,这些概念在数据结构、操作系统、软件工程、数据可设计等 +各个地方不断地出现。 + +### 刷题 + +我们还要提一提关于刷题的事情。诚然,刷题是一个转码非常直接的方式,而且转码面试的(初级岗)的一个 +主要 +网络上流传着非常多很棒的刷题资料,比如: + +- [代码随想录](https://programmercarl.com/) +- [LABULADONG 的算法网站](https://labuladong.gitee.io/algo/) +- [用动画的形式呈现解LeetCode题目的思路](https://github.com/MisterBooo/LeetCodeAnimation) + +其实这些资料之所以优秀,恰恰是因为他们的作者建立了刷题(Leetcode)的框架!这些资料在某个程度上 +也建立了数据结构和算法的框架。这也从一个侧面说明了框架的重要性。 + +但是,刷题并不是转码的全部,特别是在缺乏大框架(软件、硬件、编程基础知识)的时候,盲目刷题并不会 +有效的提升自己的编程能力和工程能力。 + +## 所以,应该怎么办? + +这个路线图,我尽量给出最少的学习资源,帮助我们最大程度的建立编程框架(大局观),为以后漫长的职业 +生涯打好基础;同时,尽可能的迎合面试过程中的需求,最大可能增加面试通几率。 + +计算机科学是个充满魅力的学科,让我们开始吧。 + +[精简转码路线图](core/core.md){ .md-button } \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 0865ec4..de9f13f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -3,5 +3,103 @@ site_author: FunCoder site_description: >- 转码路线图 -repo_name: zhuanma -repo_url: https://github.com/wangzhe3224/zhuanma +repo_name: zhuan-ma +repo_url: https://github.com/wangzhe3224/zhuan-ma + +copyright: Copyright © 2022-present FunCoder + +theme: + logo: assets/logo.jpeg + name: material + language: zh + include_search_page: false + search_index_only: true + plugins: + - meta + features: + # - navigation.instant + # - navigation.expand + # - navigation.sections + # - navigation.tabs + # - navigation.tabs.sticky + # - navigation.indexes + # - toc.integrate + - header.autohide + - navigation.tracking + - navigation.top + - search.highlight + - search.share + - search.suggest + - content.code.annotate + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + primary: light blue + accent: deep purple + toggle: + icon: material/weather-sunny + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: cyan + accent: deep purple + toggle: + icon: material/weather-night + name: Switch to light mode + icon: + repo: fontawesome/brands/github + admonition: + note: octicons/tag-16 + abstract: octicons/checklist-16 + info: octicons/info-16 + tip: octicons/squirrel-16 + success: octicons/check-16 + question: octicons/question-16 + warning: octicons/alert-16 + failure: octicons/x-circle-16 + danger: octicons/zap-16 + bug: octicons/bug-16 + example: octicons/beaker-16 + quote: octicons/quote-16 + + custom_dir: overrides + +markdown_extensions: + - attr_list + - md_in_html + - admonition + - pymdownx.details + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.emoji: + emoji_index: !!python/name:materialx.emoji.twemoji + emoji_generator: !!python/name:materialx.emoji.to_svg + +extra_javascript: + - https://polyfill.io/v3/polyfill.min.js?features=es6 + - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js + +nav: + - 前言: "index.md" + - 核心: + - 核心内容: "core/core.md" + - 计算机科学与技术入门: "core/computer_science_crash_course.md" + - CS61A: "core/cs61a.md" + - CS50: "core/cs50.md" + - CS61B: "core/cs61b.md" + - Nand2Teris: "core/nand2teris.md" + - Leetcode刷题: "core/leetcode.md" + - MIT Missing: "core/mit_missing.md" + - 中文核心内容: "core/core_cn.md" + - 进阶: + - 进阶: 'advanced/advanced.md' + - 转码心得: + - 转码心得: 'experiences/experience.md' + - 转码最重要的东西 - 框架: 'experiences/framework.md' + - 转码如何选择语言?: 'experiences/pick_language.md' + - 转码经典问答: "QA.md" + - 优秀书籍: "books.md" + - 关于我: "about.md" \ No newline at end of file diff --git a/overrides/main.html b/overrides/main.html new file mode 100644 index 0000000..f2445ce --- /dev/null +++ b/overrides/main.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} {% block disqus %} + +{% endblock %} diff --git a/overrides/partials/comments.html b/overrides/partials/comments.html new file mode 100644 index 0000000..fac9f88 --- /dev/null +++ b/overrides/partials/comments.html @@ -0,0 +1,50 @@ +{% if page.meta.comments %} +

{{ lang.t("meta.comments") }}

+ + + + + +{% endif %} \ No newline at end of file diff --git a/readme.md b/readme.md index b82df26..3479fff 100644 --- a/readme.md +++ b/readme.md @@ -1,2 +1,12 @@ # 转码路线图 +> 注意;这**不是**一个计算机自学指南,这也**不是**一个 Leetcode 刷题指南。 +> 这是一个帮助你转码的路线图,希望通过它帮助你快速实现职业转变,并且为未来的职业打好基础。 + +点这里开始:https://wangzhe3224.github.io/zhuan-ma/ + +https://star-history.com/#wangzhe3224/zhuan-ma&Timeline + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=wangzhe3224/zhuan-ma&type=Timeline)](https://star-history.com/#wangzhe3224/zhuan-ma&Timeline) \ No newline at end of file