Just curious.
For those of you who had extensive experience programming before school (or who got really, really good at programming during school); did your CS classes become very easy? Almost like trivial side work?
Just curious.
For those of you who had extensive experience programming before school (or who got really, really good at programming during school); did your CS classes become very easy? Almost like trivial side work?
Not really. Most "Computer Science" degrees use programming to implement abstract theoretical concepts, rather than complete useful tasks. You won't have any trouble implementing algorithms or getting through the entry-level courses, but you'll still need to pay attention in the mathy classes.
Also, you probably know less than you think you do. This is true of everyone at every stage of life. If you're really feeling ambitious, pick up an internship or part time job with a major company and see how software gets built in the real world. A degree means next to nothing on a resume if not backed by work experience.
Math was the hard part. Not because it was difficult but because of my school's failure to show how it applied to real World problems. The non CS and general core also was a challenge because here you have a good career lined up and yet you had to fulfil scholarly obligations which was a challenge. Most schools would have all these classes lined up for you but the failure to show how it applied to real World was hard. So in summary while the computer science classes may have been a little easier, the rest of the core was not as easy.
The introductory classes become quite easy, and the higher level classes become more interesting. This is because while some of your other classmates will be worrying about programming itself, you can focus on the concepts that the professors/lecturers are trying to get across. There will also be classes where you will have to unlearn some things, and then there are the math/discrete math/algorithm classes where your previous programming experience wont mean much.
Well, I got way disappointed with my graduation. Only one course (of a five year duration) was actually good. All the others sucked... AI, CG, OO, etc. were all too easy and all too shallow.
The math part of the course was, however, very hard. My CS was very focused on science, trying to form researchers mainly -- so we had a lot of statistics classes, complex math, etc. I think I could have taken more out of the course if it was better structured, having more classes over specific subjects, more effective training in CS methods, if the Software Engineering classes were more methodology oriented then whatever it was, etc.
Besides, the teachers were unprepared for some classes -- I had one teacher was giving a class about OO in C/C++, but was specialized in hypermedia, which, of course, uses dynamic languages like Python and PHP. I taught her constructors initializers... She didn't know about them until that course.
No, contrary to popular belief, CS isn't about learning a trade, or doing programming (at least, it isn't like that at most top American universities). Computer Science is really about learning the Science behind computers, so in that respect, it's a lot more like Math, or Physics.
At the Public University I went to, it wasn't the hackers that thrived, it was the kids that were home-schooled, or the foreign-educated kids, that had solid groundings in Math and Sciences, that did.
Outside of school, the story is going to be different of course, but right now, I'm just trying to answer the question you asked.
I found a number of very challenging classes (not just math). Architecting operating systems, compiler design, concurrency issues and solutions, networking, test driven development, agile development, robotics, embedded systems, artificial intelligence, cpu architecture, even game design. I was also introduced to a variety of programming languages, systems and utilities. Each one has its own niche, both of adherents and purpose.
One of my biggest challenges was learning to work with programmers who are not as quick as I am. It turns out that there are tool, methodologies and engineering principles that can leverage everyones contributions. This experience has turned out to be a huge boon to my post-college work life.
I was coding professionally ( mostly self taught), and then went and worked on a MS in computer science.
I found that the coursework helped me understand why things were the way they were. It gave me a better framework to fit the things I knew how to do together. Algorithms was wonderful - so was compiler theory ( it took the 'Magic' out of languages ).
It did make it easier in that I did not have to learn how to write code, but more importantly I had an understanding of how things were done in the real world so the theory made more sense.
When I started my CS degree I was relatively good writing code and had some introductory understanding of the major data structures. I also had a pretty strong math background. It made getting the degree pretty easy, or at least so it seemed. It took about 5 or 10 years after that to begin to understand how little did I actually know, and how much more I should have studied while at school. Do keep in mind that more than likely for a lot of things that you think you understand today you are actually just touching on the tip of the iceberg. Unfortunately young humans are much dumber than they appear to themselves. I don't understand why we are wired like that.
There are some good observations here. I was a prof at a liberal arts college for 4 years, so I've seen this from different directions.
I had a very few students who were such good programmers that classes bored them, which was sad because there were some things taught in the classes that they should have learned. As a result, they couldn't move beyond mere hacking.
Not all of the higher-level math is useless for programmers. As a programmer, you are extremely unlikely to ever need Saturated Model Theory, or Formal Semantics and Logic, but at the same time I think basic computability theory (Automata) and information theory are very useful in helping to design software. These subjects do not need to be explored at PhD-depth, but they can be very useful.
Also basic Linear Algebra, Probability, and Statistics will serve you well if you ever want to go beyond just coding up basic applications.
It's true classes can be boring, so I think having challenging projects is the key to getting good value out of school.
Of course, it's important to understand that any professor is capable of BS, thinking that something's important when it isn't. My biggest personal beef is all the silliness that they tell people about performance (not to mention all the "right ways" of coding style and OO design). You need to be on guard.
I had been programming for around 15 years before I did a computer science degree. Ironically, I did know what big-O notation and computational complexity was(1), but I had never encountered many of the subects covered in the degree. Most computer science curricula will cover theoretical topics that you probably won't be familiar with.