As an ideal programmer, what are the necessary books to read?


Many people will think of all kinds of classic books with large sections. Those books are indeed very classic, but it is one thing whether they can make people insist on reading them, just as some principles are understood by everyone, but few can practice them.

Let’s talk about it according to my own reading experience and work experience. Don’t spray if you don’t like it.

First, let’s introduce my situation. I’m a background developer in Shanghai. I’m a former technical manager of a large Internet company. I’m currently working in a large factory. Let me talk about it from the perspective of simply improving programming technology. What we say is not necessarily right.

At present, the mainstream include C + +, Java and go. I have a little more experience in C + +. Let me talk about my learning experience in C + +. If you are a student, close to graduation and don’t have so much time to read many books, you can refer to the importance listed below. Of course, all the books I recommend are those I bought and read carefully.

1、 First of all, I think you should prepare algorithms and data structures well, so that you can be very familiar with common algorithms and data structures. In this way, you can apply for a job when you graduateTake some offers from big factories (bat, etc.) easily

I’m not a professional. I’ve been struggling with all kinds of things since I graduated. Go as soon as you graduateBig factoryPersonally, I think there are twoBenefits:

First, your income will be much higher than that of ordinary small companies. Small companies have relatively low recruitment requirements and pay much less. They are really recruiting people who can do their own work.

Second, your starting point will also be higher than the students who usually enter the small factory.

I’m not discriminating against small factories here. I’m just talking about a common situation. I myself came all the way from Xiaochang. Here I emphasize the importance of algorithms and data structures. Especially for fresh students to apply for a job, they should make good preparations for this, because this thing is the basis of principle. When interviewing fresh students, enterprises will not excessively require project experience, various operating system principles, network communication principles and so onThis is the only thing that can examine a person’s basic skills

I was recruited by the society into a large factory. Basically, I asked more questions about algorithms and data structures than the project experience itself. However, social recruitment is different, because in addition to preparing algorithms and data structures, it is also necessary to prepare project experience, understand the principles of the operating system, be familiar with network communication, understand the database, be familiar with various open source frameworks and technologies required, and so on. There are too many, even if no matter how you prepare, you may not be able to win in one fell swoop. On the contrary, fresh students basically need to prepare algorithms and data structures well, and they don’t learn too bad in other professional courses in the University, which is basicallyA shortcut to big factories

In terms of books, you can use the relevant teaching materials of your computer major or《Data structure and algorithm analysis: C language description》《Introduction to Algorithms》This kind of rigorous teaching materials, of course, to be fair, I dare not recommend the introduction to algorithms, because this book is too big to chew without good mathematical knowledge. If you want to read more humorous and relaxed books, you can look at Cheng Jie’s《Big talk data structure》。

Data structure and algorithm analysis: C language description
Link: qivj
Introduction to Algorithms
Link: 0q8r
Big talk data structure
Link: rrf8

2、 Secondly, if you have spare time to learn, you can look at books on the principles of the operating system. Of course, you can also use your teaching materials. I recommend one I have read here, Tanenbaum A.S《Modern operating system》, Tanenbaum is Dutch and the first teacher of Linus Torvalds operating system, the father of Linux. Of course, my suggestion is that this kind of book is a mere theoretical knowledge after all, and you don’t have to finish it, butBe sure to understand some basic concepts, such as process thread memory mode.

Modern operating system
Link: 0sks

If you still have time, I strongly recommend itYu JiaziYes《Self cultivation of programmers: link, load and Library》, this book also involves the two operating system platforms of windows and Linux. It uses various auxiliary tools to analyze the details of the program from source code to binary files and then loaded into the process address space. Even the heap structure and stack structure in the process address space are clearly analyzed. At the same time, it also analyzes the principle and execution logic of operating system interface libraries such as C runtime (CRT) and glibc, It is a really rare book to help you with the principles of actual combat operating system. I especially like the preface of this book:

“CPU architecture, assembly, C language (including C + +) and operating system are always the protection magic weapons of programming masters, just like the muscle changing Sutra of Shaolin Temple, which is the best martial arts; after learning the muscle changing Sutra, you will be omnipotent and allow you to create martial arts; after learning the programming” muscle changing Sutra “, masters can develop operating systems, compilers and even a new programming language at will!

Self cultivation of programmers: link, load and Library
Link: dlia

3、 Again, youLearning these things is for future practice and output, and the thing to implement this output is programming language, if yesintroduction, IFirst C / C++

Only when you are proficient in a programming language can you turn your ideas into reality.

Note that I put C and C + + together here, but strictly speaking, C and C + + are still a little different, but in addition to some detailed differences in syntax, they can basically be considered to be interlinked. Personally, I think C language is the entry language that all people who want to become experts should use most. Don’t tell me that Python and go, which are very popular now, “there are thousands of peach trees in xuandu temple, which are all planted by Liu Lang”. I also recommend a book on C language here. If you are interested, you can refer to:《C language programming: modern methods》。

C language programming: modern methods
Link: okff

Don’t mention Tan Haoqiang’s book. There is also the C + + primer, which is a good book, but it is too big. Things at the grammatical level can be learned quickly. The things in STL library need actual combat, and they can’t be mastered well by turning to books like this dictionary.

Of course, if you want to master C + +《Deep exploration of C + + object model》It must be seen.

Deep exploration of C + + object model
Link: 8puh

C + + actual coding skills there is another very good book, which introduces the common C + + coding skills《Programming technology to improve c + + performance》, it is suggested that those developed in C + + master all the skills in the book.

Programming technology to improve c + + performance
Link: e0gq

4、 Then, let’s talk about the network. First of all, I don’t recommend books on the basics of the network. Now many computer colleges have begun to use them《Computer networks: a top-down approach》This is a good textbook. If you haven’t seen it, you can have a look.

Computer networks: a top-down approach
Link: 9p3k

Of course, that’s the same sentenceYou must understand, not finish。 For example, you must know the details of three handshakes and four waves. Then you can find a practical book on network programming. If you don’t have any experience in socket API programming, you can look at this book written by Korean Yin Shengyu《TCP / IP network programming》, this book introduces from the basic socket API to the relatively advanced IO reuse technology, with very detailed and vivid examples. If you are a beginner, it is strongly recommended to read this book. There are too many details of network programming to pay attention to, which are introduced in this book. Many people, especially some students, feel familiar with network communication after writing some small programs that can chat with each other. However, when such programs get on the Internet or leave the LAN, either the connection is wrong or the data is always incomplete. That’s how I came here. Look at this book, you can understand the causes of many network failures.

TCP / IP network programming
Link: qwdu

After you have some network programming (proficient in using common socket API), you can have a lookYou ShuangYes《Linux high performance server programming》, this book gives people who have no foundation or have a weak foundation the feeling that, especially in the first three chapters of the book, why is this book so rubbish? You move the things on the network theory book to make up the number of words. However, if you have a foundation and practice it on the machine according to the steps in the book, you will find that it is really a rare book with conscience. Peach and plum don’t say a word and make a difference. If you have mastered the knowledge mentioned in this book, you can read it againShuo ChenTeacher’s《Linux multithreaded server programming》Or go to open source network libraries like libevent, and you will be further improved. This is also my experience in learning network programming. Note that it is necessary to mention here: unp, APUE, and《TCP / IP details》If you don’t specialize in network work or research in the future, you’re actually not recommended to read these books with them, because the Department is too large, followed by too many theories and UNIX things, and the time output input ratio is very low.

Linux high performance server programming
Link: World

5、 Then, the above are some basic things. In fact, no matter what the development is, the background development is no exception. You need to be based on a specific operating system. Here we don’t mention the windows system, just take the Linux operating system. Since you choose to do this development, you need to be familiar with some common API functions provided by the operating system platform. In terms of network communication, as mentioned above, in addition to network communication, there are also operating files, operating memory String operation, process thread series, thread synchronization series (such as mutex, condition variable, semaphore), pipeline and other commonly used API interface functions. This means that you are not required to memorize the signature of each interface function, butYou should know when to use which interface, how to use it, and what precautions should be taken

I read Robert love’s when I started《Linux system programming》, those who are familiar with this person should know that Google’s engineer has another very famous book《Design and implementation of Linux kernel》。

Linux system programming
Link: m284
Design and implementation of Linux kernel
Link: pof8

6、 Finally, I would like to emphasize that if you are a student who is about to graduate and are facing the pressure of looking for a job, you should focus on Algorithms and data structures. If you are a freshman, sophomore or graduate student at this stage, you can still consider chewing the books I recommend above. The standard is to understand rather than finish reading.

7、 Add something I think we should master to become a master. Let’s talk about compilation first. Although there are more and more third and fourth generation languages, the hardware performance is getting better and better. But if you master assembly, you have many advantages over others, and you will have a thorough understanding of the efficiency of the machine instructions behind every line of C / C + + code you write. It is very good to do safety engineering and improve their own technology. Here is a copy of Teacher Wang Shuang’s《Assembly language (3rd Edition)》, this book is not thick, the language is easy to understand, and you don’t have to remember it deliberately. Basically, you can finish it quickly when you read a novel book. There is another compilation of practical books《Old code understanding: the way of reverse cultivation from the system view of machine code to framework》。 I personally like this book very much. When I read this book, I really had a feeling“What’s your wife laughing at? Voluminous poetry and books”The feeling of. Even though I didn’t have a girlfriend at that time -!

Assembly language (3rd Edition)
Link: rf2q
Old code understanding: the way of reverse cultivation from the system view of machine code to framework
Link: 9sgr

In addition, add some books I read when I was a student. I am familiar with the development of windows and Linux platforms. This is also due to some classic books I read when I was a student. It may be a little off the topic. If you don’t mind, I can tell you:

  • Windows programmingFifth Edition(After the sixth edition, this book is no longer used to write C programs with windows native API, but transferred to the c# platform). This book is the windows enlightenment book of the first generation of programs in China. The developers of most desktop software, such as QQ, may be blinded by reading this book.
  • Windows core programming》, those who are engaged in Windows development must know the weight of this book.

Windows programming Fifth Edition
Link: ckq3
Windows core programming
Link: aa43

  • Linux kernel scenario analysis》Mao Decao’s book is very real. In addition, he wrote a set of books on Windows source code analysis. This book is based on the open source “windows” ReactOS, which is called《Windows kernel scenario analysis》。

Linux kernel scenario analysis
Link: p3oj
Windows kernel scenario analysis
Link: fjb7

  • Perspective of compiling system: schematic compiling principle》, practice books on compilation principles.

Perspective of compiling system: schematic compiling principle
Link: k91H

  • The beauty of programming》, about the interview, mainly some algorithms and logical thinking questions.

The beauty of programming
Link: njp2

  • Refactoring: improving existing code design》, I don’t have actual experience in writing code, so I don’t recommend it.

Refactoring: improving existing code design
Link: r8ew

  • Programming practice》This bookStudents are especially recommended to have a look, your coding style can be greatly improved.

Programming practice
Link: 4ii4

  • Clean Code 》Ibid

Clean Code
Link: jimw

  • Big talk design mode

Big talk design mode
Link: whno

  • Windows PE file authority Guide

Windows PE file authority Guide
Link: eksf

Effective C++》Series

Effective C++
Link: 5vuf
More Effective C++
Link: ig8a

  • Computer composition and Design: hardware and software interface

Link: ogst

On the whole, IStudents mainly focus on basic knowledge to readof Four years of undergraduate and three years of master’s degree. Thank you for helping me grow. I remember when I graduated from college, I had ten notebooks full of reading notes alone.

After working, I also read books like redis, netty and distributed. But that’s all work needs. Because of my solid foundation, of course, it may also be because of luck, so I got the favor of some companies that pay attention to solid technical foundation and gave me a salary that looks good at this stage (of course, there may be someone better than me, so I’ll laugh and be generous here, so please don’t spray it 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 can’t tell whether a person is successful or not. I code so many words,It is hoped that the majority of developers will pay attention to the foundation and not build a high platform in the floating sand. Especially students, you have a lot of opportunities to study. You must cherish your college time. After all, after work, especially after graduation, you are faced with various problems such as work and family. You may no longer have the mind and complete time to study and improve.Therefore, the accumulation in the early stage is very important. After all, choose the road of technology. Improving technology is the most direct way to promote and raise wages and improve living standards.

Finally, let’s end with a poem written by a technical elder when I was a student:

The war rat world of mortals is insane,
There is a net walking up the blue sky.
The stars play against the sun and the moon,
Lie drunk in the clouds and laugh at the world.
Seven years of dreaming is like putting out a fire,
Who in Kyushu is crazy about me?