Lecture "Software Engineering" This course has been intermittent for 10 years, and now back to summarize their own thinking process, share with you.
1. Prehistoric
My school is a vocational and technical schools (colleges), in 1997 when the first transfer, our computer department was only a short time, the joint Department of the Director of a total of only eight people. At that time, I just began to work in computer teaching, I can do nothing but to learn the past in school, parrot to move to the students. The teaching plan was also cut out by the Dean's reference to other schools ' plans. However, with the accumulation of teaching experience, we begin to consider the intrinsic relationship of teaching content from the perspective of system. Later in the discussion of Level 02 teaching plan, I advocated the addition of "Software engineering" this course.
2. Start
In the fifth semester of Level 02 (the second half of 04), I began to teach them "software engineering" course, the selection of textbooks are published by Tsinghua University Press Zheng edition of the specialized version of the textbook, this is a traditional process-oriented tutorial, a part of OO content (in fact, I was not very understanding of OO at that time, Think of learning oo language, understand oo). In order to inspire the students ' enthusiasm, I have added this course of pure theoretical teaching to the practice, that is, I have compiled each class into a project design group of 5 to 8 people, and they choose a number of projects I offer or one project as a design topic, and the work is divided into two stages of analysis and design. Also includes a database design document. As I teach the theory, they use the theory I teach to analyze and design documents, each of which specifies the time limit for submission and is linked to the achievement. I used about 60% of the entire teaching period to teach, and when I finished, they used the remainder of the time to discuss their design documents in class. Unexpectedly, this practice has achieved extraordinary results, almost every class of discussion is enthusiastic and positive, but also achieved a number of good student design results. After that, at level 06, Level 08 ... Until now level 14, has been teaching many students of the "Software Engineering".
3. OO
In the future of professional learning, I have read some of the online introduction of the various masterpieces. Around 05 I gradually realized that the entire software sector contained two complex points of value that required people to spend their time. One is to solve the problem of the algorithm problem, the other is to solve the complexity of the software itself, with the size of the software is growing, the rationality of the inherent structure of the software has become a value point of the industry.
With my early 03 in the bookstore accidentally found "design mode", "refactoring" and other classics, at the end of 05 I have the above ideas, I went to the bookstore to find relevant books, very fortunate, I found the Uncle Bob "Agile Software Development" a book, so began to infatuated with XP, and once in the teaching to let the students better grades , demo of the bowling scoring program, the effect is also good.
At this time, because the higher vocational schools stressed the foreign cooperation in school, our department began to work with the Beida Jade Bird software engineer cooperation project, I found that their technical training lecturer (Advanced technical Support), and I then also exist as a pattern of patterns of the trend of the pattern, although I did not fully understand Gof's "design Model" (Later on the internet to see Li Jianzhong Teacher's series of lectures, just calculate really understand), in the heart or they like God as a worship.
After becoming the first group of Bluebird teachers in our school, we began to contact the teaching mode of Bluebird, its biggest characteristic is to introduce practice into teaching. In fact, the computer science itself is an experimental subject, just because the early national poor, experimental conditions can not meet the needs of teaching, it has to bias theory. At present, in the condition that the experimental hardware condition has been greatly improved, it is inevitable to return to practice-oriented teaching, but because of the Humpty, the process will continue for some time. Moreover, due to the lack of serious consideration of the relationship between computer theory practice, another extreme completely abandon the theoretical knowledge, practice and practices began to overflow.
In the bird's training and learning process, I began to contact the bird's practice project in the three-layer software architecture, and to this beginning, has been learning Hu Shengang Training course, Martin Fowler's "Enterprise Application Architecture Design", "Microsoft.NET Enterprise Application Architecture Design" and other related software architecture books, began to realize that OO software includes micro, meso, and macro three levels.
The micro-level of the so-called Oo software is the three major grammars of OOPL: encapsulation, inheritance, polymorphism. Can be a multi-state virtual function Realization mechanism mastered, the basic calculation in place. This point I see in the early Houtie teacher's "in understanding MFC" When I understand, which also makes me think that learning Oopl learned oo, and stubborn for many years, until the contact design mode.
The meso-level of OO software is an OO design model based on the deep understanding of OO principles. Mainly includes the GOF Classic 23 and IOC. It is the essence of OO, it is worth learning, it is also worth appreciating. Based on them, the larger (macro) framework and architecture are further implemented.
The macro level of OO software is the framework and architecture. Architecture is a software-global, unique framework, while other frameworks are partial reusable semi-finished products.
4. Conflict
When learning the software architecture of Hu Shengang, the author talks about "Don't fall into the trap of extreme programming", and puts forward the overall design of the complexity of software, and puts forward the viewpoint that software development should start from the macroscopic point of view. This view and the XP approach described in the Agile Software Development book are different from the lightweight approach to starting from the perspective level.
This put me into a dilemma, whether it is from the big side, or from the small side to start, to achieve a teaching example system?
5. Relieved
Until recently, reading the Fan Gang teacher's "Big talk Refactoring" finally found the answer. It turns out that the current software is a dynamic process that is constantly evolving due to the complexity of constantly responding to new demands.
Let's start with the source of the software, it is said that Turing is Turing's abstraction of the process of using paper and pens for mathematical operations. So, solving the problem with a computer is a complicated process of solving problems. But how do we describe the algorithms for solving this problem?
"At present, almost all algorithmic books are explained in Euclidean, waterfall, top-down, and each deduction step is the direct goal-oriented precision guidance." From the cause to the fruit, definition, lemma, theorem, proof as many, neat and tidy a bit of no fat meat. In fact, this completely turns the human brain into the process of inventing inventions. It looks like a sunlit path, actually the car is not a horse. ”
"The idea of the birth of the algorithm often contains much more essential knowledge than the actual algorithm, the actual algorithm and even the implementation of a particular language of the algorithm contains too much surface of irrelevant knowledge, they will hinder the understanding of the essence." (See Liu Weipeng's Blog "Know Why")
The same is true of software structure, if the software model is so precise guidance is directed towards the target. Using them directly, we create a software structure that is more complex than we need in a pattern, which introduces unnecessary complexity.
In the book of "Big Talk Refactoring", the author put forward "proper planning, evolutionary development" so that I find the answer to the question, I think I can start to write my teaching software, it should be a continuous demand-driven and evolving software series.
I and Software engineering