CS61A Spring 2015

TA: Dickson Tsai

Office Hours

M 4-5PM, Th 2-4 PM Garbardini Lounge

Section 13

Tu/Th 11 - 12:30 PM

Lab: 271 Soda

Disc: 24 Wheeler

Section 26

Tu/Th 5 - 6:30 PM

Lab: 273 Soda

Disc: B56 Hildebrand

Section Announcements

  • If you attended discussion Thursday 2/12, please fill out this form.
  • If you ever miss discussion, the slides are usually posted under "Discussion Resources"

Office Hours

Monday 4-5PM, Thursday 2-4PM at Garbarini Lounge

Useful Links

My Youtube playlist for CS61A

Other useful links:

  • Python v3.4.1 documentation
  • The Online Python Tutor draws environment diagrams for you. Make sure to execute the code using Python 3+ for this class. It may also be helpful to show environment parent pointers until you are familiar with how name lookup works.
  • The IPython Notebook — An amazing way to take Python notes. You'll probably need to know more about Markdown.
  • Eloquent Javascript Chapter 5: Higher-Order Functions. This is an optional read, since our programming language for this class is Python, not Javascript. However, the author Marijn Haverbeke writes very eloquently on the concepts, and the code should be easy enough to follow.
  • For those of you using GitHub as your version control: I highly recommend watching this video by Scott Chacon. He gives a very intuitive lecture about how git works.

Philosophy

How I'll run labs

  1. Motivation (from Prof. DeNero):
    • Turning in a lab should result in a "sense of accomplishment".
    • Lab should be a collaborative environment where people answer each other's questions.
  2. Pair programming will be enforced. The pairs themselves can change throughout lab.
    • Great chance to help others out!
    • Great chance to get to know people, especially those working on the same problem.
    • Great chance to communicate!
  3. The exhibit idea crashed and burned, so I will not repeat it next week. Sorry about that!
  4. Please feel free to bring questions about anything to lab -- HW, Project, Lab, Lecture, Life. My lab assistants and I are willing to help you guys out!

How I'll run discussions

  1. Warm-up
  2. Discuss why we are studying what we're studying. Applications. Real-life analogies.
    • Students should come somewhat prepared for more engaging discussion. Not going to be enforced.
  3. Detailed walkthrough of simple example.
  4. Easy problems solved in groups. Everyone (somewhat prepared) should be on the same page by the end.
  5. Discussion of a difficult problem. What do you know? What approaches should we try? How can we divide this problem into simpler problems?
  6. Usually, I'll leave the other difficult problems for students to take home.
    • Rushing a difficult problem is pointless. I'm just going to give the solution.
    • We don't have to finish the whole discussion packet. It'll leave you with few paper questions to do at home.
    • 5 years from now, what will/should you remember? That abstraction is like buying things in a supermarket, or that the answer to #4.3 involves printing before the recursive call?
  7. Breaktime. Working nonstop is unproductive. Humans get tired.
  8. Rinse and repeat. Total focus while discussing.

Dos and Don'ts of Discussion

  • Please come "understanding what you don't understand" - Professor Nolan
    • It's ok to not fully understand something. Come with questions from lecture/reading!
    • If in a rush, block off 30 mins of your day, and go through the slides/reading. Come up with simple examples. That's all the prep you need.
  • Please do NOT come to discussion looking for me to explain exam-level problems.
    • This usually results in 30 minutes of intense explanation and subsequent confusion.
    • I assure you that if you have truly mastered the basics and can "breathe" the concepts, you can tackle the difficult problems.

Random thoughts on learning

Best way to learn? Look at how children acquire language

There are a few really cool observations about children one can make:
  1. Babies spend all of their time learning language. They are not expected to do that many other things.
  2. Babies don't learn complex sentences first. They learn words first.
  3. Babies make mistakes — lots of them.
  4. Parents/caretakers are usually there to give instant feedback for those mistakes.
  5. Babies hear lots of data. If no one talks to babies, they do not develop language skills.

How to apply these observations at the college level

  1. College students are more pressed for time, but if one has to learn something well, incorporate CS more. Beyond class, make stuff with others on the side. It's a nice social activity as well.
  2. Start simple. There's no reason to tackle something hard if you're not ready. You need to know the tools you are working with inside/out.
  3. Don't feel like you have to be perfect on the first go. Don't get discouraged when you get something wrong. Keep working at it. Also, explore!
  4. Python and Google searching gives instant feedback. So do your peers doing CS with you in Berkeley.
  5. Do lots of practice problems. Invent practice problems for each other. They don't have to be hard.

My Summer 2014 TA Bio: What is your teaching style?

I personally learn best first by learning the rules very deeply. My favorite analogy: if you want to be good at shooting a basketball, at the very least, you can try to make your shot straight. Master that task, then move on.

Then after practicing a lot, start to form an intuition that will hopefully guide me through more difficult problems. Back to the analogy: Once you can confidently shoot the ball straight all the time, you don't have to worry about that aspect as much.

Thus, I expect my sections to be a bit mechanical at the beginning, where I present lots of easy problems. If one gets bored of easy problems, aim for speed and accuracy, then try to write out your intuition.

It's only after one gets enough practice that s/he gets to see the patterns to guide intuition. It's how babies acquire languages really fast. Language is part of their life. You can make programming part of yours as well. Programming's not just for school. You can totally socialize and code.

I also like to be informal and easygoing, so expect a lot of trivia and talk about life along the way.


Discussion Resources

I will update slides after each discussion to account for common student misconceptions and expansions of explanations that worked in discussion. This is complete when you see *UPDATED* next to the event that occurred. One can also find optional conceptual questions to go along with the lecture/reading in each slideshow.

Discussion Resources

Lab Resources

  • 1/27/15: Lab 2 - How Labs Will Be Run

Webpage Acknowledgements

Credit for this page's design goes to StackOverflow user SKelly (header and sticky left sidebar), and the creators of Bootstrap CSS.