김 제 성 박사
Mathworks
Programming is as much an art as it is engineering and science. Robustness of software does not just lie in the methodology and the process to creat it but heavily depends on skills and intuition of individual developers. This is particularly true in the C++ programming language whose rich feature set enables continuous extension and evolution. In this talk, I present three tips to help build robust C++ programs along with a simple example software problem that motivates the tips. First, use smart pointers to automate memory management. In essence, a smart pointer is an object that models a legacy C pointer with added facilities to enforce correct usage. This allows one to focus on program logic instead of mundane work required for memory management. Second, use established libraries wherever possible. In addition to the standard template library, the widely popular Boost library provides off-the-shelf solutions to a wide range of common problems. The use of established libraries improves robustness because they have been tested and proven to work. Third, validate every function with unit tests before it is ever used. By using tested functions only, you can build up confidence on your current implementation and limit your focus on the functions being developed. I also point out key language features of C++ that enable the techniques behind each tip, namely, destructors, templates, operator overloading, private members, and friend classes.
Jesung Kim received the BS, MS, and PhD degrees in Computer Engineering from Seoul National University, Seoul, Korea, in 1991, 1993, and 1998, respectively. He has been with MathWorks, Natick, MA, USA since 2005, where he is currently a Principal Software Developer / Senior Team Lead. Before joining MathWorks, he was a Postdoctoral Researcher at The University of Pennsylvania from 2002 to 2005, and at Seoul National University from 2000 to 2002. From 1998 to 2000, he worked for Hyundai Electronics as a Research Engineer. His research interests include model-based design, embedded systems, and computer system architecture.