After working for a long time, programmers feel more and more powerless. I will pay for your lost road!


Many programmers who have worked for a year or two start thinking about what to do in 5 years. Should you continue to do technology or change careers? In any case, the editor feels that in any profession, as long as you study it in depth, you can learn something.

Today, I will share with you an article about 7 valuable experiences summarized by a programmer who has worked for 15 years.

If you want to continue to develop in the direction of technology, this article is worth your time to read!

I have exchanged an interesting phenomenon with many people. From the time I just graduated to the age of 30, I feel that time flies very slowly, and I always feel that I am still young, but once I am over 30, time is like a white horse. Years passed by.

I am too, seeing that it has been almost 15 years since graduation. In 15 years, I have grown from a rookie who has just graduated to a technical backbone and became an architect.

Looking back, I heard a word from my relatives and entered the computer industry by mistake. It seems that I did not go wrong. Although programming is boring and hard, if you are really interested, you can experience the fun and get a good return.

01 curiosity

Liu Cixin described such a plot in "Wearing the Tao": On the ancient African continent, a primitive man inadvertently raised his head and looked up at the starry sky. The gaze time was a little longer, exceeding the threshold set by the aliens, and immediately pulled The alarm sounded that mankind is about to produce civilization.

Because aliens believe that human beings have developed curiosity about the universe, the emergence of civilization, and the development of science and technology are only a momentary matter.

This is indeed the case. Curiosity drives human beings to move forward. In just a few thousand years (as opposed to the primitive age of hundreds of thousands of years), they landed on the moon and worked hard to expand to other planets.

The same is true for programmers. If you see new technology, the new product does not shine like a child sees a new toy, and there is no urge to play on your own computer. You need to carefully consider whether it is true. Interested in software development?

If you are not interested at all, don't waste time, or switch careers as soon as possible. There are more promising careers waiting for you.

Without curiosity, one is unwilling to go back to the source and pursue the essence of technology.

Without curiosity, it is difficult to calm down, to endure loneliness, to stay away from impetuousness and code struggles, and it is even more difficult to overcome the challenges brought by this hard-working industry to the position of architect.

Without curiosity, he is unwilling to learn new technologies. If an architect is not sensitive and forward-looking about technology, he has always held a set of technical architecture unchanged, and it is estimated that he will soon be eliminated.

Of course, except for those with strong self-control, but then again, wouldn’t it be very painful to rely on self-control to do things that you don’t like?

When I was in a company training class about Leader, the teacher kept talking about Passion (passion), Passion, Passion, but I always felt that there was no curiosity, no interest, how could Passion come into being?

Therefore, curiosity/interest in technology is the foundation of everything.

02 Develop a computer thinking model

I have read an article before, called "Learn to program, not learn Java", which is about being able to think in a computer way.

The current computer is still very "mentally retarded". You can’t say something like this: "Computer, I want to create a class similar to Java’s ArrayList, with get, add, and remove methods. Also, the capacity of this ArrayList is not fixed and can be free. Growth, write it to me quickly!

Of course, modern computers can't write it.

Instead, you can only tell it to do things in a very, very low-level computer language in a way that the computer can understand: create a class, allocate a fixed-size array to store data, and use a size to record the storage in the array. How much data was collected.

If the array is full, you need to increase the array and copy the data from the old array to the new array.

There are a lot of annoying details here that you need to deal with. If you don't pay attention, you will make mistakes-computer programming is like this.

It is the basic skills of programmers to develop a computer's way of thinking and to smoothly transform the needs of human language into computer language.

Many people know grammar and frameworks, but they are not good at the basic skills, so they can only work with junior programmers.

The training of this basic skill is data structure and algorithm. My experience is to do more exercises (I did all the exercises after data structure in college), let this thinking be solidified in my mind, and future programming can be easily handled.

03 A solid foundation, thorough understanding

I participated in the development of a little open source software a long time ago. I was fortunate enough to see the resume of an old programmer. What shocked me was that he even programmed on Altair, the earliest computer.

That's right, Altair is the so-called "personal computer" that doesn't even have a display or a keyboard. It relies on toggle switches for input and indicators for output. Bill Gates and Paul Allen wrote a Baisc interpreter on it. Since then Start the road to Microsoft.

If you have the experience of programming on such a machine, I believe that these old programmers have far more understanding of hardware, drivers, operating systems, and application software than those of us today.

I was writing an article before and encountered a problem: a process needs to read a file. The bottom layer uses DMA. After the DMA completes the file reading, the CPU needs to be processed through interrupts, but the CPU and the interrupt handler do not know the process at all. ID, how does it associate with it, and how does it wake up the waiting process?

This question made me realize that, in fact, I have not integrated the basics of computers.

We have all learned computer composition principles, operating systems, compiling principles, computer networks, databases, and assembly language in our universities. Can we integrate these knowledge to open up the two channels of governors and establish a picture of computer operations in our minds?

Combining this knowledge into one, I believe it can surpass most programmers.

The level of software development and packaging is now very high. As long as you learn Java, you can do a programming job. As you get deeper and more specialized, these basic problems will emerge.

More importantly, the basic ideas of computer hardware and software have not changed much in the past few decades, such as caching, adding abstraction layers, etc. Armed with such basic ideas, learning new things can not only learn quickly, but also understand. Will be more thorough.

04 To thoroughly understand the nature of technology

Let me give you an example in Ant. Most people learn Ant just to learn how to use it. They realize that Ant provides a lot of built-in tasks to help us easily complete automated constructions, such as commands.

<copytodir="…/backup/dir">

<filesetdir=“src_dir”/>

<filtertoken="TITLE"value=“FooBar”/>

Few people think about why Ant tasks are described in XML? Why doesn't Ant provide a set of Java class libraries/APIs for programmers to use, wouldn't it be more natural?

One of the important reasons for this is that XML can customize tags, so its expressiveness is unparalleled; if you use java, its syntax does not allow you to customize a keyword like copy, fileset, and can only define some classes to simulate these Copy, Fileset , It’s not so simple and clear, don’t believe it, try it.

The important enlightenment that Ant gives us is that using XML to describe tasks can greatly expand the capabilities of the language. But the problem with Ant is that programmers need to deal with too many details, specify the source code path, specify the path of the compiled file, specify the path of the resource file, specify the required jar package and its location, which is very annoying.

So Maven came out to solve the Ant problem by using the "convention better than configuration" approach.

Once you understand the nature of technology, you can learn by analogy and learn quickly. This is especially important in the software industry where technology is rapidly updated.

It’s not enough to just learn to use it, not only to know how, but also to know why.

Stopping and thinking is the essence of progress.

05 To be able to write beautiful code

Architects are not high-ranking people who just talk and don't do things without code. An architect is first of all an excellent programmer, who must be able to write the core functions of a project or product, and be able to roll up his sleeves to solve problems in the project at any time.

How can you tell if the code is not beautiful? How can you convince people?

The so-called beautiful code is not only clear, easy to understand, and elegant, but also needs to be functional, with no or very few bugs.

In fact, if the code is simple and elegant, there is generally no problem.

It is not easy to write beautiful code. It requires clear thinking, a good programming foundation, excellent abstraction ability, and proficiency in a language.

06 abstract ability

The ability to think abstractly cannot be overemphasized.

The actual needs are complex and complicated. If the architects cannot abstract these chaotic requirements into some "concepts" and think at the conceptual level, the system will simply be impossible to design.

But after abstracting the concept is not enough, we need to see if the concept is orthogonal and whether it can change independently. If not, consider a new concept abstraction.

"Orthogonal" refers to linearity and irrelevance. It is very important. Just like a point (x, y), changes in the x-axis will not affect y, and changes in the y-axis will not affect x. This is orthogonal.

"Orthogonal" is powerful. (x, y) can express all points in a two-dimensional plane. If a z-axis is added, not only can all points in the three-dimensional space be expressed, but each axis can be changed independently.

If you can make an orthogonal design, the development and maintenance of this system will be very comfortable, thinking that you can safely modify one aspect without affecting the others.

"Find changes and encapsulate changes" that design patterns have always emphasized actually means this.

There is no shortcut to the training of abstract ability, it is the accumulation of experience, diligent thinking and learning.

For example: programmers who learn Android can think about how Android abstracts unknown and complicated applications?

Why are there four components: Activity, Service, BroadcastReceiver, and ContentProvider?

07 Technical leadership

An important lesson I learned at IBM is: Use the influence of technology to lead, not authority and position.

In other words, in the vernacular, it is to be able to convince the technicians. With technical influence, your voice in the team will be heard and respected.

But influence is not built quickly. It is a long process: you solve a technical problem, and the solution you propose is proven to be feasible...

Such things will accumulate your image in the minds of others bit by bit, build your personal brand, and eventually everyone will put a label on you: Daniel.

Every one can go, as long as you are willing to go on, there will be a good result!

Sharing at the end of the article: Friends who need learning materials can pay attention to this series of video materials and interview documents for free!

After you learn about the latest Internet technologies, the so-called workplace bottleneck has almost disappeared. I believe that the annual salary of 30W+ is also very simple! The key depends on whether you are willing to learn!

Use every minute and every second of your time to learn to improve yourself, and don't use "no time" to conceal your mental laziness! Try hard while you are young, and give your future self an explanation!

I am a hitter in the IT industry, and I am still learning automation recently. I also share it with my friends! If you are interested in python automated testing, web automation, interface automation, mobile terminal automation, interview experience exchange, etc., you can follow my WeChat public account:[Sad Spicy Strips], Obtain the interview information of the software test engineer by yourself!

My test learning exchange group: 902061117 group has technical experts to communicate and share together~

If the article is of interest to you, please reach out to make a fortune and give me a like. Thank you for your support. Your likes are my motivation for continuous updates.

Recommend good articles:

Packaged as a test engineer with 1 year of work experience, my advice before the interview is as follows

What exactly should I learn in automated testing?

Why not consider Tencent for job-hopping? Talk about a little bit of the past between me and the goose factory

Which is more advanced, automated testing or manual testing?

Novice must see: How to write a qualified test case?

Python login interface test problem record and solution (dry goods)

Guess you like

Origin blog.csdn.net/weixin_50829653/article/details/115327028