Skip to main content

CSC 151 2019S, Class 39: Wrap-Up

Overview

  • Preliminaries
    • Notes and news
    • Upcoming work
    • Extra credit
    • Questions
  • Comments on the final
  • The subject matter(s) of the course

Preliminaries

News / Etc.

  • Sit where you’d like (today and Friday)
    • That’s “within reason”
  • While we do not have labs or readings for Friday, you are expected to show up.
  • I’m working on getting grades to you as soon as I can. I’ll have all grades by Monday so that you can decide whether or not to take the final.
  • Review sessions for final: This Thursday at 7pm, Sunday at 5pm.
  • DO NOT FILL IN THE END-OF-COURSE EVALUATIONS UNTIL FRIDAY’S CLASS
    • If you’ve done so already, please speak with me asap.

Upcoming work

  • No more readings.
  • No more lab writeups.
  • No more quizzes.
  • No more flashcards.
  • No more exams (well …).
  • Exam 3 epilogue, if you haven’t submitted it already.
  • Now: Exam 3 cover sheets.
  • Optional final, 2:00-5:00 p.m., Tuesday, 14 May 2019.

Extra Credit

Extra credit is generally supposed to be turned in within three days of the event.

Extra credit (Academic/Artistic)

  • Tonight Gridshock documentary, 7pm, Wednesday, Strand

Extra credit (Peer)

  • Today Choreography performances: Wednesday, 4:30 p.m. Flanagan Theatre
  • Voice Recital, 7:30 pm, May 10, in Sebring Lewis
  • Track and Field, Friday and Saturday at St. Norbert
  • Women’s Golf, May 14-17, Houston, TX

Extra credit (Wellness)

Extra credit (Wellness, Regular)

  • Any organized exercise.
  • 60 minutes of some solitary self-care activities that are unrelated to academics or work. Your email reflection must explain how the activity contributed to your wellness.
  • 60 minutes of some shared self-care activity with friends. Your email reflection must explain how the activity contributed to your wellness.

Extra credit (Misc)

Other good things

  • Tonight Digital Music Making class presentation, 7:30 pm. Sebring-Lewis. (Rap, noise, pop, more.)

Questions

Comments on the final

  • Tuesday at 2pm in this room.
  • Different format than most of our exams:
    • Paper (not computer)
    • 4 problems (not 6)
    • Working Scheme not necessary
    • Kind of “extended quiz”
    • But you do get to bring notes.
  • We may include vectors, deep recursion, analysis/efficiency, code reading, code writing, lists, sorting, etc.
  • In the past, most students who took the final finished in 90 minutes or less.
  • For most students, the final replaces the lowest exam grade, provided it is higher than the lowest exam grade.
  • We’ll discuss the Sample Final.
    • You can get to it by selecting Current > Exam.

The subject matter(s) of the course

The end-of-course evaluations have five questions that read “blah blah blah helped me understand the subject matter of the course”. When we first started using College-wide EOCEs, I asked “How will students know what the subject matter of the class is? After all, students call CSC 151 ‘The Scheme Course’, even though our primary focus is functional problem solving, and CSC 152 ‘The Java Course’, even though its focus is algorithms and data structures.” The response “You can tell them.” But that’s not my style.

So we’re going to collaboratively develop a list of things you may have learned in CSC 151 this semester. I tend to group them into categories.

  • I’ll describe the categories and give an example for each.
  • I’ll give you some time to come up with suggestions.
  • We’ll then get as many on the board as we can.
  • We’ll talk through them for a bit.
  • I’ll probably take photos and record them in the eboard at a later date.

Problem Solving

General strategies for approaching problems, computational and otherwise.

  • E.g., We’ve learned to decompose a complex problem into smaller problems (subroutines) and then combine those solutions back into the broader solution. For example, in learning how to make some kinds of sandwiches, we might also solve the problem of “spread stuff on bread”.
  • Describing a problem helps to find a solution. (Sam says formalizing problems helps you think.)
  • “Team is better than one”
  • Use pen and paper to think through things
  • Pursue better ways to spread stuff on bread
  • [Picture of a rubber tree] - It’s useful to explain what you are doing out loud, even if it’s not to another human.
  • “Any problem can be solved.” (If you stay in CS and take CSC 341, you will learn that this is provably false.)
  • Understand your resources, mental and physical, before solving a problem.
  • Try.
  • The Internet can help you solve problems.
  • Build upon past solutions.
  • Try multiple approaches; don’t just stick with your first solution.
  • You won’t always be given the answer.
  • Think step by step.

The core of CS: Algorithms and data structures

CS is the study of algorithms and data structures; ways to manipulate data and ways to organize data.

  • E.g., We’ve learned about the “List” data structure, which organizes information in sequential order and which you can visit element by element using car and cdr.
  • Using recursion to write algorithms
    • May be dangerous
    • Multiple type
  • Hash tables as a way to store information
  • You should spend some time understanding the capability of each data type.
    • Representation
    • Functions that operate on it
  • Lots of data types: Strings, number, list, string, struct, vector, hash, pair, nested list, rock
    • Benefits of each
  • Use helpers [+1 ec]
  • How to build data structures using struct.
  • Searching
  • Sorting

Functional programming

CSC 151 uses an approach that we term “functional programming” and that is somewhat distinct from other approaches.

  • E.g., “Functions are first-class values”: They can be parameters to other functions, they can be returned by other functions. For example, o is a function that takes two unary functions as parameters and returns a new function that applies the two in sequence.
  • Recursion as a program design strategy
  • Function as a core unit of thinking (something that takes some inputs/params and returns a value/result)
  • Anonymous functions: We can write and use functions without naming them. (lambda)
  • Section
  • Immutable values (pure): Once you’ve built a value, it doens’t change. (Vectors and hash tables are mutable.)
  • In most pure functional languages, a function always gives the same output for the same input.

Program and software design

We’ve also learned a bit about how you build software (or at least how you might build software).

  • E.g., Document your code so that others can understand them.
  • Don’t make things too complex.
  • Think broadly about problem before you start implementation
  • Format and document to reduce confusion
  • Break into smaller parts / use helpers
  • Look for patterns
  • How to build GUI
  • A strategy for writing documetation: 6Ps
    • Preconditions
    • Postconditions
  • Husks and kernels
  • Divide team work
  • Efficiency matters
  • Debugging is important

Scheme and Racket

We’ve grounded most of that learning in the Scheme/Racket programming language. Along the way, we’ve learned a bit about Scheme.

  • E.g., Scheme’s evaluation strategy: Evaluate the arguments, then apply the procedure.
    • Some exceptions: if, and, or, quote, cond, …
  • Debugging
  • How to use DrRacket to automatically indent
  • How to make shapes
  • Approximately 933 different procedures
  • (The (joy (of matching (deeply ((((nested)))) parentheses))))
  • DrRacket will crash. Save.
  • There’s a benefit to having a simple language design
  • Tons of shortcuts

Digital humanities

We’ve seen a bit of how computers can serve as a tool in humanistic inquiry.

  • E.g., gathering simple information about a text, such as the most common words and how frequently they appear.
  • Techniques for marking up text, particularly XML.
  • Text generation using right/left neighbors
    • And the joy it brings
  • We can use computers to analyze social issues
  • You can do cool stuff with only a semester of CS
  • RegExp
  • Charts are good
  • Approach: Sentiment analysis
  • Data visualization
  • Sequences of numbers may be pointless by themselves.
  • Some examples, such as the guest speaker on Mayan Anthro.
  • Counting syllables (some things are hard)
  • OCR (some things don’t work as advertised)
  • Approach: Topic modeling
  • Exposure to an upcoming field
  • Techniques for processing large datasets and what happens when you write inefficient algorithms
  • Process holistic info
  • The computer result is not the final result; it’s only a tool for a broader humanistic approach

General skills

I would hope that most Grinnell classes teach you things beyond the basic disciplinary subject matter.

  • E.g., Practice thinking on your feet.
  • Dividing work beteween a team when folks have different skills.
  • Working at detailed and big picture levels
  • Working with different people (pair/peer/pear programming)
  • Collaborate without dominating
  • Self reflection
  • What to do when Sam gives you more work than you can physically do (time management skills)
  • How to listen to and interpret other’s ideas
  • Patience: Try, try again.
  • Seeing patterns
  • Organization (in contrast to how Sam approaches the world)
  • Simplify work
  • Making charts
  • Self care
  • Presentation
  • How to misinterpret instructions

And beyond

When I was about your age, my mother, who was a professor of Psychology, told me that she planned to conduct a study on how faculty serve as moral models for their students. I was a snarky young man, so I said something like “Mom, don’t be silly. While you serve as a moral model to your students” (and she did), “most faculty are not moral models”.

But after a few years of teaching, I started hearing from my students that the way I approach the class does, in fact, provide some models for how one might approach the world. I’m still not sure that I’d call it “moral modeling”, but there are things I hope you take away from the class that go beyond the subject matter and skills.

  • E.g., Support those around you; they are amazing people.
  • Value of self care. (And self care can be a lot of fun)
  • It’s sometimes okay to ignore Sam’s instructions
  • Correct spelling is sometimes optional.
  • Computers are sentient and malicious; when things go wrong, blame them, not yourself.
  • Your faculty will punish you for things you think are appropriate. Deal.
  • Set attainable goals.
  • Don’t be afraid to ask for help.
  • There’s more to life than CS (or any academic discpline)
  • PSA: Moderation
  • PSA: Consent
  • Web searches can be your friend (?)
  • Support those around you.
  • Be open about your care for people.
  • Laugh.
  • Feed others.

Summary for think/pair/share

  • Problem Solving
  • The core of CS: Algorithms and data structures
  • Functional programming
  • Program and software design
  • Scheme and Racket
  • Digital humanities
  • General skills
  • And beyond