Module Structure question from perspective of PHP dev
Content Types and /or entities would be the way to go about this.  Content types you can think of as objects that are fieldable.  So for example your course would have fields that would represent an objects property.  All content types are node and accessed similarly and can be distinguished by a node id (nid).  Content types automatically integrate into views.  

Views can be used to display your data on the courses and they can be filtered by using exposed filters, or filtered by using contextual filters (arguments from the URL).  Content types are automatically usable in views along with their fields

Entity references are the backbone of relationships in drupal.  In an object sense you can have a one to one, one to many relationships with other objects or content types.  So your course may have sections and what not so in drupal you would create a content type of both Course and Section and then reference them using the entity references module.  See entity reference module which must have the entity api module

Taxonomy is a way to tag stuff so if you want to tag a course a certain subject you could use a field that is a taxonomy reference.