Golden Bear Orientation
How to Learn Computer Science
August 21, 2017
- Homework 0
Golden Bear Orientation
How to Learn Computer Science
August 21, 2017
Welcome to CS 61A!
Welcome to CS 61A and, for many of you, to Berkeley as well! This course used to be advertised as "The Best Computer Science class in the World." I’m not bold enough to make that claim, but I will say that we have worked very hard to make this class the best that it has ever been. And, in particular for this semester, we've focused a lot on optimizing the learning experience. I'm here today to share with you how some strategies for how to succeed in this class.
This is a picture of Soda Hall. But Soda is not really CS 61A is all about. CS 61A is really a class about people, and the things we do. You'll spend a lot more time diagramming in lab, or applying ideas in discussion, thinking through problems on your own, and collaborating with others.
I once took a class called CS 61A
And it was hard
What drew me to CS was how deeply everyone cared about my success
CS 61A asked me to learn things that I never imagined I could do
So ever since, I have spent
wayyyyy too much time teaching
Instructor for CS 61A Summer 2017
Now, I'm back to teach some more
But before I move too far along, I wanted to tell you a little bit about myself and why I'm standing up here in front of you. For one, I'm a UC Berkeley undergrad like most of you!
I once, not too long ago, took this class called CS 61A.
And, of course, it was hard af. I think that's one of the first things everyone will tell you about this class.
But what drew me to CS 61A was how much people cared about my success. Everyone, from the professor, to the TAs, tutors, academic interns, and students, cared so much for my personal success. I was really blown away by how much everyone supported each other.
And it really inspired me because CS 61A asked me to learn things that I never imagined that I could do. I never knew I could work as hard as I did the semester I took that class. There is something really special about CS 61A as a class that makes it a wonderful place to learn with each other.
So, yeah, I like this class very much. And so, to share my experience with you, I've been spending the past couple years working to make your experience even better than mines.
Most recently, I was the instructor for CS 61A Summer 2017, which is a job that involves standing in front of the class and spending a couple hours a week entertaining students.
And now, I'm back to help out some more this fall semester.
The reason why I tell you this is because I have a couple points to make. No doubt, CS 61A is a hard class. It will take a lot of time, energy, and motivation to do well in this course, but I really and truly believe that computer science is a topic anyone can master given the enough time, the right tools, and the right environment. And that's what's special about this class: somehow, even as the class gets bigger and bigger, it seems like
If you don't understand (or believe)
something I say, please interrupt!
I talk fast when excited so wave vigorously when I should slow down.
I bet I'm pretty excited right now...
The mind is not a vessel that needs filling,
but wood that needs igniting
Alright, onto actual content. I wanted to start with a quote: "The mind is not a vessel that needs filling, but wood that needs igniting." Of course, the real quote by Plutarch wasn't in English or typeset on such a fancy background. But the point is, learning something goes beyond simply the transfer of knowledge: it's a set of tools and techniques that one needs to master to engage with the world. You'll need to be thinking actively and feeling uncomfortable! As instructors, it's our job not only to fill you with water, but also to set you on fire.
So to kick things off, I'm assigning your first homework of the semester. Take out a piece of paper or pull out your phone and take note of these three things. This the answer to our question.
Effective practice and study
Targeted feedback and support
And sustained motivation to push you to keep going even when, at times, it might seem tough or impossible.
Your assignment is to think about how each of these three pieces fit in a class like CS 61A and what you can do to take the best advantage. I wanted to bring this up front so we could use it as a theme for the rest of our discussion: to see how all the different parts of CS 61A provide for these three, basic needs.
Humans of CS 61A
Let's first start by introducing our cast.
One thing that's particularly special about this semester's offering is that we have not one, but two instructors! On the left is John DeNero and on the right is Paul Hilfinger. I think their reputations precede me and I'm sure you'll get to know them very well over the course of the semester. The instructors lecture, manage the course, and make sure that you have the motivation and support you need to succeed.
But they're not alone
100 staff and 200+ academic interns
Here to provide practice, support, feedback, individual attention,
and to improve the
time-efficiency of your learning!
And many, many more...
CS 61A is hard. CS 61A is huge. In many other universities, this would make this class a disaster. But our instructors don't teach the class alone. We have a huge cast of student teachers to help you receive the support you need to succeed. Last fall, there were over 90 course staff members and 200+ volunteer teachers. Our teaching staff does everything from leading discussion sections, facilitating lab and office hours, mentoring students in 5 or 6-student small sections, and even offering one-on-one tutoring to students. We exist to make sure your time is used efficiently because there is nothing worse than wasting student time. We're also here to help you find the will within yourself to push because we all know what it's like to have been a CS 61A student ourselves!
1900+ dedicated, hard-working,
and inspiring students
make CS 61A truly special.
"It's kind of inspiring to see how dedicated we are to working hard and being the best we can be."
doing better than you
ever believed you could do.
And you. What makes CS 61A truly special is that we have 1800 of the most dedicated, hard-working, and inspiring students making progress towards the same goal. But I don't really want to talk about you; I want to talk about your impact. Because you won't impress us by getting the right answer. You impress us when you help others.
I mentioned this earlier, but there is something about this class: the instructors, the students, the assignments, the environment that, when put together, make it larger than the sum of its part. We call that, 'gestalt.' I think gestalt is what makes the experience of taking CS 61A at Berkeley different from just following along online since all the course resources are publicly posted. We've all been in classes we didn't like before. Why was that the case? How can we make CS 61A different? It's only with gestalt, a feeling of everyone coming together for the same purpose and undergoing the same experience at the very same time, that I think CS 61A truly shines.
I once made a super corny quote. It goes like this: "It's kind of inspiring to see how dedicated we are to working hard and being the best we can be." I agree with the first part, but this isn't about being the best you can be. This class is about doing better than you ever believed you could do. It's about changing what YOU believe about YOURSELF. But I strongly believe that this only happened to me because I was part of a class of students that felt the same way, that all struggled with this course but persevered and became stronger as a result.
I want you to respect and remember that the people around you are amazing. Take advantage of that fact. Ask and answer questions. Study together and make friends in class. Do more than what is asked of you.
You earn my admiration not by doing well, but by helping others.
What is CS 61A?
programming is not merely about language syntax and semantics, but more fundamentally about the
iterative process of refining mental representations of computational problems and solutions
and expressing those representations as code
Loksa, Ko, et al.
Learning computer science is about learning how to attain these mental representations. The code is always secondary to this point.
Once you've completed CS 61A, everything else is really just an implementation detail.
Lecture fun times with John and Paul
Lab the most important part of this course
Discussion the most important part of this course
Office hours the most important part of this course
Mentoring the most important part of this course
Tutoring the most important part of this course
Offered by the course community
We have a textbook which you can find online for free at composingprograms.com. Then there's lecture, where John and Paul introduce topics and entertain you three times a week.
But then there's lab, which is the most important part of this course. In lab, you get a chance to apply and practice the ideas that are introduced in lecture. In this class, we measure your learning by your ability to make new things from scratch and evaluate or analyze existing programs. This is where you'll get practice with that.
And we also have discussion, which is also the most important part of this course. You use a computer in lab, but learning to think like a computer scientist is a process that actually occurs without a computer. And, in fact, I want to get you in the habit of thinking away from a computer.
Office hours is where you can ask questions about anything in the course. Students mainly use it to get help on assignments, but I think it's better to be more proactive and use it as a space to learn.
In addition, we have two services that are not traditionally offered in other Berkeley courses: mentoring and tutoring, which I'll talk about more in just a moment.
Outside of course events, we have regular homework assignments that will keep you occupied every week of class, 4 large programming projects to apply the skills and concepts towards building real programs that solve interesting problems, and 2 midterms and a final exam.
Computer Science Mentors
The purpose of CSM is to offer an open and inclusive community space for students in computer science to receive individualized academic and social support.
Mentoring (small group discussion) sections led by a mentor who recently took the course and knows it best
College of Engineering
Lecture & Textbook High-level introduction to new material
Lab sections Collaborative, practical time with material
Discussion sections Learn the solution process, tips from the TAs
Office hours Drop-in help from the course staff
Mentoring sections Extra practice discussion sections where you can ask questions in a more personal environment
Walk-in tutoring Drop-in help from past students
CS 370 1-1 tutoring Personalized lessons from a TA-in-training.
If you ever feel behind, sign up for this!
Advising Questions about the major, classes, research, etc
An Ideal Workflow
Study the slides and predict each step before it happens
Consult readings, the interpreter, and your friends
In lecture, validate your solution process
Refine your solution process together with other students
In my experience, it's not helpful to take notes in lecture. The slides are posted online, and you can rewatch the lecture as often as you like since videos are always available. This varies by person, but what is useful for me is predicting the next thing that will happen, asking 'what-if', and then validating my guesses.
Learning with Others
CS 61A is not curved
Asking questions is highly encouraged
The limits of collaboration
Share and discuss ideas, not code
... And I really do want to emphasize how important it is to work together with others. And you don't have to take it from me either: here's what one student had to say.
What worked well for you? (CS 61B survey)
WORKING WITH A FRIEND.
This is in caps because I think it is so so important and worked so so well for me. [...] Often, we'd both be stuck on a problem. I've seen people studying alone sit and stare at the solution trying to make sense of it, or post on Piazza.
But my friend and I often just went with "well, obviously the answer key must be right. So let's try to figure it out". And we did. We came up with a fool-proof algorithm for how to know if adding a node [would] change the original MST, came up with tricks to figure out which sorting gets assigned to [...]
It's best if this person is someone you're close to. My friend and I often told each other straight up "nah that's definitely not going to work".
I find it difficult being this straightforward with an acquaintance.
So we know working with others is great, but the question now is not why but how to work together.
The Manner in Which Learning Occurs
...is through active study!
Try things out in the Python interpreter & ask questions
Challenge class concepts in lecture/lab/section/everywhere
Teaching is the best way to learn
Once you have the concepts
Josh Hug's Suggested Approach for Studying
The often missing component:
Reflecting on your solution process.
Learning happens by
changing your approach,
Hear from a Student (EECS Resiliency Project)
I'll admit, one thing that takes a lot of getting used to is, frankly speaking, being annihilated. [...] No matter what, you have to remember that you're not alone. In most cases, the longer you marinate in self-pity, the harder it is to rise above it. It's crucial to find ways to stay motivated even when times are rough. [...]
You got an awful score on an exam? That's fine. It's just one test, in one class, in one semester of your entire future. This way of thinking doesn't just apply to "life." [...] People don't just wake up one morning and decide to spew theorems.
A lot of the successful people I've met have the ability to step back look at the bigger picture, and I think that's by far the most valuable lesson I've learned, and am still learning, here.
Tenacity is key
And I think there's one last part of learning: motivation.
You might sometimes compare yourself to others, where you are right now. I think that happens to a lot of us. What I want you to remember is that it's not about where you start, about where you are right now, or where everyone else is, but how fast you grow and how much you learn.
If we plot our growth on a graph, It's not the y-intercept that decides your outcome, but the slope and rate of change which has the greatest effect. It is not about where you are right now, but how much you learn that makes all the difference.
But in reality, I suppose the graph of our learning is never really that idealistic.
It might take a lot more factors to model our learning. There might be circumstances in your life that drag you down. And there might be times where we feel like we're going backwards, or even feel like we're worse off from where we started. But it's important to remember that, in the end, you are the "x-factor" of your learning.
There's a reason why we say that the order of growth of this function is dominated by the x-cubed term, that this function is in big-theta of x-cubed. It's because, in the end, even though it might take awhile to get there, your motivation, energy, and heart is what dominates your order of growth: you are x-cubed.
What I want to leave you with is that, above all else, tenacity is key. Learn with others; that's the best way to learn. There's no limit to what we can achieve together this semester.
So learn a lot, have fun, and welcome to CS 61A.
Alright, that's it for today. Thank you very much. Ask me anything.
The mind is not a vessel that needs filling,
but wood that needs igniting