Introduction & Recursion

Agenda

  1. Course Introduction and Structure
  2. Recursion

Course Introduction and Structure

What do you know?

  • basic data-types and variables int, char, String, boolean
  • if-then-else statements
  • iteration (for and while loops)
  • arrays and strings
  • defining and using methods

What will this course cover

  • objected oriented design: defining and creating classes, class hierarchy
  • generic programming: interfaces, abstract classes and methods
  • simple data structures: linked lists, stacks, queues
  • recursion, randomization, and other topics

Course philosophy

  • emphasize general design principles
  • generic conceptual tools for how to solve problems
    • identify small sub-tasks that should be solved
  • technical tools to code implementations
  • offer greater opportunities for creative expression

What will you do?

  • weekly lab assignments (~25%)
  • monthly projects (3 total) (~30%)
  • weekly quizzes (~25%)
  • actively participate (~20%)
    • discussion in lecture
    • accountability groups

Weekly Rhythm

  • Monday: start working on lab/project, attend lab session
  • Tuesday: prepare for lecture: reading, videos, etc.; write some code
  • Wednesday: lecture and debrief
  • Thursday: prepare for lecture; write some code
  • Friday: lecture and debrief; turn in assignment; look at following assignment

How will you do it?

  • work collaboratively, but don’t share code
  • participate in discussion
    • Moodle forums
    • Slack channel
  • interact with posted materials (readings, videos, etc)
    • assume everything is required, unless marked with IYI

Synchronous Meetings

Lecture format

  • not really a lecture
    • typically short introduction
  • work in small groups on problems
  • rejoin larger group to discuss solutions
  • you must prepare by engaging with course materials before lecture

You might not like the format (compared to lectures)

Studies indicate you might feel:

  • sessions are disjointed and lacking flow
  • there are frequent interruptions to work
  • concerned errors you make won’t be corrected
  • general feeling of frustration and confusion

But this format is effective

The moral

Learning probably doesn’t feel the way you think it should:

[W]hen students experienced confusion and increased cognitive effort with active learning, they perceived this disfluency as a signal of poor learning, while in fact the opposite is true.

Deslauriers et al. 2019

Zoom for group discussion

  • you will spend much of the lecture time working in breakout groups on Zoom
  • you will be given a prompt (Google doc)
  • you might be asked to code too
  • you might be asked to share main points of discussion with class

Work Outside of Class

Collaboration

  • collaboration is encouraged
  • for work you will submit (labs/projects) do not share code
  • discuss problems on a conceptual level

Web Resources

  • there are many good resources out that help teach concepts, e.g.,
  • there are many forums where you could find code that solves your problems (e.g., StackOverflow)
    • often do more harm to your learning

no matter what: always credit your sources (comments in code)

Getting Help

  • lab and lecture sessions
  • Moodle forums and Slack channel
  • evening TA sessions (MW 7–9pm)
  • office hours
    • drop-in
    • by appointment
  • email (if other channels are not appropriate)
  • peer tutoring available

Grading & Academic Integrity

Course Goals. For you to acquire skills relevant to your life; to challenge you and support your learning.

  • to do my job, I need to be able to assess your (individual and collective) understanding as clearly as possible
  • assessment is reflected in grades
  • attempting to gain an unfair advantage in grading undermines everyone’s work in the class
  • no long-term benefit to cheating, larger long-term risks
    • short term risk: failing assignment/course, possible disciplinary action by the college

Bill & Ted’s Rule

Be excellent to each other!

Remark on Code

Code serves two purposes:

  1. get the computer to do what you want
  2. convey your intent and implementation to someone reading your code
    • clear organization
    • sensible, consistent naming conventions
    • comments describing functionality, usage, and trickier bits of code

Lab Extensions

  • programming is a creative endeavor
  • opportunity to go beyond following instructions
  • solve problems relevant or interesting to you
  • grading is subjective
    • typically effort and care you put into an assignment are clear