About the ENGG*3130 Course Notes

These notes will be an envolving, collaborative effort throughout the term to collect and maintain resources related to ENGG*3130: Modelling Complex Systems.

This course is built on two intertwining threads, which may seem unrelated at first, but whose complimentary nature should become more clear as the course develops:

  1. Seeing, understanding and modeling real-world phenomena as Complex Adaptive Systems

  2. Mastering software concepts, specifically data structures and algorithms, to model real-world phenomena (and generally improve your efficiency)

This is not a course that teaches you how to program. You’ve had enough of those! Instead, you will be encouraged to build your “Programmer’s toolbox” through the use of commonly-used scientific computing tools and practices. This includes, but is not limited to:

How this course differs from ENGG*4450

ENGG*4450 focuses on the development of large-scale software projects in large teams (which may, in fact be distributed). There is an emphasis on design, software processes, and software quality. This course focuses on developing the skillset of the individual and less on team dynamics. It also focuses on more lightweight software development, for example, code that may be developed as part of a research project or consulting project rather than a product that may be shipped and used by thousands or millions of people. While some tools and practices (e.g. Git for version control) will overlap, we will eschew some practices (like object-oriented development) in favour of simple, clear code using a scripted language.