Adam Blank 
Syllabus & Puzzle Hunt #1
Welcome to CSE 390p! One of the most interesting features of 390P is that the same version is never offered twice. Last offering focused on competition programming and a bit about programming with models of computation. This offering will have an entirely different set of focuses. We outline these below.

Course Goals

Note that these are "things we want you to get out of the course"--not "things we're going to teach you". This is a very important distinction. Don't wait for the "python day" or the "API" day.


Learning a new language is always a useful skill to pick up. However, this is a 300-level course. So, we will expect you and your group-mates to figure it out. Python is a particularly good choice because its terseness and easy readability make it one of the best interview languages. There are a million tutorials online. Choose one or learn as you go. We don't care as long as everything you write in this class is done in Python 3. (You may not use Python 2.)

Reading and Using APIs

One of the great things about a new language is that you have no idea how any of the standard libraries work. Python, in particular, comes with a plethora of useful packages. We will expect you to google, read, try out, etc. documentation as necessary. When something is particularly hard to understand, we will give clarification. For example, the telnetlib package is strange, and you will be using it the first week.

Work on Projects

This should be self-explanatory.

Work in a Team

There are many ways to work in a team. In this course, we will be deliberately giving you projects that have "pieces" that fit together like jigsaw puzzles. This allows you to work independently on separate things--but forces you to make sure your code all works together. This is real life.

Knowledge Synthesis

We want you and your group-mates to come in with some knowledge and be able to see connections and usages once you leave. Let us know how we do.


You will be responsible for forming a group of 4-5 students. The worst possible thing you can do is choose a set of your friends. We won't put any actual restrictions (other than the size, for which no exceptions will be made), but we strongly recommend you keep the following goals in mind when forming your group:

  • If you are further in the major, you know more. If you join a group with other older majors, you're wasting an opportunity. Help the new people. Be a mentor.
  • If you have something you consider yourself "good" at (e.g., solving algorithmic problems, working with UNIX, reading documentation), find people who are good at other things for your group. This course will require everything.
  • Sometimes, the best friends make the worst groupmates. We do not want to ruin any friendships here. Plus, meeting new people in the major can be nice.
  • If a group, really isn't working, we will deal with it, but, ideally, the groups will remain throughout the quarter.

Responsibilities & Grading

If you are taking this course because "you needed one more credit and this seemed easy enough", please drop now. I did my best to filter out these students in the application process, but, seriously, this is not the right course if that's your goal. This course is about learning, and we expect you to care more about some weeks than others. This means that you will very likely do almost no work some weeks and much more than 1 credit of work in others.

This course is not about grading, but the policy is simple: "your group must finish all the projects". Many weeks will literally build on previous weeks, and if your group falls three weeks behind, there's not really any point in continuing the course. The projects are mostly set up to be deliberately "divvy-able"--we *want* you to work on one piece of a larger machine! That's how real life is! If you find yourself doing most of the projects by yourself (and you are not okay with that), then let us know.

There is no standard "lecture" or "homework" in this class. "Lecture" is usually mostly "work time" and "homework" is "finish what you didn't get done for next week". We reserve the right to (very rarely) give you small expectations outside of lecture, but 90% of the time, they will be to finish what you didn't get done.

Course Setup

SSH and Mosh

Many of you will have used SSH before, but very few of you will have used Mosh. Mosh is a "Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes." The tl;dr is "you don't lose your SSH connection when you're in a Starbucks and you lose internet for a couple seconds when you're using mosh." We think this is a valuable piece of technology; so, we've provided a way for you to use it on attu.

The very first thing you should do this quarter is follow these instructions:
  • Install "mosh for chrome": The beauty of using Chrome is that we now don't care what OS you're on. If you insist on using an actual application, go to the mosh website and follow the instructions.
  • Once the app is installed, you can access it by going to chrome://apps/ and clicking on Mosh. Then, you should fill in the boxes as follows:
    • Username: [Your CSENetID]
    • Hostname or IP address:
    • Mosh server command: /cse/courses/cse390p/bin/mosh-server
  • Then, hit connect, and you should have a mosh connection!

Telnet and telnetlib

For reasons that we couldn't possibly understand, you might find yourself asking "what is telnet and how do I use it". That's a great question, friend, let's see if we can help. There is a python package called telnetlib that allows you to make client telnet connections. We recommend you look at the following methods in the documentation:


For even more reasons we couldn't possibly understand, you might be interested in discovering services on a computer network. There is a tool called nmap (Network Mapper), a security scanner, which does this on attu. Google and man are your friends.