Books you should read for backend development

Books you should read for backend development

Original  2018-03-30  Zhang Xiaofang  high-performance server development

Let me talk about it based on my experience, first introduce my situation, coordinate in Shanghai, background development (also with a team), a well-known Internet company.

 

At present, the mainstream are C++ and JAVA, and I have a little more experience in C++. I will talk about my learning experience about C++. If you are a student, near graduation, and do not have the time to read many books, you can refer to the importance levels listed below.

 

 

  • First of all, I think you should prepare algorithms and data structures well, so that you are very familiar with common algorithms and data structure knowledge points, so that you can easily get offers from some big companies (BAT, etc.) when you graduate and apply for a job . I myself was not from a professional school, and after graduation, I went through all kinds of struggles. I personally feel that there are two advantages to going to a large factory after graduation . First, your income will be much higher than that of ordinary small companies. Small companies have relatively lower recruitment requirements and pay much less salary. They are really recruiting. A person who can do their job. Second, your starting point will also be higher than that of the students who usually enter the small factory. I'm not discriminating against small factories here, I'm just talking about a general situation. I myself have come all the way from the small factory. Here I am emphasizing the importance of algorithms and data structures. Especially for fresh graduates looking for a job, they should prepare well for this, because this thing is the basis of principle. When interviewing fresh graduates, companies will not require too much project experience, various operating system principles, network communication principles and the like, and the only thing that can examine a person's basic skills is this . I was recruited into a large factory by a social worker. Basically, I asked more questions about algorithms and data structures than the project experience itself. However, social recruitment is not the same, because in addition to preparing algorithms and data structures, it is necessary to prepare project experience, understand operating system principles, be familiar with network communications, understand databases, and be familiar with various open source frameworks and technologies required, etc. There are too many, and no matter how much you prepare, you may not be able to win in one fell swoop. On the contrary, fresh graduates basically only need to prepare well for algorithms and data structures, and they are not too bad in other professional courses in the university. This is basically a shortcut to entering a large factory . In terms of books, you can use the relevant textbooks of your computer major, or you can use rigorous textbooks such as "Data Structure and Algorithm Analysis: C Language Description" and "Introduction to Algorithms". Of course, in all fairness I dare not recommend "Introduction to Algorithms" Yes, because this book is really too big. Without good math knowledge, it is really hard to read. If you want to read a more humorous and relaxed book, you can look at Cheng Jie's "Dahua Data Structure".

 

  • Secondly, if you have spare energy, you can read books on operating system principles, and of course you can use your textbooks. I recommend a book I have read here, Tanenbaum.AS "Modern Operating Systems", Tanenbaum is Dutch , and also the enlightenment teacher of the operating system of Linus Torvalds, the father of Linux. Of course, my suggestion is that this kind of book is a theoretical knowledge after all, and you don't have to read it, but you must understand some basic concepts, such as process thread memory mode and other basic concepts. If you still have time, it is strongly recommended to read Yu Jiazi's "Programmer's Self-cultivation: Linking, Loading and Libraries". This book involves both Windows and Linux operating system platforms, and uses various auxiliary tools to analyze the program from The details of source code to binary file and then loaded into the process address space, even the heap structure and stack structure in the process address space are clearly analyzed, and operating systems such as C Runtime (CRT) and glibc are also analyzed. The principle and execution logic of the interface library is a really rare book to help you combat the principles of operating systems. I especially like a paragraph from the preface to this book:

   

"CPU architecture, assembly, C language (including C++) and operating system are always the protective weapons of programming masters, just like the "Yi Jin Jing" in Shaolin Temple, which is the most excellent martial arts; ”, you will be omnipotent and create martial arts as you wish; having learned to program the “Book of Yi Jin”, masters can develop operating systems, compilers, and even a new programming language at will!”

 

 

 

  • Again, you learn these things for future practice and output, and the thing that implements this output is the programming language . If it is an entry , I recommend C/C++ first . You can only turn your ideas into reality if you are proficient in a programming language. Note that I put C and C++ together here, but strictly speaking, C and C++ are still somewhat different, but they can basically be considered to be the same except for some details in syntax. Personally, I think C language is the most introductory language that everyone who wants to become a master should use. Don't tell me that languages ​​such as python and go are very popular now. I also recommend a book on C language here. If you are interested, you can refer to: "C Language Programming: A Modern Approach". As for Tan Haoqiang's book, let's not mention it. There is also the tome "C++ Primer". Although it is a good book, it is really too big. The grammar level is learned quickly, and the stl library needs practical combat, and it is not easy to master this kind of dictionary-like book. Of course, if you want to master C++ well, "Deep Exploring the C++ Object Model" is a must-see. There is another very good book on C++ practical coding skills, which introduces common C++ coding skills "Programming Techniques to Improve C++ Performance". It is recommended that C++ developers master all the skills mentioned in the book.

 

 

  • Next, let's talk about the network. First of all, I have nothing to recommend about the basics of the network. Now many computer colleges have begun to use the good textbook "Computer Network: Top-down Method". If you haven't read it You can have a look. Of course, that sentence you must read and not read . For example, the details of the three-way handshake and the four-way wave, you must be very clear. Then you can look for a practical book on network programming. If you don't have any experience in using socket api programming, you can read this book "TCP/IP Network Programming" written by the Korean Yin Shengyu. This book starts from The basic socket api introduces more advanced io multiplexing technology, with very detailed and vivid examples. If you are a beginner level, this book is highly recommended. There are so many details to pay attention to in network programming, which are covered in this book. Many people, especially some students, feel that they are familiar with network communication after they have written some small programs that can chat with each other. However, when such programs are connected to the Internet or leave the local area network, either the connection is wrong, or the data is always sent and received incompletely. I came here in the same way. You can understand the reasons for many network failures by reading this book. After you have a certain degree of network programming (proficiency in using common socket APIs), you can take a look at You Shuang's "Linux High-performance Server Programming". This book gives people who have no foundation or a solid foundation the feeling is, Especially the first three chapters of the book, why is this book so rubbish, and the things above the network theory book are moved to make up the word count, but if you have the foundation and follow the steps in the book to practice it on the machine, you will find that it is really a This rare and conscientious book, Taoli has formed a new path without words. If you have mastered the knowledge mentioned in this book, you will be further improved if you read Teacher Chen Shuo's "Linux Multithreaded Server Programming" or read open source network libraries like libevent. This is also some of my experience and experience in learning network programming. Note that it is necessary to mention here: books such as UNP, APUE, and "TCP/IP Detailed Explanation", if you are not specializing in network work or research in the future, it is actually not recommended to read them, because the department The head is too big, followed by too much theory and Unix stuff, and the time-output-input ratio is very low.

 

  • Then again, the above are some basic things. In fact, no matter what kind of development, background development is no exception, you all need to be based on a specific operating system, not to mention Windows system here, just take Linux operating system as an example, since you choose to do this aspect of development, you need to be familiar with this Some commonly used API functions provided by the operating system platform, network communication has been mentioned above, in addition to network communication, there are operations such as file operation, memory operation, string operation, process thread series, thread synchronization series (such as mutex, condition variable) , semaphore), pipes and other commonly used API interface functions. The meaning here is not to recite and memorize the signature of each interface function, but to know when to use which interface, how to use it, and what precautions should be taken . When I got started, I read "Linux System Programming" by Robert Love. Those who are familiar with this person should know that he is an engineer at Google. He also has another very famous book "Linux Kernel Design and Implementation".

 

 

  • Finally, I would like to emphasize that if you are a graduating student who is facing the pressure of finding a job, you should focus on algorithms and data structures. If you are a freshman, sophomore or first year student, you can still consider chewing on the books I recommend above. The standard is to understand rather than read.

 

 

  • To add some things that I think should be mastered in order to become a master, let's talk about assembly first. Although there are more and more third- and fourth-generation languages, hardware performance is getting better and better. But if you are proficient in assembly, you have a lot of advantages over others, and you will be able to thoroughly know the efficiency of the machine instructions behind every line of C/C++ code you write. Whether it is doing safety engineering or improving their own technology, they are very good. Here I recommend a copy of "Assembly Language (3rd Edition)" by Mr. Wang Shuang. This book is not thick, and the language is easy to understand. You don't need to memorize it deliberately. Basically, you can read it quickly when you read it as a novel. There is also another book "Old "Code" Knowing the Way: From Machine Code to Framework's Systematic View Reverse Cultivation Road" in the compilation of practical books. I personally like this book very much. When I was reading this book back then, I really had a feeling of "Laughing at the sorrow of my wife? The book is full of ecstasy". Even though I didn't even have a girlfriend at that time—!

 

 

Also, let’s add some books I read in my student days. I am familiar with the development of Windows and Linux platforms. This is also due to some classic books I read in my student days. It may be a bit off topic. If you don’t mind, I can tell you:

  • The fifth edition of "Windows Programming" (after the sixth edition, this is no longer the use of Windows Native API to write C programs, but to the C# platform), this book is the first generation of programs in China. Windows enlightenment books , the developers of most of the desktop software you see, such as QQ, may have been enlightened by reading this book.

  • "Windows core programming", this book is engaged in Windows development must know the weight of this book.

  • "Linux Kernel Scenario Analysis" Mao Decao's book is very real. In addition, he has written a set of books on Windows source code analysis. This book is based on the open source "Windows" ReactOS, and the book is called "Windows Kernel Scenario Analysis".

  • "Compilation System Perspective: Graphical Compilation Principles", a practical book on compilation principles.

  • "The Beauty of Programming", about the interview, is mainly about some algorithms and logical thinking questions.

  • "Refactoring: Improving Existing Code Design" is not recommended without actual code writing experience.

  • The book "The Cultivation of Programmers - From Small Workers to Experts" is especially recommended for students to read , which can greatly improve your actual coding skills and coding style.

  • "The Way to Clean Code" Ibid.

  • "Big Talk Design Patterns"

  • The Definitive Guide to Windows PE Files

  • "Java Programming Ideas"

  • "Effective C++" series

  • "80x86 Assembly Language Programming Tutorial"

 

 

In general, when I was a student, I mainly focused on basic knowledge to study . I have four years of undergraduate and three years of master's degree. Thanks to these books for helping me grow, I remember that when I graduated from college, I had ten notebooks full of reading notes alone.

After work, I also read books like redis, netty, and distributed. But that's all work. Because of my solid foundation, of course it may be due to luck, so I am favored by some companies that focus on solid technical foundations, giving me a salary that looks good at this stage (of course, there may be people who are more powerful than me, then I'm just laughing and being generous here, so please don't spray if you don't like it). At the same time, I am very grateful to the companies and colleagues I met along the way for their technical and life help. Salary itself cannot tell whether a person is successful or not. I have written so many words. I hope that the majority of developers will focus on the basics and not build high platforms in floating sand. Especially students, you have a lot of opportunities to study, you must cherish the time in college. After all, after work, especially after graduation, faced with various problems such as work and family, you may no longer have the heart and complete time to study and improve. Therefore, the accumulation in the early stage is very important. After all, choosing the path of technology and improving technology is the most direct way to improve the living standard by promotion and salary increase. Finally, let’s end with a poem I saw written by a technical senior when I was a student:

 

Fighting the rat red dust is already insane, 

There is a net to step up to the sky.

The game stars play with the sun and the moon,

 Drunk in the clouds and laughing in the world.

Seeking dreams for seven years is like fighting a fire,

 Who in Kyushu made me crazy?

 

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

Regarding which books to read in JAVA , I will open another topic on my official account to introduce. Stay tuned, if you are interested, you can also contact me through the following public account.

 

The above is my experience, I have also been lost and helpless. There are also many friends who came to me and hoped that I would do some experience sharing and career planning guidance. To this end, I specially opened a WeChat public account "easyserverdev". If you have any technical or professional questions and need my help, you can contact me through this official account. This official account not only shares the development experience and stories of high-performance servers, but also provides technical Q&A and professional solutions for the majority of technical friends for free. If you have any questions, you can leave a message directly on the WeChat public account, and I will reply to you as soon as possible.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325985458&siteId=291194637