Thoughts on programmer growth

Source: Internet
Author: User

1. Programmers should lay a solid foundation

1. nowadays, many development tools and languages are prevalent. I often hear people say that "not learning C ++ is a cloud of Luck" and "C ++ is the King of Kings ", is C ++ really better than PHP, Lua, AS, and JAVA?

In fact, it is not the language itself, but the platform attached to C ++. Because it is the closest to the operating system, it can give full play to the performance advantages that other languages do not have. In addition, many data structures, algorithms, and special functions are not provided by C ++ and need to be implemented by themselves. In this case, you need to learn about the "data structure", "algorithm", "TCP/IP", "Operating System Principles", and "compilation principles. Because of this, the things we learned have been precipitated, and because of this, C ++'s custom functions are higher than the encapsulated functions.

When I went to college for a project, I used the. net platform C # language. Because I am a professional researcher, my teachers gave me questions that were difficult to study. However, C # is not comparable to C ++ in terms of performance and functionality. Remember to create a "remote control" software, after configuring the IP address and port, you need to connect to the dynamic generation of client programs (Trojans), but C # does not provide this function. This is also the reason why I switched to a C ++ programmer after my work, and it happened to be the development of remote control software. At the beginning, the program occasionally collapsed unexpectedly, but after two months and a longer period, I mastered C ++. I would like to thank Weng Yuelong, the instructor who guided me in my work. Without him, my path will not be so smooth. He taught me not only about technology, but also about how to solve problems and how to behave.

2. Some people may say that university learning is superficial and useless. Think about it, I often think this way at school, but I only know how important these things are. However, if you have learned more well from the university, you still need to study it again. Because there are few practices in school and they are useless, computer is an application-driven discipline. Let's take a look at what the "computer postgraduate entrance exam" professional course takes (this is not to say that the postgraduate entrance exam is a good one ), "Data Structure", "computer composition principle", "operating system", and "computer network "." The two courses "data structure" and "computer composition principle" are at the beginning, showing their importance. They are the two most important basic courses of software and hardware. I don't believe that "data structure" can optimize performance well. If you say that you have learned this course, you can skip reading or querying materials, "application and difference of B + tree and B-number", "Why does KMP quickly match strings", and "under what circumstances will the quick sorting become o (n ^ 2)?

I also don't believe that I don't know how computers work, I don't know the interaction process between CPU and I/O, the instruction execution path, and the working principle of the CPU Splitter. How can I write efficient assembly code? How can we find out the concepts of "interrupt", "GDT", and "IDT" in the kernel, and how can we switch the real-mode protection mode ?" The operating system and computer network are two very important supporting disciplines. Why is the semaphore the fastest synchronization method, thread scheduling faster than process scheduling, and why is it necessary to make a memory buffer pool, these are all from the "Operating System ". The "computer network" mainly describes TCP/IP. Why does it ask "how to deliver data to all users in real time for a user with millions of followers ?" To solve this problem, we need to use multicast. "How do we calculate the one-way latency of C/S ?" Send ICMP packet measurement. These are all from it.

The number of well-known scholars and experts who have studied our university courses has been studied at home and abroad. Therefore, computer theory courses are the foundation and the root cause of the problem ." Algorithm Analysis and Design "is an extension of" data structure ". Divide Conque, greedy, and dynamic planning have great guiding significance for program algorithm optimization. Similarly, the "Computer architecture" is an extension of the "computer composition principle. Second, the importance of disciplines such as "compilation principle", "database", and "software engineering" is not self-explanatory.

II. Practice, theory, and practice

As a programmer, we are satisfied with the pleasure of implementing a program function. We are proud to download others' code from the Internet and add it to our own program. We are intoxicated with writing millions of lines of code. Have you ever thought about creating yourself or the technical workers in the assembly workshop. Mature development tools gradually turn us with rich imagination into slaves. Download a compressed library from the Internet and use mature encryption algorithms to directly include the packaged class library. Why not explore its algorithm implementation, performance optimization, and underlying mechanisms. Some may say it is "difficult! Whether it is difficult or not enough knowledge, or the theory has not reached a certain level.

It is hard to imagine the consequences of not learning "computer graphics" and doing a 3D project client graphics algorithm; not studying "data mining" to analyze a large amount of customer data; I do not want to study the "probability theory", "Linear algebra", and "artificial intelligence" to design how intelligent AI is. Many people say that these games do not need to be used. What is the purpose of learning? I admit that when I was a beginner in programming, these things were just a great discussion. If we have been working for n years and are still skilled in coding, what is the difference with just graduated students. Programming tools are just "tools". Don't forget that we are a programmer who has changed the world. Without improving our theories, we need to innovate, take advantage of the company, and compete with others.

"R & D" is two major blocks: "research" and "development". Only development is required. No research is required. Individuals and companies are only short-term targets. Of course, the theory is improved and production is required, otherwise, the theory will soon become "fantasy socialism", and the company will feed the research department." Practice, theory, and practice "are in line with Marxist philosophy and also the value embodiment of computer science. A real computer scientist is not only engaged in theory, but also applied to products. Engineers do not only do development and do not do research. They need application innovation and theoretical micro-innovation. Compared with programmers, computer scientists have profound mathematical skills, so they can make breakthroughs in theory.

3. Two channels of technology and management.

1. The phrase "how deep the game can be, how deep the technology can be" is very good. Only because of our persistence, we were able to break through layer-by-layer difficulties in the game. At and, we were able to train our equipment. If you can go back to the right corner, you just want to play the game as you do with technology. Those who take the technical route must be tech-obsessed. However, to take a long time, we need to put the technology into practice. How to wear and penetrate? Computer underlying layer (C, assembly, reverse engineering, driver, kernel), computer algorithms (grid computing, audio and video screen compression, speech recognition ...) And architecture (software engineering, cross-platform, multi-language, etc.) must be involved. Only when we have mastered this can we "view the problem and see the essence of the problem" and "our thoughts are penetrating ". These are the most valuable and need to be precipitated. It is impossible to develop projects and write code.

2. people who take the management route have the following characteristics: "Completing tasks as the top priority", "planning, good at time management", and "good at dealing with people, the important thing is "comprehensive quality", rather than "specialization ". However, these changes can be changed. Many companies also choose the people with the best technology to manage. As I am a technology-obsessed enthusiast, I have no right to speak and do not explain it more.

4. Mentality.

1. people live in the world with dedication rather than asking for help. It is a pleasure to help others. As a programmer, we should be open-minded, low-key, and open-minded, teachers Li and Lao Zhang of the company are very broad-minded and low-profile people. They are worth learning. They must have our teachers. What we are familiar with is our own and this field, if you don't understand anything, you need to consult with others with an open mind. I have seen impetuous and over-confident people, and have also seen people with a low profile. The development results are totally different.

2. Be willing to share and support open source. This is a matter of mind and temperament, and also an important factor that determines the individual and the company's development speed. With the rapid development of technology, we always keep the technology in our hands and cannot make great strides. Isn't China's two thousand-year old feudal history and Portal closure policies painful enough ?" The technology is for communication and play. "This is what Ruian Longge told me. He is also a hacker and a hacker of justice. Open source is an important spirit of hackers, so hackers can lead the technology.

3. Daily learning. Many people think that they don't have to learn after graduation, or they don't have to study that way. This is a very wrong idea. Whenever and wherever you are, you should take yourself as a Cainiao and fresh graduates to learn. Books are a shortcut to learning. Google and Baidu are quick but not systematic in solving problems. To read a book, you need to understand the knowledge behind the author and think about how the author thinks about the problem. This is more advanced than simply solving a problem. More importantly, listen to the author's voice and feel the master's mentality. Finally, I would like to recommend the book "hacker and painter" to you, which is really well written. I don't know it yet.

Thoughts on programmer growth

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.