Joke Collection Website - Mood Talk - From programmer to software engineer[1]

From programmer to software engineer[1]

From programmer to software engineer [1]

After reading the series of articles on programmers, I feel the same way. As a person who has been engaged in software development for 13 years, I would like to give some advice to those who have, will, or are interested in embarking on this path.

First, let’s talk about programmers and software engineers. Although they are all programming jobs, there is still a slight difference.

The main difference is that programmers write programs (already have processes, pseudocode or design templates) into code; they need to be proficient in at least one programming language. Software engineers, on the other hand, have the ability to describe the purpose into a programming language and implement it. For example, the ability to describe mathematical algorithms, natural language, and thinking patterns into program algorithms, program flows/classes, or/and artificial intelligence, and write them into codes.

For those who are new to the industry, of course the emphasis is on language. To be a qualified programmer, you must first be proficient in the language. Including language features and implementation capabilities. For example, if the interview questions are asked in Chinese, the interviewees are required to master the encapsulation of classes in C; the overloading of constructors and overloading of operators.

After working for a year or two, if you want to continue to make a living, you must improve yourself. The first step is, of course, a deep understanding of the language, especially the language's way of thinking, how the compiler works, and common design templates. Take the polymorphism of C as an example. Many companies will ask what is a virtual function/pure virtual function (way of thinking) in interviews? How to implement function overloading in C (function pointers and understanding the compilation process)? Implementation of interface classes/tool ??classes/factory classes and Sigleton classes (commonly used design templates). Another big part is memory management.

If you can have a deep understanding of the language itself, congratulations, your title is now at least a senior programmer.

After you are confident in your language, the next step is to think about where you want to develop. Is it the management side (project manager) or the technical side (software engineer). Since we are discussing programming here, we will not consider the project manager for now. There are actually two ways to develop into a software engineer. One is to take the path of system software engineer or architecture engineer; the other is to be algorithm engineer.

For my friends in China, I suggest you become an architecture engineer. The requirements are to have a broad range of knowledge, be familiar with the entire system, be able to quickly understand and analyze customer/design needs, quickly estimate the workload, risks and required resources (assuming a considerable part of the project manager's tasks), and be able to work according to the existing technical staff Reserves offer a solution. Of course, certain expression skills and document writing skills are also required. For example, I visited the Agricultural Bank of a certain province and talked with the other party about the connection between bank cards and hospital medical cards. That night, I worked with people from the marketing department and worked all night to write out a 60-page technical plan and an additional 40 pages based on Tender document for this project.

Generally speaking, it takes no more than two or three years to achieve an in-depth understanding of the overall system. Therefore, the advice to domestic programmers is not to change jobs frequently, especially not to change jobs frequently across industries. Get a thorough understanding of the software in this industry, and it is best to have worked in every department or module. If you have this idea, you can usually communicate with the project manager, and usually they will encourage you to work in various departments/modules.

After I went abroad, I found that the situation had changed a bit. Due to the differences in language and culture, I did not have much confidence in myself as a system engineer. I had no choice but to turn to the path of algorithm engineer.

After deciding on this path, I suddenly found that my math ability was too poor. I had to retake advanced mathematics such as linear algebra, probability and mathematical statistics. At the same time, I read "Data Structures and Algorithms: C Edition" from beginning to end. Then I finally got a position.

The first task at that time was to write a program to compress bmp into jpg in an embedded system.

You may ask, this source code is all over the Internet, why do you need to write it yourself? In fact, this is why I don’t recommend that domestic engineers take the algorithm path. Unless you are a master of mathematics and have your own original algorithm. Otherwise, there is really not much room for algorithm engineers to survive in China. But there is a big difference abroad. More formal companies basically prohibit the use of open source. Because open source is also copyrighted, some cannot be used commercially, and some are copy left that companies dare not touch. Because copy left requires you to use his code, you must also disclose your code.

Of course, we can look at those open sources and rewrite them ourselves. But believe me, usually if you don't want to make a simple substitution of variables, it is better to read the algorithm document itself than to read the original code.

?;