Because this week is the Dragon Boat Festival, we have a holiday, there is no class.
What to read this week:
Introduction to the 1th Chapter
Theory and knowledge points
Field of computer science
Features of the software
Software
The relationship between software engineering and computer science
Practice and discussion
Practice continuously through a simple program to achieve a series of requirements and improvements
From the perspective of firsthand, discuss the characteristics of the software and software engineering impact on society
The differences between software engineering and computer science are discussed by combining the characteristics of the school and its own experience.
1.1 Software = program + Engineering (1)
Almost all programmers know that "program = data structure + algorithm" 1, but in the actual study and work, there are many people have doubts. For example:
1. I wrote a two-fork tree traversal algorithm implementation, here, the binary tree is the data structure, the implementation details of the traversal is the algorithm. The C program is the result. But what is the practical use of this program? In Java and some other languages, there seems to be no pointers, so I don't have to understand the binary tree?
2. I became a professional programmer, but I found that all the algorithms have been implemented by others, and I just need to invoke them. It seems that our company's software and data structure, algorithm relationship is not big. is the data structure and algorithm that I worked hard to learn useful? How do you differentiate between a good programmer and a bad programmer?
3. After I went to work, I found that the procedure written by my former colleague was rubbish, I couldn't understand it and couldn't maintain it. I'm going to overturn the rewrite! Later an old employee smiled and told me that the procedure we are seeing now is the result of a new employee who angrily overturned the rewrite last year, and we have no previous version to use it.
So the software industry relies on the survival of the "software", programmers used to settle down "program" is what? Give an example of life. Move Mountain company programmer Chiu's baby son on the second grade of primary school, the teacher let parents out of 30 add and subtract every day to the pupils to do. Chiu wanted to write a small program to do this thing. This can be accomplished in many languages or tools:
- Excel, C + +, C #, VB, Unix Shell, Emacs, Powershell/vbscript, JavaScript, Perl, Python ...
Please estimate the time required to write this program.
I think, the programmer with his best tool, a bag of cigarettes time to take care of.
Chiu to print out a lot of different topics, let the children do. After reading the homework, the teacher praised the super. Other teachers also want a similar procedure, so that the second grade to grade four can be used, and come up with a few small requirements, such as:
Avoid duplication of topics
Customizable quantity and printing methods
The following parameters can be controlled
Whether there is a multiplication method
Whether there are parentheses
Range of values
Plus minus have negative numbers
Division has no number
Whether the score is supported (true score, false score ...). )
Whether to support decimals (exactly how many bits)
The interval of each line in the print
Chiu's son happily went home to report to his father, and said, "The teacher wants it tomorrow!" "Ah super some scratching their heads, the original is to write a program, now how to some users, but also brought a lot of demand?"
Now everyone estimates how long it will take to do this software.
Chiu stayed up late and made an initial version of the software and gave it to the teacher. After a few days, the teacher said, the director looked very satisfied, proposed to put the program on the school's website, a little more requirements, support two yuan an equation, can open the square root, and let teachers and parents can customize various types of arithmetic work through the website, you can also generate midterm, final exam papers. Of course, hope that the site is always available, at least five a.m. to 12 o'clock in the morning to be able to access.
Chiu sighed-This is a complicated project Ah, if one night the website can't open, do I still have to repair the server?
Here we see the customer demand for Chiu from a simple program, extended to a variety of functions to meet the application software, and then expand to a guaranteed maintenance of software services! Now please estimate how long it will take to do this software service.
The above example shows some of the concepts of software engineering:
program, in this case refers to the source program, is a line of code. Looking closely at the past, they are indeed some of the algorithms that are built on data structures. The program also operates on the data, some of which are static (such as the software's icon, cue information), and some are dynamic (such as random numbers generated by the program, data downloaded by the program through the network, user's text or voice input, etc.). But the light has the code and the static data still cannot, compiles them to the machine to understand executable code, but compiles not only the CC and the link command, a complex software must have the reasonable software architecture (software Architecture), the software design and the implementation (software Design, implementation and Debug), as well as a variety of files and data to describe the dependencies between each program file, compile parameters, link parameters, and so on. These are the processes of software building.
Software team members are changing the various source code every day, how to ensure that the software in the process of continuous improvement of quality, at least to maintain the quality of the previous, not crash? There are times when we need to write special features for a particular requirement, and then merge those features back into the main version soon. Some programs need to be configured with different interfaces, operating in Chinese, English, or other languages, some with 32-bit version, 64-bit version, and so on. This is a problem with source code control-sometimes called configuration management (software config Management). We also have a series of tools and procedures to ensure the correctness of the program, the process and procedures themselves should be more correct, in order to ensure the quality of other software. This is the quality assurance (quality assurance), the specific verification process is called Software testing (testing).
A software or service to someone to buy, you have to find customers, customers have a variety of needs, some reliable, some is not reliable, some easy to do, some difficult to do. The software team starts with the requirement analysis (requirementanalysis), sorts out the appropriate requirements, and then steps up the follow-up work, such as designing (software Architecture), implementing (writing data structures and algorithms), testing, and finally releasing the software.
The staff of the software team will also flow, the new members should read the existing procedures as soon as possible, understand the design of the program, which is called the program Understanding (Programs comprehension). Software in the process will be such a problem, perhaps we have to patch the software from time to time, or maintain a large number of servers, the team's new and old members to work together to fix a variety of problems, this is called Software Maintenance (softwaremaintenance), or Service operation (operation). This series of processes is the software lifecycle (software Life CYCLE,SLC), and someone is responsible for managing the Software project (projectmanagement).
A good software, even if the function and the same software is not very different, but it will make people feel very useful. This is especially good for the user experience of the software Experience. There is no direct relationship between user experience and data structures, algorithms, but many very successful software wins in this respect.
A software team or business has to feed itself, there are many ways to make money on the market:
Some pay buyout.
Some "trial and pay", some software also offers trial version, free version and official version
Some are not only free, but even the source code, but require the source code developers to comply with some kind of agreement
Some send hardware, but the software has to collect money
Some send the software, but the hardware to collect money
There's also "free, but look at the ads I offer"
Also "free use, the program is not my writing, if there is a problem, give me money, I will come to provide advice ..."
2016.06.10-2016.06.16 Work hours and content this week