CSCI 261 — Programming Concepts in Java

Object-oriented programming in Java, especially for scientists and engineers


In science and engineering today, we implement, simulate, and test new ideas with computer software. During their careers Mines graduates will use some of the world's most powerful computing machines. This course is a first step towards using them well.

We will begin by programming computers to respond to changing parameters, to make decisions based on those parameters, and to print the results of our calculations. We will learn to use arrays to process sequences and images, to read such data from files, and to display them graphically. As we learn, our programs will tend to become more complex. We will reduce this complexity with object-oriented programming, wrapping our data in classes with methods that keep those data consistent and our programs simple and robust.

Complexity in computer programs is bad, and object-oriented programming (OOP) reduces complexity. The technique of OOP is what's important, more than the language we do it in. But among languages that support object-oriented programming and meet other requirements of science and engineering today, Java is simplest. Remember, simplicity is good, complexity is bad.

This simulation of steady-state fluid flow was performed with software written entirely in Java. For details and more examples, see the research highlighted here.

Time and place

Mondays, Wednesdays, and Fridays 8:00-8:50 am, CTLM B60

Text (required)

Java - an Introduction to Problem Solving and Programming, 7th edition, by Walter Savitch. Available from the CSM bookstore and online,


Week Dates Subjects
0 01/07-01/09 (WF) Chapter 1: introduction to Java
1 01/12-01/16 (MWF) Chapter 2: basics (variables, expressions, scan, and print)
2 01/19-01/23 (MWF) Chapters 3 & 4: flow of control (branching and loops)
3 01/26-01/30 (MWF) Chapter 5: classes (fields, methods, encapsulation, and references)
4 02/02-02/06 (MWF) Chapter 6: classes (constructors, static, overloading, and packages)
5 02/09-02/13 (MWF) Chapter 7: arrays (introduction)
6 02/18-02/20 (WF) Review and 1st exam (Friday, 02/20)
7 02/23-02/27 (MWF) Chapter 7: arrays (one-dimensional, sequences)
8 03/02-03/06 (MWF) Chapter 7: arrays (multi-dimensional, images)
9 03/09-03/13 Spring Break
10 03/16-03/20 (MWF) Chapter 8: polymorphism and inheritance (this, super, and equals)
11 03/23-03/27 (MWF) Chapter 9: exception handling (throw, try, and catch)
12 03/30-04/03 (MWF) Chapter 10: file i/o (text and binary)
13 04/06-04/08 (MW) Review and 2nd exam (Wednesday, 04/08)
14 04/13-04/17 (MWF) Programming projects and code reviews
15 04/20-04/24 (MWF) Programming projects and code reviews
16 04/27-04/29 (MW) Review for final exam


Your course grade is based on

  • 40%: programming assignments
  • 30%: midterm exams (two)
  • 30%: final exam


You will typically receive a programming assignment each Monday that is due before class begins the following Monday. (Exceptions are the weeks of Spring Break and exams.) Assignments will be posted on Blackboard.

You will receive assignments and submit your computer programs electronically on Blackboard. You must also submit a printed copy of your programs, as these will be annotated during grading and are helpful when reviewing for exams.

Grades for programming assignments will be determined roughly as follows:

  • 105: exceptional; exceeds requirements, with elegance and simplicity.
  • 95: excellent; meets all requirements, well done.
  • 85: satisfactory; with a few minor flaws.
  • 75: unsatisfactory; incomplete or with major flaws.
  • 65: poor; seriously flawed, but with some effort.
  • 55 (and lower): failing; with little or no effort.

A grade exceeding 100 will be rare, and can be earned only for more difficult assignments.

Late work

Late work will not be accepted. If you submit work late, it will not be graded, and you will receive a grade of zero for that assignment. Because each programming assignment builds upon previous assignments, it is important that you not fall behind.

Students with excused absences (e.g., for athletics) will be permitted to complete alternative programming assignments with different due dates.

Working with others

"Your code is like your boyfriend or girlfriend. It's okay to talk about it on an abstract, high level. But you don't want to go into the specific details, and you certainly don't want to share." - Professor Pascal Van Hentenryck, Brown University, 1997

The following policy applies to all Computer Science courses at Mines:

  1. If the project is an individual effort, you are not allowed to give code you have developed to another student or use code provided by another student. If the project is a group effort, you are allowed to share code only with members of your group. For CSCI 261J assume that all projects are individual efforts.
  2. You are encouraged to discuss programming projects with other students in the class, provided that:
    • You view another student's code only for the purpose of offering debugging assistance to that student, not to help yourself.
    • Other students give advice to you only on what problems to look for. They do not debug your code for you, and they never by any means provide their solutions to you. You write your code.
    • You follow the empty hands rule, which means that you leave the discussion with no (electronic, mechanical or other) record of it.
  3. Any materials from outside sources, such as books, projects, and, especially, the Web, should be properly referenced and should be used only if specifically allowed for the assignment.
  4. If you are aware of students violating this policy, you are encouraged to inform the course instructor.

Violations of this policy will be treated as academic misconduct by all students involved. See the Undergraduate Bulletin for a description of the Student Honor Code.