This article discusses the principles and techniques of software design, including the role of software design in SDLC, six steps of software development life cycle, procedural, object-oriented and event-driven programming, sequence, selection and iteration in computer programming, data abstraction, importance of readability and understandability of code, and quality of code.