Skip to content

Commit e5d34e5

Browse files
committed
commit
0 parents  commit e5d34e5

26 files changed

+477
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
presentation.md
2+
.vscode
3+
4+
# 在 macOS 上,文件系统会自动在文件里添加隐藏文件 .DS_Store
5+
# 此文件对 git 项目没有用,所以屏蔽
6+
.DS_Store

Makefile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# make commit ==> 自动提交所有更改
2+
.PHONY : commit
3+
commit :
4+
@echo "这是一个自动提交,当且仅当用来提交全部修改并推送时才使用"
5+
git add .
6+
git commit -m "added opensource article"
7+
8+
# make push ==> 自动推动到 origin 远程库的 master 分支
9+
.PHONY : push
10+
push :
11+
git push origin master
12+
@echo "推送成功"
13+
14+
# cp 代表 commit and push
15+
.PHONY : cp
16+
cp:
17+
make commit
18+
make push

README.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# 程序员修炼宝典
2+
3+
![GitHub pull requests](https://img.shields.io/github/issues-pr/niudai/How-to-be-a-good-programmer)
4+
![GitHub issues](https://img.shields.io/github/issues/niudai/How-to-be-a-good-programmer)
5+
6+
该目录给出了某些电子书的下载链接,他们是**从互联网下载到的**计算机经典教材.。
7+
8+
P.S. URL 里的教材大多数是经典英文教材的`中译本`,由于是扫描版,所以体积较大。我们尽可能地将这些扫描版添加**电子书签**,并进行 `OCR` 处理,方便学习。
9+
10+
**如果有任何侵权行为,请及时联系我们的 contributor 进行处理**
11+
12+
这里提供的教材都是入门教程,诸如高级计算机体系结构、高级网络调优、高级编译原理等类教材,暂不提供。
13+
14+
## 下载说明 📖
15+
16+
为避免版权问题,我们仅提供下载链接。我们会尽量避免提供下载速度非常慢的**百度网盘**下载链接,目前速度非常好的是**坚果云**,所以给出的下载链接基本都是坚果云的链接,无需注册账号,直接点击下载即可。
17+
18+
如果遇到以下问题,请直接提 Issue 进行反馈。
19+
20+
- 链接失效
21+
- 链接中的电子书与本描述文档不符
22+
- 链接中的电子书中有任何标注,如「高亮、批注、注释」
23+
24+
## 电子书链接 🔗
25+
26+
单击以下超链接即可打开网页,然后点击下载即可。
27+
28+
本目录会逐渐完善充实,有需要其他书籍但找不到的朋友,可以提请求,让大家帮你找。
29+
30+
### 数学基础
31+
32+
- [Discrete Mathematics and Its Applications](https://www.jianguoyun.com/p/De62RiwQw8vpBxjW778C)`英文原版` | `彩色版` | `带书签` | `English`
33+
- **简介****离散数学**笼统地介绍了许多与计算机相关的数学领域,离散数学并不是「连续数学」即分析学的对立面,而是一个大杂烩,里面什么都有,排序、图论、自动机理论、编码、逻辑等等都被囊括其中。
34+
- **该书中文版**[《离散数学及其应用》](https://www.jianguoyun.com/p/Db5xgJ0Qw8vpBxjU9b8C)`OCR` | `带书签` | `高清扫描`
35+
36+
- [Operations Research: Applications And Algorithms](https://www.jianguoyun.com/p/DV4BcecQw8vpBxja8b8C)`英文原版` | `彩色版` | `带书签` | `English`
37+
- **简介**:运筹学是一个涉及过程优化的学问,在数学里是一个大的分支,网络流问题是该领域的研究核心,因为诸如指派、线性规划、整数规划、零一规划、拓扑图问题等,都可以全部或者部分地归为网络流问题。这个领域的问题以及结论非常多,建议非此专业的新手,把这门课当作算法课的补充与延伸,不要过于深入。
38+
- **该书中文版****无中文版**
39+
40+
### 计算机基础
41+
42+
- [Computer Systems: A Programmer's Perspective](https://www.jianguoyun.com/p/DZNtLvUQw8vpBxjq9b8C)`非英文原版` | `彩色版` | `带书签` | `English`
43+
- **简介**: 这本书是所有入行计算机的人必看的一本「**内功心法**」,也是名校卡耐基·梅隆大学的计算机专业本科生基础教程,常看常新,海内外享誉无数。这本彩色版有点问题,不是原版,建议看中文版,对照英文。
44+
- **该书中文版**[《深入理解计算机系统》](https://www.jianguoyun.com/p/Db1h9VEQw8vpBxiKu78C)`OCR``带书签` | `高清扫描` | `彩色版`
45+
46+
- [Computer Networking: A Top-Down Approach](https://www.jianguoyun.com/p/DUCtZB4Qw8vpBxja9b8C)`英文扫描版` | `彩色版` | `带凌乱书签` | `English`
47+
- **简介**:这是计算机网络经典教材,采用自顶向下方法写作,适合大多数人。由于这本书还没有开放授权,所以只能找到一个不太清楚的 PDF 英文版,不过该书的中文版很清楚,也有完美书签。另外,该书的[第六版](https://www.jianguoyun.com/p/DZDtkw0Qw8vpBxjd9b8C)已经开放下载,是英文原版。
48+
- **该书中文版**[《计算机网络:自顶向下方法》](https://www.jianguoyun.com/p/DdX2BsgQw8vpBxiBu78C)`OCR``带书签` | `高清扫描`
49+
50+
- [Computer Networks: A Systems Approach](https://www.jianguoyun.com/p/DRwN8d0Qw8vpBxil1sEC)`英文原版` | `彩色版` | `带书签` | `English`
51+
- **简介**:该书与《计算机网络:自顶向下方法》齐名,该书的顺序是自底向上,但是没有花费过多的笔墨介绍物理层。该书对于链路层、网络层、高级网络层、端到端(传输层)的介绍非常详细,可以有助于网络学习者快速建立全局观,而且可以避免沉迷在纷繁的应用层协议里无法自拔。推荐初学者先看这本书。
52+
- **该书中文版**[《计算机网络:系统方法》](https://www.jianguoyun.com/p/DUG0DlkQw8vpBxir1sEC)`OCR``带书签` | `高清扫描`
53+
54+
- [Compilers: Principles, Techniques, and Tools](https://www.jianguoyun.com/p/DUuGuLwQw8vpBxj_7r8C)`OCR``带书签` | `高清扫描` | `English`
55+
- **简介**:这就是大名鼎鼎的编译原理「恐龙书」或「龙书」,另有「虎书」、「鲸书」,但是三本书中唯有龙书最牛
56+
- **该书中文版**[《编译原理》](https://www.jianguoyun.com/p/DYcKwz8Qw8vpBxib778C)`OCR``带书签` | `高清扫描`
57+
58+
- [Operating System Concepts](https://www.jianguoyun.com/p/DSZjOi4Qw8vpBxiL58AC)`英文原版` | `彩色版` | `带书签` | `English`
59+
- **简介**:操作系统有很多的经典教材,这本书是其中之一。
60+
- **该书中文版**[《操作系统概念中文》](https://www.jianguoyun.com/p/DQmmdU0Qw8vpBxjS9b8C)`OCR``带书签` | `高清扫描`
61+
62+
- [Algorithms](https://www.jianguoyun.com/p/DbNnXs4Qw8vpBxii8L8C)`英文原版` | `彩色版` | `带书签` | `English`
63+
- **简介**:这本就是大名鼎鼎的「**算法4**」,这本书比《算法导论》简单点,但是学起来更顺手。
64+
- **该书中文版**[《算法》](https://www.jianguoyun.com/p/DT3Yb9MQw8vpBxjQ9b8C)`OCR``带书签` | `高清扫描`
65+
66+
- [Introduction to Algorithms](https://www.jianguoyun.com/p/DXRAqz8Qw8vpBxixwcAC)`英文原版` | `彩色版` | `带书签` | `English`
67+
- **简介**:算法导论是算法学习者必备的一本书,内容深度、广度都很大,是进阶选手、基础比较高的学习者所必看的一本算法书。该书给出的都是伪代码,因此比较适合理解原理。
68+
- **该书中文版**[《算法导论》](https://www.jianguoyun.com/p/DXcUigkQw8vpBxj3wcAC)`OCR``带书签` | `高清扫描`
69+
70+
- [Computer Organization and Design: The Hardware/Software Interface](https://www.jianguoyun.com/p/DUfuk3kQw8vpBxj2tsAC)`英文原版` | `彩色版` | `带书签` | `English`
71+
- **简介**:这本书是**计算机原理**界的大牛 Patterson, David A. 的著作,此人是计算机原理界的大佬,更是计算机体系结构(也就是 CPU 原理)的执牛耳者,著名的《计算机体系结构:量化研究方法》也是他的作品。
72+
- **该书中文版**[《计算机组成与设计:硬件/软件接口》](https://www.jianguoyun.com/p/DbBUjXwQw8vpBxiVt8AC)`OCR``带书签` | `高清扫描`
73+
74+
### UNIX & Linux
75+
76+
- [Linux Kernel Development](https://www.jianguoyun.com/p/DY_KQF4Qw8vpBxil8r8C)`英文原版` | `彩色版` | `带书签` | `English`
77+
- **简介**:内核开发比较硬,可以参阅。
78+
- **该书中文版**[《Linux 内核设计与实现》](https://www.jianguoyun.com/p/DdSPIZ8Qw8vpBxjNtcAC)`OCR``带书签` | `次高清扫描`
79+
80+
- [Harley Hahn's Guide to Unix and Linux](https://www.jianguoyun.com/p/Dfhu0twQw8vpBxiI878C)`英文原版` | `彩色版` | `带书签` | `English`
81+
- **简介**:这本书的作者哈雷·哈恩以幽默风趣的口吻讲述了 UNIX / Linux 的前世今生以及常用命令的由来、用法,这本书是入门 UNIX 世界的必读之书,假如你是一个对 UNIX 世界一无所知,只会用 Windows 的小白,那么这本书极其适合你。可惜的是,这本书的中文版绝版了;本书中文版被命名为 《Unix & Linux 大学教程》,实在让人摸不着头脑。
82+
- **该书中文版**[《Unix & Linux 大学教程》](https://www.jianguoyun.com/p/DaKwaxkQw8vpBxic878C)`OCR``带书签` | `次高清扫描`
83+
84+
## 一键下载上述所有电子书
85+
86+
对于想收集起这些电子书以供日常翻阅的学习者,可单击此[链接](https://www.jianguoyun.com/p/DZFIE0YQw8vpBxi21sEC)下载全部电子书。
87+
88+
89+
## 工具篇
90+
91+
- 融入编程地球村:**[Github](doc/tools/tool_github.md)****[StackOverFlow](doc/tools/tool_stackoverflow.md)**
92+
93+
## 个人项目篇
94+
95+
- **[搭建自己的技术博客](doc/projects/project_blog.md)**
96+
- **[如何参与开源项目](doc/projects/project_opensource.md)**
97+
98+
## 个人修养篇
99+
100+
- **[如何学习英文, 融入英文世界](doc/abilities/ability_english.md)**
101+
- **[观念的转变: 学不如做, 实例驱动](doc/abilities/ability_task_driven.md)**.
102+
- **[学会输出知识, 尝试写文章](doc/abilities/ability_articles.md)**
103+
104+
## 工具篇
105+
106+
- [Git学习](doc/tools/tool_git.md)
107+
- [命令行/快捷键学习](doc/tools/tool_command.md)
108+
109+
## 习惯篇
110+
111+
- [电脑管理篇](https://www.zhihu.com/people/niu-dai-68-44/answers/by_votes) - 维护一个健康的电脑环境
112+
- [代码风格篇](doc/habits/habit_checkstyle.md) - 写出优雅代码
113+
- [视野篇](doc/habits/habit_know_how.md) - 获取更广视野

doc/abilities/ability_articles.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## 知识输入与输出
2+
3+
我不知道大家发现没, 当你学习一个东西的时候, 如果学完马上用语言讲给别人听, 你会学的更好, 而且会发现新问题.
4+
5+
很多学习理论都指出, 知识的学习, 输入固然重要, 输出更为重要.
6+
7+
输入就是学习别人的知识, 输出就是把自己学会的知识用文字, 语言的形式表达出来, 很多人的学习, 只有输入, 没有输出, 这样的学习肯定是不行的.
8+
9+
几乎所有优秀的程序员, 都有攥写技术文章的习惯, 很多时候, 并不是他们什么都懂, 而是他们刚学会了什么, 然后就围绕着这个刚学会的东西, 用自己的语言讲出来, 久而久之, 就会被别人觉得是大牛, 但是他和你的区别, 有可能仅仅是是否输出的区别.
10+
11+
那么我建议所有计算机学习者, 都要有写技术文章/读书笔记的习惯, 比如像我, 我一般就直接将自己的技术文章发表在知乎专栏上, 大家也可以发表在自己的个人主页, 其他平台上, 攥写技术文章也可以很好地增加面试官对你的好感.
12+
13+
写技术文章的时候, 最好用`MarkDown`哦, 程序员是不需要用`Word`这种东西的, 我们的内容是要方便发表在网站上, `Word`不能直接在网站里显示, 而`MarkDown`可以轻易地转换成`html`格式文件, 在浏览器中显示.
14+
15+
我平时写文章, 就在VScode里写Markdown, 然后导入到知乎专栏里, 大家也可以试试.

doc/abilities/ability_english.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
## 学和用 - 英文修炼法
2+
<hr>
3+
4+
你从小学就开始学英语, 一直学到大学, 不管你的水平是怎么样, 你一定思考过一个问题: "学英语到底有啥用?"
5+
6+
尤其是那些英语学的不太好的同学们, 我曾听过很多论调, 说中国人学啥英语, 又不出国, 也用不上, 可是真正到用上英语的时候, 他们又说他们看不懂.
7+
8+
这个编程世界的主流语言是英语, 这个我们必须承认, 最大的开源社区是英文, 最大的编程问答社区是英文, 超过95%的框架, 技术文档默认语言是英语.
9+
10+
这篇文章面向的读者, 主要是那些目前英语水平不好, 读各种英文资料吃力, 但是又深感英文重要的那些人.
11+
12+
在适应英文世界的初期, 首先我们要在工具和社区上做出改变:
13+
14+
- 搜索编程类问题时, 放弃中文搜索引擎(尤其是百度), 改用英文搜索引擎, 国内有 bing 国际版, 科学上网可行的话, 用 Google.
15+
16+
- 多进入英文编程社区活动, 比如 Github, 它本身是个英文社区, 如果你经常逛的话, 自然就熟了.
17+
18+
- 学框架和技术的时候, 养成上官网看文档和教程的习惯, 文档就是 Doc, 一般有两种, Reference Doc 和 API Doc, Reference Doc就是教你怎么用, 而 API doc 就是一个详细的 API 文档, 更加细致, 类似于字典, 供查阅.
19+
20+
接下来, 我们要处理一个很现实的问题, 在融入英语世界的前期, 可能会出现啥也看不懂的局面, 如何破解这一局面?
21+
22+
我推荐在前期, 使用 Google 网页翻译, 分屏操作.
23+
24+
什么是分屏?
25+
26+
分屏就是这样:
27+
28+
![Image](../../img/ScreenSplit.png)
29+
30+
左边英文, 右边中文, 对照的看, 然后词汇量实在感人的话, 可以把生词记一记, 这样有中文辅助的看, 相当于给你一个拐棍, 等你英语好起来了, 就可以不看右边的了.
31+
32+
分屏快捷键之类的, 自己去查吧.
33+
34+
即便你英语可能是一个不到四级的水平, 但这样做的话, 可能不到半年你就熟练了.
35+
36+
学英语最佳方法就是学以致用, 现在学习编程的时候, 正好可以用英语了, 这不是正好吗?

doc/abilities/ability_task_driven.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
## 实例驱动学习
2+
3+
在知识爆炸的年代, 想成为一个好的程序员, 要具备这样一个精神:
4+
5+
**开发者精神**
6+
7+
>开发者精神是指, 从学习编程第一天起, 你的目标, 你所做的事, 永远不是以`要学会XX`为目标, 而是以`开发出XX`为目标, 深刻意识到你学习的一切, 最终是为了你的开发而服务的。
8+
9+
而开发者精神的反面则是`学生气`:
10+
11+
**学生气**
12+
13+
>从学习编程的第一天起, 就把自己当学生, 上课听讲记笔记为第一位, 记忆知识点为第一位, 买教材读教材为第一位, 追求`学会XX`, 而不是`用它开发出XX`
14+
15+
我们举个例子, 假如你要学习Java,`学生气`的学生行为模式:
16+
17+
读教材, 听课, 记笔记, 追求把这个语言的每个知识点都记得很清楚, 追求一种"内功"的修炼, 在这个过程中, 从来不想着用它去"创造"什么. 在学习的第一天起, 他给自己定下了一个目标:
18+
19+
"我这个学期一定要把这个语言的基础打牢, 最后在考试中取得高分, 并且为以后的学习提供更坚实的基础."
20+
21+
那么具有`开发者精神`的人会这样做:
22+
23+
先大体了解一下Java语言在哪些领域比较强势, 做一个简单的调研, 得出了Java在Web领域很强势这一个信号, 于是在学习Java的第一天起, 他就给自己定下了一个目标:
24+
25+
"我要在半年内通过学习Java, 运用Java做出一个中小型的, 基于Web的企业管理后台"
26+
27+
这两种人, 起点都一样, 都是`完全不会Java`, 但是最后的结果往往是, 后者无论是知识熟练度还是实用性都会超过前者, 而且整个学习过程会有源源不断地动力.
28+
29+
`夯实基础`这个目标, 其实是空洞的, 什么叫做夯实? 什么叫做基础? 而且就算你真的夯实了基础, 你也极有可能陷入一种`虚无感`中, 因为你的所有知识, 都会遗忘.
30+
31+
这就是为什么很多计算机专业学生很爱问的一个问题:
32+
33+
"学了这么多知识, 忘了怎么办?"
34+
35+
如果你具备`开发者精神`, 那么你根本不会理会这个问题, 因为, 你开发出的东西, 你做出的产品, 它就是永久存在在这个世界上的, 你的成就感来源于真实的, 具体的, 可持久延续的项目中, 而不是来源于"我学会了什么".
36+
37+
我们一定要明白:
38+
39+
一切不谈成就感, 不谈反馈的学习劝导, 都是在耍流氓
40+
41+
既然我们想获得反馈, 那么一个很现实的建议就是, 在Github上创建你的第一个开源代码仓库, 长期地, 稳定地commit, 当然, 至于这个仓库到底是干啥的, 这个因人而异, 有可能是你自己开发的一个VScode插件, 有可能是你自己写的读书笔记, 在这个不断地commit的过程中, 感受你的代码仓库不断增长不断完善的过程中, 你会获得一个比较持久的反馈和成就感, 一旦有了反馈和成就感, 那么你的学习动力就会一直保持, 也可以从学习中获得快乐.
42+
43+
**记住, 你不是学生, 你是开发者.**
44+

doc/habits/habit_checkstyle.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# 代码风格篇
2+
3+
## CheckStyle工具
4+
5+
现在几乎所有主流语言都有相应的代码风格检查工具, 一般已IDE或Editor的插件或扩展形式给出, 比如, 我写Java, 那么一些大公司就有关于这个语言的一些风格规范, 我只需这样(以VSCode为例):
6+
7+
在插件市场搜索 `Checkstyle for Java`:
8+
9+
![Checkstyle](https://i.postimg.cc/0NvsL3qd/youtube.png)
10+
11+
## 设计模式
12+
13+
设计模式并不是针对任何一种语言, 而是一种用编程语言描述现实世界问题广泛采用的各种模式, 比如, 观察者模式, 工厂模式, 依赖注入模式等.
14+
15+
好的设计模式, 是好代码的保证, 只有先学会了设计模式, 才能在软件设计中游刃有余, 而且更现实的问题是, 现在很多框架, 比如Spring, Angular等, 都充斥了大量的设计模式, 比如`Factory Pattern`, `Dependency Injection Pattern`, 你必须理解这些设计模式, 你才能理解这个框架.
16+
17+
那么关于设计模式, 我这里推荐两个youtube教程, 这两个教程也是当年小岱学的时候, 靠这个入门的, 讲的很好, 分别是:
18+
19+
[Derek Banas 设计模式视频教程](https://www.youtube.com/watch?v=vNHpsC5ng_E&list=PLF206E906175C7E07)
20+
21+
[Christopher Okhravi 设计模式教程](https://www.youtube.com/channel/UCbF-4yQQAWw-UnuCd2Azfzg
22+
)
23+
24+
个人认为设计模式没有必要买本教材, 结合视频和技术文章, 就足以理解和运用.
25+
26+
## 小习惯
27+
28+
1. 不要嫌变量名长, 最好可以直接通过变量名推测变量的作用.
29+
2. 重复出现的代码, 封装成独立的类或函数.
30+
3. 提前降低代码的耦合度, 不同作用, 不同类别的代码, 不要混在一起, 最好分成独立的文件
31+
4. 将代码进行业务分层, 比如在Web开发中, 有数据层, 服务层, DTO层, Controller层, 渲染层等, 只有将层次分开了, 才能获得足够的可拓展性, 不然代码多了你就全乱了.
32+
5. 用良好的设计模式去"设计"软件, 在执行一些算法的时候, 可以想一想它的时空复杂度, 想一想怎么可以让它执行地更快.

0 commit comments

Comments
 (0)