What all my CS students should read

This is an old post, but it popped up in my feed last week.  In it, the blogger describes how he went to a hackathon with a friend, a person he described as a programming god, and just felt totally inadequate.  He watched his friend and realized that his friend didn’t know everything either, that the friend just Googled the problems he ran into and then figured it out.  The next hackathon he went to, he was the programming god, because he followed his friend’s lead.

Both of these people are CS majors in college.  Going from CS major to work at Google (or any programming-oriented job) is a big leap.  You know the foundations, but you do not know exactly how web security works.  When I first started learning to program, I did a combination of things.  I used other people’s code and modified it to do what I wanted.  In order to do that, I had to understand the code.  I went through books, step by step.  And finally, I took some online classes.  I do wish, sometimes, I’d had some direct instruction from a real person in that process, but the reality is, the landscape of computing changes so rapidly that keeping up requires a chunk of just figuring stuff out on your own.  Often, you have a specific problem to solve in front of you, and you need answers.  You can’t wait until the 6-week mark of a course where they cover that topic to get the answer.

I know some faculty hate when students Google the answers to the problems they’re given.  Code for most basic CS exercises can be found anywhere on the web.  And some of those basic CS exercises are necessary foundations, but the solution to a lot of “cheating” is to have harder problems.  Have students design their own problems.  Partner with people in the school to solve real problems.

I have students who are planning to attend a hackathon in a couple of weeks.  I shared this article with them, and I also explained that what we’re doing in class is not what people in the “real world” do.  There are frameworks and tools that real developers use that we don’t, because just those tools themselves are hard to understand much less the coding.  And I want to focus on coding.  And, more importantly, I want to focus on learning.  I want to end with a section from the last paragraph of the post, where describes the hard work learning takes, and the understanding that there’s much to learn:

The barriers to becoming a software engineer are real. People born in technical families, or who were introduced to programming at an early age have this easy confidence that lets them tackle new things, to keep learning — and, in our eyes, they just keep getting further and further ahead. Last year, I saw this gap and gave up. But all we really need is the opportunity to see that it’s not hopeless. It’s not about what we already know, it’s about how we learn. It’s about the tenacity of sitting in front of a computer and googling until you find the right answer. It’s about staring at every line of code until you understand what’s going on, or googling until you do. It’s about googling how-to, examples, errors, until it all begins to make sense.(emphasis mine)

7 Replies to “What all my CS students should read”

  1. As the school computer tech I live on Google. Without it I could not do my job. As a programming teacher on the first day I tell my students to use the heck out of Google. Want to convert a string input to an integer in Java? Either look in the book or google it. Google is quicker and gives several options. Want to draw a Christmas tree with asterisks in Java? Google it, now tell me how it works and give me an alternative method. Years ago when the only method to learn programming was from a magazine or a book the only methods learned were those that particular author liked.

  2. I rely heavily on Google to find things in the on-line reference manuals and to find examples in stackoverflow.com, but it takes some experience to separate the good solutions from the terrible ones. Beginning students often grab the first thing that sounds remotely related to what they are trying to do, with ludicrous results. Learning to use reference sources well takes practice, and I laud Garth for giving his students that practice early. He should also make sure that they cite their sources—it’s fine to use other people’s work, but not to claim as one’s own.

  3. That bit about knowing enough to pick and use a good choice is a key one. All too often I see students struggle with an overly complex “solution” that is close to what they really want but not quite.

  4. Yep, I had a student last year who had a solution, but it used all these things we hadn’t learned yet, so a) she didn’t know what it did and b) it was way more complex than it needed to be. That’s why I have them do presentations, and yes, cite!

  5. Rather than fret over students Googling I’d create the challenge or assignment that made searching for cide parts part of the activity. If the problem is unique or large enough the full solution ought to be one that requires putting together the found code bits.

    I’d go beyond “cite cite cite” and ask students to narrate their process, how they chose the best snippets, what it took to mod them, etc.

  6. Yep, Alan, that’s pretty much what I do. Current project in CS II: Using data obtained through an API, create an artistic representation of it.

    In their presentations, they walk us through each line of code and in their write up, they have to explain their planning and learning process. And I only ask them to cite, so I can get an idea of how deep that searching went and to practice good attribution methods.

Comments are closed.