How much is the difference between a master programmer and a rookie?

How much is the difference between an average programmer master and a rookie? Don't miss the salary increase. The time to make software is getting longer and longer. I find that making software is getting harder and harder. Where is the difficulty? The difficulty is how to make a good software. What is a good software standard? Two words, easy to use and beautiful! The greatest value of programmers lies in their ability to make useful and beautiful software. Therefore, I think the value of programmers is definitely not in the technology itself, but in the ability to make useful and beautiful software. This is an open topic. Everyone is a rookie. I hope and wish every technician can become a master as soon as possible. I also hope that more veterans will share their experience. In this article, I will share based on my own experience, hoping to give people more helpful information. Here, I just want to analyze from a technical perspective, technology is not necessarily related to income.

 

1. Naming

 

From the naming of the program code, we can see a person's level. The worst naming is to use Chinese, Pinyin, Pinyin abbreviation, Chinese and English mashup, and then either imitate the name or simply name it randomly. The typical imitation naming is "××DAL". To be honest, I think a name similar to "UserDAL" is too unsightly. Generally, I know that this is a typical hierarchical imitator. Someone with some experience. Arbitrary naming means that when writing code, the name is meaningless at all. For example, var list = new List can actually be written as var users = new List. If you want to name it more meaningfully, you only need to directly describe the name of each class, each method, and each word in the meaning of your development.

 

 

 

 

2. Model abstraction ability

 

The model determines the availability, stability, ease of use, maintainability, and scalability of a system!

 

This model is not UML modeling, but the core of the software. It is the principle description abstracted out when you design a software. The model determines the quality, ease of use, and scalability of a software. All excellent software has a common feature, that is, its model is very beautifully constructed, of course, there are not very good software, and the model is also very beautiful. Microsoft MEF, I personally think its model construction is very beautiful and elegant, interested students can read the article "Experiencing the exquisite design of Managed Extensibility Framework". The core of MEF is the composition primitive, as shown in the figure below, it simply defines the support basis for dynamic composition, and then expands layer by layer.

 

Of course, because I wrote the article, I have to show off the OSGi.NET design. It can be said that the design of OSGi.NET. The design of OSGi.NET is also similar to MEF, the kernel is very simple, just to achieve three major functions: dynamic plug-in, service-oriented, and extension. However, we can support any application such as WinForm, ASP.NET, ASP.NET MVC, etc. from simple OSGi.NET, and expand from a simple console to an automated deployment and software production line platform such as iOpenWorks. Its expansion method is:

 

Desktop plug-in applications such as WinForm = OSGi.NET + application plug-ins

 

ASP.NET application = OSGi.NET + WebExtension + Web plugin

 

MVC application = OSGi.NET + WebExtension + MvcWebExtension + Web plugin

 

Automatic deployment = OSGi.NET application + iOpenWorksBundleRepository + iOpenWorksBootstrap + automatic upgrade plugin

 

Remote service = OSGi.NET application + remote service hosting plugin

 

Load balancing = OSGi.NET application + remote service hosting plugin + load balancing client plugin

 

 

 

Any application on OSGi.NET is based on combination and expansion, and does not constantly change the code of the OSGi.NET core itself. In addition, the OSGi.NET core can support .NET Framework, Mono, and .NET Compact Framework, because it has a very small design model and does not use too much library support.

 

Three, humble and easy-going

 

Our customers are large companies and have contacted many types of technicians. You can find a very interesting phenomenon. After in-depth contact, those who know how to respect others and are relatively humble will find that their skills are often great; and those who speak harsh and rude, think this technology is not good, that technology is nothing It's amazing. This technology is useless. My own stuff is pretty good. Such people are generally not good at level, experience, and knowledge. Software problems are not simply solving a technical problem. From a technical point of view, as long as we learn to use technology, then we have mastered the technology. Therefore, pure technology is very simple. On the contrary, the cooperative development and management of software, the ease of use of the software, and the beauty of the software are the most troublesome things, and they are often things that programmers with average technical level and lack of experience do not realize. I have been in contact with many general programmers, mostly in this category. They think the software is too simple and there is nothing great. They dismissed any ideas, they already felt that they had mastered a lot of real technology.

 

Four, exception handling and stability

 

Through exception handling, we can see the rigorous and solid basic knowledge of a programmer's programming. For Java developers, you will find that every method may need to handle exceptions and declare the exceptions that this function needs to handle. The mandatory constraints will force developers to consider and think about it habitually. However, for most people, the way it handles exceptions is simply to use try {…} catch(Exception anyException) {// Ignore exceptions}, in this way to catch all exception information. The advantage of this is that it is fast and stupid. The disadvantage is that once a problem occurs, you don’t know where the problem happened or what happened. It would be better if there is a reliable QA, such as foreign companies, they all have standardized testing methods and testing procedures. , Once a problem is found, it will recapture a complete description to the developer. However, it is normal that there is no strict test in China, so when there is a problem, you will be foolish. It is absolutely impossible for a customer to give you a complete Repro the way that a problem occurs. Once a problem occurs, the customer will be impatient, so what should I do next? You just work overtime honestly, and honestly guess and find the problem. When codes like "try {…} catch(Exception anyException) {// Ignore exceptions}” flood the entire software system, you can imagine how terrible it is. It's weird that this software is stable!

 

I used to work in a thermoelectric company. At 12 o'clock in the middle of the night, people from several manufacturers gathered in thermoelectric and waited for data collection at 0 o'clock. Once the data is less, then you are in trouble. After I went to the site, I found that many developers took a notebook and needed to keep looking at the database, or needed to open the software Debug, and then check whether the data came up normally at every moment. This really makes me overjoyed, because the competitors are too weak! ! Before this, your software is not so confident in its continuous and stable operation 7×24 hours? For our software, I can see everything through the messages and logs of the system running process, as follows, the message window can show the detailed process of the system running in the background. In addition, there is a very complete log. I can find any abnormalities and try to reproduce them.

 

 

 

Regarding exception handling, the other side is that when novice programmers write code or implement functions, they generally do not consider the negative situation. A software may be able to pass through normal steps, but if something unexpected happens, it will be troublesome. The following is a typical code.

 

If(*****)

 

{

 

// ….do something…

 

}

 

This code handles the if, but what if there is an else situation? It is conceivable that there will be unexpected situations in the system. Therefore, this is also one of the reasons why the systems made by rookie programmers are generally very unstable. When making programs, only function realization is considered and unexpected situations are ignored.

 

Five, elegance and beauty

 

Novice programmers are not lack of aesthetics, they lack the abstract ability of elegance and beauty. A good system has to do two things, easy to use and beautiful! Therefore, this is definitely not just a stacking of functions. Many domestic softwares are deeply imprinted by a technician’s design. At a glance, you know that this software is designed and implemented by a technician, and you can know the implementation process of this software at a glance. This is simply horrible, but everyone Look at the officials, this is your opportunity.

 

When rookie technicians develop functions, they usually stack them from the perspective of realization, how simple and how to come. I will not analyze carefully what the user will do when operating this function, and how the various functions are organically combined to complete the integration. On the contrary, some programmers with better skills often have to face customers directly, and are often scolded by customers, and they are a little conscious.

 

Of course, some programmers just quit because of self-esteem. However, I think that powerful programmers basically have user awareness, and I also hope that their software can have a good evaluation and even affect society. Easy to use and good-looking are the prerequisites for software to be widely adopted. Therefore, we need to learn abstract elegance.

 

Six, solid foundation

 

Technical knowledge determines the level of technology a person can do. The basic knowledge includes computer composition principles, computer operating systems, network principles, database principles, computer graphics, compiling principles, data structures, discrete mathematics, artificial intelligence, and so on.

 

On top of these basic knowledge are software development languages, class libraries, frameworks, process-oriented, object-oriented, service-oriented programming ideas, architecture ideas, and so on.

 

This knowledge will not necessarily affect your current job, but it will definitely affect your pattern, and that pattern will definitely affect your own development. I have met people with poor theory, but technology has some influence in the company. Therefore, they are very disdainful of technical principles, and even complacent because they don't understand too much theory and are good at actual combat. These people will show contempt for those who understand the theory but have average hands-on ability, but they don't know what those masters who have both basic knowledge and hands-on ability do. Just like me, I really can't figure out how those technical geniuses developed software such as a database and operating system. Therefore, if you have found that your foundation is not solid enough, then you should practice your inner strength when you have time!

 

Seven, documentation and presentation skills

 

Many technicians can't write documents. However, frankly, if you want to get better rewards, documentation is absolutely critical. Without documentation, there is no communication, and there is no transaction. Someone mentioned that "documentation is the primary productive force", and I very much agree. There are many types of documents, and the targets are also different. Different people have completely different understanding of documents. Therefore, your documentation must be adapted to your goals. This is too difficult for technical people, he thinks it is better to write code as fast as possible.

 

The ability to express determines the scope of influence of the technology you do, determines your influence, and determines your prestige. Therefore, it absolutely affects your remuneration. Because of this ability and affect your salary, you may feel a loss in your heart, but there is no way. This is a flaw. It is not only that I am not good at writing documents, but I am good at technology. If one day, someone who is good at fooling and not as skilled as you climbs on top of you and leads you, that is also right. Don't blame others for being good at fooling around, but think of ways to make up for your own flaws.

 

8. Positive attitude

 

People with good skills are not bad for ordinary people. In a simple sentence, if you want to be good at technology, you must invest time. If you have time to invest in technology, then you don't have time to invest in other aspects, especially negative fraud. Therefore, technicians are generally more reliable.

 

A positive attitude is not only for technology, but also for life. Once you have a positive attitude, the process from a rookie to a master is only a matter of time!

 

Nine, feel that the software is not valuable

 

What I particularly bother me is to make a software and talk about the cost with some technical personnel who are not very skilled. As long as you want to do well, which one thing is simple. All those who rely on conscience and ability to make a living rely on their own strength to get suitable remuneration. Each of us needs to have an income. It's the same for me, besides, I'm still the kind of "boss" who sees money in the bones of technicians, so this is a big deal. However, fortunately, everyone who meets me can tell that I am also a technology. However, this still does not change the idea that some technicians think that software is not worth money. Their theory is that if this function is put on me, I will get it in a day. Why do you want so much money?

 

But, are we doing the same? There are many ways to implement a function, like the data collection I said. If your data collection implementation does not have the following auxiliary functions "1, 2, 3", the background implementation is much simpler.

 

 

 

If there is no instruction to retry, no multi-threading, no asynchronous refresh, no 7×24 hours stable operation, no data loss, no order priority arrangement, no multi-threading and distributed cluster collection, no support for 1GB data collection per day, etc. Wait for these non-functional requirements. Then this software will be simpler. I have also seen someone use a console and a single thread. The information displayed is binary numbers that are completely incomprehensible. After running for a while, the CPU will be 100% and the memory is constantly increasing. . This can be regarded as acquisition software.

 

However, novice programmers generally evaluate software according to their own way of doing things. If they do not have good experience, they generally think that the software is very worthless. In fact, it is very difficult to make good-looking and easy-to-use software, and it is even harder to make good-looking, easy-to-use, and maintainable software for expansion.

 

There is also a software customization that I encountered a few years ago. One person directly said that this is a simple CRUD, 200 yuan per page, you can calculate the value of this system, I am afraid to deal with these people, and I am afraid to do it. The business software is customized. I once saw a data acquisition software. The person in charge of the software said that they realized this software by 3 people a month, and I told him that we need more manpower and more time, and he was very disdainful. Finally, I wanted to take a look at their software. He opened it and let me see. I clicked a button without inputting information in a TextBox, and the system crashed directly, throwing an exception. After reading it, I laughed and said, we don’t do this kind of software that directly binds data through drag-and-drop controls. We need to make a useful and good-looking software that can be easily traced, easy to track status, and supports multi-threading and distributed Software deployed in a cluster.

 

Software is a labor product full of wisdom. If it is noble, some software is invaluable. Of course, the software I make is not at this level!

Guess you like

Origin blog.csdn.net/woaisjm/article/details/112807134