Learn about the different types of software, what they do and how they function. Also take an in-depth look at software design, best practices and history.