Reliable, this is the best programming guide I have ever seen! Hurry up and collect it, you will be in vain if you miss the university!


From freshman admission to a computer major, to love this major, and then to get more than 10 offers after graduation, and finally enter the ideal big factory work. Thinking back to the pits that he had stepped on over the years, Xiaobei sighed carelessly. Like me, when he was just learning programming, he wanted to eat a big fat man at once, but it was not satisfactory.

I asked Xiaobei to sort out some of the experience of learning programming over the years, and by the way select some aspects that I think are worth noting, and share with you. I hope you, a beginner in programming, can avoid some detours . The article may be relatively long, but I really hope you can read it word by word. At least, I think if I am just learning programming, I will be able to read this article. It is definitely helpful.

As a computer major, many people think that programming is learned in the classroom, but this is not the case. Cobain’s advantage over non-cobain may lie in knowing what to learn and knowing which assignments and projects must be completed. In addition, it really depends on self-study.

For self-learning programming, I think the first thing to consider is how to avoid some pitfalls, which can save a lot of time. Below I will share some important aspects in the form of questions.

01. Which programming language should you choose?

"What programming language should I learn?" is probably the problem that plagues new programmers the most. Many people have been struggling with this problem, so they fall into a strange circle, this linguistics a little, that linguistics a little, in the end nothing is learned, and time is wasted.

When I was just a freshman, I also wanted to know which programming language should I choose. I checked a lot of information on the Internet, but the answers were a little bit one-sided. It was nothing more than "This programming language is difficult", "That programming language has good performance", and "So-and-so programming language has a good ecology."

As a beginner, I think that no programming language is easy, right? As for the performance and ecology, there is no concept.

If you do not have a clear direction, then a good choice. If you have a high education and want to follow the direction of algorithm and machine learning, Python is the best choice. If you have a mediocre education and want to be a web back-end development engineer, Java is the best choice. If you have a good degree and want to do lower-level jobs, C and C++ are the best choices.

Maybe many people, like me, haven't had much contact with the computer industry before going to university. Various programming languages ​​just know the names and don't know the difference between them. Don't worry about it, let me make a choice for you.

If you are a college student, the first choice is of course the programming language arranged for you by the school. After all, there is an atmosphere where you can learn and communicate. If the school chooses not C or C++, then learn by yourself in private, don't fail to learn, you will suffer a lot in future work.

Both C and C++ are difficult, and they don't seem suitable for getting started. But learning programming is not just about learning a certain programming language, but about learning a huge computer knowledge system. C and C++ can help you understand the operating system, compilation principle, computer network, and computer composition more easily, because the underlying things are basically realized by them.

If you have already participated in work, but just started to learn programming, C and C++ are a bit complicated and difficult for you, because learning them requires a lot of time, and you cannot invest as much time as a college student. I suggest that you choose a programming language with "wider employment conditions", such as Java, which is moderately difficult and extremely rich in ecology. You can also quickly make some small applications and see the effect of learning in the shortest time.

Of course, to learn any programming language, you need to read books related to computer systems so that you can program at a deeper level. I strongly recommend you to gnaw this book-"In-depth understanding of computer systems".

After gnawing a few times, you can connect the entire computer system in series, and you will have more confidence in learning programming.

02. What courses need to be learned

I have graduated almost ten years ago, and occasionally when my classmates gather, I can always hear some classmates complaining, "At the university, the high mathematics, discrete mathematics, linear algebra, probability theory, etc. arranged by the school are fundamental to the work. There is no help at all, no matter if you don't learn."

For some jobs, these courses may be useless, but students who do algorithm and machine learning must know that these courses are too useful.

I have watched such a video before. A classmate asked a teacher, "Teacher, what's the use of learning ancient Chinese poetry?" The teacher felt very dazed at first, because he had never thought about this problem before. Learning ancient Chinese and poetry can neither make money nor be an official. . But after thinking about it for a while, I replied that in the philosophy of pedagogy, three factors are very important. The first is imagination, which determines whether you are creative or not. For example, Li Bai said, "Being a hundred feet tall, you can pick the stars." The second is instinct. When we look at the moon, it may be a moon, but a bastard in the Song Dynasty said that the moon looks like a widow’s face because he is in a bad mood. The third is that the logic is not rigorous, and some ancient texts are rigorous to the point of no leakage.

In the same way, if you think some courses are useless, it may be because you didn't use them. The university is oriented to "face-to-face" education, and all courses are taught a little, but not so deep. When you are working or studying for graduate school, more of it is "point-oriented" learning, and the knowledge used is more professional and in-depth.

If the school arranges certain courses, if you are interested, you can study hard. If you are not interested, you can relax and don't miss the subjects, and then focus your energy on the areas you are more interested in. There is no need to resist, this course is useless, I won't learn it even if I'm killed, this attitude is not advisable.

When you were in college, the school didn't know whether you would be engaged in algorithms or architecture, or server development or hardware, so the school needs you to learn more courses and try to understand it. For students, on the one hand, they can choose the direction they are interested in, and on the other hand, they can inspire the future employment direction.

Let me give you some suggestions.

If you are a college student, you can do a small project after learning theoretical knowledge for a period of time, record the problems encountered in the project, learn relevant knowledge in a targeted manner, and then practice, so that the knowledge will be transformed into a network. Big.

If you are already engaged in work, then systematically learn about the intractable diseases encountered at work, and be a person who can solve the problems, so that you can not only become the indispensable person of the company, but also the most valuable knowledge Learned.

03. Does learning programming need to specify a plan?

In fact, not only learning programming requires planning, but any other learning and work requires planning. When Xiaobei was in college, he began to formulate plans for himself regularly. This habit remained until after he worked, which is called a lot of benefit in his own words.

When I usually study, I also like to plan first and then implement it according to the schedule. For example, when I was learning the basics of Java, I would first draw a mind map, and then study in depth according to each node in it.

The picture below is the plan on October 30, 2016. At that time, Xiaobei was in his senior year and had found a job and signed a satisfactory offer. At that time, there were no classes. It stands to reason that I can relax, but Xiaobei still made some study plans and chose to go to Baidu for an internship in November.

From the content point of view, it is mainly to study English and computer professional courses, because Xiaobei did not understand why he should study professional courses in his freshman year and sophomore year. After he figured out the reasons in his third year, he has been studying again because computer professional courses are really very good. important! Learning these lessons well will make your study and work in the future easier.

In addition to the plan made by the senior year, Xiaobei also made a more detailed study plan during the sophomore year. See the picture below. I am a little bit ashamed. To be honest, it is too strong. He numbered the content that he needed to learn and put it in the form, so he did it in an orderly manner. Of course, it is difficult to implement exactly according to the plan, but making a corresponding plan allows you to clearly know what you should do.

04. Does programming require taking notes and blogging?

Anyway, when I first started, I regarded blogging as a form of taking notes. Although the blog was written for everyone to read, there were no page views at the beginning, and the readers were only themselves, and they had a very indifferent mentality. Whether you write a blog or not, I strongly recommend that you take notes, and note-taking is a long-term process.

As far as programming is concerned, we need to make good use of search engines, because search engines will provide us with all kinds of answers. But the answer is someone else’s after all. If it’s just copied, it may be useful, but if you can’t remember, knowledge doesn’t belong to you. After you encounter the same problem, you still have to search again, and the answers provided by search engines are not static. , After a while, you may not find the answer you originally wanted.

But note-taking is different. Note-taking is customized and customized according to your own style. You can read it and remember it in your favorite way. When you encounter the same problem later, you can quickly find it through your notes.

In addition, I need to remind you in particular that notes are a rare asset. If you want to write a blog in the future, these notes are the most valuable material and can be used directly.

Xiaobei has been recording for more than four years, and has accumulated more than 1G of content in total, and has formed his own knowledge system. I will show you a part of it.

05, do you need to brush

No matter whether you are using LeetCode or OJ (Online Judge), I know it is necessary, but don't "get into trouble"! When Xiaobei was in college, he met a lot of people who were engaged in computer competitions. They all called each other "XX God" and used an algorithm to reduce the running time of the program from 1 second to 0.999 seconds. Category.

I think that brushing should not be for this purpose, but to adapt to the feeling of writing code. In this process, you will encounter compilation errors, you will slowly remember some grammar, keywords, and understand some concepts, and you can use it yourself, such as implementing data structures. Slowly you will become experienced and know the reasons for some errors.

After brushing the questions to a certain level, there is no need to keep brushing. You can look for some high-quality open source projects on GitHub, and then try to add some functions or optimize some codes. In this way, your programming ability can be greatly improved.

In addition to training programming skills, brushing questions is also very helpful to finding a job, because big factories like to do it.

In the beginning, it may be difficult to scan LeetCode, what should I do? I highly recommend this Leetcode brushing notes from Google’s boss. When this Google boss was studying for a master’s degree at Carnegie Mellon University in the United States, he started to sort out Leetcode’s topics from the summer in order to prepare for the autumn recruitment internship. Over the course of a few months, I brushed hundreds of questions.

With a solid foundation and long-term diligence, he quickly found the job he wanted. Later, he thought, he brushed so many questions, and he had his own understanding of the solutions to many questions, why not sum up these questions and make an e-book that is easy for later learners to read and learn?

So he open sourced this PDF. I took a closer look, and the solution of each question was written very clearly.

To quote the big man, it is:

This book is divided into two parts: algorithm and data structure, and subdivided into 15 chapters, explaining in detail the commonly used techniques when brushing LeetCode. I condensed the title to 101. One is that it echoes the title of the book, and the other is that I don't want readers to read and practice too long.

From my intuition, this is an intentional book on data structure algorithms. The book has a total of 143 pages and has 15 chapters to explain the algorithm in detail. Each chapter is some important knowledge points, accompanied by basic explanations and introduction of sample questions. Of course, there are also some recommended practice questions.

Just reading the catalog of the book is very shocking. I believe you and I have this strong feeling. I read the whole book carefully, and verified some of the problem-solving ideas and codes in the book, which is indeed conscience. Chapter 7 is about dynamic programming. Here is a bit of content. You can see that Google's big guys are very thorough and detailed.

It can also be seen from the typesetting that the entire book is very beautifully made. If you need this Leetcode writing notes, I will post the address.

Link: https://pan.baidu.com/s/1ojBerkBfgMFpYcj-JfDKlw Extraction code: 5ttz

There is also a bat master's notes for brushing questions. No matter the programming language you use is Java, C++, or Go, you can learn it, and it is suitable for students who are writing questions. Carefully figure out the framework thinking, and you will find that this is a very hard-working book. A total of 1200 pages of notes are divided into programming skills, linear tables, strings, stack queues, trees, sorting, search, BFS, DFS, greedy, dynamic programming, etc.


Each chapter will first explain the framework thinking, and then select a dozen of very typical LeetCode questions for practical explanation:


Not only is the layout very exquisite, but the content is also very substantial. Each question is explained in detail, sometimes with pictures, just for fear that you won't understand it. Great conscience!


If you happen to learn algorithms, data structures, or find a job in the next year, don't miss it . Post the download address:

Link: https://pan.baidu.com/s/12RT8pRk6OUNa1PuYkqZliw Extraction code: 8w3m

If you want to brush OJ, you can go to the websites of Peking University, Zhejiang University, and the National Computer Olympiad. There are a large number of competition questions over the years, register an ID, and then write the source code in your familiar language (usually Pascal/C/C++/Java) and submit it, and the information will be returned in real time to tell you whether it is correct.

Peking University: http://poj.org
Zhejiang University: https://zoj.pintia.cn/contests
National Computer Olympiad: http://www.usaco.org/index.php?page=contests

06, read a book or watch a video

Watch the video introduction, read the book advanced .

The video can tell you in a short time what you can do with the technology you are learning now, and what knowledge you may need to learn first. It can help us build an introductory knowledge system.

I recently found two good videos on station B, and I recommend them to everyone. It will definitely benefit a lot to keep reading.

Operating system of Tsinghua University: https://www.bilibili.com/video/BV1js411b7vg
Data structure and algorithm of Tsinghua University: https://www.bilibili.com/video/BV1jt4y117KR

I won’t repeat the importance of reading. No matter when it comes, reading is still the best way to absorb knowledge. Do you desire power? The black book series introduced by the machinery industry is worth collecting. These brick books are very good choices whether they are used to cushion monitors or table legs.

"C Programming Language", "Introduction to Algorithms", "In-depth Understanding of Computer Systems", "Modern Operating Systems", "Construction and Interpretation of Computer Programs", "Principles of Compilation", "Design Patterns", "Computer Networks", " "Introduction to Database Systems" and so on, these books are really hard to gnaw down, and may not be suitable for beginners, but these are classic books on computers.

I know, you definitely want to get these e-books too, yes!

CodeChina:https://codechina.csdn.net/mirrors/itwanger/JavaBooks

GitHub:https://github.com/itwanger/JavaBooks

Code Cloud: https://gitee.com/itwanger/JavaBooks

If this set continues, you will have knowledge and power! ! ! What awaits you will only be reinvented in a new life! ! ! It’s easier during the interview, more fluent in writing code, sore waist and leg pain, cervical spine is not uncomfortable, high salary promotion is no longer a dream! ! ! What are you waiting for? Action is not as good as your heart. The programming black book, who knows who reads it, will not regret it after reading it, and it will not suffer if you read it! The opportunity to become a big taker is here, so what are you waiting for, take action! ! !

The best programming guide, the second brother will make up with you, rush!

Guess you like

Origin blog.csdn.net/qing_gee/article/details/112424101