CS 141 Introduction to Programming (in Java)

A quick survey

Please fill out this survey.


Wikipedia. Google. Facebook. Smartphones. Compass Cash. Computing is transforming our world; and it's just getting started. Whether or not you ever work as a programmer, learning to program, even a little, will change your perception of computing devices and products.

This course may serve either as an introduction to computing for use in other disciplines, or as the first course in a major or minor in Computer Science. No prior knowledge of programming is assumed. The majority of time will be spent learning to program in Java. Principles to be addressed include: algorithms, design, experimental method, software development methodologies, and implications of discoveries in cognitive psychology for programming strategies.

We will address a number of general questions in computing, including: Are there problems for which it is impossible to write a program? Is there any limit to the speed of future computers? What are computing's impacts on society? Are warfare and computing inextricably intertwined? What moral obligations does programming entail? Will computers make people obsolete?

This course is more concerned with process than with content. A strictly content based course would require you to learn some set of facts (and possibly a fixed set of techniques). A terrible middle school history course might simply require you to memorize some set of names and dates; this would neither enhance your understanding of history as a process, nor illuminate the essentially arbitrary nature of the particular facts that have come to represent some portion of the past. CS141 will require you to learn a substantial body of facts (content), but, its main goal is for you to learn the process of solving problems through programming.

Upon successful completion of this course, you will have a set of programming and problem solving skills that will serve you throughout your life. Like riding a bicycle, you will never forget how to program (even though the machines and languages will change). You will interact with computers as long as you live, and understanding what is going on inside will give you a different perspective on those interactions.

Student learning objectives; aka SLOs


We will start programming a simple, simulated robot, Ruby, and then move on to Java. Class time will be devoted to lectures and programming; typically, I will describe or demonstrate some aspect of Ruby or Java, then you will adjourn to the screens to try it out.


Screens are rather distracting, so I will ask that all screens be black when I am lecturing. Students who insist on looking at screens (of whatever stripe) during the lecture portion will be invited to step out into the hall.


Labs will start very simple, and become more challenging. If you feel you are not being challenged (or are being over-challenged), let me know!

There will be tutors in all labs and available on TBA evenings to assist with problems you encounter. The tutors' job is to help you understand what you need to do, *not* to do your work for you. Please don't ask them to write your programs; ask them about things you don't understand, or what you should do to figure out your bugs.


Exams will test the skills and concepts you have acquired. Through completing the programming, you will learn Java while you exercise the skills of careful thinking and analysis. You will also develop an increased tolerance for frustration. (Programming is can be extremely frustrating; the machine has no intelligence whatsoever, so it can be difficult to get it to do what you want it to. The good news is that with one or two college courses, you will learn enough to convince people to hire you for considerably more than minimum wage!)


This class will use a spiral approach. To program you need to learn a few dozen concepts; but they are all inter-related, so it is difficult at the beginning to explain anything. So, first we will use/run examples without complete explanations. Then, those examples will be used to explain the concepts.


Your grade will be determined by your performance on exams and quizzes, and labs. Labs will count 30%, exams and quizzes 70%.

There will be two mid-terms, a final, and a number of quizzes. The final will count as much as both mid-terms together; the quizzes will comprise the remainder of the exam portion of the grade. Quizzes will be every Friday, with some exceptions; they will be brief. All exams will test the skills you have learned through accomplishing the labs. To pass the course, you must pass at least two of the three exams (to pass the exams you must understand how to program in Java; learning to program is challenging, and programming can only be learned through practicing -- it cannot be done through rote memorization).

There will be 4 or 5 Ruby and 8-10 Java programming assignments; most programming will be done in pairs. Later labs will be larger, require more work, and count for more. Some labs will be started and perhaps completed during class time. Others may be done either during lab or out of them (the labs are open 24/7, and if you wish you may work on your own machine). But, whenever you do the labs, you must demonstrate them during lab (or sometimes in class if there is time).


All work you hand in as your own must be your own; you may not hand in anyone else's work (unless you credit your source). The learning you do by programming cannot be accomplished any other way. It is thus not acceptable to hand in a program that is identical with another student's (who is not your programming partner!). The penalty of plagiarism is failure in the course. It is okay to ask for help when you are stuck, otherwise any tiny detail may keep you from completing your work; but do not rely on anyone else to do the thinking part of the programming; the learning you will do in completing programs yourself will pay off throughout the term (and perhaps throughout your life).


Some of you already know how to program; others have never programmed. Therefore, it is difficult to create labs at the right level for everyone. If at any time you feel the programming is either too challenging, or not challenging enough, please let me know, and I'll try to remedy the situation.

Any motivated student can succeed in this class. On the other hand, if you slack and fall behind it is very likely to be impossible to catch up. Learning to control a mindless automaton is complicated; there are many facts and obscure details you must master before anything will work. On the other hand, unemployed programmers are almost unheard of!