Ian Finlayson
About
Welcome to my home page! I'm an associate professor of computer science at the University of Mary Washington in Fredericksburg, Virginia. My teaching interests include programming, computer organization, the theory of computation, parallel computing, data structures and algorithms.
My research interests include computer architecture, compilers, parallel computing and computer science education. My main research project right now is in the area of making parallel computing easier to accomplish.
You can read more about me on my about page.
Contact Information
| Title: | Associate Professor |
| Education: | Ph.D. from Florida State University |
| Office Number: | Farmer B47 |
| Telephone: | 540-654-1714 |
| Email: | ifinlay@umw.edu |
Current Classes
- CPSC 225 - Software Development Tools
- CPSC 305 - Computer Systems and Architecture
- CPSC 318 - System and Network Administration
- CPSC 470B - Algorithms
Fall 2025 Schedule
| Monday | Tuesday | Wednesday | Thursday | Friday |
|---|---|---|---|---|
| 8:00 - 9:50 CPSC 305 |
8:30 - 11:00 Office Hours |
8:00 - 9:50 CPSC 305 |
8:30 - 11:00 Office Hours |
|
| 11:00 - 12:50 CPSC 318 |
11:00 - 12:15 Algorithms |
11:00 - 12:50 CPSC 318 |
11:00 - 12:15 Algorithms |
I am available other times besides these. If you want to make an appointment, please just email me.
Past Classes
- CPSC 110 - Introduction to Computer Science
- CPSC 220 - Computer Programming and Problem Solving
- CPSC 240 - Object-Oriented Design and Analysis
- CPSC 326 - Theoretical Foundations of Computing
- CPSC 340 - Data Structures and Algorithms
- CPSC 401 - Organization of Programming Languages
- CPSC 414 - Network Principles and Applications
- CPSC 425 - Parallel Computing
- Freshman Seminar - Computation: Minds and Machines
Course Listing
Our school's course listing page leaves a lot to be desired, so I maintain a more usable one at this address: ianfinlayson.net/umw-courses
I also maintain flowcharts showing the prerequisites of our comp. sci. classes in visual form. These are auto-generated with Graphviz:
Exploring Computer Science
I have an introductory programming text book in Python. It is called Exploring Computer Science.
Game Boy Advance
I have written several tools and programming tutorials on homebrew programming for the Nintendo Game Boy Advance console. These can be found together on my GBA development page.
Programming Contests
I coach our programming contest teams and also host contests here at UMW from time to time. Below are programming contest puzzles I developed or adapted for our contests:
| Year | Theme | Problem Packet | My Solutions (in C) | Test Cases |
| 2025 | Hacked Robots! | 2025 Problems | 2025 Solutions | 2025 Tests |
| 2022 | Pokémon | 2022 Problems | 2022 Solutions | 2022 Tests |
| 2019 | Nintendo | 2019 Problems | 2019 Solutions | 2019 Tests |
| 2018 | Classic Disney | 2018 Problems | 2018 Solutions | 2018 Tests |
| 2017 | Harry Potter | 2017 Problems | 2017 Solutions | 2017 Tests |
| 2016 | Star Wars | 2016 Problems | 2016 Solutions | 2016 Tests |
| 2015 | Lord of the Rings | 2015 Problems | 2015 Solutions | 2015 Tests |
| 2014 | Zelda | 2014 Problems | 2014 Solutions | 2014 Tests |
| 2012 | Game of Thrones | 2012 Problems | 2012 Solutions | 2012 Tests |
Research
My research is mainly in the areas of compilers, programming languages, computer architecture, and parallel processing. I am especially interested in pedagogical work in these fields.
Publications:
- Jguardrail: A Framework for Identifying Possible Errors in Student Java Code
- The Effect of Gender on Student Self-Assessment in Introductory Computer Science Classes
- Using the Game Boy Advance to Teach Computer Systems and Architecture
- Introducing Tetra: An Educational Parallel Programming System
- Improving Processor Efficiency by Statically Pipelining Instructions
- Improving Low Power Processor Efficiency with Static Pipelining
Blog
You can see some of my side projects and random stuff on my blog.