I'm currently pursuing a computer science degree and I'm faced with the yearly task of deciding on my schedule. In a previous year, I had pushed myself so hard that I found that I'd learn each concept just long enough to forget it and move onto the next assignment. This is pretty routine for university, but is it really helpful? Would it be more beneficial to take one less course per semester and let the topics really sink in? Or would it be more useful to push yourself to your limits and experience true-hard work? Which will do more for you once you've graduated?
views:
539answers:
15I think you will have plenty of hard-work and deadlines ahead of you when you start in industry, so the really important thing is to ensure you understand the concepts.
Just pick up easiest schedule. That will give you enough time to do real investigation / work / programming on your own. Of course, by easiest I mean easiest by still relevant.
I'm also a university student in CS so I thought I'd chime in.
I usually take 2 CS classes per semester, and then I take other more general classes. This way, I don't have too much CS work to do so I can still learn it, but at the same time, I'm getting enough credits from my other classes to stay on track.
I find 2 CS classes works out well for me.
Perhaps it's just me, but I really don't see the contradiction. Isn't the entire point in pushing yourself to allow you to better keep up and understand the curriculum?
Pushing yourself to not learn seems pretty pointless.
Push yourself to learn what you're supposed to learn.
University is more about getting yourself kitted out with the mental tools for the trade, rather than learning how to use the actual tools of the trade. As such, there's benefit in gaining familiarity with working hard, and also immersing yourself in-deep into the background of any given topic.
I'm less inclined to suggest hothousing as a desired approach though, seeing as I've always been a bit of an idealist when it comes to university education :)
It's more important to network, and enjoy what you're doing.
For example: Join some social clubs, and attempt to work together with afew people on building an iphone app, or a website.
Those experiences, plus a solid theoretical foundation will serve you well in the future.
What college taught me wasn't that I needed to have an expert level understanding of every course I took, but to be familiar with it.
For example currently in a project a co-worker is having to replace 1 C++ type with another. To help him with this he was trying to write a lexical parser but couldn't remember the name and thus couldn't look it up on how to do it. I remembered the name, but in no way could I write a lexical parser. I was just familiar enough with the topic to go in the right direction with research.
I took more classes and got an overview because I wanted to be done quicker. In reality most of the stuff you will learn about every day development will be on the job. CS degree is a base line not the end all be all. The biggest part about being a developer is a willingness to learn EVERY DAY.
If you're forgetting absolutely everything you learn in a class, what was the point of taking the class. Employers will be far less impressed with your GPA if you lack the knowledge base when you're asked basic questions about the topics you supposedly studied.
Certainly push yourself a little, but you should also be enjoying what you're learning. Try using what you learn in personal projects or otherwise looking deeper into the topics you study. That way the information will sink in a little deeper, and you will have gotten a lot more out of the course than simple comprehension.
If your goal is to enter the software industry, focus on getting the degree. The number of times you'll ever encounter one of the concepts that you're struggling so mightily over will be vanishingly small and will play no role in your getting a job. Your having a degree will.
Don't burn out on too many CS classes at once. I took 3 CS classes one semester, back to back to back. Although it gave me Friday's with no classes (because they were M/W classes), it was still a rough semester.
I'd say take at most two CS/Math/Stat/Physics/etc. classes a semester. Then one or two other required classes (I had general education and college of arts and sciences that I had to take at UNC) and one "fun" class that you know you will enjoy. Preferably non-CS related. Go pick an interesting class you might like. Try and minor in that subject. Give yourself something other than CS to think about! I picked up a History minor because I found modern European history interesting and kept taking one class after another.
"Never let school get in the way of your education." - Mark Twain
Graduate as fast as you can. Get an internship/job and continue to learn. You should be leaning more outside of the classroom, but take advantage of what is being presented.
This question depends entirely on who you are. If you are the type who wants a buffet of subjects instead of a single course, then you would naturally work to get more in. Personally, I get excited by things that interest me intellectually, so in addition to my regular course work, I did other projects on my own just because they interested me. I also routinely did an independent study each semester to study one particular thing in depth.
Unless you see a particular benefit to having an overly aggressive schedule, it's probably better to take a realistic schedule and have more leeway to explore.
Focus on courses which interest you personally if the university offers such, and the material should have a higher chance of sticking with you. Besides that, as long as you don't risk delaying your graduation (if it's an issue with you - may not be), you should cut back on courses if you feel that they are overshadowing your learning.
In Computer Science, while individual methods of doing things (i.e. niche applications of knowledge or language specific ideas) aren't particularly important, understanding the important general concepts such as networking or threading can be much more vital. As most of the language and environments du jour change fairly frequently, it's more important to be able to understand and work with a variety of topics than memorize design patterns (not that design patterns don't play a fair role in software architecture).
In summary, if you're worried that you're going to be leaving knowing nothing, slow down and pay more attention - but don't sweat the small stuff.
You dont need te "learn" each concept. You do however need to be exposed to and get a basic understanding of it. Take a deep breath, take the plunge, finish, and get out to the real world ASAP. Your real education, the one that matters, starts the day you graduate.
My preference back when I was in university was to take the courses that I considered fun and interesting while also meeting my degree requirements. So, I would take some courses like "Symbolic Computation" and "Computational Complexity Theory" that while the material itself isn't directly useful to general software development, these classes did give me some idea of what there is to these elements of Computer Science. Symbolic Computation was a great contrast to Numerical Analysis and I remember pieces of each course even after a decade from when I graduated.
There are some big factors here to my mind like what kind of degree are you wanting, do you want to take those killer courses? Where I went to university there were 3 such courses: Compilers, Real-Time and Graphics. I didn't take any of them as I preferred more theoretical material and so I took courses in that. I also enjoyed having a semester that was all Math and Computer Science subjects which some may think would be brutal, I rather enjoyed but then I struggled in what others viewed as an easy course.
Even my electives were chosen with some thought as to how hard would this be, what resources did I have to help me and did I think I'd enjoy this. My electives ended up being a mix of Science, Chemistry and Biology, Languages, French and Russian, and a couple of other, an Economics course and a course on Civil Law. The science courses were rather easy as it was material I remembered from high school mostly while the language courses had a fair bit of the grade being just attendance alone, usually 20-25% which was sweet to my mind.
I even took an advanced graduate course on "Asymptotic Enumeration" that was really cool to my mind but I'm not sure many other people would find that interesting. Combinatorial Optimization was another course I took that I enjoyed but I'm not sure how well others did.