我,还是忍不住上了逼乎···

共 3967字,需浏览 8分钟

 ·

2021-07-18 17:42

上次逼乎的那件事之后自己确实承受了很大的打击,很久没上了。(不清楚发生了什么的朋友可以回顾一下:知乎事件通报)

前几天又上了趟知乎,发现了这么个问题:

下面是我的一点回答。

首先,什么是大佬?

大佬都有一个共性:宽广的技术知识面+某一领域的专业研究

其实就是我们常说的技术的广度与深度

我们以一个后端开发程序员为例,来看一下,想要成为大佬,需要学习哪些东西?

当然,这张图可能列举的并不全面,但即便如此,你也基本上不可能掌握上图的所有内容,但作为大佬,你至少得知道吧。

常用的后端语言有哪些,他们的优势和劣势分别是什么?你的项目最适合什么语言的技术栈?

常用的后端服务和中间件有哪些,什么样的场景和场合该去使用谁?

后端常打交道的技术有哪些,在你设计系统的时候哪些会用得上?

···

等等一系列的问题,作为大佬,你可以不会,但你得了解,得知道。

下面拣一些要紧的来说。

编程语言

编程语言就像程序员的兵器,选择一件牛逼且称手的兵器是非常重要的第一步。

对于后端程序员,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架构有是什么?硬盘读写怎样最快?

想搞懂这些问题,不懂计算机组成原理根本无从回答,打通这一关,是成为大佬至关重要的一步。

这方面的知识,你可以看经典的黑皮书系列:

  • 《计算机组成原理》
  • 《计算机存储与外设》
  • 《深入理解计算机系统》

以上就是我列举的一些成为大佬路上要学的技术和推荐参考的书籍。

总结一下,先打好基础,掌握一门编程语言,在某一个领域内有自己的专长,端稳自己吃饭的饭碗,这是第一步。

接下来,加深自己所在领域的技术深度,大量补充学习技术栈内的知识和技术,巩固自己专业领域的地位。

再接着,将眼光跳出自己的技术栈,一方面大量了解接触其他技术栈的知识,进行横向比较;另一方面重新学习计算机基础,自顶向下摸透计算机原理,进行纵向巩固,温故而知新。

以上就是我的一点经验之谈,文中提到的学习书籍,如果有需要的朋友可以后台添加我微信,我私发给你。

如果觉得有点用的话,欢迎给我点个赞哦~

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报