CPSC 501: Advanced Programming Techniques (Winter 2025)
< class="col-xs-12"> Theory and application of advanced programming methods and tools. Recent issues
as well as those of an enduring nature will be discussed. Topics may include the Fourier transform;
wavelets; functional programming; genetic algorithms, simulated annealing and neural networks;
parallel and distributed programming; images and graphics user interface programming.
Announcements
- Course material posted on this course website.
- Community Discussion Boards via discord.com (Invite link in D2L Content)
- Assignment/Grading via D2L
Lectures
- Lectures begin on Monday, January, 13th, 2025
- Last day to drop is Thursday, January 23rd, 2025
- Last day to add is Friday, January 24th, 2025
- Lectures end and last day to withdraw is Friday, April 11th, 2025
- CPSC 501 L01 TueThu 14:00-15:15 SS 109
Tutorials
- Tutorials will begin on Monday, January 20th, 2025
- The main goals of the tutorials will be to help you in more deeply understanding the concepts presented in the lectures (providing more examples) and with your assignments.
- CPSC 501 T01 TueThu 08:00-08:50 MS 160 Ali Al-Khaz'Aly ali.alkhazaly@ucalgary.ca
- CPSC 501 T02 TueThu 09:00-09:50 MS 160 Ali Al-Khaz'Aly ali.alkhazaly@ucalgary.ca
- CPSC 501 T03 TueThu 10:00-10:50 MS 160 Ali Al-Khaz'Aly ali.alkhazaly@ucalgary.ca
Office Hours
- MonWed 13:00-13:50 ICT 712 or setup via email (info in D2L Content)
Important Dates
- Term Break: Sunday-Saturday, February 16-22nd, 2025. (no lectures or tutorials)
- University Closed for Alberta Family Day Monday, February 17th, 2025. (No lecture/office hours)
- Midterm Exam: Thursday, February 27th, 2025. [in-class activity]
- Final Exam: 5:00PM - 7:00PM Monday, April 28th, 2025. [registrar schedule during exam block]
Textbook Resources
- Git - Book
- Author: Scott Chacon, Ben Straub
- Optional: Reference for Git.
- Open Text Webpage Here
- The Docker Handbook
- Author: Farhan Hasin Chowdhury
- Optional: Reference for Docker.
- Open Text Webpage Here
- The Docker Guide
- Optional: Reference for Docker.
- Open Webpage Here
- Refactoring: Improving the Design of Existing Code 1e
- Author: Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts
- ISBN: 9780201485677
- Optional: for those that want hard copy resource.
- 1e reccommended but is not longer inprint. Number of people have archived the pdf online (github or university hosted pages) to maintain a Java reference.
- 2e not reccommended. Javascript language is used so this may be less clear to some. link
- Alternate resource refactoring.com is also in javascript but recommended reference if you don't get text.
- Technically language version doesn't matter for conceptual idea.
- Other refactoring references refactoring.guru
- Other refactoring references sourcemaking.com
- Java Reflection in Action
- Author: Ira R. Forman, Nate Forman
- ISBN: 9781932394184
- Optional: Will be referenced but pdf available for all below.
- Out of print but archived here
- Python Data Science Handbook [open]
- Author: Jake VanderPlas
- ISBN: 9781491912058
- Optional: Reference for Data Science skillset for machine learning.
- Open Text Webpage Here
The due dates for the projects, assignments, and exercises can be found in the Assignments sections of this page.
Support Materials
- Course Information Sheet (Outline)
- Topic 1: Course Organization pdf
- Topic 2: Advanced Software Development
- Introduction pdf
- Version Control pdf
- Subversion pdf
- Compare with Git pdf
- Git pdf
- Git Workflows pdf
- Testing and JUnit pdf
- Refactoring pdf
- Refactoring Examples pdf
- Docker pdf
- Continuous Integration/Development pdf
- Example Java CI/CI Gitlab Project
- Fall 2022 Example Python CI/CI Gitlab Project (reference Java example for the likely necessary modernization updates)
- Topic 3: Data Science and Machine Learning
- Midterm Exam: Thursday, February 27th, 2025. [in-class activity]
- Refactoring
- Midterm Prep
- Topic 3: Data Science and Machine Learning
- Topic 4: Reflection
- Topic 5: Optimization
- Topic 6: Digital Signal Processing (Flex)
- Final Exam: 5:00PM - 7:00PM Monday, April 28th, 2025. [registrar schedule during exam block]
Technology
- Java 23 (labs -> 23.0.1)
- Labs are standardized on Java 23 so this is the required version. Higher versions of Java are only allowed if you receive TA approval that they are prepared to grade a higher version.
- Download Oracle JDK 23: Oracle has wanted you to sign in, in the past, but at the moment this seems to work without it Here
- Download Open JDK 23 Here
- Visual Studio Code IDE Here
- IntelliJ IDEA Here (Should be able to use ucalgary email to access Ultimate version as student)
- Apache Netbeans IDE Here
- Eclipse IDE Here
- Python 3 (labs -> 3.12.8)
- Python 3.12.8 we are avoid 3.13 for now as it doesn't support tensorflow the same way...yet Here
- Visual Studio Code IDE Here
- Pycharm IDE Here (Should be able to use ucalgary email to access Professional version as student)
- Eclipse IDE Here
- Optional: Google Colab: interactive notebooks for python here
- Optional: Jupyter IPython Notebooks (can run these in Pycharm or otherwise install on your own system) Here
- Optional: Jupyter IPython Notebooks through Syzygy Here
Assignments
- Assignment 1
- Due Date: Friday, Febraury 14th, 2025 23:59 (11:59 PM)
- Topics: Advanced Software Development
- Assignment Description
- Assignment 2
- Due Date: Friday, March 14th, 2025 23:59 (11:59 PM)
- Topics: Machine Learning
- Assignment Description
- Gitlab Starter Project (fork for A2 rather than downloading files)
- setup.txt
- Part 1
- Part 2
- Part 3
- Assignment 3
- Due Date: Friday, March 28th, 2025 23:59 (11:59 PM)
- Topics: Reflection/Serialization
- Assignment Description
- Driver Code
- String Example for Java 23.0.2
- Add VM Option
- --add-opens java.base/java.lang=ALL-UNNAMED
- Add VM Option
- --add-opens java.base/java.util=ALL-UNNAMED
- Assignment 4
- Due Date: Friday, April 11th, 2025 23:59 (11:59 PM)
- Topics: Serialization, JSON, Reflection, Sockets, XML
- Assignment Description