Introduction to Programming Skills

So, the name of the course is "Programming Skills Workshop". What does that mean? Many of the computer science courses you've taken at WashU teach you the theory behind things like developing efficient algorithms. What you don't always learn in those classes is, how can you take those ideas and put them into working code to solve real-world problems?

The aim of this course is to help bridge the gap between computer science theory and practical problem solving. The skills you learn here will help you compete in programming competitions, succeed in technical interviews, and help overall when you need to write code in your WashU computer science courses.

What You Will Learn

By the end of the semester, you will be able to look at a problem, break it down, decide what algorithm to use, and then implement your solution in code.

In week 2, we will explore Functional Programming, a programming paradigm that changes the way you think about programming and can enable you to greatly reduce the amount of code you need to write to get a job done. Material will be taken from Functional Programming in Java by Venkat Subramanian.

In weeks 3 and 4, we will take a short detour and cover skills for technical interviews. Week 4 will be a mock in-class technical interview session (coinciding with the Career Fair). Material will be taken from Cracking the Coding Interview 6th Edition by Gayle McDowell.

Then from week 5 through the end of the semester, we will dive into algorithms. We will more-or-less follow the outline set forth by Steven Halim in Competitive Programming 3.


This class is not intended to be your first time writing code. You should already be comfortable writing programs in at least one computer language. CSE 131 is sufficient.

You will also get more out of this class if you are taking, or have already taken, a class in algorithms and data structures (CSE 241). We are going to survey a lot of different algorithms, so you should be familiar with the basic types of algorithms and how to determine an algorithm's time complexity.


After you figure out the algorithm to solve a particular problem, your next challenge is deciding which language to use to implement your solution.

You should be fluent in whatever language you choose. You should know:

Ultimately, what it boils down to is, which languages are you (or your teammates) most comfortable in, and which languages have the features you need to solve the problem?

Shane's Favorite Languages

You don't need to agree with me, but here are my personal go-to languages.

Again, these are just my opinions based on my experience in programming competitions. It's up to you to come up with your own go-to languages for each type of problem!

Live Code

We will solve the 3n+1 problem (also known as the Collatz Conjecture) together as a class.