首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >后台开发应该读的书

后台开发应该读的书

作者头像
范蠡
发布于 2018-04-04 06:54:04
发布于 2018-04-04 06:54:04
1.9K0
举报

根据我的经验来谈一谈,先介绍一下我的情况,坐标上海,后台开发(也带团队了),某知名互联网公司。

目前主流的有C++和JAVA,C++我的经验稍微多一点。我就说说我关于C++方面的学习经验。如果您是学生,临近毕业,没有那么多时间读许多书,可以按下面列举的重要程度来参考。

  • 首先,我觉得你应该好好准备算法和数据结构,做到常见的算法和数据结构知识点都能非常熟悉,这样的话你毕业求职的时候可以轻松拿一些大厂(BAT等)的offer。我本人非科班出身,一毕业之后各种摸爬滚打。一毕业去大厂个人觉得有两个好处,第一,你的收入会比一般的的小公司高很多,小公司招人要求相对低一些,薪资给的也少很多,它们是实实在在招能干本职工作活儿的人。第二,你的起点也会比一般进入小厂的同学高。我这里并不是歧视小厂,只是说一种普遍的情况。我本人也是从小厂一路过来的。这里我是强调算法和数据结构的重要性。尤其是应届生求职,更应该去好好准备一下这个,因为这个东西是原理性的基础。企业在面试应届生时不会过分要求项目经验和各种操作系统原理、网络通信原理之类的东西,而唯一能考察一个人的基本功的就是这个了。我是社招进大厂,基本上算法和数据结构这类问题问的比项目经验本身要多许多。但是社招又不太一样,因为除了要准备算法和数据结构以外,还得准备有项目经验、了解操作系统原理、熟悉网络通信、了解数据库、熟悉要求的各种开源框架和技术等等,实在太多了,即使再怎么准备也不一定能一举拿下。相反,应届生基本上只要好好准备算法和数据结构的东西,大学其他专业课学的不是太差,这基本上就是进大厂的捷径。图书方面,你可以使用你们计算机专业的相关教材,也可以使用《数据结构与算法分析:C语言描述》《算法导论》这一类严谨的教材,当然,平心而论我是不敢推荐《算法导论》的,因为这一本书实在是太大部头了,没有好的数学知识,真的很难啃。如果想看一下比较幽默轻松类的书,可以看看程杰的《大话数据结构》。
  • 其次,如果你学有余力,可以看看操作系统原理方面的书籍,当然也可以使用你们的教材,我这里推荐一本我看过的吧,Tanenbaum.A.S《现代操作系统》,Tanenbaum是荷兰人,也是Linux之父Linus Torvalds操作系统方面的启蒙老师。当然,我的建议是这种书毕竟流于理论知识,也不一定要看完,但一定将一些基础概念,如进程线程内存模式等基础概念看懂理解。你如果还有时间强烈推荐看看俞甲子的《程序员的自我修养:链接、装载与库》,这本书同时涉及到了Windows和linux两个操作系统平台,用各种辅助工具剖析了程序从源码到二进制文件再到装载到进程地址空间里面的各个细节,甚至连进程地址空间中的堆结构、栈结构也分析得清清楚楚,同时也分析了C Runtime(CRT)、glibc这样的操作系统接口库的原理和执行逻辑,是一本实实在在难得的帮你实战操作系统原理的一本好书。我特别喜欢这个书中序言的一段话:

“CPU体系结构、汇编、C语言(包括C++)和操作系统,永远都是编程大师们的护身法宝,就如同少林寺的《易筋经》,是最为上乘的武功;学会了《易筋经》,你将无所不能,任你创造武功;学会了编程“易筋经”,大师们可以任意开发操作系统、编译器,甚至是开发一种新的程序设计语言!”

  • 再次,你学这些东西是为了将来实践并有产出的,而落实这个产出的东西就是编程语言,如果是入门,我首推C/C++。你只有熟练使用一门编程语言,你才能将你的想法变成现实。注意这里我把C和C++放在一起,但是严格意义上说,C和C++还是有点区别的,但是除了语法上的一些细节差异,基本上可以认为是相通的。个人觉得C语言是所有想成为高手最应该使用的入门语言,不要和我说现在很火的python、go这类语言,“玄都观里桃千树,尽是刘郎去后栽”。我这里也推荐一本C语言方面的图书吧,有兴趣的可以参考一下:《C语言程序设计:现代方法》。至于谭浩强的书就不要提了,还有就是大部头的《C++ Primer》,它虽然是一本好书,但实在是太大部头了。语法层面的东西学会很快,stl库的东西需要实战,也不是翻这类字典一样的书就能很好地掌握的。当然,如果你想掌握好C++,《深度探索C++对象模型》是一定要看的。C++实际编码技巧还有另外一本非常好的书,介绍了常见的C++编码技巧《提高C++性能的编程技术》,建议C++开发的把书中说的技巧全部掌握。
  • 接着说,我们再说说网络方面的,首先网络基础方面的书籍,我就没啥推荐了,现在很多计算机学院也开始使用《计算机网络:自顶向下方法》这本不错的教材,如果没有看过的可以看下。当然还是那句话你一定要看懂而不是看完。比如三次握手和四次挥手的细节,你一定要很清楚。然后你就可以找一本网络编程的实战书来看下,如果你没有使用任何socket api编程的经验,你可以看看韩国人尹圣雨写的这本《TCP/IP网络编程》,这本书从基础的socket api介绍到比较高级的io复用技术,有非常详细和生动的例子。如果你是初级水平,强烈建议看看这本书。网络编程的细节需要注意的地方实在太多了,这本书上都有介绍。很多人尤其是一些学生,写了一些可以相互聊天的小程序就觉得自己熟悉网络通信了,但是这类程序拿到互联网上或者离开局域网,不是连接出错,就是数据总是收发不全。我当年也是这么过来的,看看这本书,你就能明白许多网络故障的原因。等你有了一定的网络编程以后(熟练使用常见socket API),你可以看看游双的《Linux高性能服务器编程》,这本书给没有基础的人或者基础不扎实的人的感觉是,尤其是书的前三章,这书怎么这么垃圾,又把网络理论书上面的东西搬过来凑字数,但是如果你有基础再按照书上的步骤在机器上实践一遍,你会发现,真是一本难得的、良心的书,桃李不言下自成蹊吧。如果你掌握了这本说上说的这些知识,你再看陈硕老师的《Linux多线程服务端编程》或者去看像libevent这样的开源网络库,你会进一步的得到提升。这也是我学习网络编程的一些经验和经历吧。注意这里有必要提一下:像UNP、APUE、还有《TCP/IP详解》这一类书,如果你将来不是专门做网络方面的工作或研究,其实是非常不建议抱着他们看的,因为部头太大,其次太多理论和Unix的东西,花的时间产出投入比很低的。
  • 接着说,以上说的都是一些基础的东西。其实不管是什么开发,后台开发也不例外,你都是需要基于特定的操作系统的,这里不提Windows系统,单单拿linux操作系统来说,既然你选择做这个方面的开发,你需要熟悉这个操作系统平台提供的一些常用的API函数,网络通信方面上文已经说过,除了网络通信还有如操作文件、操作内存、字符串操作、进程线程系列、线程同步系列(如互斥体、条件变量、信号量)、管道等常用的各种API接口函数。这里的意思是,不是要你背诵记忆每一个接口函数的签名,而是你要知道何时该用哪个接口,如何用,有什么注意事项。我入门的时候看的是Robert Love的《Linux系统编程》,熟悉这个人的应该知道,google的工程师,他还有另外一本非常有名的书《Linux内核设计与实现》。
  • 最后,我强调一下,如果你是快毕业的学生,面临着找工作的压力,应该以算法和数据结构为主。如果你是大一大二或研一这个阶段的学生,我上面推荐的书,你还是可以考虑好好咀嚼一下。标准是看懂而不是看完。
  • 再补充一些我觉得要成为高手应该要掌握的东西,先说汇编。虽然第三代第四代语言越来越多,硬件性能越来越好。但是如果你熟练掌握汇编,你就比其他人多很多优势,你会能透彻地知道你写的每一行C/C++代码背后的机器指令的效率。无论是做安全工程还是自己技术提升上都是非常不错的。这里推荐一本王爽老师的《汇编语言(第3版)》,这本书不厚,语言通俗易懂,你也不用刻意去记忆,基本上当小说书看一下就能很快看完了。汇编实战类图书还有另外一本《老"码"识途:从机器码到框架的系统观逆向修炼之路》。我个人是非常喜欢这本书的。当年读这本书的时候,真的有一种“笑看妻子愁何在?漫卷诗书喜欲狂”的感觉。尽管那个时候连女朋友都没有——!

另外补充一些我学生时代看过的书吧,我本人是熟悉Windows和linux两个平台的开发,这也归功于我学生时代看过的一些经典书籍,可能有点跑题了,如果不介意,我可以和你说说:

  • 《Windows程序设计》第五版(第六版以后,这个不再是用Windows Native API写C程序了,而是转到C#平台上了),这本书是中国第一代程序的windows启蒙书籍,你所看到的大多数桌面软件,如QQ,的开发者可能都是通过阅读这本书启蒙起来的。
  • 《Windows核心编程》,这本书搞Windows开发的一定都知道这本书的分量。
  • 《linux内核情景分析》毛德操老师的书,非常的实在,另外他写了一套关于Windows源码分析的书,这本书是基于开源的“Windows”ReactOS,书名叫《Windows内核情景分析》。
  • 《编译系统透视:图解编译原理》,编译原理方面的实践书。
  • 《编程之美》,关于面试的,主要是一些算法和逻辑思维题实战。
  • 《重构:改善既有代码设计》,没有实际写代码经验不推荐看。
  • 《程序员的修炼之道——从小工到专家》这本书特别推荐学生看一下,能大幅度地提高你实际编码的技巧和编码风格。
  • 《代码整洁之道》同上
  • 《大话设计模式》
  • 《Windows PE文件权威指南》
  • 《Java编程思想》
  • 《Effective C++》系列
  • 《80x86汇编语言程序设计教程》

总的来看,我学生时代主要是侧重基础知识来读书的。本科四年、硕士三年,多谢这些书帮助我成长,记得大学毕业的时候,我光读书笔记就有满满十个笔记本。

工作以后,也读了像redis、netty、分布式这一类书。但是那都是工作需要吧。由于我扎实的基础,当然也可能是因为运气成分吧吧,所以得到一些注重扎实的技术基础公司的青睐,给了目前这个阶段看起来还不错的薪资(当然可能还有人比我更厉害,那我这里就贻笑大方了,所以请不喜勿喷)。同时非常感谢我一路上遇到的公司和同事给我的技术上和生活上的帮助。薪资本身不能说明一个人是否成功,我码这么多字,希望广大的开发者注重基础,勿在浮沙筑高台。尤其是学生,你有大把读书的机会,一定要珍惜大学时光。毕竟工作以后,尤其是毕业后,面临着工作、家庭等各种问题,你可能再也没有心思和完整的时间去学习和提升了。所以前期的积累很重要,毕竟选择技术这条路,提高技术是升职加薪改善生活水平最直接的方法。最后用我学生时代看到一个技术前辈写的一首诗来结束吧:

仗鼠红尘已是癫,

有网平步上青天。

游星戏斗弄日月,

醉卧云端笑人间。

七载寻梦像扑火,

九州谁共我疯癫?

====================================

关于JAVA方面需要看哪些书籍,我会在我的公众号再开一个专题来介绍。敬请期待,如果您有兴趣,也可以通过下面的公众号联系我。

以上是我的经历,我也曾迷惘和无助过。也有很多朋友找到我,希望我做一些经验分享和职业规划指导。为此我特地开办了一个微信公众号『easyserverdev』。如果有任何技术或者职业方面的问题需要我提供帮助,可通过这个公众号与我取得联系,此公众号不仅分享高性能服务器开发经验和故事,同时也免费为广大技术朋友提供技术答疑和职业解惑,您有任何问题都可以在微信公众号直接留言,我会尽快回复您。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高性能服务器开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如果一定要在 C++ 和 Java 中选择,是选 C++ 还是 Java ?
如果你是学生或有大把空余时间,那建议你把 C++ 学好,C++ 被称为程序员的九阳神功是有一定的道理的,并不是说 C++ 有多难学,而是 C++ 技术栈的学习讲究的是其背后的一系列操作系统原理,你把 C++ 学好了,就意味着你把这些背后的原理学好了,你之后再学其他任何语言和机制都轻松很多;
范蠡
2022/02/12
4.6K0
如果一定要在 C++ 和 Java 中选择,是选 C++ 还是 Java ?
【送书】帮你成为 C/C++ 技术栈的熟练工
👆点击“博文视点Broadview”,获取更多书讯 在大多数同学眼里,C/C++ 是一门非常“难学”的编程语言,然而一旦学生,其功无穷。那要如何学习呢? C/C++ 这门语言与其他高级语言不同,它是离操作系统较近的语言。所以学好 C/C++ 体系的技术栈必须结合操作系统的运行机制来学习。 展开来说,就是你必须掌握操作系统层面的几大基础知识,他们是汇编、编译链接与运行时体系、狭义的操作系统原理、多线程、网络编程。 第一个基础知识是汇编,我们学习汇编不是一定要用汇编来写代码,就像我们学习 C/C++ 也不一定
博文视点Broadview
2023/05/06
5710
【送书】帮你成为 C/C++ 技术栈的熟练工
资深程序员告诉你:想要将C++学到熟练运用,应该怎么去学?
C++语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它 语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替 C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。
诸葛青云
2019/09/11
8350
操作系统原理、数据结构、网络原理,深入理解计算机系统应该按什么顺序去看?
计科专业从事软件开发多年,上面说的几本书都是学习计算机的必备知识,如果还在上大学阶段的小伙伴看到这篇文章,现在就以一个程序员的身份来讲讲这四本书在平时开发中如何体现出来,每次看到这种计算机基础书籍都会有一种亲切感,但也会有一种遗憾,在大学期间如果充分利用时间多学一本书对现在也会有巨大的帮助,现在倒是什么书籍都可以弄到,已经没有充分细读的时间了,每天在单位写完代码回到家里再和孩子玩一会时间就过去了,所以人生学习的最好阶段是大学还有刚毕业的前两年的时间。
程序员互动联盟
2019/07/04
1.1K0
操作系统原理、数据结构、网络原理,深入理解计算机系统应该按什么顺序去看?
大学期间Linux C++后台开发这条线怎么走?
我也经常被咨询Linux C++后台开发的学习路线。然而当谈到Linux C++后台开发时,无论Linux还是C++都是一个很大的话题,聪明的程序员需要学会做减法
果冻虾仁
2021/12/08
8580
大一大二的计算机专业同学应该学习什么?如何学习?
原因一:可能是你大一上学期不努力或者不认真,同学们都在认真学,你没花足够的时间和心思在学习这些知识上;
范蠡
2021/08/10
9550
一个优秀的程序员应该养成哪些好的习惯?
多次担任技术面试官,遇到很多优秀的名校毕业生。凡此种种,从自己和别人身上总结出如下一些好的习惯。
范蠡
2023/01/04
1.5K2
一个优秀的程序员应该养成哪些好的习惯?
2021年,学习C++还香吗?
👆关注“博文视点Broadview”,获取更多书讯 不论是学Java还是学C++,我们的目的都是为了进BAT等大厂。 众所周知C++难学难精,Java难道不香吗?我们为什么还要学习C++折磨自己? 上面的代码就是C++,不论真伪,C++确实不易维护,能看懂别人写的C++代码,着实有点困难。Java其实也挺难学的,它只是跟C++难的不在一个点上,C++难的是语言本身,Java难的是各种框架、库。既然都难,那我们为什么不选个性能王者?要知道,3种主流的操作系统Windows、Linux、Unix内核部分
博文视点Broadview
2023/05/06
3340
2021年,学习C++还香吗?
为什么时不时会看到「珍惜生命,远离 C++」?
这个问答提问一下子把我的思绪拉入往昔那些使用 C/C++ 的“峥嵘岁月”里。女朋友还是原来的女朋友,而我却不是当初的那个我了。
范蠡
2023/01/04
1.1K0
为什么时不时会看到「珍惜生命,远离 C++」?
如何成为一个C++高级程序员
 C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。   现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。   我想把我自己的经验
程序员互动联盟
2018/03/16
7650
一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)
文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever
我是管小亮
2020/04/20
1.8K0
程序员入门之路
我大学的专业是软件工程。那个时候(我09年毕业),ACM等各类算法竞赛在大学还不是特别地流行。专门搞算法的同学不多,我也没有特地去训练和参加算法竞赛,所以我有很多的时间。然后这些时间都被我花在了自娱自乐的项目和看各种系统的源代码上了。
sergiojune
2019/04/29
4450
程序员入门之路
IT,大一,这里我有点建议
学好C可能不会让你找到个好工作,不知道你们用的是什么书,如果是清华大学的那本就直接丢垃圾桶吧。图书馆负一层的好书(ps:我们学校的计算机书都在负一层,看的人少。。)多得是,还有C语言作者写的,首选国外的书,然后是国内的。C的重要就是指针+数据结构。有一本不错的书,如《C和指针》及《C专家编程》。不过,如果不是搞嵌入式的话,C可能会用得很少,多数都是Java的面向对象。图书馆有很多,很不错的书。。这是我们学校的一个不算是优点的优点,我不知道你们系的老师怎样,但是请相信多数情况下只有混得不好的才来当老师(ps:很一般的二本院校)。只是少部分老师也很优秀,至少在我们专业中——电子信息工程是这样的。在我们专业领域,C才是神器相比于汇编语言,只是这个时代汇编语言用于提升运行效率显得有点。。。
Phodal
2018/10/09
6090
如果让你重新开始学计算机,你的学习路线会是怎么选择?(文中有福利)
这篇文章是回答 小方说服务器知识星球 一位大一计算器同学小 Q 的回头,断断续续写了三天。总体来说小方说服务器知识星球为球友提供如下帮助: 1. 优问优答 2. 不定期的技术直播和录像 3. 优质源码分享和指导 4. 不限次数的职业解惑、模拟面试和简历 review(实时语音一对一辅导) 5. 大厂内推和面试辅导 6. 11 个技术球友专项技术系列专栏。 星球开通以来已帮助几百位同学提高技术和进入大厂,现在加入与 1000+ 球友一起进步。 国庆快到了,星球做一波优惠活动,扫描下面的优惠码加入星球可以优惠
范蠡
2022/09/26
6460
如果让你重新开始学计算机,你的学习路线会是怎么选择?(文中有福利)
我苦难的转行计算机开发的经历
我就是那个非计算机专业一心想转计算机专业,但是最终没转成,但是通过自学走上开发之路的,当年也是到处求书单。
范蠡
2021/10/18
1.1K0
我苦难的转行计算机开发的经历
万字长文 | 这可能是东半球最保姆级的后台服务器开发学习路线
这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其它人写得不一样, 也定下了一个目标,这篇文章,不能是简单的堆砌学习资源和书单推荐,更要细化如何有效的去执行落地。
灵魂画师牧码
2020/10/26
1.4K0
Linux 应用开发自学之路
在 「关于我 」那篇博文里,朋友们应该知道了我不是科班出身,是由机械强行转行到Linux应用开发方向。下面我就详细向大家介绍自己这一路上的转行历程,希望对大家有所启发。
用户6543014
2019/10/25
2.4K0
Linux 应用开发自学之路
腾讯师弟帅北的编码提升之路!
觉得挺有意思的,所以顺手回答了下,同时也发到我的公众号上来,这篇文章纯碎是记流水账,也没什么干货。
用户6983566
2020/11/23
8120
腾讯师弟帅北的编码提升之路!
聊聊阿秀过去三年间做的最正确的一件事 | 快来薅羊毛
我买的大部分是技术书,也有一些非技术书,比如《明朝那些事儿》、《平凡的世界》之类的。
拓跋阿秀
2021/04/26
1.5K0
聊聊阿秀过去三年间做的最正确的一件事 | 快来薅羊毛
来一大波后台开发项目推荐!
最近各大厂的春招已经陆续开始了,目前还是提前批,各位还没投简历的,一定要快速投起来。 最近朋友在帮组里做初筛面试,发现基础、算法、项目这三块有两块好的同学都比较少,很多本科三年都在打 ACM 算法不错,但是基本没怎么复习计算机基础的东西,项目也是随便找的那种,这种也没法继续往后面推。 还有的是基础八股文背得很熟悉,但是呢数据结构不扎实,算法也刷得不多,一两道简单级别的剑指offer原题都没做出来,这种也没法继续往后面推,因为微信面委算法会考察得更严。 还有更气人的一类,连语言基础都有问题,比如 s
程序员鱼皮
2023/03/29
1.1K0
来一大波后台开发项目推荐!
推荐阅读
相关推荐
如果一定要在 C++ 和 Java 中选择,是选 C++ 还是 Java ?
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档