Chapter 1 Software Engineer Guide

It is in no way derogatory to introduce software engineers first. The so-called ranking in no particular order, that is the reason. There is no distinction between the members of the project, because they are a team, and only a team screwed together is a successful team. In fact, the software engineer is the greatest project member, the success of the project is inseparable from his left and right, the quality of the project, also inseparable from his left and right. Although in the hierarchical structure of the project implementation, it is at the most basic level.

1.1. Job Responsibilities

The work of each project member is unique, and each person is responsible for that part of the project that is irreplaceable, and their job responsibilities are naturally different, but some of them complement each other. But on some projects, because of staffing issues, some project roles have to wear multiple hats, doing both this and that, so the job responsibilities are mixed. The boundaries are not as detailed, but they can be useful, because sometimes one role on the project team will consult with another to solve a problem on the project.

The job responsibilities of software engineers are broadly divided as follows:

L Fully understand the requirements outlined in the document

L Participate in system outline design and detailed design

L Participate in the preparation of outline design and detailed design documents

L System module code

L System unit test module coding

L Participate in system unit and module testing

L Participate in the overall test of system modules

L Participate in the preparation of user manual documents

Many people think that the job of a software engineer is to write code, and this is just the most basic job. The software engineer also participates in and plays a supporting role in other project activities.

The basics of software coding start with understanding requirements. First of all, we must start from understanding the requirements, analyze the requirements, transform them into module design, establish module model, and then start from the model, transform them into module code. During this period, it is necessary to participate in the outline design and detailed design of the system. This is modeling based on an understanding of the requirements. Then, the project execution phase began, at this time to start the coding of system modules, while assisting to write unit test code, for the later test work preparation. Next, there are module unit tests and overall tests, which need to be carried out with the testers. Finally, participate in the user manual documentation, because the software engineer knows his or her part of the requirements best.

Of course, this is a “understand requirements – design – code – test” cycle, to borrow the terminology of an iterative model.

This cycle also reflects the daily work of software engineers. From here, it looks boring. Especially under the pressure of strict programming specifications, the coding work of software engineers may seem boring. The concept of complete code worker is actually not. A system to have standardized management, standardized development, etc., it must start from childhood, so this code writing is a very important work. This is where you can explore programming language features, polish, fun, etc., especially when you’re using your new knowledge to efficiently tackle a module. Only a software engineer can understand this.

1.2. Knowledge required

Software engineers (we like to call them programmers, but software engineers are more written and theoretical) have a breadth of knowledge, not necessarily a high level of depth. Languages are interlinked, and it should not be difficult to learn grammar between languages. What is difficult is to make a high-quality system or component in depth. We advocate learning more languages, especially those with relative meaning, such as. Net and Java are relative languages, like Windows and Mac.

One reason to learn these relative languages is because of their interoperability, and the other is that they are borrowed from each other, for example. Net, in fact a lot of content is copied Java ideas, such as cross-platform, intermediate languages, reflection and so on. In this way, learning a language by comparison is faster than learning a language alone. At the same time, we can learn from the ideas of the relative language and inherit good ideas for use, which is also a fun place.

The following is a summary of the theoretical and practical knowledge that software engineers should possess:

L Basic knowledge of number system and its transformation, arithmetic and logical operation, applied mathematics;

L Understand the composition of the computer and the performance indicators of the main components;

L Master basic knowledge of operating system and programming language;

L Familiar with basic data structure and common algorithms;

L Proficient in C programming language and a related language;

Familiar with database, network and multimedia basics

L Understand the basic knowledge of software engineering, software process and software development project management;

L Basic knowledge of common information technology standards, security and relevant laws and regulations;

L Basic knowledge of informatization and computer application;

Read and understand simple English materials in computer science.

The above is a general description of software engineers should have knowledge, in fact, in reality, often software engineers to everyone’s impression is to do everything, something no one else to do by him, everywhere like miscellaneous. So a lot of times software engineers pride themselves on being able to do everything. This is not directly related to, or in conflict with, the knowledge of the software engineer we are talking about, we are just summarizing the content of each role.

1.3. Daily work

There are only two kinds of work for us at work: work and study. For daily work, that’s basically what you do every day.

Based on the idea of making progress every day, we summarize the daily work of software engineers as follows:

L Write code (including new code and Bug fixing)

L Unit testing

L Participate in system testing

L Preparation of relevant design documents

L Participate in the preparation of user manual documents

L Find the method and content to solve the problem (search books or Google, Baidu)

L Learn new skills and ideas (reading books or online materials, etc.)

L Group discussion or training

In fact, as we see here, the daily work is really divided into work and study. However, it is estimated that many people will complain: usually busy work, how to have time to study. Here I would like to say that learning is their own business, to be good at squeezing and drilling, take advantage of the halftime, read some of their interested knowledge content. On the one hand, it can relieve the tension of work; on the other hand, it can study or pay attention to the content that you like. This is a two-fold thing.

In addition, the project manager is responsible for arranging the time for employees to learn and organize the content, which is also what I need to arrange when I do project management.

1.4. Methods of experience enhancement

For the project team, part of the way to improve the experience of members is through self-study, and the other part can be conducted by the team learning and discussion meetings organized by the project manager within the project team.

But, personally, self-study is a big part. Through self-study, what you learn is really understood, is really enrich their knowledge, is really in line with their interests.

However, it is not enough to just learn by yourself. This can only produce team heroes, not a relatively balanced team. This is where communication within the project team comes in handy. Through communication, the gap between team members can be narrowed, and the core competitiveness of the team can be improved.

For self-study, you can read related books or materials on the Internet. This part of the learning time, can be in the realization of the project, or find their own time to study, because the working hours are relatively limited learning time. For communication, in addition to the communication meetings within the project team, the project manager can use the XP extreme programming method to directly narrow the gap between the programming style and level of several people. Of course, through blogs, questions and other ways to communicate with friends on the network, so as to increase their knowledge, but also to expand their circle of friends, but also find like-minded friends, and can help their friends in the actual work.

1.5. Communication with other roles

There is a lot of communication between programmers and other roles on the team.

  1. One is the development manager, who divides the work. One is the software designer, who directs and writes the code. One is the requirements analyst, who determines whether the implementation of software functions meets the needs of users. One part is the tester, who reports back the results of the testing of the software functionality and decides whether to change the code to fix bugs.

  2. In the process of communication, communication requires skill. Because programmers are the direct writers of the code, the quality, efficiency, and compliance of the code are all realized by them. Therefore, the difference between the implementation of system functions and user requirements depends on whether programmers really understand the requirements. The rest is the collaboration with the rest of the team.

In general, programmers communicate more with other members of the team. However, most programmers just need to do their job well, which includes communication skills.

1.6. Books to Read

The books that software engineers should read should be some basic and easy to understand books, but the scope must be wide and the coverage must be complete, so that in the future work, if needed, they can come back quickly. Here are some basic books.

  1. Syntax (Getting Started programming Series)

For programmers, syntax is fundamental to programming languages and must be mastered. Of course, the language is basically the same, as long as the object oriented programming ideas into the code, it is estimated that no problem.

  1. The data structure

Data structure is a required course, because data structure represents the way data is stored and efficiency issues. Each language has its own data structure data, it is recommended to be familiar with the degree, so that in the actual work can and everyone’s degree is not different.

  1. Advanced Programming Series (Reference book)

Advanced programming series, you can be familiar with, as a reference book to read. Because programmers themselves do not need to be very deep level and high knowledge of architecture.

  1. thread

Now multi-threaded procedures or more, especially Intel is actively promoting the application of multi-threaded procedures. And, for a business site is a typical example. This part can be practiced in practical work. For programmers. It’s important to be familiar.

  1. network

Network programming for most corporate business is still more. Especially in game programming, you need to use this knowledge. For the average company, there are fewer opportunities for estimating practice.

  1. The framework

Programmers must be familiar with the current framework structure in order to make full use of the advantages of the architecture. However, it seems that the books in the framework section are still in some languages and some languages are less. It depends on the level of the architect.

  1. Design patterns

Programmers should read books on common design patterns to understand the design patterns that architects use in existing software systems. Or a meeting should be held to explain the design patterns used in the system. The programmer only needs to read the design pattern.

  1. Software engineering

Software engineering is a required course for programmers. But the depth depends on the degree of individual practice. Software engineering still needs to look to understand what the project manager is actually applying to improve the overall level of the project team.

1.7. Words to bear in mind

Software engineers don’t have much to memorize, and it’s mostly about programming. But it’s all about the actual work. The following is just a summary of some personal experience.

  1. Do unit testing (medium and above systems);

  2. Always code to specifications (keep the team aligned);

  3. Optimize your code from time to time (a way to improve code quality and efficiency);

  4. To complement programming ideas from other languages;