Quote:
Original post by Zenroth
I've never understood the desire for traditional CS degrees. I started on this route, and generally found that 80% of it is only useful in a academic environment. I understand a desire for broad background, but the truth that I have experienced is that you simply don't use, or forget most of this extra stuff. This is especially true with modern programming languages.
When I came to college, I thought the same way. However, I thought so for different reasons, and I shall detail it below after answering your questions.
Quote:
Why do I need to learn how to manually manipulate a fixed sized circular array or write a basic unoptimized hash table class when the languages come standard with data structure classes that outperform anything I'm going to write almost always.
The answer to this is really very simple--so you understand what's going on at the low level. For performance-critical applications this is
vital. Even for applications where performance doesn't need to be absolutely bleeding edge, it's useful.
I was going to give an example, but yours below will work.
Quote:
This is an example of where I would say its much more practical to understand why and where you would use a hash table, and any performance gains/losses, compared to knowing how to write one. Its like the age old interview question of write out a linked list, every time I'm asked this, I turn to them, and go why not use a vector, or array list. (c++/C# jobs)
Just off the top of my head...
-Linked lists are generally faster to traverse sequentially, though this is of course a performance detail and there are some implementations of a vector where this is not the case.
-Linked lists are almost always faster to add to; depending on your objective you might simply re-head the list or keep a reference to the tail and re-tail it. For a vector/arraylist it becomes necessary to recopy the data into a larger storage area when you hit capacity.
-Linked lists are also almost always faster to remove from, making it an extremely versatile container for a queue/stack/deque.
Quote:
The reality is once your accepted to this job, if you did write your own linked list class your likely to get hit on the head for it during a code review as you've most likely wasted time, and now created a non-standard that the rest of the team will need to learn vs. using a standard available data structure implementation everyone is familiar with and is directly supported by the language.
Of course they wouldn't ask you to implement a list for a project. That's not the point.
These questions in an interview are the human-resources equivalent of a smoke test. They aren't asking you
when and
why, they're asking you
how. It's a very simple programming test to demonstrate a basic level of proficiency with the language and frankly if you said "why not just use a vector" to anyone I know who does interviews, you'd be tossed on your ear because it sounds like you don't understand the underlying principles.
Quote:
Then we come to math, I can't say much about this, I have never needed to use any advanced maths until I wanted to start doing graphics programming. Even then at this point, usually there are libraries that take care of 90% of this, and you really only need to understand whats basically going on. I would say math is useful though.
Of course crap like calculus will be useless, but you're trivializing mathematics quite a bit. Set theory/graph theory are very important in a large number of software development areas (both in game development and general software development).
Quote:
I will agree not having a degree makes it harder, and does close doors, I'm just not sure I would value it as any indication of capability or skill. I've worked with a lot of people with CS degrees and the reality is they didn't know anything, and you still spend months hand holding them to get them up to speed.
There's a lot of people who wasted college in
every field. There are also a lot of people who didn't need it and went for the degree. (I'm currently doing that myself; what I have learned will supplement what I already know, but not to a hugely significant degree.)
Quote:
I currently work at Intel as a software/systems engineer I was hired on without degree, so where quite a few others that work at the company. A lot of it is just getting a chance to show what you can do, I started there as a contractor doing QA, within months I was swept up into a full time position, and the owner of a part of a massive project.
The contractor route is exactly why you were picked up, I would wager. Without a degree I'd be shocked if they'd have even looked at your resume, had you applied for a position internally.
You're missing an awful lot when you restrict college to simply your major, however. College is, for many people, the last opportunity to do something educational and outside the scope of the working world. I already know the majority of my computer science curriculum. So what do I do? I learn about other things. History's an interest of mine - so I take history classes. Writing fiction is another interest - so I take classes that analyze story structure. (I'm also a business minor with an eye towards getting an MBA.)
If you want to just learn about your major, a four-year college is not where you want to be. You're looking for a tech school and nothing more. A four-year college is about teaching you how to learn, not teach you how to pursue a trade.
Quote:
As to game programming/design specific schools, I'm not sure they are any better than traditional schools, though they do seem more practical and less academic. Which in my mind is a plus personally. I had looked at attending UAT for awhile, but couldn't justify 70k in tuition to learn what I can learn by myself or through other mediums. I will however say that the classes at www.gamesinstitute.com have been terrific in my mind, and are completely worth the cost. From what I've seen they do care about background, as well as practical. Thats why for instance in their DX classes, you start with building your own software transformation pipeline before moving into Directx's.
I don't know enough about GamesInstitute to judge, but I will say that Fullsail's coding division is a joke (I looked into going there, then realized that everything they taught, I either knew or could learn on my own). For that matter, any "New Media" major I have ever seen has been something of a laugh, and the one at my school (University of Maine) is no exception.
Quote:
I guess my point of all this is to say, a degree will open some doors for you, but it won't necessarily make you a good programmer, and in many ways it will from what I've seen cost you a lot of time, and get you laughed at a bit until you adjust to a real world working environment. I know the popular opinion at my work is that school is for parties and social life, as most of us don't use what we went for school for anyways.
Sounds like you have a staff of people who didn't have the drive to apply themselves. I'll leave school with numerous internships and quality positions under my belt (Google's Summer of Code, for one), a well-rounded education, and a lot of good work for my portfolio, because I
have the drive to apply myself.
You only get out of college what you put in. Those who scrape by and don't pursue the opportunities offered will come out of college without having gained much of a clue. You sound like one of those people. I don't mean to offend, but it sounds like you didn't put in much, and so it's unreasonable to expect much out of it in return.