-->

左耳听风_074_73_程序员练级攻略编程语言

你好,我是陈浩网名做尔德house.为了进入专业的编程领域,我们需要认真的学习。

以下三个方面的知识。

那第一呢就是编程语言,你需要学习CC加加和java这三个工业级的编程语言。

那为什么说他们是工业级呢?那主要呢是因为c一和CI加的语言规范都由ISO标准化过,而且呢都有工业界的厂商组成的标准化委员会来制定工业标准。

那次要原因呢,就是他们已经在业界应用于许多重要的生产环境中。

那c语言啊就不用多说了。

现在这个世界上几乎所有重要的软件都跟c有直接和间接的关系,包括操作系统网络,还有硬件驱动啊等等。

说的霸气一点,这个世界啊就是在c语言之上运行的。

而对于c加加来说,现在主流的浏览器啊数据库,还有微软的office套件,还有主流的图形界面,著名的游戏引擎等等,都是c加加来编写的。

而且很多公司啊都用c加加来开发核心架构,比如说google、腾讯,还有百度和阿里云等等。

而金融和电商公司啊是广泛的使用java语言。

因为java的好处太多了,代码的稳定性是超过c和c加加的。

而生产力啊远超c和c加加,有了JVM,就可以轻松的跨平台,做代码优化,做AOP和LC.这样的高级技术。

以spring为首的有庞大的社区,开发的高质量的各种轮子,让你只需要关注业务是能够快速搭建企业级应用的不二之选。

此外呢我还推荐学习go语言,一方面go语言现在很受关注,它是取代c一和CI加的另一门有潜力的语言。

C语言太原始,CI加太复杂了,而java太高级了,所以go语言就在这个夹缝中出现了。

那这门语言啊已经十多年了,它已经成为云计算领域事实上的标准语言啊,尤其是在docker和cuper、 natice等项目中,go语言社区正在不断的从java社区以至各种java的轮子过来。

所以go社区啊现在也很不错。

如果你要写一些pass层的应用,那go语言会比c和c加加更好。

目前和java有一拼,而且go语言在国内外一些知名公司中啊,已经有了一定的应用和实践,所以是可以学习的那这里呢我推荐go语言,docker核新技术一文。

此外,购语言的语法特别简单,有了c和c加加的基础,学习购语言的成本基本为零。

那除了编程语言啊,你要学习的第二个方面是理论学科,你需要学习一下算法、数据结构,还有网络模型和计算机原理等计算机科学专业需要学习的知识。

那为什么要学好这些理论上的知识呢?那其一呢就是这些理论知识可以说是计算机科学这门学科最精华的知识了。

要说的大一点呢,这些是人类智慧的精华。

你只要想成为高手,那这些东西就是你必须要掌握和学习的。

其二呢就是在当你解决一些很复杂或者很难的问题的时候,这些基础理论和知识可以帮到你。

很多我过去这二十年从这些基础理论知识中啊受益匪浅。

那其三呢,这些理论知识的思维方式可以让你有触类旁通,一通百通的感觉。

虽然芝士比较难啃,但啃过之后啊你将获益终生。

另外呢,你千万不要觉得在你的日常工作或者生活当中,根本用不上学了也白学这样的思维方式啊,千万不要有,因为这是平庸的思维方式。

那如果你想的是等我用到了再学也不晚。

那么你有必要看一下程序员的荒谬之言,还是至理名言这篇文章?那你要学习的第三个方面呢是系统知识,系统知识是理论知识的工程实践。

那这里面有很多很多的细节,比如像unix、 linux、 TCPIP,还有c十k挑战等这样专业的系统知识。

那这些知识是你能不能把理论应用到实际项目当中,能不能搞定实际问题的重要知识。

当你在编程的时候,如何和系统进行交互啊,或者获取操作系统的资源,如何进行通讯。

当系统出了性能问题,当系统出了故障,等你有大量需要落地的事儿需要处理和解决。

那这个时候这些系统知识就会变得尤为关键和重要了。

那这些东西啊,你可以认为是计算机世界的物理世界。

无论上层怎么玩,无论是java NIO还是index还是note JS啊,他们都逃脱不了最下层的限制。

所以说你要好好学习这方面的知识。

那今天这节课呢我们主要来谈一谈编程语言。

首先呢是java语言,学习java语言有这么几个入门级的书。

那第一本书呢就是java核心技术的第一卷基础知识。

这本书本来是三m公司的官方用书,是一本java的入门参考书。

那对于java初学者来说,是一本非常不错的,值得时常被翻阅的技术手册。

嗯,书里有比较多的地方做到c和CI加的比较。

因为当时java面试的时候呢,又被叫做CI加killer.而我在看这本书的时候啊,发现书里有很多c加加的东西,于是呢就去学习了c加加。

在学习c加加的时候呢,又发现有很多c的东西不懂,就顺着去学习了c然后呢从c一到CI加再到java整条线融会贯通,这个对于我未来的技术成长有非常大的帮助。

那有了前面的入门之后啊,java的spring框架是你玩java所无法回避的东西。

所以说接下来是两本spring相关的书啊,分别是spring实战和spring boot实战。

那前者呢是传统的spring,而后者呢是新式的微服的spring.那如果你只想看一本的话,那么就看后者吧。

前面我推荐的几本书可以帮你成功的入门java.但是想要进一步成长,就要看接下来我推荐的几本进阶级别的书了。

那接下来呢你需要了解一下如何编写高效的代码,所以就必须看一下effective java.那这本书呢是模仿scale mayors的经典图书,effective c加加的effective这种书基本上都是各种经验之谈,所以这是一本非常不错的书啊,你一定要读。

那这里需要推荐一下google graava库,那这个库不单是JDK的升级库,呃,其中有集合缓存、原生类型知识并发库,还有通用注解、字符串处理和IOR等等。

它还是effective java这本书的那些经验的实践代表。

另外呢java并发编程实战是一本完美的java并发参考手册。

书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发,构建块用于避免并发危险、构造线程安全的类和验证线程安全的规则。

如何将小的线程安全类组合成更大的线程安全类?如何利用线程来提高并发应用程序的吞吐量?如何识别可并行执行的任务?如何提高单线程子系统的响应性?如何确保并发程序执行预期的任务?还有如何提高并发代码的性能和可伸缩性等内容。

那最后呢还介绍了一些高级主题,比如显示锁原子变量和非阻塞算法,还有如何开发自定义的同步工具类,要了解如何编写出并发的程序呢?你还需要了解一下如何优化java的性能。

那关于这方面啊,我推荐的是java性能权威指南。

学习了这本书,你就可以大幅度提升性能测试的效果。

那其中呢就包括使用JDK中自带的工具,收集java应用的性能数据,理解JIT编辑的优缺点。

小优JVM中的垃圾收集器,以减少对程序的影响。

学习管理堆内存和JVM原生内存的方法,还有如何了解最大程度的优化java线程和同步的性能等等。

看完了这本书之后啊,如果你还有余力想了解更多的底层细节,那么你就有必要去读一下,深入理解java虚拟机。

那除此之外呢,java变成思想,真是一本透着变成思想的书。

前面的书让你从微观角度了解java.而这本书呢可以让你从一个宏观的角度来了解java这本书和java核心技术的厚度差不多。

但是这本书的信息密度啊比较大,所以读起来是非常耗大脑的。

因为它会让你不断的思考。

那对于想学好java的程序员来说啊,这是一本必读的书,还有精通spring四点叉啊,也是一本很不错的书,就是有点厚,一共有八百多页都是干货。

我认为其中最不错的是在分析原理,尤其是针对前面提到的spring技术应用和原理都讲的很透彻。

Ioc和AOP也分析的很棒啊,娓娓道来,他对任何一个技术都分析的很细致和全面。

那不足之处啊就是内容太多了,所以就导致很厚。

但是这个并不影响它是一本不错的工具书。

当然啊要学java,你就一定要学面向对象的设计模式。

那这里呢就只有一本经典的书啊,就是设计模式。

如果你觉得有点难度了,那么你还可以看一下head first设计模式,学习面向对象设计模式的时候呢,你不要迷失在那二十三个设计模式里,你一定要明白这两个原则。

那第一个原则呢就叫做program to an interface, not implementation.呃,具体的含义有三点。

那第一呢就是使用者不需要知道数据类型结构和算法的细节。

那第二呢就是使用者不需要知道实现细节,只需要知道提供的接口。

呃,第三呢就是利于抽象封装,动态绑定和多态,符合面向对象的特质和理念。

那第二个原则呢叫做favor oblily composition over classsing herititance.呃,具体的含义啊有四点。

那第一呢就是继承,需要给子类暴露一些父类的设计和实践细节。

那第二呢就是父类实现的改变,会造成子类也需要改变。

那第三呢就是我们以为继承主要是为了代码重用,但实际上在子类中呢需要重新实践很多复类的方法。

那第四呢就是继承更多,应该是为了多肽。

那到了这里,如果你把前面我说的这些知识都融会贯通的话,那么你已经是一个高级的java程序员了。

我保证啊你已经超过了绝大多数程序员了。

那基本上来说啊,你在技术方面是可以进入到一线公司的,而且还不是一般的岗位啊,至少是高级程序员或者初级架构师的级别。

那讲完了java,我们再来说说c和c加加语言。

那现在不像我出道的那个时候啊,几乎所有的软件都要用c语言来写。

现在呢可能不会有多少人来学习c语言了。

因为一方面有java和python这样的高级语言,为你屏蔽了很多的底层细节。

另一方面呢也有像go语言这样的新型语言,可以让你更容易的写出来。

同样是高性能的软件,但是呢我还是想说啊,c语言是你必须要学习的语言。

因为这个世界上绝大多数的语言啊都是c like的语言啊,也是在不同的方面来解决c语言的各种问题。

所以在这里啊我想放一个比较武断的话啊,就是如果你不学c语言呢,你根本没有资格说你是一个合格的程序员。

那这里呢我尤其推荐已故的c语言之父dennis m ritchie和著名科学家brand w kernnian合作的圣经级教科书c程序设计语言。

注意啊,这本书是c语言原作者写的那他的c语言标准呢不是我们平时常说的IC标准,而是原作者的标准啊,又叫做KRC.但是这本书很轻薄,也很简洁,不枯燥。

这边你可以拿着躺在床上看,还不会看着看着睡着的书。

另外呢还有一本非常经典的c语言的书,叫做c语言程序设计现代方法。

有人说啊这本书配合之前的the c programming language那本书啊,简直是无敌。

我想说的是,这本书更实用,也够厚完整,覆盖了c九九标准,习题的质量和水准也比较高。

那更好的是他探讨了现代编译器的实现以及和c加加的兼容,还揭穿了各种古老c语言的神话和信条等等,是相当相当干的。

一本学习c语言的书。

对了,千万不要看谭浩强的c语言的书,各种误导。

我大学时呢就是用这本书学的c后来工作的时候啊,被坑的不行。

在学习c语言的过程中啊,你一定会感到c语言这么底层,而且代码经常性的崩溃。

经过一段时间的挣扎,你才开始觉得你要从这个烂泥坑里快要爬出来了。

但你还需要看一看c陷阱与缺陷。

这本书你会发现这里面的坑不是一般的大。

此时啊如果你看过我的编程范式游记那个系列的文章啊,你可能会发现c语言在泛型编程上的各种问题。

那这个时候呢我推荐你学习一下c加加语言,可能会有很多人觉得我说的CI加是个大坑。

是的,这是世界目前来说最复杂,也是最难的编程语言啊,但是c加加是目前世界上范式最多的语言,它做的最好的范式呢就是泛型编程。

这个在静态语言中啊是绝对的划时代的一个事儿。

所以说你有必要学习一下c加加,看看c加加是如何解决c语言中各种问题的。

你可以先看一看我的这篇文章,叫做c加加的坑,真的多猛啊。

有个基本认识,那接着我再来推荐几本c加加的书。

那第一本呢就是CI加premier中文版,那这本书是久负盛名的c加加经典教程,书适有点厚。

前面三分之一讲c语言,后面讲CI加c加加的知识点实在是太多了,而且又有点晦涩。

但是你主要就看几个点,嗯,一个呢是面向对象的多态,一个是模板和承载操作符,还有一些STL的东西。

看一看c加加是怎么玩泛型和函数式编程的那如果你想继续研究呢,你就需要看另外两本更为经典的书。

Effective c plus plus和more effective c plus plus.那这两本书不厚。

但是我读了十多年,每隔一段时间再读一下呢,就会发现更多的收获。

这两本书的内容啊会随着你经历的丰富而变得丰富,这也是对我影响最大的两本书。

那其中影响最大的不是书中那些CI加的东西,而是作者的思维方式和不断求真的精神,这个真是太赞了。

另外呢学习c一和c加加都是需要好好了解一下编译器到底干了什么事儿的,就像java需要了解JVM一样。

所以说这里还有一本非常非常难啃的书,你可以挑战一下,叫做深度探索CI加对象模型。

那这本书呢是非常经典的。

看完之后啊,CA加对你来说就再也没有什么秘密可言了。

我以前写过的CI加虚函数表解析,还有CI加对象内存布局就属于这个范畴。

那最后呢还有c加加的作者bihonystraw strop,写了c加加的FAQ啊,也是非常值得一读的。

最后呢我们来讲一讲怎么学习go语言。

C语言太原始了,而c加加呢太复杂了,所以构元呢就是不二之权。

有了c和c加加的功底啊,学习go语言就非常简单。

我首推go by example,作为你的入门教程,然后go one one也是一个很不错的在线电子书。

如果你想看纸书的话,the goal programming language一书在豆瓣上有九点二分,但是国内也没有卖的那当然呢,我以前写过两篇入门的go语言简介可以供你参考。

另外,go语言官方的effective goal是必读的这篇文章,告诉你如何更好的使用go语言,还有go语言中的一些原理。

那构源最突出的地方是并发编程。

Unix老牌黑客后,ropack在oogle IO上的两个分享,可以让你学习到一些并发编程的模式。

然后啊go在给half的上上啊,也有好多不错的学习资源。

你可以从中学习到很多,比如weekgo精华、文章列表,go相关博客列表,还有go talks.此外呢还有一个内容丰富的go资源列表哦,什么go推荐看一看。

好了,最后我们来总结一下今天分享的内容。

在编程语言方面啊,我推荐CC加加和java,还有go这四门语言,并分别阐释了推荐的原因。

我认为呢c语言是必须要学习的语言。

因为这个世界上绝大多数的编程语言啊都是c left的语言,也是在不同的方面来解决c语言的各种问题。

而c加加虽然复杂难学,但它几乎是目前世界上范式最多的语言了。

它做的最好的范式呢就是泛型编程。

这个在静态语言中啊是绝对的划时代的一个事儿,尤其是要看一看c加加是如何解决c语言中的各种问题的那java呢是我认为目前综合能力最强的语言。

那其实呢我是先学了java,然后我又去学了c加加之后才去学c语言的。

从c一到c加加再到java整条线融会贯通,这对于我未来的技术成长有非常大的帮助。

在这节课的最末啊,我推荐了构员,并给出了相关的学习资料。

这节课呢我在文中附上了很多资料的链接,方便你参考。

我认为啊一个合格的程序员应该掌握几门语言。

一方面呢这会让你对不同的语言进行比较,让你有更多的思考。

另一方面啊,这也是一种学习能力的培养,会让你对未来的新技术学习的更快。

那下一节课呢我们将分享每个程序员都需要掌握的理论知识,敬请期待。