Course organisation

Pre-requisites - is this course for you?

This course should be accessible to most if not all physics students. I do expect very little previous knowledge (since this is the one course where sustained work can get you a high mark), but if you want to be successful, you must have

  • A solid grasp of the “basic coding” (as obtained in the course PHYS 20161 or otherwise). You can refresh that knowledge in the first two weeks of the course!
  • A strong aptitude for and/or interest in programming in general

Aims

This is not a physics course. The way I see it has three aims

  • To provide an introduction to object-oriented programming (OOP) and design
  • To develop fluency in programming in the (ANSI standard) C++ language
    • Will mainly stick to C++14 (with some C++17)
  • To develop a good programming style
Syllabus - see handbook for full list
  • Basic C++ features (part revision)
  • Data and file streams
  • Classes and objects
  • Inheritance
  • Polymorphism
  • Advanced C++ features
  • The C++ standard library

We will use the C++14/17 standard, as implemented in Visual Studio 2019

Online material
  • The course has a blackboard page, and space on my personal web page
  • I will use nearpod: bring a device (easiest is to use the app and download material before lecture), or a laptop.
  • All lecture notes and assignment details will be published through all of those three, but an index of the material will always be available on blackboard!

Assessment and feedback

  • All assessment is based on coursework (assignments and a project).
  • Plagiarism checking will be undertaken on every assignment.
  • The key to success is Practice, Practice and Hard Work!

Assessment is broken into 2 components:

  • Weekly assignments (33%)
    • Designed to give you practice at coding in C++
    • Six problems closely aligned with lecture content
    • Expected effort about 3-4 hours each for a reasonable mark
    • Demonstrator assistance
    • Assignment details given at end of classroom sessions
    • Rubrics (marking scheme) and skeleton code for the early assignments will be available online
  • Project (67%)
    • No demonstrator assistance
    • Choice of project (or you can suggest your own)
    • Online feedback available
    • More details towards end of course

Places and times

  • Pre-lecture video to be released each week. We expect preparation!
  • Lectures/Workshop
  • on Mondays, 11am-12pm. Designed to be of limited use without having watched the videos
  • Weeks 1-10 only (10 lectures)
  • Assignment details at end of classroom session
  • Computer lab through Teams
    • 3 half-day slots: Wed (10-1), Thu (10-1), Fri (2-5).
      Select your slot!
  • Weeks 1-9 for assignments: demonstrators on-hand to give help.
  • Weeks 10-12 )and earlier!!) for projects. No demonstrator assistance.

Practical details

  • We will use VS Code and gcc, the preferred development environment for this course
  • An overview of how to use VS Code (for C++) is on the course webpage
  • Your code must be your own (although you are free to discuss issues with the demonstrators) - plagiarism will not be tolerated
  • You are of course allowed to use your own computer (e.g. at home), but your code must run successfully in VSCode+gcc by the deadline for each assignment. You are responsible for this!
  • Your code must be uploaded through blackboard, and it will be marked online soion after that.
  • Important! Once uploaded, no further changes can be made.

Reading list

Use the library reading list, but especially useful: cplusplus.com , learncpp.com