The final course in Oregon State’s computer science program is Capstone, in which students form groups of three to four and spend the entire term building one project.
I worked with two other students who I’d never met before the class. They knew each other, though, which initially made me hesitant that I’d be a sort of third wheel, but this was never an issue. If anything, I was glad that at least some of us knew each other rather than being three complete strangers.
I met my partners before winter break. They’d written up a project proposal about building a chess application and shared it on Canvas. I have no strong feelings about chess, but the fact that they wanted to build it using modern C++ caught my eye, as did the quality of the proposal. They’d clearly thought it through, and I wanted to work with people who think things through.
In the end, choosing this group and project were the smartest decisions I made. My partners were great to work with and made this course one of the most enjoyable of the program. My gratitude for my group mates only grew when I realized a few weeks into the term that some groups were being broken up because people couldn’t get along. One of my group mates said that the true objective of the course was not to give us an opportunity to build a project, but to help us learn to work together. I think he’s right.
There’s no content to speak of. There are no lectures, no text, nothing. The only information we were required to read was the syllabus, assignment, and project descriptions, which were brief.
I didn’t do any formal preparation for the course, but needless to say, it does build on the skills acquired in earlier courses. In the case of my project, these were the introductory courses and the software engineering courses. My team’s application never leaned heavily on the processor, otherwise I might have been incentivized to think more about algorithms and maybe work in some parallel programming.
At the end of most weeks each of us were required to share a five minute video describing what we’d accomplished that week. I just stepped through my code and showed unit tests passing. This was very straightforward. If anything, I found it difficult to only talk for five minutes.
At the halfway point we were required to submit working copies of our code. At that point we had a command-line version of chess which was still missing a few features (like determining checkmate). But because we’d decided to use C++17, our code could not be compiled on Oregon State’s servers (I think they max out at C++11). So in lieu of compilable code we turned in a longer demonstration video showing our code in action.
At the end of the term we turned in our final product (which was now a Windows executable), a report, and a poster presenting our work.
Of all the work we did, the vast majority was for the product itself (whose repository you can find here). It wasn’t like Software Engineering I where the point is to completely flush out the design before writing any code. With this project, we had a lot of flexibility to work in the way that we found most efficient. For me, that meant sketching out ideas on paper, then building simple smoke tests to make sure it worked, then expanding from there.
Difficulty and Time Commitment
This was easily the most intricate project I worked on in any class in Oregon State’s computer science program. I’d never employed unique pointers for example, or designed a project with so many layers of abstraction. It also expanded on a lot of skills that I’d developed privately but never used for a class project, like team version control, unit testing, and continuous integration.
All of that being said, at no point did I find the class overwhelming or boring. There were a few weeks early on that were very challenging, but since I was working on a project of my own choosing I felt much more engaged and driven to create a solid final product.
For what it’s worth, the expectation is that each student spend approximately ten hours per week on the project. That’s close to what I ended up doing.
What I Liked and What I’d Do Differently
I honestly wouldn’t change a thing about how this class was conducted. It’s designed so that you can focus on your group and on the code, and for a final project like this, that’s exactly how it should be.