views:

770

answers:

16

I realize that the answer to this question might seem obvious at first(who wouldn't recommend learning more?), however what I am asking is whether it is a good idea to learn concepts on your own when there is a high possibility you will cover it in class in the future. I am specifically referring to concepts covered in classes that are a part of a computer science major.

What should I learn in my spare time which will not conflict with what I will be learning in class? I understand this is a broad question, but any suggestions would be appreciated no matter what area or topic of study they advise.

+41  A: 

Of course it's a good idea. Who cares if you'll learn it in class later? You might get a bit bored in class when you get to it, but you might well be taught the concepts you've already studied from a different perspective. There's never anything wrong with self-driven learning. Ever.

Dominic Rodger
*Never. Ever.* Chances are, if you're interested enough in computer science to study it out of class, when it's covered in again in class, you won't be bored; you'll be making much broader and deeper connections than you would have if you were seeing it for the first time. Imagine if you studied recursion beforehand and then instead of struggling with what recursion is in class, you start realizing the things you could use it for. +1 (million).
Jeremy Powell
I certainly did get bored studying things I already knew (studying loops in my first CS course was deathly dull, despite an excellent lecturer), but I definitely understood the things I'd tried to get to grips with myself better having taught myself things and then having had them explained.
Dominic Rodger
The one caveat that comes to mind: When sitting the exam keep in mind that the exams may try to evaluate your understanding of the taught concepts. Applying other concepts to exam questions, although potentially solving the problem just as well, may be penalized.
Carsten
+10  A: 

This is whats called using your time wisely. Why would it not be a good idea to teach yourself a concept and then later have someone(teacher) to go in more detail.

TStamper
Or even better, teach it from a different angle
Svend
+3  A: 

If there's a conflict then either you or the instructor is wrong. i wouldn't worry about conflicts though. Try and extend your learning to things that interest you.

And the thing to study outside of class? i would say coding. The art of coding. i think many if not most programmers will agree that you don't learn to code in class. You somehow have to do outside of class. On your own, and with peers. Exploring other languages and concepts.

Paul Sasik
Along these lines, get involved in an open source project. This will give you real experience on a large project which is hard to do for a school project.
zooropa
@zooropa: i would agree but only for mid to advanced students. This guy sounds a little too nooby to try to tangle on open source. He needs to put some bullets in his belt first.
Paul Sasik
A: 

Spending time on learning something twice is not bad at all. If it happens that what you're exposed to in the class is already known to you - no problem, you can deepen understanding - ask more complex questions, inspect problems in greater depth.

sharptooth
A: 

Is it OK? Sure! Any work you put in on your own will only help you later on -- at worst you'll get a different perspective on something you'll get taught later anyway. At best you'll gain knowledge that you weren't going to get in class.

Go for it!

mwigdahl
+1  A: 

In general, learning on your own is great! And necessary, really, especially in this field.

I suppose one risk is learning so much of the class material ahead of time and you wind up getting very little out of your classes. You'll be spending most of the rest of your career involved in self-directed learning; your college classes represent a unique time in which you'll be learning under a professor who (hopefully but not always! or even usually...) has a far deeper level of understanding than you.

Another risk is being a know-it-all (in the negative, obnoxious sense) in your classes because you've covered the material already. :)

John Booty
A: 

You wouldn't advise a parent to stop reading to their child for fear that they'd read before it's covered in school, right? Why would this be any different?

ceejayoz
That's a very good point and I agree with you. My only concern was of the boredom factor of knowing something and learning it twice.
award88
@award88: I learned the basics of C++ years ago and now have to take the class for my degree. when I start getting bored in the class I just get an early start on my c++ homework assignments. works great (teacher doesn't appreciate it very much but he doesn't complain)
advs89
+2  A: 

The main deficiency in a classroom computer science education is practice communicating in a team environment.

Frankly, on most of my projects the actual coding is the easy part. The hard parts are all about communication - gathering and understanding requirements, coordinating with team members, coping with unexpected changes etc

If you have the time, get involved in an open source project. File bug reports. Submit patches. Discuss new features with experienced members of the project. And learn what it's like to participate in a software development team over time.

ctford
+4  A: 

It definitely helps. I used to do this a lot in my high school computer science class. I was the guy who built 3d applications in OpenGL in my spare time and later showed them off in my CS class only to get in trouble for distracting the other students. Perhaps I didn't pick the right time to show off my work, but I can say that learning on my own enhanced and complimented the learning experience from the class.

As good as all of that is, I will say one more thing. Computer science classes teach you a lot of good concepts that you may not learn on your own when doing your own thing. And in fact one mistake I'd make at times was letting my pet projects become a distraction. So there's definitely a balance to be made.

Steve Wortham
+4  A: 

What should I learn in my spare time which will not conflict with what I will be learning in class?

It is always worth learning ahead. If nothing else, when the topics come up in your coursework, there's an excellent chance that your grades will be better. Worst case: at least you'll have seen the vocabulary words before.

However, if you're looking for specific topic recommendations for an undergraduate, here's a very short list that I think is worth your time:

  1. Academic: data structures. Learn about the features and limitations of various types of data structures. How are they implemented (or not) in your favorite toolset? How are they implemented in others? What are the time complexities of the associated algorithms? If you had to write them yourself, how would you go about it? When is a list more useful than a hash table? And so forth.
  2. Practical software engineering: configuration management. What is revision control and why is it important? What is a conflict? How would you resolve one? What if you are working in a group and you and your friend are both making edits to the same file? How would you manage that?

Obviously, there are plenty of other topics worth studying but, based on my time teaching undergraduates and welcoming them into their first job out of school, those are two areas where a lot of them have a hard time.

Bob Cross
A: 

"The Disadvantages of High School Programming" has this cautionary note that I think is worth repeating:

those who take programming courses in high school can find themselves at a disadvantage, as they have to unlearn bad programming habits while learning a new and very different language.

Thus, be careful about what you learn as it may have to unlearn it.

JB King
you should always be humble and prepared to unlearn, no matter how you started.
Stuart
Cmon. Look at most introductory coding examples in any book, website, etc. and they are all bad examples of how code. Show me an example of "Hello World!" that could be used as a template for a large scale app. You have to start somewhere.
Jeff O
If one has to unlearn something, why was it a good idea to learn it in the first place?
JB King
unless you have an amazing high school programming teacher like I did (mine retired from a six figures programming career and teaches CS and chemistry for fun). everyone in the school loved him. he taught AP computer science well enough for me to get a perfect score on the AP test which exempted me from a first-year college CS course.
advs89
+3  A: 

In my experience, things that you teach yourself stick with you FAR LONGER than the things you'll get out of a lecture or text book.

Ya it's possible to read a book on IIS and get some basic understanding from it but that won't help you when you've stuck a .net 2/3 application in a 1.1 pool and everything is blowing up. The book will likely not prevent you from making this mistake either.

Books and classes are nothing compared to experience. If you're going to spend hours reading about it, why not spend those hours messing with it, breaking it and fixing your mistakes?

Google is the only text book you need. That and maybe StackOverflow :)

LogicaLunatic
+++ for your first sentence.
Mike Dunlavey
A: 

As a professor of mine from Grad school says, "[Computer Science] is best learned twice." (he actually says it about math, but it's just as true for really anything complicated I think). The first time you're still getting the idea of where things are going, but the second time you can see the end point, so you can pick up on many more of the details.

However, the cautionary not IS valid. be prepared to fight some bad habits you've picked up, but that's not a reason not to do it...

Brian Postow
+1  A: 

Go for it. Learning something on your own is an extremely important life skill. Also, learning something ahead of time will help you ask better questions.

PaulG
+7  A: 

"Never let school get in the way of your education." -- Mark Twain.

Jeff O
sometimes I feel like my engineering homework gets in the way of learning about programming... don't get me wrong, I think high-level math and physics is important, but the ridiculous amounts of homework make it impossible to get myself where I feel like I should be with my programming...
advs89
It won't last forever.
Jeff O
+1  A: 

Never shy away from self-learning. Just don't let it go to your head.

When I was a C.S. professor, I taught 700-800 students intro programming. Many of them had programming in high school.

What they had had in high school kept them ahead of the class for about 6 weeks, during which time they kind of loafed along.

Then, when the class material caught up to them and surpassed them, they were caught off guard, not knowing how to address the material.

The other students, who had not had programming in high school, had learned how to work hard to understand each new concept, and knew how to get help and pace themselves.

So ultimately, the students who had prior programming experience found the class a struggle, and some dropped out.

Make sure that doesn't happen to you. Even if you already know some of the material, behave as if you are learning it fresh.

Mike Dunlavey
+1, that's me in all of my classes... the first few weeks (usually review) is easy and then all of a sudden it get's ridiculously hard and the time I allocate for each class is no longer sufficient.
advs89
@Adam-Doyle: I totally understand. I was like that in college too, but somehow I scraped by, and after a long long time got a PhD. Then as a prof, I saw it from the other side. It is so obvious when students don't know how to knuckle down and learn something inch-by-inch. It is sad, and you really want to help, but if they don't stop by and ask for help it's not easy.
Mike Dunlavey