class logo

CIS 122 - Information and Policies

The goal for this class is to learn how to write computer programs, but that is a difficult skill to test well on an exam. Instead, we will focus on project based work. We will still have some quizzes to make sure that no-one falls too far behind, but the majority of your grade will come from your programming assignments and final project.

Your grade will be composed of the following elements:

Exams: 30%
Assignments: 30%
Final Project: 30%
Participation and Professionalism: 10%

Computers show up in nearly every discipline these days, and just about everyone would benefit from knowing how to program. Whether it is creating a custom experiment for cognitive psychology, processing and interpreting large volumes of data from a physics experiment, or revealing giving patterns in a database of alumni donors; there are lots of problems where knowing how to program can make an otherwise challenging problem easy.

The goal of this class is to learn to program. We won't study a lot of theory, instead everything will have a very practical bent. We'll use the Scratch and Python programming languages, and the concepts and skills we'll learn will apply to pretty much any programming endeavor. What you learn in this class will carry over to writing anything from javascript for a web page to Visual Basic macros for an Excel spreadsheet to a C++ simulation of fluid dynamics.

Pre-requisites: You don't need to have ever programmed before or even know that much about computers to be successful in this class. CIS 110 and Math 111 are listed as pre-requisites and are helpful to have, but the class should be accessible to anyone and everyone.

What we'll learn: In this class we'll learn to write real programs that do real things. The Python programming language makes it very easy to get started but has enough power to do pretty much anything you could want.

Upon completion of this course you should:

  • Be able to write a Python program that does something useful!
  • Understand the concepts behind variables and data types
  • Know how to use functions and control statements
  • Be able to write programs (in any language) with good style
  • Not be scared of programming

Fun Many students take this class to fulfill graduation requirements, and I think it surprises many of them how much fun it can be. Learning how to make a computer do your bidding and perform real, useful tasks is actually pretty cool. If you're not having fun, let me know and we'll try to figure out why.

Why Scratch and Python? Scratch is a great way to get into programming. It is easy to get started for everyone and it lets you build some neat programs that do pretty neat things. Python is a great next step, it removes the limitations that Scratch imposes but still has a clean and readable syntax. It is a fully powered language ("batteries included" as some like to say) that ships with an extensive standard library. It is used in the real world by organizations like: Google, Industrial Light and Magic, NASA, and many more, and is lauded for the way it allows the programmer to get a job done as quickly as possible.

It is important to remember that this is an intensive class that covers a lot of ground in just a few weeks. What does that mean? Well, to get a good idea of what is expected, let's start with the UO's definition of one credit hour:

1 credit: Represents approximately three hours of the student's time each week for one term in a lower-division undergraduate course.
--From the Reader's guide to the UO Catalog

The above quote means that for a four-week four-credit course, you should normally be expected to put in about 6 hours per day on this class. That amounts to two hours in lecture/lab and four hours outside of class. They don't call it intensive for nothing....

The truth is, my hope is that most of you won't require anywhere near the full four hours outside of class for most of the term. But, some people always find this material harder than others (and some people love it so much they want to spend a lot of time on it), so you should be prepared to put in the hours if you need to.

If you find that the class is taking more of your time than this, then by all means come see me and we'll try to figure out what to do about it.

How to succeed: The most important things you can do to do to succeed in this class are:

  • Talk to me I can't help you if you don't talk to me. Ask questions in class, stop by my office, send me emails, there are lots of ways to get ahold of me and I don't mind if you use them
  • Don't get behind The class is so short it will be almost impossible to get caught up once you fall behind

Programming is about two things, making your code do what it is supposed to, and doing it in such a way that you can understand the code after the fact. Just like writing an essay, style is important. You wouldn't expect to get a good grade on an essay if you wrote it in broken english, even if it basically said all the right stuff. Similarly, even if your program works perfectly, you won't get a perfect grade if it is hard to read (poorly written stylistically). Practically speaking, probably a third of the grade for each assignment will be based on style, and two thirds on it doing what it is supposed to.

My goal is to grade homework and get it back to you the day after you turn it in. I probably won't always manage this, but it is my goal.

Double check your work before you turn it in. It hurts your grade a lot if you submit something with errors in it that keep it from running at all. And as you will learn during the term, even a single errant character in your program can wreak major havoc on it.

You must do your own work for this class. That said, you may work with a partner or in a small group and help each other out. You will find that it is easy to get stuck when programming and that working through a problem with someone else can help a lot. In fact, pair programming is a trend that is catching on in industry as well, because even experienced programmers can be more productive when working closely with others. So feel free to work with others, but you must write your own programs. When you submit an assignment there will be a place for you to write notes about who you worked with and what help you got.

You should never turn in code that is identical to another students work.

You must do your final project on your own unless you get advance permission to work in a group. If you get stuck on something, feel free to ask your classmates (or me!) for help, but if you get a lot of help from someone, mention in in your submission along with exactly what they helped you with.

This class is four weeks from start to finish. That means that there just isn't a lot of time to allow for late work. If for any reason you think you can't turn something in on time, you must talk to me in advance of the due date. I really try to be as accommodating as possible and will try to make allowances. If you didn't talk to me in advance, it is still worth turning an assignment in because if I haven't started grading the assignment yet I'll probably let it slide. Even if I've graded the assignment, turning it in late shows me that you care, and that always makes a difference when it comes to assigning final grades.

Please don't cheat.

I have to read everyone's code and that means I will catch you. Almost every term someone cheats, and it is a pain. It sucks for me to deal with and it sucks for you. You're in college now which means the consequences are real and they are big. The rules you have to follow are quite simple: just do you're own work, or when you work in a group acknowledge that fact. It is much better to say that you got help from someone (which is generally fine) than to not mention it and risk me thinking that you cheated.

Computer programming is an interesting discipline in that I strongly recommend working from example code. I can never remember how to do things myself, and I rely on google and on sample code on the web to figure it out. But you can't just copy code, understand what it does and write it yourself in your own way, don't just copy and paste.

I love to teach and I want to do it well. If you have feedback about this class or my teaching style, please don't hesitate to give it. Even if you just think I'm really annoying, I'd like to know it. I promise I won't let it impact your grade, and if you're nervous about that, you can leave it anonymously in my mailbox. Otherwise, please send me email, drop by my office, or grab me after class. I honestly do want to be an outstanding teacher, and the best way for that to happen is for me to get some feedback on what you like and don't like.