极客时间-左耳听风-程序员攻略-编程语言
程序员练级攻略:编程语言
0x1 前言
编程语言
JAVA > C\C++ > Go:Go 语言、Docker 和新技术
理论学科
系统知识
系统知识是理论知识的工程实践,这里面有很多很多的细节。比如像 Unix/Linux、TCP/IP、C10K 挑战等这样专业的系统知识。这些知识是你能不能把理论应用到实际项目当中,能不能搞定实际问题的重要知识。
0x2 Java
入门级的书:
- 《Java 核心技术:卷 1 基础知识》,这本书本来是 Sun 公司的官方用书,是一本 Java 的入门参考书。
- 有了上述的入门后,Java 的 Spring 框架是你玩 Java 所无法回避的东西,所以接下来是两本 Spring 相关的书,《Spring 实战》和《Spring Boot 实战》。前者是传统的 Spring,后者是新式的微服务的 Spring。如果你只想看一本的话,那么就看后者吧。
进阶级别:
- 如何编写高效的代码《Effective Java》(注意,这里我给的引用是第三版的,也是 2017 年末出版的书)Effective 这种书基本上都是各种经验之谈。
- Google Guava 库 ,这个库不但是 JDK 的升级库,其中有如:集合(collections)、缓存(caching)、原生类型支持(primitives support)、并发库(concurrency libraries)、通用注解(common annotations)、字符串处理(string processing)、I/O 等库,其还是 Effective Java 这本书中的那些经验的实践代表。
- 《Java 并发编程实战》,是一本完美的 Java 并发参考手册。
- 如何优化 Java 的性能,《Java 性能权威指南》。
- 底层细节《深入理解 Java 虚拟机》。
- 《Java 编程思想》,真是一本透着编程思想的书。上面的书让你从微观角度了解 Java,而这本书则可以让你从一个宏观角度了解 Java。这本书和 Java 核心技术的厚度差不多,但这本书的信息密度比较大。所以,读起来是非常耗大脑的,因为它会让你不断地思考。对于想学好 Java 的程序员来说,这是一本必读的书。
- 《精通 Spring 4.x》,一共有 800 多页,认为其中最不错的是在分析原理,不足之处就是内容太多了,所以导致很厚,但这并不影响它是一本不错的工具书。
面向对象的设计模式
遵守两个原则:
- Program to an ‘interface’, not an 'implementation’
- 使用者不需要知道数据类型、结构、算法的细节。
- 使用者不需要知道实现细节,只需要知道提供的接口。
- 利于抽象、封装,动态绑定,多态。符合面向对象的特质和理念。
- Favor ‘object composition’ over 'class inheritance’
- 继承需要给子类暴露一些父类的设计和实现细节。
- 父类实现的改变会造成子类也需要改变。
- 我们以为继承主要是为了代码重用,但实际上在子类中需要重新实现很多父类的方法。
- 继承更多的应该是为了多态。
0x3 C/C++
- 圣经级的教科书《C 程序设计语言》
- 非常经典的 C 语言的书《C 语言程序设计现代方法》
要了解C语言中的坑
- 《C 陷阱与缺陷》
C++ 是目前世界上范式最多的语言了,其做得最好的范式就是 " 泛型编程 ",这在静态语言中,是绝对地划时代的一个事。
- “C++ 的坑真的多吗?”
- 《C++ Primer 中文版》,主要就看几个点,一个是面向对象的多态,一个是模板和重载操作符,以及一些 STL 的东西。看看 C++ 是怎么玩泛型和函数式编程的。
- 《Effective C++》和《More Effective C++》。
- 《深度探索 C++ 对象模型》学习 C/C++ 都是需要好好了解一下编译器到底干了什么事的。就像 Java 需要了解 JVM 一样。
- 《C++ 虚函数表解析》,还有《C++ 对象内存布局》属于这个范畴。
- C++ FAQ (中文版)
0x4 GO
C 语言太原始了,C++ 太复杂了,Go 语言是不二之选。有了 C/C++ 的功底,学习 Go 语言非常简单。
- Go by Example 入门教程。
- Go 101 是一个很不错的在线电子书。
- The Go Programming Language
- “GO 语言简介(上)- 语法” 和 “GO 语言简介(下)- 特性”)。
- Effective Go
- Go 语言最突出之处是并发编程,Unix 老牌黑客罗勃·派克(Rob Pike)在 Google I/O 上的两个分享,可以让你学习到一些并发编程的模式。
- 内容丰富的 Go 资源列表 Awesome Go