You accumulate as many points as possible when completing labs. Labs consist of questions, programming problems, and potentially a programming contest problem.

  • Questions - The questions are placed in the overview of the lab. Answering questions accumulates points as described with the questions. Some of the questions have been copied from David Eck's book, Java Notes.
  • Programming Problems - a lab has several individual programming problem, each of which is worth a spedified number of points.
  • Programming Contest - Our class has a website with the Mooshak programming contest. Some labs have a corresponding programming contest problem. In those labs, each team mush submit a solution to the programming contest problem in order to receive the total points earned on the lab. If the programming contest solution successfully solves the problem, team members are awarded additional lab points.

  • After studying material in a module, you complete a lab to practice the concepts of the module.
  • Each module directs you to its corresponding lab.
  • Individual labs are accessed via the Labs Sidebar.
  • Each lab has Lab Overview section that contains the following.
    • An overview discussion of the lab.
    • The submission requirements of the lab.
    • Possibly a sample lab specification and solution that you can use as a template.
    • A list of questions that you have to answer.
  • Labs are where you learn. You are allowed to help team members learn. Help is not restricted except that learning must occur.
    • You accumulate points by completing sections of the labs.
    • You assign yourself points based upon how well you complted each lab section.
    • You must demonstrate you lab to a team mate.
    • Gusty selects the section(s) of the lab for you to demontrate to him.
    • Depending upon your demonstration to Gusty, you may be asked to demonstrate additional lab sections.
    • Depending upon your demonstration to Gusty, your lab points may be increased or decreased.
  1. Understand the Problem
    • Analyze specification - study the specification as soon as the problem is assigned. This is important for projects, which (a) longer and more difficult than labs and (b) you complete by yourself. You will often discover solutions to problems as you are wandering about campus, but if you have not studied the specification, you cannot solve the problem. Also, Gusty tries to make things clear, but often he does not. Ask questions untuil you understand the specification.
    • Identify inputs and outputs
    • Think about the data
  2. Initial Algorithmic Thinking
    • Manually solve small concrete cases - I cannot over-emphasize this step. If you cannot create and solve small concrete cases of the problem, you will never discover the underlying algorithm and data strucutes.
      • Get out paper and pencil.
      • Draw out the problem.
      • Solve small concrete cases.
    • Confirm your inputs, outputs, and data that resulted from Understand the Problem step
  3. Design – Algorithms, Data Structs, Tests
    • Generalize the small cases into a detailed design with data structures. You may use pseudo code or flow charts for your design.
    • Create test cases
  4. Write Java Code
    • Translate your design into Java Code
  5. Test and Debug
    • Execute your test cases
    • Debug code when test cases fail