Course Description

This foundational course for computer science majors introduces the fundamental concepts of programming from an object-centric perspective using Java. Includes a brief introduction to computing (historical development, computing systems, algorithms, and the nature of programming languages) and the object-oriented paradigm for software development. Topics include: objects, classes, methods, simple data types, control structures, and the use of indexed-list data structures such as arrays or strings. Includes discussion of the ethics and responsibility of computer professionals with respect to information rights. Lecture: 3 hours per week. Lab: 2 hours per week.

Prerequisites: MassBay placement into a 100-level Math (not MAC) and CS 110 Introduction to Computer Science, or instructor's permission.

Required Texts

In lieu of a traditional textbook, this course will make use of Open Educational Resources (OERs). During the first week of class, we will make accounts and register for the learning platforms we will be using.

  • Understand how variables reserve named and typed space for data.
  • Identify different representations of the same data and their impact on computation.
  • Describe the role of expressions and statements in organizing code.
  • Understand how functions receive parameters and generate returned values.
  • Recognize how conditionality can be expressed with boolean logic.
  • Identify how to construct programs with multiple branching paths.
  • Understand the difference between conditional branches and loops.
  • Recognize the 'for' and 'while' keywords, and how they can be used to construct looping code.
  • Describe the use of collections such as arrays and lists for storing multiple data points of a single type.
  • Identify the purpose of objects in organizing code.
  • Recognize how objects are constructed.
  • Describe the difference between defined classes and instantiated objects.
  • Understand the role of attributes and methods in describing a class.
  • Identify the difference between public and private members of a class.
  • Recognize the purpose of the static keyword and how it modifies the behavior class members.
  • Identify primitive data types available in Java (integer, boolean, double, char, long.)
  • Understand the Java syntax for constructing objects and calling methods.
  • Use the Java compiler and Java runtime to build and execute Java code.
  • Recognize Java methods for performing basic String manipulation.
  • Identify objects used for common tasks in Java programs, such as reading data from a user or the filesystem.
  • Understand the purpose of the 'import' keyword, and how Java programs can be divided into multiple packages.
  • Recognize Java objects used in the creation of Graphical User Interfaces.
  • Understand best practices for leaving code comments and creating program documentation.
  • Identify strategies for testing the correctness of written code and debugging discovered errors.
  • Describe techniques for planning the structure of methods before code is written.
  • Recognize best practices for building reusable classes of objects.
  • Understand trade-offs in readability and efficiency of code.
  • Week Reading
    1 Supplemental Readings:
    The “online brain”: how the Internet may be changing our cognition
    Analyzing the role of diet and exercise in myelin production
    2 Runestone textbook Chapter 1: "Getting Started and Primitive Types"
    Runestone textbook Chapter 5: "Writing Methods"
    Supplemental Readings: David Eck book, Chapter 2, Chapter 6
    3 Runestone textbook Chapter 2.1-2.5: "Using Objects"
    Runestone textbook Chapter 6.1-6.6, 6.8-6.9: "Writing Classes"
    Supplemental Readings: David Eck book, Chapter 5
    4 Runestone textbook Chapter 3: "Boolean Expressions and If Statements"
    Runestone textbook Chapter 4.1-4.2: "Iteration/Loops"
    Runestone textbook Chapter 7: "Arrays"
    Supplemental Readings: David Eck book, Chapter 3.1-3.6, 3.8
    5 Runestone textbook Chapter 1.4.6: "Storing User Input in Variables"
    JavaDocs for Scanner, String, PrintWriter, and LocalDate.
    Supplemental Readings: David Eck book, Chapter 11.1-11.3
    9 Runestone textbook Chapter 6.7: "Static Variables and Methods"