Today, two interesting questions come to mind: is there a difference between a program and a software? What is the difference between programming and software development?
These two questions are also two questions that I have been thinking about during my college years. During the school period, the author read a lot of professional books, such as "Java language Program Design", "C Programming", "Software Engineering", "design pattern: The basis of reusable object-oriented software" and many "21 days proficient in XXX program Design" series of books, also wrote a lot of small programs, But there are some problems that the author has never fully figured out. Like what:
1. Is it really possible to master a programming language within 21 days?
2. What is object-oriented?
Why should the 3.Java language provide an interface, and why force the interface definition and implementation to be separated?
4. What is an exception? Why do I need an exception handling mechanism?
During the school period, the author consulted the teachers about these questions, and the answers were either scripted or ambiguous. It was not until after many years of work that the author realized that there were many problems that could not be answered in school, and that it was necessary to wait until you actually entered the industry to understand the truth. The difference between a good teacher and a bad teacher is that a good teacher can always explain the most complicated problems in the simplest way. Here are some of the questions above:
1. Is it really possible to master a programming language within 21 days?
It has been 8 years since we started to learn computers, but there are still problems in the work. When he read the classics of the Masters of James Gosling and Rod Johnson, he found that the master's height was difficult to match. Think of the original job on the resume to write proficient in XX language, inevitably ashamed of the ears of the red.
2. What is object-oriented?
During the school period, the teacher of the computer course will cite various metaphors to explain what is the object. For example: You are the object I am the object of all things in the world, the relationship between classes and objects is like the relationship between students and Wang Xiaoming, the relationship between airplanes and Boeing 737, and so on. It's foggy to hear it all. In fact, before we learn about object-oriented, we should understand two concepts: the abstract data type in data structures and the struct (struct) in the C language. After understanding these two concepts, I believe that people should have a clearer understanding of object-oriented. Object-oriented is nothing more than an abstract data type instantiation and an upgraded version of a struct (struct). Many people tend to be confused by the concept of object-oriented, often because the concept of object-oriented is abused or excessively interpreted. Whether it is a struct or an object, it is used to organize and pass data. Modularity is an inevitable choice when the size of the software becomes larger. Object-oriented can help us achieve modularity better.
Why should the 3.Java language provide an interface, and why force the interface definition and implementation to be separated?
If the full functionality of a software can be written in one file, it is clear that we do not need an interface, and we do not need to object-oriented and class, and we do not need package packages. But the scale of the software is staggering, the software is becoming more powerful, and the volume is becoming larger, which is a trend that no one can stop. It is common practice to divide the software into different modules so that different classes can implement different functions, and a class to invoke another class method to complete the business. But this strong reference poses a serious problem: the coupling is too high. There is an idiom that describes the situation as "reaching", where small changes can cause all places to be affected. But the changes in software requirements, the increase in functionality, and the adjustment of data are the things we face every day. The interface actually forces the caller and the implementation party to leave, and the implemented changes have no effect on the caller, reducing the coupling level before the module.
4. What is an exception? Does the exception handling mechanism guarantee that our program will never go wrong?
I remember when I was in college, the teacher on the Java Exception class hierarchy diagram big talk, but finally everyone on the concept of the anomaly is always smattering, write the program Try-catch always use the wrong. In fact, the simple point is a logic error. Our computer programs are actually symbolic of our logical thinking, but the logic is inevitably flawed, and so is the procedure. Write the program like we have welded a circuit, only the electricity in a place smoke, you know there is a bug, this situation is abnormal. Compile error when writing code that is not an exception, the compiler can help us to point out syntax errors, but the compiler will not be able to help us resolve the exception. For example, I defined an object, called a method of the object, but in the runtime environment, this object does not exist, this time there is a null pointer exception. If there is no exception handling mechanism, the program interrupts the exit or goes into a non-functional state. Runtime exceptions are very common, and we certainly don't want any of our programs to crash at any point. So the exception handling mechanism plays an important role in improving the robustness of our program.
And then back to the beginning of two questions:
1. Are there any differences between programs and software?
The code we write in the university labs is not called software, it's just a program. Software is designed to address the needs of users, and programs often do not have specific users. It is also one of the differences between the program and the software whether it has been tested to meet certain quality standards. The documentation and code are equally important to the software, and the program has no basic requirements for the document.
2. Is there a difference between programming and software development?
The problem is essentially the same as the above question. We wrote a program in the school lab and what difference do we have in developing software for customers in the company? In the laboratory to write programs do not have to face the changing needs of customers, but also do not worry about the version upgrade of the program, do not have to think too much about the program's fault tolerance and robustness and so on. I think this is the difference between programming and software development. It is these continuous problems that drive technology forward, and we are constantly improving in solving problems.
The difference between program and software, programming and software development