我,还是忍不住上了逼乎···
上次逼乎的那件事之后自己确实承受了很大的打击,很久没上了。(不清楚发生了什么的朋友可以回顾一下:知乎事件通报)
前几天又上了趟知乎,发现了这么个问题:
下面是我的一点回答。
首先,什么是大佬?
大佬都有一个共性:宽广的技术知识面+某一领域的专业研究。
其实就是我们常说的技术的广度与深度。
我们以一个后端开发程序员为例,来看一下,想要成为大佬,需要学习哪些东西?
当然,这张图可能列举的并不全面,但即便如此,你也基本上不可能掌握上图的所有内容,但作为大佬,你至少得知道吧。
常用的后端语言有哪些,他们的优势和劣势分别是什么?你的项目最适合什么语言的技术栈?
常用的后端服务和中间件有哪些,什么样的场景和场合该去使用谁?
后端常打交道的技术有哪些,在你设计系统的时候哪些会用得上?
···
等等一系列的问题,作为大佬,你可以不会,但你得了解,得知道。
下面拣一些要紧的来说。
编程语言
编程语言就像程序员的兵器,选择一件牛逼且称手的兵器是非常重要的第一步。
对于后端程序员,Java、C++、Python这些一线语言随便选,稳得很。
而想成为大佬,一件兵器还不够,得选多件。编译型语言、虚拟机语言、解释型语言至少都得会一样,还得知道他们执行的原理与区别,以便在不同的项目场景下决断什么样的语言最合适,而不是像刚入行的小朋友整天喊道:xxx是最好的语言。
编程语言的学习有三个层次:
第一层:会熟练使用语言来编程,掌握语法和特性的使用。 第二层:熟悉语言相关的技术栈,如C++的STL/Boost/Linux C++开发,Java的Spring/SpringBoot等 第三层:掌握语言的代码执行原理,如C/C++编译原理、虚函数原理,面向对象实现机制,函数调用原理,堆栈变化,代码执行汇编指令级理解;Java做到class文件结构熟悉,JVM启动过程,垃圾回收,锁机制、字节码执行原理。
学编程语言,我推荐的精品书籍有:
Java:
《Head First Java》 《Java编程思想》 《Java核心技术·卷1》 《深入理解Java虚拟机》
C/C++:
《C++ Primer》 《Effective c++》 《More Effective c++》 《深度探索C++对象模型》
Python:
《Python编程·从入门到实践》 《Python学习手册》 《Python Cookbook》 《Python核心编程》
Web技术
作为最基本的CRUDer,基本的Web技术肯定得学吧,常用的后端服务器有哪些,处理请求的流程是怎么样的,基本的工作原理得知道吧,Cookie和Session是什么关系,JWT又是什么原理?你写的程序是如何与Web服务器交互也得弄明白吧?
这方面的知识,你可以看:
《Web性能权威指南》 《深入分析Java Web技术内幕》 《Tomcat与Java Web开发技术详解》 《深入理解Nginx:模块开发与架构解析》
数据库技术
后端工程师,与数据库打交道是家常便饭,常用的数据库有哪些?SQL语句怎么写?MySQL背后的存储原理是什么?索引是什么实现的,这些都是后端工程师的基本功。
这方面的知识,你可以看:
《高性能MySQL》 《MySQL必知必会》 《MySQL技术内幕:InnoDB存储引擎》
除了关系数据库,NoSQL也应用的越来越多,什么是NoSQL?和传统关系数据库区别是什么?什么场景下使用它们?又该如何使用?
这方面的知识,你可以看:
《MongoDB权威指南》 《ElasticSearch权威指南》 《NoSQL精粹》
缓存技术
高性能高并发时代,缓存技术也是必修课,Redis已经成为后端工程师必须掌握的技能了,什么是缓存?缓存如何组织数据?如何搜索数据?
这方面的知识,你可以看:
《Redis设计与实现》 《Redis 深度历险:核心原理与应用实践》
设计模式
稍微有点追求的程序员,对自己的代码都会讲究的吧,模块怎么划分,接口怎么设计,如何降低耦合,如何易于扩展···
这是关于设计模式的范畴,你可以看:
《设计模式:可复用面向对象软件的基础》 《Head First 设计模式》
前端技术
什么?前端技术?做后端开发的也要学前端?
是的,毕竟你是奔着成为大佬去的,又不是只当一个普通的CURDer。
不懂前端开发技术演进历史,不懂现在前端流行的开发技术,不懂浏览器的基本工作原理,怎么能和前端同学愉快的对话呢?遇到跨域问题前后端互相甩锅怎么办?遇到缓存不刷新互相扯皮怎么办?这时候懂点前端技术才能更好的进行对(si)话(bi)。以后晋升leader后,下面的前端小伙伴评估工作量的时候你才知道有没有被忽悠。
当然,对于咱们后端的同学,不要求像专业前端一样能熟练使用Vue/React/AngularJS开发大型项目,但基本的HTML/CSS/JavaScript得知道吧,jQuery/Ajax了解一下也不错嘛,浏览器如何工作的最好也知道一下吧。
这方面的知识,你可以看:
《Webkit技术内幕》 《JavaScript权威指南》 《Web前端开发技术》 《深入浅出Vue.js》
前面说的都是一些后端工程师们工作上直接打交道的东西,但光会这些,还只是在浮沙筑高台,勉强是一个合格的后端工程师,但离大佬还远远不够。
真正的大佬除了应用,还得对计算机从上到下的运作了然于心,接下来这些基础,都是大佬的必修课。
HTTP & HTTPS
后端工程师,每天写接口,连HTTP协议工作原理是怎么样都说不清楚,这说不过去吧?HTTP从0.9->1.0->1.1-2.0>3.0发展了这么多代,每一代协议又有哪些不同?
除了常见的字段和状态码,那些不常见的HTTP头部字段和状态码又是什么意思?
HTTPS在HTTP的基础上到底做了什么,详细过程是什么样的?
这方面的知识,你可以看:
《HTTP权威指南》 《图解HTTP》 《HTTP抓包实战》
计算机网络
接下来,你将面临的是成为大佬的三座大山。
第一座大山:计算机网络。
既然已经说到HTTP了,那计算机网络知识就不能不提了(但我还是把HTTP单独拎出来说了,就是因为HTTP实在是太重要了)。
输入网址之后网页是如何穿越千山万水来到你电脑的?TCP是如何实现可靠传输的?IP报文又是如何在无数网络节点之间路由转发的?TCP/IP四层又各是如何交互工作的?
作为大佬,计算机网络知识是你工作所必备的基础储备。
这方面的知识,你可以看:
《TCP/IP详解·协议》 《计算机网络:自顶向下》 《图解TCP/IP》 《网络是怎样连接的》
网络安全
你写的程序安不安全,会不会被恶意攻击?黑客是如何攻破网站服务器?勒索病毒和挖矿软件到底怎么进来的?到底怎样保护你的服务?
不懂网络安全,是没办法回答这些问题的。
这方面的知识,你可以看:
《黑客大曝光》 《白帽子讲Web安全》 《黑客攻防技术宝典》 《漏洞战争》 《加密与解密》
操作系统
成为大佬的三座大山之二:操作系统。
你写的程序是如何被操作系统调度的?这么多进程线程是如何共处的?内核模式里面有什么东西?虚拟内存是什么原理?硬盘上的0和1如何组织成文件的?
操作系统所蕴含的内容之多,之广,使其地位实在是太重要了!上承应用开发,下承计算机组成原理,是非常非常重要的一环。
操作系统,不光要看理论概述,还要具体研究两大主流操作系统Linux和Windows它们的实现异同,比较它们在内存管理、进程管理、网络协议栈、文件系统、IO管理等各方面的实现差异,各自的优劣势等等。
这方面的知识,你可以看:
《现代操作系统》 《Linux内核设计与实现》 《Windows内核原理与实现》 《深入解析Windows操作系统》
数据结构与算法
成为大佬的三座大山之三:数据结构与算法。
数据结构与算法,是整个计算机的基石,它跨域了语言,跨域了系统,跨越了网络,超出三界之外,不在五行之中,是所有程序员都必须掌握的一门课。
常用的数据结构有哪些,各个数据结构又有哪些实际应用,它们是如何组织表达计算机系统中纷繁复杂的各种数据,各种算法又是如何在这些数据结构上穿针引线?
想成为大佬,数据结构与算法是你绕不过去的一道坎,你可以不精通,但你得懂。
这方面的知识,你可以看:
《算法图解》 《算法导论》 《编程珠玑》 《剑指offer》 《大话数据结构》
计算机组成原理
接下来,你来到了想成为大佬的最底层的那道坎:计算机组成原理。
CPU是如何执行代码指令的?CPU又是如何与内存、硬盘交互通信的?计算机IO是怎么完成的?如何让程序跑得更快,CPU利用率最高?零拷贝是什么意思?超线程技术是什么?NUMA架构有是什么?硬盘读写怎样最快?
想搞懂这些问题,不懂计算机组成原理根本无从回答,打通这一关,是成为大佬至关重要的一步。
这方面的知识,你可以看经典的黑皮书系列:
《计算机组成原理》 《计算机存储与外设》 《深入理解计算机系统》
以上就是我列举的一些成为大佬路上要学的技术和推荐参考的书籍。
总结一下,先打好基础,掌握一门编程语言,在某一个领域内有自己的专长,端稳自己吃饭的饭碗,这是第一步。
接下来,加深自己所在领域的技术深度,大量补充学习技术栈内的知识和技术,巩固自己专业领域的地位。
再接着,将眼光跳出自己的技术栈,一方面大量了解接触其他技术栈的知识,进行横向比较;另一方面重新学习计算机基础,自顶向下摸透计算机原理,进行纵向巩固,温故而知新。
以上就是我的一点经验之谈,文中提到的学习书籍,如果有需要的朋友可以后台添加我微信,我私发给你。
如果觉得有点用的话,欢迎给我点个赞哦~