The course content comes from NetEase cloud classroom zhong ke monensin teacher's software Engineering (c coding practice) course.
Course Page
I think the course is very scientific, every week is based on the further abstraction of the previous week's course, allowing learners to gradually deepen their understanding of software engineering.
1. First week: Familiar with the Linux Experiment Environment; Request Experiment One: Write a Hello World applet.
Experiment Report link +git code base link
Summary: Hello world itself is easy, but working under Linux is completely different from windows, which brings a lot of problems to people who are unfamiliar with Linux. First VI without Windows IDE Intelligence, can not correct syntax errors in real-time, compilation will produce a lot of grammatical errors, need to carefully debug. Second, many of the commands and parameters of Linux require a longer time to practice to master. Finally, beginners are often unfamiliar with git and need some time to study version control systems. These 3 points are the difficulties liunx beginners need to overcome.
2. Second week: Code style specification; Request experiment Two: Command line menu applet V1.0.
Experiment Report link +git code base link
Summary: Initial exposure to modular design ideas, understanding the importance of code style, learned to encapsulate the command as a function for the user to call.
3. Third week: basic modular design; requirements Experiment Three: Internal modular command-line menu applet V2.0.
Experiment Report link +git code base link
Summary: The initial realization of the separation of business logic and data structure, deepened the understanding of modular thinking. And this time, I made a death. Create the difficulty, using the AVL tree to do data structure, static function declaration, function pointer to do the parameter implementation Call-back, and implemented under the Windows IDE programming, sharing to the Linux virtual machine compiled run, Finally from your own VMWARE11 Ubuntu virtual machine to the lab building git code. So as to further improve their own level.
4. Week Fourth: interface design of reusable modules; Requirements Experiment FOUR: Using reusable list module to implement command line menu applet V2.5.
Experiment Report link +git code base link
Summary: This time for the data structure, I refer to the Linux kernel source code in the bidirectional linked list implementation, porting its functional interface integrated into the menu menu program. In the design of the Linux kernel list, in order to achieve the highest efficiency, the macro definition and inline function are used to accomplish all the functions of the design implementation, all the code is integrated in the interface header file of its design. The Linux kernel source code is profound, its general design idea and the efficient realization way, is worth the C + + programmer to read earnestly, even if does not do the kernel related work, reads the wonderful code to the programmer self-accomplishment enhancement also to be beneficial.
5. Week Fifth: interface design of reusable modules (callback function); Request Experiment Five: Use callback to enhance the list module to implement the Command line menu applet V2.8.
Experiment Report link +git code base link
Summary: This experiment through the use of debug debugging to enhance the ability of code debugging, the use of function pointer parameterized context, to minimize the information hiding standards, design a more general and useful API interface.
6. Week Sixth: reentrant function (reentrant) and thread safety analysis; This time, the teacher mainly introduces the knowledge of multithreading programming and thread safety.
Summary: Multithreaded programming and parallel programming is the future development trend of technology, although this aspect of the content is profound, but it is a good software engineer core competitiveness embodiment. For further study of this knowledge, I recommend 2 sets of the latest published classics: "Linux/unix system Programming Manual" and "Advanced Programming for UNIX Environment (3rd edition)". I think if we master the contents of these 2 sets of books, we will have an absolute advantage in technical competitiveness.
7. Week SEVENTH: Reusable design of subsystems; requirements Experiment VII: Design the menu as a reusable subsystem.
Experiment Report link +git code base link
Conclusion: The difficulty of this experiment lies in the understanding and use of liunx system function getopt. Getopt itself has many parameters, difficult to understand, and very easy to use wrong. As the last experiment, the integration of the previous knowledge, the completion of the goal requires a comprehensive design and careful analysis of debugging.
8. Week: The design idea behind the code; this time there is no experiment, the teacher mainly summarizes the previous courses, discusses some of the theoretical knowledge of software engineering.
Summary: This course focuses on different quality perspectives, various design methodologies, and several important design guidelines, and lays a good foundation for further study of follow-up courses.
Through a semester of study, so that they have a preliminary understanding and understanding of software engineering, to find a further improvement of the direction of capacity. Recalling the course of a semester, the biggest harvest is: the improvement of abstract ability and the practice of modular thinking. We are looking forward to the following 2 courses in the Software engineering series. The biggest regret is that the course time is short, not enough to learn more about the content of multithreaded programming. This aspect of the network on the lack of video, and books are more obscure, self-study difficult, expect teachers to have time to make multi-threaded and parallel programming courses.
Real name: Xuezhen (must be consistent with the name of the final application certificate) + Original works reproduced please specify the source + "software Engineering (c code practice)" MOOC course http://mooc.study.163.com/course/USTC-1000002006
Software Engineering (c coding practice) Course Summary