左耳听风推荐书单之基础入门

本人看了左耳听风专栏深有所得,整理了一篇程序员需要看的精品书单,以做分享,希望各位看官也有所得,本人写的没有原创的好,想看原创的可以去极客时间看

程序员练级攻略

入门教程
入门教程1:体会编程是什么

  • 与孩子一起学编程
  • Codecademy: Learn Python
  • People Can Program

入门教程2:做一个网页

  • MDN Web开发入门

Python

  • Python编程快速上手
  • Python编程:从入门到实践(优先)

JavaScript

  • MDN JavaScript教程
  • W3Schools JavaScript教程
  • JavaScript全栈教程(廖雪峰)

Linux W3Schools Linux教程

Visual Studio Code

  • Visual Studio Code中文手册

Web编程入门

前端基础
  • MDN CSS文档
  • MDN HTML文档
  • W3Schools JavaScript HTML DOM文档
后端基础
  • Python
  • Node.js
  • PHP (W3Schools PHP教程)

学习要点

  • 学习HTML基本语法
  • 学习CSS如何选中HTML元素并应用基本样式
  • 学习查看网页结构,并动态修改
  • 配置LEMP-Ubuntu/Nginx/PHP/MySQL环境
  • PHP连接本地/远程数据库MySQL

实践项目

  • 做一个Blog或者BBS系统

编程技能Java

编程技巧

代码大全

编程语言

  • Java核心技术(卷1)
  • Head First Java
  • Spring in Action
  • Spring Boot实战

操作系统

  • 鸟哥的Linux私房菜

网络协议

  • MDN HTTP文档

数据库设计

  • 慕课网 数据库设计的那些事
  • MySQL官方文档
  • MySQL必知必会

前端方面

  • 与JavaScript相关的jQuery
  • 与CSS相关的Bootstrap
  • JavaScript的Ajax请求后端的API接口方式
  • JavaScript的Promise模式

字符编码

  • ASCII(关于字符编码,你所需要知道的)
  • Unicode


    ## 编程工具
  • 编程IDE
  • 版本管理工具Git
  • 调试前端工具
  • 数据库设计工具

实践项目

  • 投票系统
    程序员修养
    英文能力
    提问能力

代码修养

  • 重构:改善既有代码的设计
  • 修改代码的艺术
  • 代码整洁之道
  • 程序员的职业素养
  • Code Review
  • Unit Test

安全防范<

软件工程

  • 完美软件:对软件测试的各种幻想
  • Google软件测试之道

程序员练级攻略:基础入门

https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web ,MDN 全称是 Mozilla Developer Network,你可以认为是 Web 方面的官方技术网站。这个教程会带着你建立一个网站。然后,你可以把你的网页发布在 GitHub 上。
https://book.douban.com/subject/26829016/ Python编程
操作系统入门 Linux https://www.w3cschool.cn/linux/
http://www.imkevinyang.com/2010/06/关于字符编码,你所需要知道的.html 你处理中文时有时会发现有乱码出现,此时需要了解 ASCII …
https://github.com/Wisdom/Awesome-Unicode
https://www.owasp.org/images/d/dc/OWASP_Top_10_2017_中文版v1.3.pdf OWASP Top 10 项目 是程序员非常需要关注的最基本的也是最严重的安全问题,现在其已经成了一种标准

当你的系统要上线时,你是不是已经做好上线的准备了?这里有两个…
https://github.com/mtdvio/going-to-production/blob/master/serverside-checklist.md
https://github.com/mtdvio/going-to-production/blob/master/spa-checklist.md
https://www.datadoghq.com/blog/monitoring-101-collecting-data/ 》这是一篇运维方面的入门文章,告诉你最基本的监控线上运行软件的方法和实践。
https://github.com/ryanmcdermott/clean-code-javascript 前面推荐过的《代码整洁之道》一书中的 JavaScript …
https://docs.python-guide.org/ ,这不只是 Python 的编程规范,还是 Python 资源的集散地,强烈推荐。
https://github.com/thedaviddias/Front-End-Checklist ,一个前端开发的 Checklist,其中包括 HTML、CSS 和 JavaScript,还和图片、字体、SEO、性能相关,还包括关一些和安全相关的事项,这个列表真的是太好了。

程序员练级攻略:编程语言

https://book.douban.com/subject/26880667/ Java核心技术·卷 I(原书第10版)
》,这本书本来是 Sun 公司的官方用书,是一本 Java 的入门参考书。对于 Java 初学者来说,是一本非常不错的值得时常翻阅的技术手册。书中有较多地方进行 Java 与 C++ 的比较,因为当时 Java 面世的时候,又被叫作 “C++ Killer”。而我在看这本书的时候,发现书中有很多 C++ 的东西,于是又去学习了 C++。学习 C++ 的时候,发现有很多 C 的东西不懂,又顺着去学习了 C。然后,C -> C++ -> Java 整条线融汇贯通,这对我未来的技术成长有非常大的帮助。
Spring Boot实战 https://book.douban.com/subject/26857423/
Effective Java
Google Guava 库 https://github.com/google/guava
https://book.douban.com/subject/10484692/ Java并发编程实战 》,是一本完美的 Java 并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容。最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。
https://book.douban.com/subject/26740520/Java性能权威指南 作者: 奥克斯 (Scott Oaks) 》。通过学习这本书,你可以比较大程度地提升性能测试的效果。其中包括:使用 JDK 中自带的工具收集 Java 应用的性能数据,理解 JIT 编译器的优缺点,调优 JVM 垃圾收集器以减少对程序的影响,学习管理堆内存和 JVM 原生内存的方法,了解如何最大程度地优化 Java 线程及同步的性能,等等。看完这本书后,如果你还有余力,想了解更多的底层细节,那么,你有必要去读一下《
深入理解Java虚拟机(第2版) 作者: 周志明 https://book.douban.com/subject/24722612/
https://book.douban.com/subject/2130190/ Java编程思想 (第4版) 作者: [美] Bruce Eckel 》,真是一本透着编程思想的书。上面的书让你从微观角度了解 Java,而这本书则可以让你从一个宏观角度了解 Java。这本书和 Java 核心技术的厚度差不多,但这本书的信息密度比较大。所以,读起来是非常耗大脑的,因为它会让你不断地思考。对于想学好 Java 的程序员来说,这是一本必读的书。
https://book.douban.com/subject/26952826/ 精通Spring 4.x 作者: 陈雄华 / 林开雄 / 文建国 》,也是一本很不错的书,就是有点厚,一共有 800 多页,都是干货。我认为其中最不错的是在分析原理,尤其是针对前面提到的 Spring 技术,应用与原理都讲得很透彻,IOC 和 AOP 也分析得很棒,娓娓道来。其对任何一个技术都分析得很细致和全面,不足之处就是内容太多了,所以导致很厚,但这并不影响它是一本不错的工具书。
https://book.douban.com/subject/1052241/设计模式 作者: [美] Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides
Head First 设计模式(中文版)
Program to an ‘interface’, not an 'implementation’
使用者不需要知道数据类型、结构、算法的细节。
使用者不需要知道实现细节,只需要知道提供的接口。
利于抽象、封装,动态绑定,多态。符合面向对象的特质和理念。
Favor ‘object composition’ over 'class inheritance’
继承需要给子类暴露一些父类的设计和实现细节。
父类实现的改变会造成子类也需要改变。
我们以为继承主要是为了代码重用,但实际上在子类中需要重新实现很多父类的方法。
继承更多的应该是为了多态。
至此,如果你把上面的这些知识都融汇贯通的话,那么,你已是一个高级的 Java 程序员了,我保证你已经超过了绝大多数程序员了。基本上来说,你在技术方面是可以进入到一线公司的,而且还不是一般的岗位,至少是高级程序员或是初级架构师的级别了。

C/C++ 语言

不像我出道那个时候,几乎所有的软件都要用 C 语言来写。现在,可能不会有多少人学习 C 语言了,因为一方面有 Java、Python 这样的高级语言为你屏蔽了很多的底层细节,另一方面也有像 Go 语言这样的新兴语言可以让你更容易地写出来也是高性能的软件。但是,我还是想说,C 语言是你必须学习的语言,因为这个世界上绝大多数编程语言都是 C-like 的语言,也是在不同的方面来解决 C 语言的各种问题。这里,我想放个比较武断话——如果你不学 C 语言,你根本没有资格说你是一个合格的程序员!
https://book.douban.com/subject/1139336/ C程序设计语言 作者: (美)Brian W. Kernighan / (美)Dennis M. Ritchie 》。注意,这本书是 C 语言原作者写的,其 C 语言的标准不是我们平时常说的 ANSI 标准,而是原作者的标准,又被叫作 K&R C。但是这本书很轻薄,也简洁,不枯燥,是一本你可以拿着躺在床上看还不会看着看着睡着的书。
https://book.douban.com/subject/2280547/ C语言程序设计现代方法 作者: K. N. King 那本书简真是无敌。我想说,这本书更实用,也够厚,完整覆盖了 C99 标准,习题的质量和水准也比较高。更好的是,探讨了现代编译器的实现,以及和 C++ 的兼容,还揭穿了各种古老的 C 语言的神话和信条……是相当相当干的一本学习 C 语言的书。
https://book.douban.com/subject/2778632/ C陷阱与缺陷
https://coolshell.cn/articles/7992.html C++的坑真的多吗?
https://book.douban.com/subject/25708312/ C++ Primer 中文版(第 5 版) 》,这本书是久负盛名的 C++ 经典教程。书是有点厚,前面 1/3 讲 C 语言,后面讲 C++。C++ 的知识点实在是太多了,而且又有点晦涩。但是你主要就看几个点,一个是面向对象的多态,一个是模板和重载操作符,以及一些 STL 的东西。看看 C++ 是怎么玩泛型和函数式编程的。
如果你想继续研究,你需要看另外两本更为经典的书《
https://book.douban.com/subject/5387403/ Effective C++ 作者: 梅耶 (Scott Meyers)
https://book.douban.com/subject/5908727/ More Effective C++(中文版) 》。 这两本书不厚,但是我读了 10 多年,每过一段时间再读一下,就会发现有更多的收获。这两本书的内容会随着你经历的丰富而变得丰富,这也是对我影响最大的两本书,其中影响最大的不是书中的那些 C++ 的东西,而是作者的思维方式和不断求真的精神,这真是太赞了。
https://book.douban.com/subject/10427315/ 深度探索C++对象模型 学习 C/C++ 都是需要好好了解一下编译器到底干了什么事的。就像 Java 需要了解 JVM 一样,所以,这里还有一本非常非常难啃的书你可以挑战一下》。这本书是非常之经典的,看完后,C++ 对你来说就再也没有什么秘密可言。我以前写过的《https://coolshell.cn/articles/12165.html C++ 对象的内存布局, https://coolshell.cn/articles/12176.html C++ 虚函数表解析

go

https://gobyexample.com/ go入门教程
https://go101.org/article/101.html 是一本专注于Go语法/语义和各种细节的书(Go 1.12 ready)。本书还试图帮助地鼠深入彻底地了解Go。预计本书对初学者和有经验的Go程序员都有帮助。
https://coolshell.cn/articles/8460.html GO 语言简介(上)— 语法
https://coolshell.cn/articles/8489.html GO 语言简介(下)— 特性
https://golang.org/doc/effective_go.html 这篇文章告诉你如何更好地使用 Go 语言,以及 Go 语言中…
https://github.com/avelino/awesome-go 有个内容丰富的 Go 资源列表

程序员练级攻略:理论学科

https://book.douban.com/subject/10432347/算法 作者: Robert Sedgewick / Kevin Wayne 》,是算法领域经典的参考书,不但全面介绍了关于算法和数据结构的必备知识,还给出了每位程序员应知应会的 50 个算法,并提供了实际代码。最不错的是,其深入浅出的算法介绍,让一些比较难的算法也变得容易理解,尤其是书中对红黑树的讲解非常精彩。其中,还有大量的图解,详尽的代码和讲解,也许是最好的数据结构入门图书。不好的是不深,缺乏进一步的算法设计内容,甚至连动态规划都未提及。另外,如果你觉得算法书比较枯燥的话,你可以看看这本有趣的《https://book.douban.com/subject/26979890/ 算法图解
https://book.douban.com/subject/20432061/ 算法导论(原书第3版) 作者: Thomas H.Cormen / Charles E.Leiserson / Ronald L.Rivest / Clifford Stein 。如果说上面这本书偏于实践和工程,而你看完后,对算法和数据结构的兴趣更浓了,那么你可以再看看另一本也是很经典的偏于理论方面的书——《》。虽然其中的一些理论知识在《算法》那本书中也有提过,但《算法导论》这本书更为专业一些,是美国计算机科学本科生的教科书。
https://book.douban.com/subject/3227098/ 编程珠玑 作者: [美] Jon Bentley 》的书,写这本书的人是世界著名计算机科学家乔恩·本特利(Jon Bentley),被誉为影响算法发展的十位大师之一。你可能不认识这个人,但是你知道他的学生有多厉害吗?我例举几个,一个是 Tcl 语言设计者约翰·奥斯德奥特(John Ousterhout),另一个是 Java 语言设计者詹姆斯·高斯林(James Gosling),还有一个是《算法导论》作者之一查尔斯·雷斯尔森(Charles Leiserson),还有好多好多。这本书也是很经典的算法书,其中都是一些非常实际的问题,并以其独有的洞察力和创造力,来引导读者理解并学会解决这些问题的方法,也是一本可以改善你思维方式的书。
https://github.com/haoel/leetcode Leetcode 上做的一些题的代码
算法字典:https://www.wikiwand.com/en/Cycle_detection#/Brent’s_algorithm
https://book.douban.com/subject/1139426/数据结构与算法分析 作者: [美] Mark Allen Weiss
这本书曾被评为 20 世纪顶尖的 30 部计算机著作之一,作者 Mark Allen Weiss 在数据结构和算法分析方面卓有建树,他在数据结构和算法分析等方面的著作尤其畅销,并广受好评,已被世界 500 余所大学用作教材。
https://book.douban.com/subject/1929984/数据库系统概念
它是数据库系统方面的经典教材之一。国际上许多著名大学包括斯坦福大学、耶鲁大学、德克萨斯大学、康奈尔大学、伊利诺伊大学、印度理工学院等都采用本书作为教科书。这本书全面介绍了数据库系统的各种知识,透彻阐释数据库管理的基本概念。不仅讨论了数据库查询语言、模式设计、数据仓库、数据库应用开发、基于对象的数据库和 XML、数据存储和查询、事务管理、数据挖掘与信息检索以及数据库系统体系结构等方面的内容,而且对性能评测标准、性能调整、标准化以及空间与地理数据、事务处理监控等高级应用主题进行了广泛讨论。
https://book.douban.com/subject/3852290/现代操作系统(第3版)
》,这本书是操作系统领域的经典之作,书中集中讨论了操作系统的基本原理,包括进程、线程、存储管理、文件系统、输入 / 输出、死锁等,同时还包含了有关计算机安全、多媒体操作系统、掌上计算机操作系统、微内核、多核处理机上的虚拟机以及操作系统设计等方面的内容。
https://book.douban.com/subject/1391207/计算机网络(第4版)
》,这本书采用了独创的自顶向下方法,即从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合。新版中还增加了无线和移动网络一章,并扩充了对等网络、BGP、MPLS、网络安全、广播选路和因特网编址及转发方面的材料。是一本不可多得的教科书。
https://book.douban.com/subject/1148282/计算机程序的构造和解释
》,这本书也很经典,是 MIT 的计算机科学系的教材。这本书中主要证实了很多程序是怎么构造出来的,以及程序的本质是什么。整本书主要是使用 Scheme/Lisp 语言,从数据抽象、过程抽象、迭代、高阶函数等编程和控制系统复杂性的思想,到数据结构和算法,到编译器 / 解释器、编程语言设计。
https://book.douban.com/subject/3296317/编译原理
》,这本书又叫 " 龙书 ",其全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,本书进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。
这些理论知识可以说是计算机科学这门学科最精华的知识了,认真学习,理解其背后的逻辑和思维方式,会让你受益匪浅
编程题。比如:atoi、strstr、add two nums、括号匹配、字符串乘法、通配符匹配、文件路径简化、Text Justification、反转单词等,这些题的 Edge Case 和 Corner Case 有很多。这些题需要你想清楚了再干,只要你稍有疏忽,就会有几个 case 让你痛不欲生,而且一不小心就会让你的代码写得又臭又长,无法阅读。通过做这些题,可以非常好地训练你对各种情况的考虑,以及你对程序代码组织的掌控(其实就是其中的状态变量)。
https://www.wikiwand.com/en/List_of_algorithms 个网站罗列了非常多的算法,完全可以当成一个算法字典,或是用来开阔眼界

程序员练级攻略:系统知识

https://book.douban.com/subject/5333562/深入理解计算机系统(原书第2版) 作者: (美)Randal E.Bryant /
本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统。从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,你能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。
https://book.douban.com/subject/1788421/ UNIX环境高级编程 作者: W.Richard Stevens / Stephen A.Rago
https://book.douban.com/subject/1500149/ https://book.douban.com/subject/4118577/ UNIX网络编程
https://book.douban.com/subject/1088054/ TCP/IP详解 卷1:协议 作者: [美] W·Richard Stevens
如果你觉得上面这几本经典书比较难啃,你可以试试下面这些通俗易懂的(当然,如果读得懂上面那三本的,下面的这些也就不需要读了)。
https://book.douban.com/subject/4141733/ Linux C编程一站式学习 作者: 宋劲杉
https://book.douban.com/subject/25911735/ TCP/IP网络编程 作者: [韩] 尹圣雨
https://book.douban.com/subject/24737674/ 图解TCP/IP : 第5版 这本书其实并不是只讲了 TCP/IP,应该是叫《计算机网络》.给想快速入门的人看的
http://www.tcpipguide.com/free/index.htm 这本书在豆瓣上的评分 9.2,这里给的链接是这本书的 HTM…
英文免费版的,里面的图画得很精彩。
不需要读 over
https://book.douban.com/subject/25809330/ Linux/UNIX系统编程手册
http://igm.univ-mlv.fr/~yahya/progsys/linux.pdf
https://book.douban.com/subject/25828773/ Linux 系统编程(第二版) 虽然和《Unix 高级环境编程》很像,不过其主要突出的是 Linux 的一些关键技术和相关的系统调用。
关于 TCP 的东西,你还可以看看下面这一系列的文章。
https://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/
https://www.saminiir.com/lets-code-tcp-ip-stack-2-ipv4-icmpv4/
https://blog.csdn.net/haoel
https://blog.csdn.net/haoel/article/details/2886
http://www.kegel.com/c10k.html
http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.html
对于 Web 时代的操作系统而言,对于客户端过来的大量的并发请求,需要创建相应的服务进程或线程。这些进程或线程多了,导致数据拷贝频繁(缓存 I/O、内核将数据拷贝到用户进程空间、阻塞), 进程 / 线程上下文切换消耗大,从而导致资源被耗尽而崩溃。这就是 C10K 问题的本质。了解这个问题,并了解操作系统是如何通过多路复用的技术来解决这个问题的,有助于你了解各种 I/O 和异步模型,这对于你未来的编程和架构能力是相当重要的。

到今天,我们已经学习完了专业编程方面最为重要的三部分内容:编程语言、理论学科和系统知识,我们针对这些内容做个小结。如果想看完我推荐的那些书和知识,并能理解和掌握,我估计怎么也得需要 4-5 年的时间。嗯,是的,就是一个计算机科学系科班出身的程序员需要学习的一些东西。这其中,最重要的是下面这几点。
编程语言。以工业级的 C、C++、Java 这三门语言为主,这三门语言才是真正算得上工业级的编程语言,因为有工业级的标准化组织在控制着这几门语言,而且也有工业级的企业应用。尤其是 Java,还衍生出了大量的企业级架构上的开源生态。你至少需要掌握 C 语言和 Java 语言,这对你以后面对各式各样的编程语言是非常重要的。
此外,还推荐学习 Go 语言,它已成为云计算领域事实上的标准语言,尤其是在 Docker、Kubernetes 等项目中。而且,Go 语言在国内外一些知名公司中有了一定的应用和实践,并且其生态圈也越来越好。
算法和数据结构。这个太重要了,尤其是最基础的算法和数据结构,这是任何一个称职的程序员都需要学习和掌握的。你必需要掌握。
计算机的相关系统。你至少要掌握三个系统的基础知识,一个是操作系统,一个是网络系统,还有一个是数据库系统。它们分别代表着计算机基础构架的三大件——计算、存储、网络。
如果你能够走到这里,把前面的那些知识都了解了(不用精通,因为精通是需要时间和实践来慢慢锤炼出来的,所以,你也不用着急),那么你已经是一个合格的程序员了,而且你的潜力和可能性是非常非常高的。
如果经历过这些比较枯燥的理论知识,而且你还能有热情和成就感,那么我要恭喜你了。因为你已经超过了绝大多数人,而且还是排在上游的比较抢手的程序员了。我相信你至少可以找到年薪 50 万以上的工作了。
但是,往后面走,你需要开始需要术业有专攻了。下面给一些建议的方向。
底层方向:操作系统、文件系统、数据库、网络……
架构方向:分布式系统架构、微服务、DevOps、Cloud Native……
数据方向:大数据、机器学习、人工智能……
前端方向:你对用户体验或是交互更感兴趣,那么你走前端的路吧。
其它方向:比如,安全开发、运维开发、嵌入式开发……

程序员练级攻略:软件设计

六个编程范型将改变你对编程的看法 https://my.oschina.net/editorial-story/blog/890965
斯坦福大学公开课:编程范式 http://open.163.com/special/opencourse/paradigms.html
领域驱动设计 作者: [美] Eric Evans
UNIX编程艺术 作者: [美] Eric S·Raymond
Clean Architecture 作者: [美] Robert C·Martin
https://12factor.net/zh_cn/ 软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件sass
https://medium.com/@DataStax/instagram-engineerings-3-rules-to-a-scalable-cloud-application-architecture-c44afed31406 Instagram Engineering针对可扩展云应用程序架构的3条规则 ,Instagram 工程的三个黄金法则:1)使用稳定可靠的技术(迎接新的技术);2)不要重新发明轮子;3)Keep it very simple。我觉得这三条很不错。其实,Amazon 也有两条工程法则,一个是自动化,一个是简化。
How to Design a Good API & Why it Matters https://www.infoq.com/presentations/effective-api-design
可扩展Web架构的并发编程 http://berb.github.io/diploma-thesis/community/index.html
https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 设计实用RESTful API的最佳实践
https://betimdrenica.wordpress.com/2015/03/09/ideal-rest-api-design/ 理想的REST API设计
https://github.com/interagent/http-api-design
https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md
https://github.com/watson-developer-cloud/api-guidelines
https://opensource.zalando.com/restful-api-guidelines/

你可能感兴趣的:(好文收藏)