Dear CS61C Student, the following are my honest thoughts and feelings.
I sincerely hope that you may derive some meaning from them.
This letter is meant to have a optimistic tone, not a pessimistic one. This letter is meant to be liberating, not confining: it is meant to make you feel good about hard work, not feel obligated to do it. This letter is meant to be warm, not cold. It is meant to sound wise, but not pompous. It would mean a lot to me if you read it.
CS61C can be a real pain of a course. I think you would be hard-pressed to find someone who doesn't think so. Why is this the case?
In my opinion, the difficulty of CS61C comes from the fact that it forces you to do extremely meticulous, nitty-gritty, bitwise, dirty work.
Here is a brief list of things I think are examples:
- mallocing and freeing memory
- Thinking about how IEEE754 floating point numbers work
- Breaking down a memory address into T/I/O to see if we get cache hits or misses
- The CPU project
- Personally, I surprised myself when I did this project. How the heck did we get ALL those wires to go into ALL the right places???
- We've asked you to think about how stuff really works.
- We've asked you to look under the hood.
- We've asked that you become aware.
- In some ways, we've asked that you cast away a perception of computer programming that I'm going to say most novice programmers might have.
- In some ways, we've shattered your innocence.
I hope that you, the reader, can understand where I'm coming from. In short...
The tedious work that CS61C forces you to do sheds light on the components of programming that are not so easily observed.
Fact: There is a thought that usually crosses the mind of a CS61C student: Why does all of this matter?
Although there are many valid, comprehensive, worth-their-salt answers to this question, I am not particularly good at communicating them. Instead, I will try in a different way to answer this question.
I'd like to invite you to take a step backwards out of the world of programming. (If you were navigating your hard drive on your computer, you'd press the "one level up" button a few times. If you were entering a filepath into your terminal, you'd type the double dots ../ a few times.) Task: Can you think of how doing meticulous CS61C work can help you with life... in general?
- Discuss this question with your partner.
Here's what I think:
Doing the nitty-gritty work required of you in this course makes you unafraid of doing other meticulous tasks in your life, which gives you knowledge and power that has the potential to benefit you in ways that are not necessarily apparent.
This is a request: I want you to think of a story in which some stuff happens that very generally follows this framework:
- The main character (or some good guy) familiarizes himself or herself with
something which is seemingly inconsequential. This "something" might be...
- a person (whom the character would befriend, presumably)
- a place/environment
- or some kind of very trivial task (think like... playing hopscotch).
- Then, later on, the character makes use of his or her familiarity with whatever it was they familiarized themself with in order to win something, beat someone, or overcome something in the climax of the story.
The main character explores a tunnel near the beginning of the story and acquaints herself with its passages and dangers and whatnot. Later on, she finds herself engaged in some kind of battle with the villain in that same tunnel, and she uses her familiarity with the environment to beat her opponent.
Some other examples that I heard from the people I polled for ideas were:
- Frodo befriending Sam in Lord of the Rings.
- Naruto befriending Jiraiya in Naruto.
- The idea of guerrilla warfare (acquainting yourself with the environment).
- The protagonist of the movie Slumdog Millionaire using the bits and pieces of his past to answer the questions on the game show.
OKAY, anyways... I said that I wanted you to think of such a story, or at least keep the idea of the framework in your mind. The analogy here is that the act of familiarizing done by the character in the story is very much like the work YOU have done in our course. In CS61C, you have familiarized yourself with the machine known as the computer. You learned its ins and outs like the back of your hand, much like the fictional girl in my story learned the ins and outs of the tunnel like the back of her hand. You did so by doing all the bitwise, nitty-gritty stuff that I talked about in the opening paragraph.
If you believe that analogy; if you can draw that connection, I want to invite you to take one more leap
of faith and consider the following.
Fact: Doing the meticulous work involved with familiarizing yourself with the computer doesn't JUST familiarize yourself with the computer. Rather, it also makes you more open to the idea of doing meticulous work in order to familiarize yourself with just about anything, and we saw (through all these wonderful examples that the people I polled and I came up with) that the act of familiarizing yourself with something--of getting to know its ins and outs at the LOWEST of levels--can be greatly beneficial. In fact, I'm going to extend this thought by saying:
It is not only potentially beneficial to do this. It is also healthy, productive, intelligent, and in general a good mindset to do this. If you want to REALLY understand something, you'll have to expose yourself to its deepest, darkest secrets, no matter how dirty, meticulous, and excruciating that exposure can be.
Thus, this is how I will answer the question of Why does all of this matter?
The work in CS61C matters because it exercises your willingness to engage with hard, dirty, meticulous work, making you a healthier, stronger, more intelligent person.
When I took this course in the Fall of 2016, I had just moved into my first apartment with my roommates. I learned that living in your own residence which isn't maintained for you by a housekeeper or your parents was quite the nontrivial task. It would be a lie if I said that I didn't see a connection between the dirty work of CS61C and the dirty work of dishwashing, vacuuming, toilet bowl cleaning, and laundry folding.
It is my wish that you, the reader, will one day find that metaphorical tunnel with which
you familiarized yourself with long ago coming in handy to defeat your metaphorical villain at the
climax of your life's story.
It is my assertion that all the nontrivial, dirty, meticulous, nitty-gritty, bitwise, low-level, annoying, frustrating work you have done in our course will, in some way, contribute to making that wish come true.
That, my dearest students, is the truth, and it is nothing but the truth.