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)
- 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 is generally supposed to be turned in within three days
of the event.
- Tonight Gridshock documentary, 7pm, Wednesday, Strand
- 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
- 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.
Other good things
- Tonight Digital Music Making class presentation, 7:30 pm.
Sebring-Lewis. (Rap, noise, pop, more.)
Questions
- 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
- 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
- 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