This course teaches the basics of modern software development – the techniques and practices used to build a piece of computer software that meets high standards of quality, reliability, security, and maintainability. We concentrate on three aspects: Which are the tools and practices of modern software? How do we produce high-quality software? How do we develop software in a team?