程序员的内功心法
发布时间:2022-10-24 14:55:28 所属栏目:Unix 来源:
导读: 0、前言
以下我讲的内容可能你在CSDN,博客园,知乎或者某些公众号上看到过类似的,或者你可能曾经听某位师兄师姐和某位前辈说过,这很正常,因为我也曾经看到过很多类似的内容,而且,我自己就是照着这
以下我讲的内容可能你在CSDN,博客园,知乎或者某些公众号上看到过类似的,或者你可能曾经听某位师兄师姐和某位前辈说过,这很正常,因为我也曾经看到过很多类似的内容,而且,我自己就是照着这
|
0、前言 以下我讲的内容可能你在CSDN,博客园,知乎或者某些公众号上看到过类似的,或者你可能曾经听某位师兄师姐和某位前辈说过,这很正常,因为我也曾经看到过很多类似的内容,而且,我自己就是照着这条路走过来的。 今天我还想在这里再说一次,以我自己的理解,带着实际的学习路径。 金庸先生写的《倚天屠龙记》可能很多人都看过,书中有一门明教的顶级武功,叫做乾坤大挪移,总共有七层,非常难练,明教仅有一位教主练到第五层,但就在炼成的当天走火入魔而死,阳顶天是公认的武学天才,绝顶聪明,练了很多年也才练到第四层,而张无忌在一天之内就练到了乾坤大挪移的第七层,除了有主角光环外,最重要的一个原因是他练了九阳神功,内功非常深厚,所以才能在短时间内迅速炼成乾坤大挪移。金庸先生的小说里还有很多类似的例子,都说明了只要内功深厚,学习新的武功和招式都很容易。 武侠小说毕竟是武侠小说,很多东西都是虚构的。但在实际生活中,类似于武侠小说里内功的东西,却是真实存在的。比如,程序员的计算机技术中,提到语言,有C语言,C++,JAVA,PHP,PYTHON,GO语言,JavaScript等等,提到框架,有Spring,Mybatis,Dubbo,Netty,JPA,Kafka等等,然而这些,并不算内功,只能算是招式,真正能算程序员内功的,我个人认为,只有数据结构与算法,计算机原理,程序设计思想,操作系统,计算机网络,数据库,设计模式。 1、数据结构与算法 如果有人问我,计算机技术中最重要的是什么,我会回答他是数据结构与算法,因为数据结构与算法可以锻炼程序员的思维,也决定了程序的运行效率,是基础中的基础。 曾经有一个人,靠着一句话就获得了计算机界至高无上的奖项-图灵奖,这个人就是尼古拉斯·沃斯(Nicklaus Wirth),这句话就是他提出的著名公式:“ 算法 + 数据结构 = 程序 ”。该公式对计算机科学的影响程度足以与经典物理学中爱因斯坦的质能方程式“E = MC^2 ”相媲美,一个公式展示出了计算机程序的本质。这句话足以说明数据结构与算法在计算机中的重要性,对于初学者可能还不能完全地理解这句话unix系统内幕,不过对于已经工作几年的同学相信对这句话会比较认同。 数据结构与算法我推荐的书籍是《算法》和《算法导论》,其中《算法》作为入门,《算法导论》作为进阶,推荐的视频有慕课网BoBo老师的《玩转数据结构:从入门到进阶》。 数据结构与算法在项目中最直观的应用就是SQL的优化,如果你对B+树和多表关联算法有所了解,你就能更快理解掌握SQL优化,比别人写出更高效的SQL。 还有,你可能在项目代码中经常能看到多重循环,包括三重循环,四重循环,甚至五六七八重循环都有,如果你对时间复杂度的计算有所了解的话,你运用Map,就可以把多重循环的循环数降下来,甚至变成多个单循环。 2、计算机原理 计算机原理这门课很好地向我们阐述了计算机是如何工作的,是如何计算和输出我们想要的数据的,如何充分利用硬件提高程序运行的效率,如何在使用磁盘时提升文件读写的效率,如何避免一些底层原理性问题(例如浮点运算的精度问题),这些都是非常基础且重要的。 计算机原理我推荐的书籍是《编码:隐匿在计算机软硬件背后的语言》和《深入理解计算机系统》,其中《编码》是作为纯粹的入门,而《深入理解计算机系统》是更深入的入门。 我说过,计算机技术中我认为最重要的是数据结构与算法,但如果学习计算机技术,只让我推荐一本书给你的话,我会推荐《深入理解计算机系统》,学完这本书,你对计算机底层机制会有一个全景式的了解,包括二进制,计算机组成,汇编指令,体系结构,操作系统,网络,并行编程等等。当然,我不可能只推荐一本书给你,但这充分说明了《深入理解计算机系统》这本书的重要性。 关于计算机原理,有一个经典的案例,多维数组的遍历,可以按行,也可以按列,如果你的数组行元素比较多的话,你会发现按行遍历会比按列遍历快得多,为什么?因为按行遍历符合存储的局部性原理,可以充分利用CPU的缓存,而缓存比内存快得多。 还有,你可能会在项目代码中看到在for循环里多次查询数据库的操作,如果你对计算机的IO比较了解的话,你就会用一个IN语句来查询数据库,并把结果封装成Map,在for循环里访问Map,这样会比在for循环里多次查询数据库快得多。 3、操作系统 很多程序员觉得操作系统离自己比较遥远,但其实不是这样,现在几乎所有程序都是跑在操作系统之上,进程与线程的调度,多线程的并发,内存的申请和释放,进程间通信和线程间通信,网络请求的发送和接收,文件的创建和访问,都和操作系统有着密切的关系,可以说,你的程序的运行效率,也很大程度取决于你对操作系统的了解。 现在互联网公司用得最多的操作系统是Linux,Linux也是一个开源的操作系统,非常适合学习,以下我们就以Linux为例来看看如何学习操作系统。 操作系统可以细分为好几个领域,如命令行,操作系统理论,内核,命令行里,我最推荐的书是《Unix & Linux大学教程》,这本书虽然书名其貌不扬,但书写得非常好,风趣幽默,你甚至可以把它当小说看,作者从Unix的历史讲起,循序渐进,深入讲解各个命令、shell、启动脚本、正则表达式、文件系统、进程,把每一个地方都分析得十分透彻。 操作系统理论里,我最推荐的书是《操作系统导论》,这本书着重三个部分:虚拟化,并发,持久化,全书基本按照“发现问题,解决问题”的思路来写,是目前所有操作系统理论书籍里最通俗易懂的。 关于Linux内核,能推荐的书就比较多了,包括《Linux内核设计与实现》,《深入理解Linux内核》,《Linux内核源代码情景分析》,《深入Linux内核架构》等,Linux内核属于比较难的部分,大家一定要确保有足够的基础和充足的时间去学习。 4、程序设计思想 程序设计思想就要落实到具体的编程语言上了,在这里,我推荐三门语言让大家学习,包括:汇编语言,C语言,Java。学习汇编语言和C语言的目的是为了掌握计算机的底层原理,包括计算机原理和操作系统,这些知识你不学习汇编和C是没办法搞懂的。而Java是一门典型的面向对象语言,可以学习面向对象思想,并且Java在互联网里运用非常广泛,想找工作的话也很容易。 汇编语言我推荐的书是王爽的《汇编语言》;C语言的书我推荐《C语言程序设计 现代方法》,这是我个人认为最好的C语言书,还有一本《C Primer Plus》也不错,视频我推荐一个B站上昵称为“比特鹏哥”的人讲的《C语言从入门到进阶》视频,讲得非常好;Java我推荐的入门书是《Java核心技术 卷1》,这本书从入门的角度来说比《Java编程思想》好得多,视频有张龙的《圣思园Java SE》。 要切记,语言都是相通的,你学精通一门语言,再去学另外一门语言,那是很容易的事情。 5、计算机网络 现代社会离开了网络会变成什么样,谁也不敢想,软件也是这样,现在不支持网络的软件已经很少见了,这足以说明计算机网络的重要性。 广域计算机网络可以分成三个部分,包括:狭义计算机网络,TCP/IP协议,HTTP协议。 狭义计算机网络我推荐的书是James F. Kurose的《计算机网络:自顶向下方法》,这本书是经典的计算机网络教材,采用作者独创的自顶向下方法来讲授计算机网络的原理及其协议,通俗易懂,非常适合入门。 TCP/IP协议我推荐的书是W.Richard Stevens的《TCP/IP详解 卷1:协议》,大师之作,绝对可以让你对TCP/IP掌握透彻。 HTTP协议我推荐的书是《HTTP权威指南》,HTTP领域的扛鼎之作,同时也是必读之作。视频有陶辉的《Web协议详解与抓包实战》。 6、数据库 现代社会,要开发企业级应用,就离不开数据库。 数据库可以分成数据库理论和实际应用数据库两个部分。 数据库理论我推荐的书有Abraham Silberschatz的《数据库系统概念》和Hector Garcia-Molina的《数据库系统实现》。 实际应用的数据库用得比较多的是MySQL,MySQL入门的书有《MySQL必知必会》,进阶的书有《高性能MySQL》,入门的视频有燕十八的《MySQL轻快入门》,进阶的视频有姜承尧的《MySQL DBA实战进阶班》。 MySQL中最重要的引擎是InnoDB存储引擎,而姜承尧的《MySQL技术内幕:InnoDB存储引擎(第2版)》就是一本讲解InnoDB存储引擎原理的好书。 数据库也是相通的,学精通了一种数据库,再去学其它数据库,很轻松。 7、设计模式 设计模式也是必不可少的技术,它可以让你的代码具备更好的可重用性,可维护性和可扩展性,在许多框架里都有体现,包括Spring,Mybatis,Netty等等。 设计模式我推荐的书是《Head First 设计模式(中文版)》,写得诙谐幽默,图文并茂,通俗易懂,比四人帮的那本《设计模式》好懂了不知道多少倍。 最后用一句话送给大家,勿在浮沙筑高台。不要热衷于新技术,新语言,新框架,打好基础,熟悉底层,才是你在IT技术领域能走得更高更远的根本。 (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330484号