The difference between "coder" and "software engineer"

foreword

In today's society, "code farmers" seems to have become a general term for this group of people who can write code. But being able to write code has a completely different meaning from being able to write good code.

Hannah Arendt divided human activities into Labor, Work and Action in The Human Condition. Arendt believes that the purpose of "labor" is to maintain life, and its results are consumables, because labor must be repeated; while the purpose of "work" is to build the world, and its results are sustainable, so "work" is Once and for all. People who engage in "work" Arendt called "craftsman".

The difference between "coder" and "software engineer" is Arendt's best interpretation of "labor" and "work" in "The Human Condition".

02. The definition and responsibilities of "coder" and "software engineer"

The so-called "code farmers" generally refer to those who can write code and are good at writing code. They can use various programming languages ​​to implement specific functions, fix errors, and perform basic unit tests. Such a group of people play an important role in the project, but their responsibilities are limited to specific coding work.

However, the title "software engineer" requires more advanced skills and responsibilities than "coder". The basic quality of a software engineer is that they must have good code writing specifications, style, correctness, security, stability, reusability, and readability. More importantly, you must have requirements analysis, system design, documentation, project management, code review, and research capabilities.

03. Characteristics of "Software Engineer"

In this section, we will look at some specific characteristics of a "software engineer" and discuss these characteristics.

1. Active initiative and comprehensive ability

A "software engineer"
is not just a person who performs tasks passively, but needs to have a proactive spirit and ability to lead and promote the progress of software development projects. Able to think independently and provide solutions, with good problem-solving and decision-making skills. In addition, a "software engineer"
also possesses a wide range of knowledge and skills, not only understanding programming languages ​​and development tools, but also understanding related technologies at various stages of software development.

​ In "How to Read a Book", passive and active discussions are also given. A passive reader is prone to doze off when encountering difficulties in reading, while an active person rarely does this. Moreover, these people read with questions. During the reading process, they will record Encountered problems, and throughout the reading process, conduct self-confirmation, thereby improving comprehension.

2. Demand analysis

​ In "The Art of Code", Mr. Zhang Miao described it like this:

​ Requirements analysis: Define the black-box behavior of the system/software, which is seen from the outside and explains "What".

​ The following is an example of a simple requirement description: "The design purpose of the matchmaking service is based on factors such as player's points in qualifying, winning rate (current season, past), failure rate (current season, past), commonly used heroes, etc. , as much as possible to match players with similar competitive levels in one game."

​From the above description of requirements, we can roughly analyze several key points of planning requirements:

​ 1. The numerical reference dimension of player matching involves the current season's qualifying points; the current season and historical season's winning rate and failure rate; Or jungle, roaming or support)
2.
Fairness, the planning hopes to match players with similar competitive levels into the same game as much as possible.

​ 3. When the match fails for a long time, do you need to expand the player's match score range? Or, is it necessary to start a match with a bot instead of a player?

From a technical point of view, we should also draw several key points of demand:

1. Deployment method of matching service:

​ Need distributed deployment?

​ Do you need to deploy according to different gameplay? (Match, Ranked, Fire Mountain, etc.).
​ Need different matching services to be responsible for matching between players with different scores?

2. Matching service capacity:

​ What is the hardware configuration like? (CPU model, memory, etc.)

​ How many concurrent player requests need to be processed at the same time

​ Complete a battle match, what is the time unit consumed, and the specific time

3. Matching service is down

​ When the service is down, what is the range of players affected, and what is our tolerance?

​ How to quickly pull up the suspended service to provide players with normal service and game experience.

3. External interface

​ What interfaces can we provide, and for whom? For example, the matching interface provided for game services; the indicator interface provided for operation and maintenance.

4. Scope of application of matching services

​ Do we provide matching services for a specific game, or we can provide matching services for any game.

​ Can the algorithm of the matching mechanism be customized by the specific game business? Either the matching service provides a built-in matching algorithm, or both.

​ Software engineers must master requirements analysis and raise questions during the review process, such as the rationality of the design. The rationality of demand should not only consider the difficulty of realization, time cost and other factors, but also the "return rate". As far as many teams I have come into contact with, they are still stuck on issues such as difficulty and high time cost, and many requirements are considered unreasonable for these reasons.

3. System design

​ In "The Art of Code", Mr. Zhang Miao described it like this:

​ System design: the mechanism of designing the white box of the system/software, it is seen from the inside, and it is necessary to explain "how" and "why".

​ In Wikipedia, the definition of system design is: System design is the process of defining the architecture, modules, interfaces, and data of a system to meet specific requirements.

Therefore, we can draw such a conclusion that the main points of system design include: architecture, modules, interfaces and data.

​ The system design, to a large extent, depends on the requirements analysis. In addition, Mr. Zhang Miao also said that key algorithms and system design ideas should also be included. Because, he feels that the process is more important than the final result, and the purpose is for the latecomers. I also very much agree with this.

4. Project management

​ In the book "201 Principles of Software Development", Principle 127 states that good management is more important than technology.

​ Project management is not the responsibility of team leaders and product managers, but also the ability that "software engineers" should have.

​ In the traditional concept, there will be a clear distinction: "manager" and "executor". However, this concept can no longer meet the needs of modern society. In the book "The Effective Manager", it is clearly pointed out that "every knowledge worker is actually a manager". The main idea expressed is that we must work and think like managers. And this kind of ability needs to be cultivated for a long time, and cannot be acquired immediately after the "software engineer" becomes a leader. This is one reason why leadership skills in today's software development teams are considered generally inadequate.

​ The dimensions that need to be considered in project management include: cost, time, scope, and quality.

​ In the book "201 Principles of Software Development", it is also pointed out that people and time are not interchangeable.

​ The idea of ​​increasing the development schedule by adding people in the middle will lead to further delays in the project to a large extent. Because these newcomers are inconsistent with the people in the previous project, their understanding and familiarity with the project are inconsistent. This requires "old" to bring "new", so the cost will be infinitely magnified. Therefore, with the number of people joining midway, the time cost may increase at an "exponential" level.

​ Finally, regarding the project summary, we must do the following: clear responsibilities, careful planning, seeking truth from facts, quality first, communication and collaboration, strict tracking, risk control, rhythm, summary, and continuous improvement.

5. Communication skills

​ During the communication process, we found that different departments have different definitions of the same "transaction", and this often happens even within the same department. Based on the different degrees of understanding and abilities of everyone, the views and conclusions on the same thing are naturally different.

​ Before the project starts, we must give the same definition to the same "transaction" and reach an agreement on requirements analysis. Before you can get such a result, you must not be busy starting work, which will bring great difficulties and challenges to your future work.

​ Communication skills can be improved by writing documents, reading excellent documents, literature or reading materials. Communicate with other people on a regular basis and in an organized manner.

6. Code review

​ Code review is also a very important ability that a "software engineer" should have. But in many teams, the code review process is often ignored and not included in the development plan. Even if individual teams have such a mechanism, many reviewers only briefly scan grammar and coding style issues, and hardly consider architecture, design, modules, data, quality, logic, etc. This kind of review is an invalid review , meaningless, and the reviewers are not responsible for the final review results.

Another situation is even more terrifying. Because of the so-called "interpersonal relationship" considerations, the reviewers dare not point out the problems in the code, which eventually leads to a decline in product quality. The most important thing in code review is to ensure that the quality of the code comes first under the premise of fairness and justice, without any other factors involved.

7. System architecture

​ The system architecture is a description of which subsystems the system contains, the responsibilities (specific functions) of each subsystem, and how the subsystems cooperate with each other to complete specific requirements.

​ The system architecture can be considered from two aspects of data and business. Abstract data storage, which abstracts data storage from business logic and operations, and is responsible for independent data structures.

04. Summary

This article describes and compares the definitions, responsibilities, and characteristics of the two roles of "coder" and "software engineer", and demonstrates the capabilities that software engineers should have. Compared with simply writing code, software engineers are far beyond "code farmers" in terms of comprehensive ability and quality.

Based on the above, I hope everyone can accurately recognize the importance and differences of the two roles of "coder" and "software engineer". Not all "coders" are "software engineers", but a "software engineer" must be a qualified "coder".

1. Introduction to Python

The following content is the basic knowledge necessary for all application directions of Python. If you want to do crawlers, data analysis or artificial intelligence, you must learn them first. Anything tall is built on primitive foundations. With a solid foundation, the road ahead will be more stable.All materials are free at the end of the article!!!

Include:

Computer Basics

insert image description here

python basics

insert image description here

Python introductory video 600 episodes:

Watching the zero-based learning video is the fastest and most effective way to learn. Following the teacher's ideas in the video, it is still very easy to get started from the basics to the in-depth.

2. Python crawler

As a popular direction, reptiles are a good choice whether it is a part-time job or as an auxiliary skill to improve work efficiency.

Relevant content can be collected through crawler technology, analyzed and deleted to get the information we really need.

This information collection, analysis and integration work can be applied in a wide range of fields. Whether it is life services, travel, financial investment, product market demand of various manufacturing industries, etc., crawler technology can be used to obtain more accurate and effective information. use.

insert image description here

Python crawler video material

insert image description here

3. Data Analysis

According to the report "Digital Transformation of China's Economy: Talents and Employment" released by the School of Economics and Management of Tsinghua University, the gap in data analysis talents is expected to reach 2.3 million in 2025.

With such a big talent gap, data analysis is like a vast blue ocean! A starting salary of 10K is really commonplace.

insert image description here

4. Database and ETL data warehouse

Enterprises need to regularly transfer cold data from the business database and store it in a warehouse dedicated to storing historical data. Each department can provide unified data services based on its own business characteristics. This warehouse is a data warehouse.

The traditional data warehouse integration processing architecture is ETL, using the capabilities of the ETL platform, E = extract data from the source database, L = clean the data (data that does not conform to the rules), transform (different dimension and different granularity of the table according to business needs) calculation of different business rules), T = load the processed tables to the data warehouse incrementally, in full, and at different times.

insert image description here

5. Machine Learning

Machine learning is to learn part of the computer data, and then predict and judge other data.

At its core, machine learning is "using algorithms to parse data, learn from it, and then make decisions or predictions about new data." That is to say, a computer uses the obtained data to obtain a certain model, and then uses this model to make predictions. This process is somewhat similar to the human learning process. For example, people can predict new problems after obtaining certain experience.

insert image description here

Machine Learning Materials:

insert image description here

6. Advanced Python

From basic grammatical content, to a lot of in-depth advanced knowledge points, to understand programming language design, after learning here, you basically understand all the knowledge points from python entry to advanced.

insert image description here

At this point, you can basically meet the employment requirements of the company. If you still don’t know where to find interview materials and resume templates, I have also compiled a copy for you. It can really be said to be a systematic learning route for nanny and .

insert image description here
But learning programming is not achieved overnight, but requires long-term persistence and training. In organizing this learning route, I hope to make progress together with everyone, and I can review some technical points myself. Whether you are a novice in programming or an experienced programmer who needs to be advanced, I believe that everyone can gain something from it.

It can be achieved overnight, but requires long-term persistence and training. In organizing this learning route, I hope to make progress together with everyone, and I can review some technical points myself. Whether you are a novice in programming or an experienced programmer who needs to be advanced, I believe that everyone can gain something from it.

Data collection

This full version of the full set of Python learning materials has been uploaded to the official CSDN. If you need it, you can click the CSDN official certification WeChat card below to get it for free ↓↓↓ [Guaranteed 100% free]

insert image description here

Good article recommendation

Understand the prospect of python: https://blog.csdn.net/SpringJavaMyBatis/article/details/127194835

Learn about python's part-time sideline: https://blog.csdn.net/SpringJavaMyBatis/article/details/127196603

Guess you like

Origin blog.csdn.net/weixin_49892805/article/details/132651940