Although I made an early wish to write a series of program learning tutorials, few months have passed and I haven't written anything. The main problem is that there is too much to write and not a system. So now I want to change my mindset and write some scenes, materials, etc. I usually work. Maybe it will be more appropriate to organize them into tutorials in the future.
For the first article, I want to talk a little off topic first. In fact, many people simply don't understand what programmers are doing. The first is most common among laymen who want to transform their programs, and the second most common among future programmers who have not graduated.
This is not a technical issue, but it is far more important than a technical issue.
Generally speaking, I divide the work of software development into three directions:
Business direction: You are responsible for converting human language into code, and let the machine do specific things in accordance with specific procedures and specifications
Language direction: You are responsible for improving the development experience and efficiency of programmers
Algorithm direction: You are responsible for improving the execution efficiency of the machine itself
for example
You make a small game, make a website that sells things, make an official account, or even a little taller, make an operating system. What is the operating system is the software that manages the computer according to certain rules. These are all business developments. .
What about the language direction? For example, the famous topic PHP is the best language, what is the best? To put it bluntly, programmers use it cool. Some people like powerful languages, some people like to develop convenient languages, and some people like to check fine languages. So this matter has never been finalized but there is no doubt that these things are in the software The industry has been comprehensively improved. From within the language, we can create new libraries, new techniques, and new frameworks to make people use more comfortable, and high-end ones can create new languages.
Where is the algorithm direction? In the past, you need to traverse 361 to play Go! Everyone thought it was impossible. Later, with Alphago, everyone knew that playing Go does not need to traverse 361! , You don’t need to use the stupid method of Xia Guoxiang, this is the algorithm. Are there any more everyday scenes? Yes, I often see someone write Array.find and traverse an array to find what I want. I often feel depressed, will you die if you hash it. Of course, it is not necessary for small arrays (in fact, a few hundred is small for computers), but I am a person who is accustomed to the shortage of CPU resources and is more sensitive to time efficiency. (In layman's terms, traversal search is like looking for a pile of stacked clothes. You have to look through them one by one. Hash search is like looking for hanging clothes. You can see where you want at a glance). Of course, there are also the standard questions of the written test for newcomers, the four ways of writing fenzi, ah no, I mean the four ways of writing sort: bubbling, insertion, selection, fast sorting-in fact, most people will never go for a lifetime. Really write a sorting algorithm, but directly use array.sort, list.sort, or scold a stupid library author who does not even provide sort and then change to a library
However, many people have an obvious misunderstanding, that is, algorithm programmers are the most high-end, the most expensive, and the most powerful. The language players are all big cows and gods, and the business people are all migrant workers. By definition, all of Microsoft's migrant workers-their main products are windows and office, and the famous Linus can be regarded as the ancestor of migrant workers)
Let's talk about the laws of economics. Algorithm programmers are indeed the highest paid, but this is obviously because things are scarce. Not only is this thing extremely difficult to learn, but the problem is that there is not much demand at all, so it is not at all. Not many people will study in this field all the year round-people who really do algorithms have gone to publish academic papers, a small group of people use algorithms, optimize and improve algorithms in practical production, and most people only need to use them. At that time, Baidu just looked at the results of others. I think I have been developing for so many years, and I really need to think about how to optimize the algorithm for no more than 10% of the total workload-maybe lower, 5%? Why? Because once a problem troubles me for more than a day, I will definitely turn to Baidu and Google instead of taking the pen to refine the formula. What impresses me is that there was a spherical grid map problem because I couldn’t find it. Until the results of the research, you can only learn a lot of things by yourself, but that is not in the scope of work, because if you encounter it at work, the boss will definitely say, let’s make a flat map first.
So those of you who are new to the industry, especially those who don’t have a master’s degree or above in mathematics, are transforming to develop and want to do algorithms. In my opinion, it’s funny.
However, it is a bit interesting to do the language direction. In fact, most of the backbone technicians of the company do this. This is also a direction I recommend. Our goal is to "write less code and write code faster" , How to reuse, how to abstract, how to manage code reasonably, how to iteratively develop quickly, and how to better adapt to changing needs-this is a big topic, which I will describe later.
But there is also a serious problem in this direction. There is no doubt that the demand for personnel is still too small. A company only needs a software framework and a software specification. As the company's middle-level technical management, technical experts, or just ordinary developers, you have no right to interfere with these things-even if your approach is better, but comprehensive It is impossible to replace the code structure. If your idea is not compatible with the existing framework, it will only bring confusion-no one is willing to take this risk, and you are not willing to because it means you have to add a lot The class is very tired and has no actual effect. This is why most programmers are not willing to take over other people's projects, but are willing to reinvent the wheel.
So you can have your own ideas and you can practice in your spare time, but if you really want to make a living by doing so, you really need opportunities, and the pit is also deep. When you really jump to a small company and find that you can fully control it , To practice your ideas, you will find that your ideas are actually very immature and they are all pits, until you and your company are pitted to death. Generally speaking, if you don't have more than five years of proficient business experience, you shouldn't challenge this kind of thing at all.
Business is the foundation for more than 90% of programmers. Business logic is a unique system for each industry. The automation of traditional human processes is the core demand for programmers.
Even in our game industry, I wanted to play an RPG in the past, which is DND, which means holding a dice and pen for a long time to kill a monster—it’s impossible for you to introduce any skills, talents, mutual restraints, crit, because You don’t want to do a big math problem in one round-but now, you can pick up your mouse with a single click, and these things will be done automatically, and you can operate the unit A with 200 people at the same time. This is simply impossible on traditional board games
Banks have business needs for banks, restaurants have business needs for restaurants. Generally speaking, each industry has its own personnel management needs and information relationship needs-and a new programmer and an experienced programmer are the biggest The difference is actually the understanding of business needs
Why do game companies prefer to hire programmers to play games?
Think about the plan and tell you that our characters need to crit-what a clear sentence, a person with game development experience may have already made up all the code in his mind. A person who has no experience in game development, but loves to play games, at least fully understands what the planner is talking about.
And a tech master who never plays games? Even if he can use the 0 and 1 on the phone to press a windows95 in an hour, you have to explain to him the detailed mechanism and calculation process of the crit, how can it take half an hour? How many basic concepts like crit in the game? How long does it take to explain one by one? Are you going to explain these projects, do you still want to do it? That’s no way, you have to work hard and get off work overtime
Proficiency in business logic will also help you switch horizontally in the industry. A financial software engineer who has been working for several years and looking at various financial analysis processes every day is likely to be able to go to financial analysis by himself. Are there few game software engineers thinking about making independent games by themselves? Why do most programmers stop making programs when they are older? Because everyone is doing business, and there are so many businesses, I have developed it, so I naturally think more about how to use the existing automatic business to realize it, not to mention, after so many years of business, your understanding of the business Far more than the "quasi-professionals" who have just entered the industry, your value has long been more than just a programmer. Therefore, senior programmers rarely do business, and most of them do languages or algorithms.
Let's talk about it first, I hope friends who want to get into the pit can have a better understanding of this industry