Functional Problem Solving (CSC 151 2014F) : Handouts
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] - [FAQ] [Teaching & Learning] [Grading] [Rubric] - [Calendar]
Current: [Assignment] [EBoard] [Lab] [Outline] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Readings]
Reference: [Setup] [VM] [Errors] - [Functions A-Z] [Functions By Topic] - [Racket] [Scheme Report (R5RS)] [R6RS] [TSPL4]
Related Courses: [Davis (2013F)] [Rebelsky (2014S)] [Weinman (2014F)]
Misc: [Submit Questions] - [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] - [Issue Tracker (Course)]
These are my attempts to answer some questions that students have asked (in the first assignment, in office hours, via email, etc.)
Note that there may be some repetition on this page.
When will we create our own algorithms?
Almost immediately (say, day four). In most cases, you'll be writing algorithms for tasks or problems that I assign, but you'll also have the opportunity to choose a few of your own tasks or problems.
Can the paper with hand-written notes that students bring in on in-class quiz days be double sided?
I don't generally allow notes for quizzes. Just for in-class exams. Sorry.
If this is a hands on learning class, should we take notes as we read to make terms much easier to identify or is the hands on learning approach enough?
I think it's always helpful to take notes as you read. The notes will certainly be useful when you do the hands-on work.
I don’t quite understand how we turn in homework. I know we turn in Labs via google docs and this assignment via email, but I’m not sure how we’ll be submitting code and other assignments and exams.
You will generally copy and paste code into email for homework. Most people write their exams in Google Docs (or Office365, I suppose), save the document on their computer, and attach it to an email message. I also ask for a printed copy of every exam.
I see that the course is "Functional Problem Solving 'with lab'". When is the lab?
The lab is mixed in with the the regular course. There is no separate lab session. However, you should know that this course meets four days per week and you are expected to show up all four days.
How difficult is the course?
That's a hard question to answer. Computer science is a different way of thinking. Some folks find it natural. Some folks find it nearly impossible. I see at least a factor of ten difference in time spent on some assignments. And I've found no good ways to predict how difficult someone will find the course. I'm not alone in this, faculty nationwide observe the same tenfold difference.
Of course, time spent is only one issue. Often, the people who seem to need to spend more time understand the material at least as well as people who spend less time.
How can I excel in the course?
Different students find different ways to excel. In general, one excels in my courses by taking an active approach to the material - read carefully, make lists of questions, ask questions in class, answer my questions, seek help when confused, discuss material with colleagues, and so on and so forth.
But I find students also excel when they engage enough with the material that they find natural ways to exceed my expectations - by finding new approaches, by doing creative things, by extending ideas.
Is the late policy the same for take-home exams as it is for assignments?
It's similar. I expect exams in on time. I expect you to start them early. But I understand that students get sick or that unexpected things come up. In all such cases, you have a responsibility to notify me if you will not be able to get the work in on time. I'll admit that I don't recall a student ever turning an exam in late.
Can I eat small snacks (e.g., carrots, muffins) during class?
Yes, provided you keep them far away from the computers.
Is there a way to use a personal computer for the work in this course?
After the first week or two, we will provide you with a virtual computer for you to use with Virtual Box.
I was just wondering what kind of out of class work we were going to be doing. I'm just a bit worried that completing work out of class will be difficult if I can't make it to a computer lab.
There are five regular kinds of work in CSC 151.
Daily readings. We recommend that you do these with a computer at hand so that you can try things as you go. (That's not strictly necessary; many students just read and reflect.)
Daily labs. We do these in class in pairs. However, there's sometimes followup work (usually less than thirty minutes worth). Most students find time during the day to finish that up in the lab.
Weekly homework assignments and projects. You do those outside of class in small groups. Since you're working in small groups, you are best off working in the lab. We also have tutors available most evening to help with those.
Take-home exams. These take the place of some homework assignments. You do these on your own. You can use your own computer (with some software we provide) or the lab computers (where the software is already installed).
Weekly quizzes. Students study for these in a variety of ways, mostly by making sure that they've understood the readings and done the work on the daily labs. So, they can be done with or without computers.
So ... three kinds of work in the class assume you'll have access to a computer outside of class. Two more benefit from it.
I'll note that lots of CSC 151 students like working in our computer labs (Science 3813 and 3815). There's a good sense of community in those rooms.
Please explain the two units of extra credit.
I give you one unit (1/4 point) per activity. You can attend some specified academic events. You can attend some of your classmates' activities. I cap each category at four activities. So, if you attend four events in two categories, you get two points of extra credit. The points are on a 100-point scale. For example, if you have an 88 at the end of the semeseter and do all of the extra credit, you'll end up with a 90, effectively moving your grade from a B+ to an A-.
What's the typical grade spread in this course?
I do not report grade spreads.
Are there any good online resources that you recommend that might supplement my understanding of what I am learning in class?
The front door has a link to some general materials about Scheme and Racket. But our course is unique enough that the best resources are probably people.
I understand that there will be a lot of group work in the course, which is fine. But how do you ensure that all students get hands-on experience with the techniques?
I give you individual work as well as group work and I change your partners a lot. Your mentors and I will also remind people to take turns at the keyboard. I expect that the approaches help ensure that everyone thinks about the material.
The Web site spent a fair amount of time discussing how to cite and use internet sources correctly. how frequently do you expect students to seek help from the Internet?
Evidence suggests that students regularly seek help from the Internet.
It's rarer in this course, but it's very common in my other courses.
Why do we use Scheme and not a language more conventionally used in college intro classes (from what I've heard) like C++ or Java?
Scheme is much simpler. The definition is small: There are fewer words in the definition of Scheme (well, the previous definition of Scheme) than there are procedures in the Java libraries. Scheme doesn't have a lot of syntactic rules. Once you master parentheses, you've gotten most of the syntax. But, most importantly, Scheme encourages you to think in ways that we think computer scientists should think. Plus, Scheme is one of the few languages that we can use to write code I might call beautiful.
I just have one question about your grading policy. You state that "particularly nice work will earn you a very good or excellent". Could you please specify what do you mean by "particularly nice work"? Must it involve exceptional creativity?
It varies. Sometimes we'll suggest extra work or extra problems. Sometimes it's just that you are particularly thorough. Sometimes, as you suggest, it shows a creative approach - a new way to solve a problem (typically a more elegant or more efficient way to solve that problem).
I am wondering how the groups will work. How will we get into groups and will they change?
I will assign you to groups, at least for the first few weeks of the semester. You'll get a partner (group of two) for every few labs and a small group (usually three or four) for each homework assignment. In some cases, I will assign them randomly. In others, I may use particular criteria for doing group assignment.
Do you believe you have a purpose in life?
Yes, I think that what I'm doing is my vocation - helping young adults learn (and learn CS) and grow.
What were you like in college? (Favorite things to do? Kinds of friends?)
I was pretty snarky and kind of geeky. I liked watching movies. I was active in the film society and took a bunch of film classes. I liked accumulating cheap records and playing them. I liked scouring used book stores for interesting books. My friends were also kind of geeky, although less snarky. For some reason, they tended to be chemistry majors.
Where are you from?
I'm from Newton, MA.
Thoughts on Grinnell as a whole?
I love Grinnell (the College). My students are primarily smart, engaged, thoughtful, friendly people. My colleagues care about teaching. I get support to try new things in my teaching. I seem to make a difference in people's lives. And I make a good living from it. I very much like Grinnell the town, although I'm still finding it strange to be in a place where I am so well known (usually in terms of my kids or my wife). I wish we had a large used bookstore (but it's probably good for me that we don't). I wish we had more restaurants, particularly an Indian restaurant and a Thai restaurant.
What are your most and least favorite parts of Grinnell?
Favorite part: The people. The students are generally thoughtful, smart, caring people with diverse interests who it is a pleasure to teach. My colleagues are brilliant people who care a lot about their students. The staff and administrators are usually equally passionate about the mission of Grinnell.
Least favorite part: Too many students feel too comfortable making thoughtless decisions (e.g., about alcohol, drugs, and sex) that can have a significant negative impact on them or those around them.
I see that I still have my answers from last year, which I repeat below. Clearly, I change a bit from year to year.
I'd say that I like certain characteristics of the students the most. In general, you folks care about learning, you have diverse interests, you seek to better the world, and you are nice people. Grinnell students are a great bunch to teach.
I think we're a bit greedy given our financial state. I hear too much of "We have a lot of money. Why can't I do fill in pet project?" And it bothers me that I sometimes feel that way, too.
I get frustrated that self-gov is not the success it should be. For example, it bothers me that there's a lot of theft in my building
Do you have any predictions for discoveries in computer science that will happen in the next 20 years? (ie. Do you have any pet theories relating to CS? Or really any field? My example would be I believe we're living in a simulated universe.)
I believe that in twenty years we should have the knowledge and computing power to be able to simulate the brain at a cellular level and perhaps even a molecular level. I'm not sure whether or not that means we can then have computer programs that are "intelligent", but it will be interesting to see what the implications are.
If there was one thing about your life that you could change, what would it be?
My parents would still be alive. Does that count? I'm trying to change two things under my control (my weight and my tendency toward snarkiness).
Favorite place to visit?
I'm not sure I have a particular place I like to visit. I like to go to a variety of places with my family. My favorite place to visit used to be my home town, but I have no family there any more, so it's not the same.
_Dogs or cats? _
I've had both dogs and cats. I don't have a strong feeling either way.
Best place on campus to go to relax?
Steam room. Some students seem to really love the bean bag in the corner of my lab. I think the wellness lounge is tempting.
What's your favorite animal and why?
Can I say Jackalope? I like that they are a fascinating hybrid of other animals, that they are imaginary, and that nonetheless you can find stuffed jackalopes around the country.
How did you get into computer science?
I entered college planning to be a math major (and I even graduated college as a math major). But I quickly learned that I would never be a great math major. More importantly, when I took my first computer science class (in Lisp, if I recall correctly), I found that CS had everything I liked about math (particularly problem solving) along with the ability to construct things and to see your solutions "in action" as it were. I've never looked back.
Over the past few years, I've started making art (mostly non-representational, sometimes with a performative aspect). I find making art and programming have many similarities, including the great positive of making something new and interesting.
Pick a category of objects and list five of your favorite objects in that category.
Favorite ways to spend time. 1. Doing almost anything with my wife and kids - just hanging, playing games, discussing some silly topic, whatever. 2. Reading (usually science fiction or nonfiction, but I have eclectic tastes). 3. Coding (yeah, I code for fun). 4. Playing board games. 5. Organizing things (books, CDs, whatever), even though you can't tell that by looking at my office.
I regret that "exercise" doesn't fall in that top 5. I'm working on it.
What are your favorite board games?
Mostly ones that few people have heard of (well, two of these board gamers know, but not many other people): Cosmic Encounter. Yacht Race, Carcasonne, and Circus Maximus. But I play a lot of different games. The current fave in the Rebelsky household is "Apples Against Humanity": questions from Cards Against Humanity with answers from Apples to Apples. (The answers in Cards Against Humanity are not suitable for children or, well, anyone.) My eldest would like us to play more Canasta. I'd like to play more Roborally, but there's rarely time.
What is your favorite programming language? It may be easy to deny, but most people have a preference.
Believe it or not, but it depends on the task.
I really love programming in C. It's efficient, it requires understanding of the machine, and it's concise.
I love programming in Scheme about as much. I don't think I've ever seen beautiful C code, but I can say that some Scheme code that one could really call beautiful. (Okay, I think lots of map-reduce is beautiful.) I play around a lot with the Mediascript code just for fun.
But when I need a quick text manipulation program, I hack it out in Perl. (However, the most recent text manipulation program I had to write, I wrote in C.)
I'm starting to find that I enjoy programming in Javascript, too, although I need a better environment for doing so. Javascript gives me many of the things I like about Scheme (other than a nice syntax) with some additional capabilities.
Why did you become a computer science professor?
I started studying CS because I found it really compelling - I like making things and I like formal problem solving. I became a professor because I discovered I love seeing students learn and feeling like I had a part in that learning. I also seemed to some talent at teaching.
How did you become a computer science professor?
I got a Ph.D. I taught while I was in graduate school to improve my ability to teach. When I nearlly finished my Ph.D., I applied for jobs.
I started with a one-semester teaching job at Dartmouth that expanded into four or so years. Then I applied for more jobs, interviewed for jobs, and found that Grinnell was my best match. Fortunately, the folks at Grinnell felt the same way, and so I came here. I've been happy here ever since.
What's the coolest thing you have ever created/programmed?
I built the software that lets Racket and GIMP communicate. Before that I'd build the software that we used to program the GIMP directly. I'm pretty proud of that. Using that software, I developed a fairly cool suite of genetic art images.
A colleage in art showed me this really awesome picture that someone drew with spiral line, where the thickness of the line varied and the overall thing was a very detailed face. I then wrote a program that takes an arbitrary image and has our laser engraver do something similar. (The program's not done yet, but I have some sample images.) I haven't described it well, but I'm really proud of it.
I've written some programs that create some cool 3D cubes using the laser engraver and lucite. (Can you tell that I like the laser engraver?)
In summer 2014, I led a group of students in building a Web-based application for making interesting nonrepresentational animations by applying mathematical operations to simple images. You can find that projet at http://glimmer.grinnell.edu.
What made you want to teach?
My mother was also a college professor. (You can see her outstanding psychology teacher of the year award inside my office door.) Although I was impressed by the effect she had on her students, I didn't think I'd become a professor. But in college and grad school, I learned that I really liked teaching and seemed to be relatively good at it. And there are few feelings as good as seeing a student understand a complex concept and knowing you had a role in that understanding. Plus teaching is a really interesting and complex challenge.
What made you want to teach at Grinnell?
When I finished my Ph.D., I looked for places that cared about teaching but that would let me continue research. I ended up taking a non-tenure-track job at Dartmouth for a few years, but really wanted to be on the tenure track. At the time I applied, I visited lots of places. Grinnell was clearly the best fit - faculty who cared about teaching and who were willing to innovate, students who were engaged. And I was clearly a good fit for Grinnell as I got an offer really quickly after the visit. It's been a great place to be - I continue to love the students, value the colleagues, and find myself challenged and encouraged.
Have you ever published any software?
It depends on how you define "published". The CSC 151 software has been distributed to lots of people. A Web service I wrote, oh, two decades ago, got used pretty heavily for about five years. But almost everything I do is open source. My latest software is published on the Web.
What's your favorite dessert?
I really like the Chocolate Oblivion they serve at Relish. It's a flourless chocolate cake. But there are times that berries are even better.
How did you come to develop your unique method of teaching? This is in reference to lesser focus on grades, more focus on sarcasm, learning and understanding the process rather than memorization.
There are many factors that led to my teaching style, which I don't really think is unique. I've never thought that memorization was the central goal of learning, so that's probably the fault of my elementary school teachers. And I expect that most Grinnell faculty place memorization relatively low. My emphasis on effort stems from an article a colleague showed me early in my time at Grinnell. (I think the colleague was trying to say "Students expect their grades to be based on effort not results, but results are what matter." I'm clearly contrary.) I also know that I teach a subject that is different and intimidating, and so consider it important to make it more approachable. I learned from my mother that different students show their skills differently, and so I try to give you a variety of ways to show your skills.
What would you do differently if you could do college again?
Let's see. 1. I'd learn good work habits. 2. I'd work on my writing. 3. I'd do internships.
Work habits. I was able to get reasonably good grades in college by relying on my intellect, not on hard work. So when I got to grad school, I was screwed. Developing good work habits earlier would have made the rest of my life better.
Writing. I did really well on writing when I was in high school (and even in a few college courses I took in HS). But my writing was not great. Not focused. Too much passive. Etc. I took a writing course my first year of grad school and it made me a much better writer. I wish I had done that earlier.
Internships. I love what I do. But I really never explored anything but academia. I should have.
What are your three favorite types of cheese?
Hmmm ... I like bleu, havarti, brie, cheddar, and swiss. But it depends on the context - my moods vary.
What are some of your favorite places you’ve visited? (Other cities, states, national parks, countries, etc.)
Most of my favorite places are associated with my family. A few years ago, we drove west for an extended family vacation. Yellowstone national park was awesome, but we didn't spend enough time there. Redwood state park was also wonderful. When my oldest son was about one year old, we spent a month in Gallup, NM. Walking the mountains with him in a backpack is one of my fondest memories. When I was young (lets say about 40 years ago), my family spent some time near Squibnocket beach on Martha's Vineyard. That's also among the favorites.
What's the one food item you can't live without?
I want to say chocolate, but I think "fruit" is probably the answer if you'll accept that. If I have not narrow, I think it's pears. Of course, to be literal, I think it's water (although water isn't food).
Which are more organized, your documents in your computer's file system, or your real life (hardcopy) filing system?
Have you seen my office? And have you seen my course web? So ... most of my real-life filing system is completely disorganized. In contrast, some of my computer file system is carefully organized.
What are some of your favorite TV shows or musicians/bands?
I don't watch much TV any more. My family watches the Big Bang Theory together to celebrate our geekiness. I also like How I Met Your Mother. We sometimes watch Bones together, but it's been awhile.
I'm old. I like the Beatles, Jonathan Richman, Van Morrison, the Blasters, the Kinks, Dave Alvin, Tom Russell, the Bad Examples, the Band and a bunch of other things. The best concerts I've seen were Rick Danko and Levon Helm (in a lounge at UChicago), REM (at the Living Room in Providence right when Murmur came out - about 1982), the Violent Femmes (at the Living Room at about the same time), and Billy Bragg (at Harris).
How many hours do you sleep per day?
I try to get eight hours of sleep each day. These days, I tend to get between six and seven on weeknights and then I catch up a little on weekends. It's not an approach I recommend.
Did you have a favorite (or a few favorite) computer/video games as a youth?
I played a lot of Centipede and Defender in high school. My first year of college, I played a lot of Robotron, Joust, and Tempest. I still love those last three games.
What are five of your favorite movies?
Seven Samurai, Bedazzled (the Peter Cook and Dudley Moore version, not the crappy remake), Tati's Playtime, The Great Dictator, and Harold and Maude.
What is your favorite section of computer Science?
My favorite courses to teach: CSC 151, because I like introducing students to the field. CSC 207, because I think it's where you really start to develop the tools of computer scientist and software designer. My one-credit "C & Unix" seminar, because I can make sure you learn things that are essential. (Whoops, that's three.) Oh, I also like teaching tutorial.
On the first assignment, which asked me to synthesize information from the course web, should I cite the course web?
The assignment clearly asks you to synthesize information on the web site, and so one could argue that such citations are unnecessary. Nonetheless, in an ideal world, you would provide a clear citation as to where you found each piece of information.
The daily eboards look much nicer than what you type in class. How do I see what you type in class?
Replace the
.html
at the end with.md
.
What technology do you use to build the course web?
I use two markup languages. For many of the pages (e.g., readings, labs) I use a form of XML called Docbook. But Docbook is wordy, so for other pages (e.g., the daily outlines and eboards), I use Markdown. I also have a bunch of scripts to help with all of this. You can find the scripts and source code on github.
If you want to see the "source code" for a Web page, try replacing the
.html
with.md
or.sect
. (You may have to try both, what I use varies.)
Just to be sure, how am I supposed to figure out when assignments are due?
You can remember that almost all assignments are due Tuesday at 10:30 p.m. (But not all of them.) I'd recommend checking the course schedule, which lists all of the kinds of assignments. I will also try to put major assignments on the Google calendar.
Have you ever successfully made a pb&j sandwich by following your students’ instructions (in other words, have students ever written a set of instructions that resulted in a completed sandwich during that exercise)?
While I have confidence that students could eventually write instructions that would result in a no-nut butter and preserves sandwich, particularly after watching me "interpret" their first set of instructions, I don't think I give students enough time to write those instructions.
What's a "TLA"
Three-Letter Acronym. They appear a lot in computing (e.g., irc, pgp, gpg) and in other situations (e.g., irs, ssn). Too often, folks use TLAs without explaining them, and so I say "What was that TLA?" I also say that to myself, because I use TLAs a lot. These days, TLA may also stand for Grinnell's Center for Teaching, Learning, and Assessment.
What's the attachment that seems to accompany every email message you send?
A digital signature. See http://www.cs.grinnell.edu/~rebelsky/gpg.html. Because Outlook365 doesn't like digital signatures, I don't use them as much as I used to.
Do you prefer "freshman" or "first-year"?
The term "freshman" is gendered, and so the Grinnell Style Guide suggests that we use "first-year" or "first-year student". I prefer "freshling", but it hasn't caught on.
Why do you address us by last name, but expect us to address you by first name?
I enjoy playing with notions of power and authority. I'll probably use both first and last names with my students.
What exactly is the "IRC" and how are students supposed to use it?
"Internet Relay Chat". It's a low-bandwidth way to communicate on the Internet, used by a lot of open source projects. But I haven't been on IRC as much these days, so you don't need to worry about it.