CSCI-101 Programming I
Fall 2022

This course is an introduction to computer programming using Java. I use a traditional lecture format to teach the course material. The primary learning objectives are to have students learn how to write very simple statements using the various constructs in the language and to understand how the program is modifying the contents of the computer's memory while it runs.

  • Exams require students to demonstrate that they can utilize all of the various language features taught in the course. I am not concerned with whether or not they can solve tricky problems in 50 minutes. The same goes with quizzes.
  • Students are required to write notes. No computers are allowed in lecture to eliminate distractions.
  • I administer weekly quizzes in recitation (i.e. lab) based on the material taught during the previous week. I provide sets of problems each week for student to use to prepare for the quizzes.
  • Students will perform their work on a Linux operating system hosted on a college server.
  • Students learn on Linux, compiling and running their code from the command line. Students write using vi. We do not use IDEs since IDEs have features like autocomplete that give students an unhelpful crutch at this stage of their development.
  • Students will use git to push their source code to GitHub for assistance and evaluation.

Coding Rules
  1. Save often
  2. Compile often
  3. Indent consistently
  4. Write code for the maintainer

Course Content
Words to Live by
Aug 23
Aug 26: code Linux commands, compile commands, vi commands
✧Amazing opportunities exist for those that work hard
Aug 29
Aug 29: code
Variable initialization and assignment, Scanner, arithmetic Aug 31: code
Primitive and reference types Sep 2: code
Reading integers, decimals and strings; reading character with charAt()
✧ Code every day
✧ You're at college for ONE reason
✧ Identify what you don't know, then fill in the gaps in your knowledge
Sep 5
Lab 3: Part APart BPart C
Sep 5: code
Boolean expressions, relational operators, boolean operators, comparing Strings Sep 7: code
Variable scope, integer/floating pt. division, ++, --, *=, modulus operator Sep 9: code
Integer factors, if-else, switch
✧ Create or join a study group
✧ Watch Denzel's Commencement Address, and fall forward
✧ Practice, practice, and practice some more
Sep 12
Lab 4: Part APart BPart C
Sep 12: code
Math class, while-loops, for-loops, printing range of values Sep 14: code
Scanning with while-loop, infinite loops, break, continue, computing min and max Sep 16: code
Printing range from low to high, computing mean average
✧ Sacrifice leisure for work
✧ Set a goal, then commit yourself
✧ Start labs early
Sep 19
Lab 5: Part APart BPart C
Sep 19: code
Declaring and printing arrays, setting and getting array elements, computing mean average Sep 21: code
Populating array with Scanner, copying arrays, ?: operator, methods Sep 23: code
Reading data from a file and storing the data in an array
✧ You are a reflection of the company you keep
✧ Write code for the others that will maintain it
✧ Help others and ask for help
Sep 26
Exam week - no labs
Sep 28: code
Methods
✧ Go to office hours
Oct 3
Fall break - no labs
Oct 5,7: code, in.txt, in.csv
Reading from and writing to files, methods with array parameters, compute absolute value and min
✧ Study on weekends
Oct 10
Lab 6: PrelabPart APart BPart C
Oct 10: code
2D arrays, printing elements, setting elements Oct 12: code
2D arrays, loading a 2D array from a file, 2D array methods Oct 14: code, cetvrta
Operator precedence, do-while loops, var-args
✧ Type up the code you learn in lecture
✧ Get answers on stackoverflow.com
✧ Limit your gaming
Oct 17
Lab 7: Part APart BPart C
Oct 17: code
Use do-while and switch to implement a menu Oct 19: code
Strings and string methods Oct 21: Player, driver
Classes, fields, constructors, instances of classes, dot operator
✧ Always have a long-term career goal and pursue it
✧ Create a Linked-In account
✧ Learn to Learn independently
Oct 24
Lab 8: Part APart BPart C
Oct 24: Player2, driver, Lab7c
Classes, private fields, getters, setters, class methods, @Override, toString Oct 25: code
Reading data from file, useDelimiter(), storing in 2D array, writing to file
✧ Don't buy a kilt until you research your ancestry
✧ Start a side project that you can work on with friends
Oct 31
Lab 9: Part APart BPart C
Oct 31: GameBoard, driver
Modeling entities, constructors, static keyword, final keyword Nov 2: Exam 2, Unicode
Exam 2, printing Unicode characters Nov 4: CharacterArrayList, driver
Entity class, fields, methods, and working with arrays.
✧ Experiment with code to see what can and cannot be done
✧ Try to stump your professor
✧ Experiment with the classes in the Java Standard Library
Nov 7
Lab 10: Part APart BPart C
Nov 7: User, UserNotFoundException, driver
Exception, RuntimeException, throw, throws, try-catch, overriding toString Nov 9: Point2D, Player3, driver
Overriding equals Nov 11: Vehicle, driver
Entity classes and instances of an entity class
✧ Don't smoke week
✧ Study past the point when you think you know something
Nov 14
Lab 11: Part APart B
Nov 14 - Preparation for quiz
Nov 16: A, B, driver
Inheritance, extends, super, final, overriding and overloading Nov 18: IntegerStack, Lab11a
Stack data structure Nov 18: Food, driver, calories.txt, food.txt
Storing reference types in an array, File input and output
✧ Create a website and learn JavaScript
✧ Read tech news: Slashdot, The Register, TechCrunch, ArsTechnica
✧ Find a summer job that will pay you to test, document, or code
✧ Work with a professor on their research projects
Nov 28
Lab 12: Part APart BPart C
Nov 30: Car, EV, driver
Inheritance, file input and output, storing references in an array Dec 2: code, input, output
Read data from file into 2D array, manipulate 2D array, and print to another file
✧ Finals are next week - In your free time redo quizzes, exams, and labs.

Practice Problems
Quiz Keys