Computer Science Curriculum in College 654
Ludwig Feuerbach writes "As it's back to school for university students, including Computer Science undergraduates like myself, I look at my course schedule for this semester and I have courses with titles like: Theory of Computation, Numerical Analysis, Artificial Intelligence, Machine Learning, and History of Economics from Plato to Keynes. The first 4 courses are required in my CS program. I had thought nothing of it until I read an opinion piece by Dan Zambonini, who stresses the type of courses I'm taking are, essentially, useless for getting a job. He lists several CS courses useful for a job. Is he right? I tend to think that an university education should stress scientific topics over vocational ones, but since I'm just planning to get a job after I grad, am I in the right program?"
if you want more vocation, plus a better chance (Score:3, Insightful)
it is oriented at getting the student to learn how to use computer systems found in business, how to create tools for those systems and how to manage and build on those systems.
Re:if you want more vocation, plus a better chance (Score:4, Informative)
No two corporate entities structure their data or use EXACTLY the same data (unless part of same company) typically, so custom information systems work (e.g.-> custom databases & such + reporting apps etc./et all) will always need to be designed & redesigned or added onto (or even modded/improved for changing conditions).
Another REALLY useful (imo) course, is "DataStructures" if it was not included in said list from the URL document: It teaches you a great many things & patterns of thought (such as which types of sorts to use, when, & with what datatypes & sizes of sets to sort thru, as one example of what you acquire/learn from it).
How much of it do you REALLY use in IS/IT/MIS work? Not much, but it is a GREAT course for anyone into computing imo!
*
APK
P.S.=> The reason I agree SO strongly with the init. poster & his comment of:
"for a job, then go into CIS."
I assume he meant information systems work/databasing in general (often called "data processing" as well)... I have made more than a decade worth of money from it, for the very reasons I state above:
Sometimes, there is NO "canned/prebuilt/turnkey" instant solution out there for various enterprises out there or their data - you HAVE to build them, for them! apk
Re:if you want more vocation, plus a better chance (Score:5, Interesting)
I find myself trying to create a data structure/tree like a family tree or a directory structure. Each node has multiple children, a node can have no children, a fast way to find a path from a child to the root, etc. And in wondering how to create such a tree I find the usefulness of textbook knowledge, specifically the jargon. I'm reading like crazy about red/black trees, linked lists, doubly linked lists, binary trees, what a map is compared to a list, etc etc. It goes on and on. And I'm sure a course would have covered this or at least given me the knowledge to see quickly if the standard Java libraries have this structure already built.
Many of the Java books I'm reading have wording like, "if you remember from your CS class what a binary tree is, here's how to implement one in Java
I definitely envy those who took any kind of data structures course.
Re:if you want more vocation, plus a better chance (Score:3, Informative)
Do you really need to create your own datastructure? The Java Collections framework [sun.com] has a number of good classes and interfaces that are useful. Anytime I've thought I needed to do this from scratch, I was wrong...
Re:if you want more vocation, plus a better chance (Score:5, Insightful)
Although it is true that CS is a highly academic and theoretical field, almost all of its applications are (appropriately enough) applied.
So, what are some of the most common arguments?
If you don't know how to actually program a computer, an employer won't care if you know the theory behind machine code
Essentially true. Unless you get some plum "sit around and think about computers" job, most employers will want you to be able to actually DO the job they hire you to. However, on the flip side of that:
An employer doesn't want someone who has only been trained to use Language X. They want someone who wholly understands the concepts of programming and can adapt to any situation as the company grows.
Again, essentially true. Unless you are doing a temp contract, most employers will be looking for a Programmer (or some buzzword, like Solutions Analyst)... not a C++ Do..Until Loop Programmer.
But, as you can see, both of those requirments seem to contradict each other by seemingly presenting an either/or case. Either you know Programming OR you know C++.
And the same applies for just about any field in CS. (Either you know Network Administration, or your know Cisco Routers. Either you know Web Mastering, or you know Apache. Etc, etc.)
I first completed a college diploma, and learned how to build a network (Cisco style), how to set up and maintian websites (Apache style), and how to run databases (MySQL style). Although there was a spattering of "theory" in each course (usually consisting of the introductory lecture to each course), it was all "hands on".
I graduated and transferred over to University. By Year Two, I felt so detached from actual computers. I was learning a lot of facinating theory stuff, but really wanted to do something with it. Of course, "doing stuff" was a 4th year course. ;)
So, after getting most of the requirements for the Bachelor degree, I decided to switch back to college. In Ontario, colleges have been allowed to grant Applied Degrees.
Having experienced a good chunk of the cirriculum, I have to say that this is a great solution. It's a nice mix of theory AND practicality. Personally, I'd like to see the Universities lean more towards an Applied Degree, with all the serious intensive THEORY courses offered as 3rd/4th year electives... and as Masters. (I firmly believe that Masters should be near 100% theory. You SHOULD get a Masters in Network Science, not a Masters In Cisco IOS).
Re:if you want more vocation, plus a better chance (Score:3, Interesting)
Virginia Tech does this [vt.edu], and their grads are quite well-placed in the job market.
2) Besides, why should CS degrees be undesirable? All the stories these days are about CS departments losing [xplanazine.com] enrollment. [timesdispatch.com] Seems like a good time to "buy in."
3) The money isn't in coding...it's in management. You are *far* more likely to land a management position with a degree.
Re:if you want more vocation, plus a better chance (Score:3, Insightful)
There is no such construct in C++. Perhaps you're thinking of do..while?
Yes, that's it. (Another problem with learning too many programming languges. Too much syntax! =) )
When you look back historically to the great innovators in computer science, they came from disparate backgrounds, usually math, physics, engineering, or computer science. The commonality between these backgrounds is the formal scientific training. Formal scientific training, therefore, is
Re:if you want more vocation, plus a better chance (Score:3, Interesting)
On the contrary, there's a whole theory of computation that is far from fully understood. Godel's in
Regarding the purpose of a higher Ed degree... (Score:5, Insightful)
Re:Regarding the purpose of a higher Ed degree... (Score:5, Insightful)
The issue I have with evaluating everything in terms of "but will it get me a job?" is that, as you say, over your lifetime you'll probably make a few jumps in career path, so the skills you invest in now might not be what you find yourself doing in 5 or 10 years time. Add to that the fact that, especially in the IT field, there is a lot of churn in what are considered the "right skills" and you could easily find that the job skills you spent time learning are not much in demand by the time you've finished learning them.
That's not to knock vocational courses - they can be very useful and help give you the skills to get things done. Your life shouldn't revolve around your job however, and not everything should be devoted to that end. The best vocational courses are the ones that are unashamedly so, are usually short (a few weeks or months for the whole course) and something you can pursue when you need it. University courses are supposed to be about learning because you want to know and understand. Some of that may be useful for finding a job simply because people who understand some concepts may well be rare, and in demand. Some of that may be useful in a job because you have a good grasp of underlying concepts and understand what you're doing rather than just mechanistically repeating a process. Employment is shouldn't be the point of learning such things however, it should be a small side benefit. If you want a job, take some vocational training. If the job you want requires you to understand things for which you need a university degree then either that's something you want to learn regardless just so you can understand it yourself, or you need to seriously consider your career goals.
In the end the ability to learn new things efficiently, and the skills involved in such learning are the most valuable job skills you'll get. You'll rarely end up doing a job that is precisely what you trained for, so the ability to learn and adapt is highly beneficial. Those are things no university, trade school, college, or otherwise will teach you, it's something you have to learn for yourself. Of course any sort of education can give you practice.
Jedidiah.
Do you want a job or a career? (Score:5, Interesting)
I got my CS degree in 1984. It's still useful, because they taught me theory, The languages they used (Pascal, PL/1 and LISP primarily) aren't.
My enthusiasm got me jobs. The degree only helped.
When I went to law school, almost everything I learned was theory. When I started the practice of law, I knew virtually nothing about actually running a trial. Now, I'm writing the book, and a publisher pays me for it.
Much of what I learned from the practice of CS and of law could have been taught at a trade school. 95% of the time, my work would be competent.
But that remaining 5% distinguishes between a tradesman and a professional. As a prosecutor, cross-examining the defence's psychologist or engineer, I have the advantage of knowing the basic theory behind their disciplines, because of the courses I took at university. I only tinker with writing software now, but I grok the new languages fast enough (when I get the chance to turn my mind to them).
I don't knock the trade schools. Enthusiasm to learn takes some people all the way through the theory they need to be pros. They don't need a university degree to be good.
And uninspired university graduates are so useless that should not be permitted to do anything important. I wouldn't hire them.
I remember that IBM used to hire only people with university degrees. Not just CS. Any degrees. IBM wasn't interested in what they learned at university. They wanted people who had the the enthusiasm/fortitude to slug their way through dry theory. A degree proved that the kid could work. Isn't that what an employer wants?
So what do you want? A job or a career? How much do you want it?
Re:Do you want a job or a career? (Score:5, Insightful)
I think that there is a deeper subtext to your post than you are emphasizing.
Look at your career: you earned a CS degree. You worked as an engineer. Then, you went to law school.
Granted, you don't tell us why you made that decision, and I'm not going to speculate. But I am going to generalize, and say that your story is becoming the norm, and not the exception. I know a huge number of people who have switched careers mid-track. And the funny thing is, I see a correlation with intelligence -- the smarter the person, the less satisfied they are with their first career.
Why is this the case? Who knows? But I think it's significant, and I think it speaks to the way that a student should treat his/her college education: Try things. Experiment. Learn ideas, not facts. Learn how to read. Learn how to write. Learn how to live.
I speak from some experience here -- I spent a huge amount of time as an undergraduate studying the technical, and very little time learning about books, music and culture. Today, I'm a technology burnout. I would much rather read, write, paint, draw, photograph or perform -- basically, anything but spend the rest of my life sitting in front of a computer. I wish I had done things differently.
Perhaps, had I balanced my education a bit better in college, I wouldn't be facing this problem today. Perhaps not. But either way, I would be much better prepared for the difficulties of life, had I spent a little less time treating college like a trade school for science and technology....
Re:Do you want a job or a career? (Score:3, Insightful)
Knowing the time complixity of sorting and searching algorithms, data structures, different programming paradigms (oo, procedural, functional etc.) is something you can always rely on next year, or 20 years from now, but is not something they will teach you at a community college.
What you need is BOTH. Finish your BS at a University, learn about algorithms, data encoding, database theory, AI, optimization, machine learning, HCI theory, data security, networks, then as your electives go to that
Re:Regarding the purpose of a higher Ed degree... (Score:5, Funny)
Re:Regarding the purpose of a higher Ed degree... (Score:3, Insightful)
Those are good points. I would add to that by saying that the greatest value of a scientific/technical college education is not just the specific knowledge and skills that it teaches you, but the fact that -- if you do it right -- it teaches you how to learn new things. And this, really, is the most valuable job skill of all. Whatever cutting-edge software or hardware you become familiar with in your university education are almost certainly going to become obsolete in your lifetime -- even abstract concept
Answer to your question... (Score:5, Insightful)
Sometimes the stuff you learn there seems completely and utterly unimportant for day to day usage. Still, often you suddenly get into a situation where no other non-CS guy can't find a certain bug because they lack the understanding of the background. I've been in the stuation myself where I was able to fix a bug that resulted out of the use of floating-point numbers. The guy that implemented the routine just didn't know about the mathematical boundaries of floating point numbers. It's just an example...
If you just want to become a programmer, just follow some evening courses... That's all you need... Programming isn't all that hard, but don't come complaining to me because the sorting routine you wrote is too slow and don't know why.
Re:Answer to your question... (Score:2, Insightful)
First of all, a degree is very important when looking for a job. Most colleges and universities don't offer a degree in Programming.
Second, as a CS graduate working as a software engineer, I can say with absolute certainty that while most of the classes don't have any direct bearing on what you may end up doing, knowing the theory and fundamentals are key to being a well-rounded programmer.
Re:Answer to your question... (Score:4, Insightful)
Some people sugggested MIS as a better academic path for programmer. I don't know. At my University, the MIS curriculum involve a lot of business bullshit such as marketing or finance. I know these are good to know from the organizational point-of-view, but if you expect to produce decent programmers, you need to keep some focus.
Actually, I think there is no good path for those who want to get into programming in the current academic model. It's even worse for IT. What would a prospective system administrator take as degree ?
Re:Answer to your question... (Score:5, Insightful)
It depends a lot on what type of job you are looking for. I would guess that the majority of programming jobs are for managing in-house applications. Companies writing software to manage their own business. In those jobs, it's just as important to understand the business as it is to know how to write a program. Maybe more so, since advancement above a certain level will generally be into management.
In various classes over the years, I have taken Cobol, RPG II, Assembler (s360), BASIC, C, C++, and Java. And over my career I've mostly worked in Delphi. OTOH, everything I learned in accounting and economics applies pretty much the same today as it did 20 years ago. With computer curriculums you have to be careful and make sure you are focusing on teaching how to be a programmer and not how to use a particular language. That's why classes should focus on data structures and SDLC. And sadly, proper GUI design is nearly universally ignored.
Re:Answer to your question... (Score:5, Insightful)
For example, an electrical engineer specializing in embeded systems and with a CS minor is a much better candidate for many jobs then a guy with just a CS degree. Let's face it, it is much easier to teach the advanced CS stuff to yourself then it is to learn an entirely new field, and most of the good software jobs require some special field of knowledge.
My advice on what degree to get is to get the hardest degree you can survive in your field of interest. In the long run that will put you in a better possition in the job market, because there will be fewer people in the harder degrees compeating for the higher paying jobs, and if you can't find one of the higher paying jobs you can always out compeate someone who got an easier degree.
Re:Answer to your question... (Score:3, Interesting)
Re:Answer to your question... (Score:5, Informative)
In Canada, a college is usually what an American would call a "community college", so its primary focus is instruction with a vocational focus. University means just what it means in the US, a higher-education institution that has a strong focus on research (and obviously the extent of that focus varies from place to place). The term college is sometimes also used to refer to the units of a university, such as St. Mike's College at the University of Toronto or St. Paul's College at the University of Manitoba, so you have to get some of the meaning from the context. Without context, the first meaning is usually understood.
The easiest way to see the difference is that if you tell a Canadian "I'm going to college", he'll probably look at you a second and then either think to himself or say, "Oh, you mean university".
Re:Answer to your question... (Score:3, Interesting)
But I've almost never met a *great* programmer (i.e. somebody who can independently design and develop complicated solutions and implement them efficiently) with
Re:Answer to your question... (Score:3, Interesting)
Sure, the definition of large-scale is relative, but if you force 5-6 people to work on something for 3-4 months then they normally construct something much larger than they will have come across before. It also gives them some specific exp
Re:Answer to your question... (Score:3, Insightful)
You are entirely right when you say that real world programming tasks are often not quite so challenging.
The choice of degree matters less than attitude.. (Score:5, Insightful)
A degree is an academic certification and as such it should not cover topics simply because they're trendy in CS related jobs at the moment. It should teach a curriculum that gives CS students a good background in a wide range of topics and above all else it should be interesting and set up a good basis for more advanced academic training.
It is not surprising that sometimes what is good course academically is not necessarily a good course from a business standpoint. As a professional programmer I think that CS graduates are typically no better than someone with no degree at all. I understand that this is a pretty damning thing to say considering the majority of slashdotters probably have a CS degree but in reality the CS degree gives you nothing in terms the ability to write good code.
In fact, a CS degree typically makes for a more dangerous coder due to their belief that the few programing projects they did on their course makes them a professional programmer. It also trains the wrong instincts. Academic coding is about producing beautiful programs - business coding is about being pragmatic. Often they have a hard time rejecting these academic instincts.
I liken programming to playing chess. Anybody can learn the game in a day but to become a master takes dedication, a willingness to learn and a lot of time. I've stressed the "lot of time" point because I think this is a key problem with CS students. You get the typical line out of them at an interview "I didn't learn C# in Comp Science but I could learn it in an afternoon.." I'm a young guy (22) and I've been programing professionally for nearly four years and I can tell you that this is simply false. Make no mistake about it, I'm still no coding grand-master and probably wont be for another ten years. When somebody says that they can learn a language in an afternoon it doesn't make me think they're lying, it just makes it blatantly obvious how ignorant they are of intricacies of writing code.
In conclusion.. I think that having a CS degree is no real advantage over having a physics, chemistry or maths degree. What a degree shows you is the person in-front of you applied themselves to a long term project and got a result. The same conclusion can be drawn from a person sat across from me without a degree but three years of experience. Really, both routes are equally valid and I hold neither higher than the other.
Simon.
Re:The choice of degree matters less than attitude (Score:5, Insightful)
yes, you still need to learn the library but the language is trivial.
Re:The choice of degree matters less than attitude (Score:5, Insightful)
Maybe you haven't programmed in some or any of these languages. If you have, though, you'll probably know what I mean when I say that, compared to C/C++, none of them are exactly a walk in the park. They require you to think differently about not just syntax, but the entire form of your programs.
What if your only programming experience was ten years of (not Visual) Basic, and suddenly you were faced with learning Java? The concepts of object-oriented programming would be completely foreign to a person coming from a language that doesn't even have user-definable data structures.
When I learned PHP (no, I'm no master), I was able to draw on my knowledge of C/C++, which is syntactically practically identical but more importantly the same paradigm [wikipedia.org]. Learning how to tinker around in it was a snap. On the other hand, learning a language like Lisp, coming from C/C++, was much more of a challenge - yes, the syntax was different, but I had the whole ample use of parentheses thing down quickly. It was the fact that Lisp flows as a functional language but stutters as an imperative one that gave me fits. You'll never be a good Lisp programmer until you resign yourself to the fact that when you try to fit Lisp in to the C++ mold, you get crappy Lisp programs.
You're probably thinking, why the hell do I want to learn how to program in Lisp? I'll probably never use it. True, in a production environment, Lisp isn't anywhere near the most commonly used language. But college is about teaching you how to think more so than what to think. By learning Lisp while you're in college (or another language that doesn't fit into the C/C++/Java/PHP/etc. motif), you give yourself another way to think about how to do things. When you finish your degree and go into job training wherever you end up, that will help you just as much as the program design courses that give you the depth you need to get a leg up in the job market.
Learning A Language in an Afternoon (Score:5, Insightful)
So while learning it in an afternoon won't make you a killer coder right away, it is enough time to set you up to be able to code just about any app and learn as you go. If you already know other langauges, then it will be fairly easy to apply the rules of good clean coding to this new language as you go.
Re:Learning A Language in an Afternoon (Score:2)
string1.ToLower() == string2.ToLower()
string.Compare(string1, string2, true) == 0
Learning the syntax is the easy part. Learning how to use the syntax effectively is a different ball game all together. It's this aspect of coding that takes a lot of time to develop. I agree that once you can program to a high level in one language you can transfer to another much more quickly but it still takes a while to really understand the language. It's this kno
Re:Learning A Language in an Afternoon (Score:2)
to say that a person should be able to know the finer points of a language before he tried to get a job for that language is ridiculous.
Re:Learning A Language in an Afternoon (Score:3, Insightful)
The first one is going to require two copies and a compare.
Three main loops, and a whole slew of slow, slow copies. The second doesn't need to do any copying, all it has to do is check that each letter in the string is the upper or lower case equivelent of the other. In ASCII, for example, you can use neato-keen bitwise tricks to do this in less than 10 instructions (on most architectures) if you want. Much
Re:Learning A Language in an Afternoon (Score:3, Interesting)
Re:Learning A Language in an Afternoon (Score:4, Insightful)
I'm far more likely to get bent out of shape if a programmer who works for me chooses to use a bubble sort algorithm to sort a 5 million record database, or if he spends three weeks trying to find an algorithm to optimally solve a 3SAT equivalent problem. (unless, of course, he actually succeeds in the second case!)
Fact is, someone with real study in CS is less likely to make the above mistakes than someone with just programming experience. And programmer time costs way more than processor time.
No kidding. (Score:5, Insightful)
What the author doesn't recognize is that one of the reasons you should take courses which aren't job related is to make yourself well-rounded. That is, capable of handling anything which comes up, instead of just being technically proficient in a few TLA's of the moment.
He completely fails to understand that the computer training you received in College will typically be obsolete in 5 years. However, if you've received an Education (instead of training), you can likely adapt to handle the new stuff as it develops.
Somebody who can actually think can pick up anything. Someone who just has job training is going to be in trouble unless they know how to adapt.
The only constant in this universe is change. You're best off preparing for it.
Re:The choice of degree matters less than attitude (Score:2)
"I didn't learn C# in Comp Science but I could learn it in an afternoon.." I'm a young guy (22) and I've been programing professionally for nearly four years and I can tell you that this is simply false. Make no mistake about it, I'm still no coding grand-master and probably wont be for another ten years. When somebody says that they can learn a language in an afternoon it doesn't make me think they're lying, it just makes it blatantly obvious how ignorant they are of intricacies of writing code.
Hmmm I'm
Re:The choice of degree matters less than attitude (Score:5, Insightful)
What planet are you from?
You get the typical line out of them at an interview "I didn't learn C# in Comp Science but I could learn it in an afternoon.." I'm a young guy (22) and I've been programing professionally for nearly four years and I can tell you that this is simply false.
Well, I'm an old guy (42), who has not just learned, but used in shipped products, over a dozen languages. And I can tell you that I learn and master new languages a whole lot faster than all you guys without CS degrees who keep shooting off your mouths about how little use CS degrees are. Learning a new language in an afternoon is indeed an exaggeration, but learning a new language is a whole lot faster when you understand the fundamental mathematics on which all programs are based, and the way they are commonly expressed through language features.
Re:The choice of degree matters less than attitude (Score:3, Insightful)
I'm only
Re:The choice of degree matters less than attitude (Score:3, Insightful)
I must take issue with this. I did my time in one of the top CS programs in the US. I'm pretty sure that I could learn C# in an afternoon. I wouldn't say that I'd
Re:The choice of degree matters less than attitude (Score:3, Insightful)
Re:The choice of degree matters less than attitude (Score:5, Interesting)
"I didn't learn C# in Comp Science but I could learn it in an afternoon.." I'm a young guy (22) and I've been programing professionally for nearly four years and I can tell you that this is simply false. Make no mistake about it, I'm still no coding grand-master and probably wont be for another ten years.
I think your statement here sums everything up nicely in favor of university degrees. You don't have such a degree, you can't learn new languages fast, can't recognize that ability in others and after four years you're still not an expert at the one language you do know and use daily.
Aside from the exaggeration of "[one] afternoon" which I agree is insufficient. You believe it's impossible because you yourself are unable to accomplish it due to your limited vocational training. Then you falsely project your own limitations on to others. As other posters have replied: yes. with a well grounded backround in theory and fundamentals it is possible to pick up yet another language in a very compressed period of time. (Though some of us benefit from an advantage in age over you.)
I have been proficient in the past with Fortran, Pascal, Modula-2, LISP and various assembly languages. I am currently proficient in Perl and shell and an expert in C, C++ and Java. (not trying to brag, a lot of /.ers have similar, or larger, skill sets and will relate to the rapid shifts in technologies that result in such sets.) The last job I took
up required teaching advanced data structures in Java; a language I hadn't touched before the first day of class. Within one week I was productive in the language, within two proficient and within a month I was expert and using most of the advanced features of the language. I can't count the number of times my employment positions have put me in such a position where the programming requirements of the job have changed abruptly. I have always been ready to adapt to the challenge in a very, very short time frame and I believe this is due to my university-based education. I'm not afraid to change jobs or be fired because I know I can adapt and be valuable and productive in any new environment.
Here's two more examples:
I'm really sorry for all the excellent, creative problem solvers you turned away because of your bias towards a single answer. "I don't know" is a perfectly acceptable answer (in any context) and doesn't, in itself, indicate an unworthy candidate. "I don't know; but I can learn it real fast" can indicate a truly flexible, useful person. Your loss; not the candidates.
Re:The choice of degree matters less than attitude (Score:3, Interesting)
I don't know about C#, but I learned Tcl and Python in about two days each. I do the
Maybe... (Score:3, Insightful)
I'd say there are more successful people in the programming world with degrees than without, though, so I'd stick with the courses your college requires.
If you really want to stand out when you're looking for a job, use your spare time to write a well-designed app that you can show to potential employers.
not useless (Score:3, Insightful)
Specialised IT courses (Score:2, Insightful)
And guess what? I already had work experience...
University is something you (should) do for the love of science, not for just getting a job.
Designed to grind out more CIS teachers (Score:2)
Re:Designed to grind out more CIS teachers (Score:3, Funny)
Watered down CS degrees (Score:2, Insightful)
Common Question (Score:5, Insightful)
I'm personally more in the second camp. I think that there are vocational schools for those who want to learn the vocation, but those skills will need to be constantly updated. I think that what you learn in college (as opposed to vocational schools) should be applicable to more fields than just the one that you learn and that you should be able to apply the lessons beyond what the curriculum specifically teaches.
Essentially, if you want to learn the theory of how databases work and know how to write a database you're taking the right sort of classes. If you're wanting to become a DBA, you should really go to a vocational school.
Re:Common Question (Score:3, Insightful)
I'm not saying the courses should be vocational, but students should at least have one practical programming course per semester so that by the time they graduate, they have three years or so of continuous programming exp
Practical Courses tend to be write-test-and-forget (Score:5, Insightful)
CS != vocational training (Score:2, Interesting)
I wouldn't worry, though, as most everyone else is going to be coming from this "wrong" program as well.
my experience (Score:2)
I liked the second job much more and it paid a lot better.
If you ever want to get into the business side, take all the econ you can get. I'm now at a top 10 law school and THANK GOD I took some econ or I would be toast.
He is pretty much right (Score:4, Insightful)
It's ok... (Score:2)
My schooling was kind of a joke, but job experience, GPA, and activities participation helped me land the job I have now.
Good luck!
He's a nitwit (Score:2)
There are numerous jobs available in high end, research grade computing. There may not be as many as there are CS graduates (for one thing many essentially require an advanced degree, as well,) but they exist, and they make heavy use of the cutting edge stuff, particularly what I do, which is in Biology.
That said, if a particular employer wou
Jobs aren't all. (Score:5, Insightful)
Now, you can do all of these things without university, but you've got to be very driven and interested in what you're doing. Interest and ambition to contribute more than just labor is the biggest factor in my experience. Jesus isn't remembered for being a carpenter. Ghandi's not remembered for being a lawyer.
shows you're smart (Score:2)
I teach physics, often to biology majors who think it's irrelevant to them (even though biology is based on chemistry, and chemistry is based on physics). If they can do well in my class, it says something good about their intellectual abilities. And anyway, what about the person who never
Education vs. training (Score:5, Insightful)
In the decades of your career you'll work on totally different subjects and will have to learn new programming languages and techniques. Knowing how to learn these "new tricks" is what distinguishes an educated person from a trained one.
Learning theory while using "academic" languages, which nobody uses in "real life" will be very useful... You will be able to pick practical things up quicker and there will be no shortage of that later in life.
CS stands for Computer Science (Score:2, Insightful)
Theoretical better than vocational (Score:2)
But he was wrong. While Novell still exist, Novell networking as you might have recognised it in 1995 is all but dead, whereas the theories and paradigms I learnt during the degree still serve me well.
And that's just one example.
Re:Theoretical better than vocational (Score:2)
So it was the flavour of the time, but the idea is that principle is taught along with the application.
However, I come from a slightly different branch which had a good deal of focus on embedded systems. (Design, theory, logic, electrical.. the whole mix... wildly useful to this date)
Here we go again... (Score:2, Insightful)
I'm glad people like you still exist... you wouldn't believe the number of students who whine to me that computer science courses are "useless". They want courses like "How to program for Windows XP" and "How to install network drivers"....
The analogy isn't quite apt, but I'll use it anyways: taking a computer science degree to become a line programmer is liking taking a physics degree to learn how to operat
BS (or more) in CS can open (or close) doors... (Score:2)
They've all gotten jobs in the area, but aren't particularly happy with them.
Not that you'd expect my degree (MS in CS) to have anything to do with my job (systems administrator), but it does. My MS was in parallel computation, and now I manage a supercomputer. The degree has been useful: good for trac
Do you want to be a code monkey? (Score:2)
If you actually want to be a serious programmer/designer, get a strong grounding in CS - that means data structures + algorithms, automata, numerics, compilers, OS design, etc. Know C++, Lisp, and a functional language.
So DZ doesn't want programmers who know how to write a compiler? Great, on his next big project, he'll wind up with a system with several embedded a
This has already been answered perfectly before (Score:2)
There seems to be a disconnect (Score:2, Insightful)
This seems to be a common occurance. My alma mater offered a CS degree which was actually more of a software engineering degree. Sure they offered courses in AI and more scientific branches, but I learned more practical programming than anything
I believe this confusion comes from the fact that college
Two years or Four years (Score:4, Insightful)
On the other hand, if you find yourself asking deeper questions in class, and instructors either not able, or not willing to take the class time to answer, maybe you should go to a 4 year after all.
I've used very little of my B.Sc directly in the last 12 years. But I can't count the number of times that something I learned has been very important to what I do. I also have a better perspective. People without a broad background tend to focus on solutions in their knowledge domain. People who understand how big the domain is can look outside it.
XML? Good grief! What do people like me who finished school before XML even existed do? Cry that we missed out? Or just learn it on the job, like every other new technology that appears after graduation day? The cutting edge is a moving target. If you try to aim for it, you'll be out of date by the time you finish. If you build a strong background, you'll be sharpening the edge.
Sure, there will be employers out there who expect to already have experience in some obscure specific software they use. But there are those willing to treat coursework as experience. 2 years in the workforce, and it will be irrelevant.
One thing I will say, is that you should round yourself out with some electives such as: business, economics, accounting, law, etc. A lot of people can write code. Not everyone understands the business reasons behind the code.
Couses to pick (Score:2)
Otherwise, yeah, what you learn in school isn't the most relevent to finding jobs. That's why it is most important that you get an internship or failing that contribute to an open source project.
Classes just don't give you the opportunity to work on projects of an acceptable scale to be real experience.
Theory of Computation can actually be a fairly useful course. Much more so that I tho
The key word is... (Score:2)
If you want a "job" then go to a tech school. University is for people interested in advancing a field of study.
One of the biggest problems with the education system is the massive influx of people who don't care about education, but about training.
On the other hand, if you actually care about algorithmic efficiency and want to work doing CS research, say at Google or any other lab, then these courses are indeed useful for "getting a job" -- or rather, starting a career.
There are a few questions
Looking back over 30+ years (Score:2)
Very few of my classes turned out to be useful right out of school. However, the ones that I use most now are the ones I thought would be least useful at the time. Those theory classes don't do you any good right away, but they're utterly indispensible as a foundation for staying current for the rest of your life.
I promise you, the vocational stuff will all be in a landfill fifteen years from now, bu
Make sure you learn how to WRITE! (Score:5, Insightful)
Many times your department or project will live or die based on how well you write your reports and memos. And your user base will love or hate you depending on your ability to clearly communicate - at their level and from their perspective - how to use whatever you are running.
Bzzz, wrong Dan Zambonini (Score:3)
Dan Zambonini basically wants things learned on the job to be placed in the classroom. I have learned things like test-first development, extreme programming, system engineering, etc. where I should be... on the job. Think of Computer Science like law. You don't spend three years in law school going over courtroom procedure (because not every lawyer ends up in a courtroom for starters). Instead, you study cases and build up a toolkit of knowledge which you can then apply later in whatever environment you land in. Same with CS... study the concepts and learn how to think. If you know how to solve problems, then you can more easily learn the mechanics of programming.
If you want a "trade school" education... (Score:3)
As someone who has made a nice living developing computer software, overseeing software projects, *and* playing the piano (!), my liberal arts education (math major, music minor) came in very handy. If you want to specialize, to it in your graduate degree.
CS degrees are mostly useless. (Score:4, Insightful)
One of the nastiest problems in the IT industry is a near-total lack of entry level jobs. If you show up for an interview that requires a CS degree, but some 18-year-old who can code circles around you and has been working a help-desk for six months also shows up, he'll often get the job.
If you're going to stick with CS and want to get a job, here are a few resume builders to keep in mind.
- Do work study helping the sysadmins manage the networks, or at least helping inept students in lab classes.
- Find a good internship every single summer.
- If you program, do useful work on worthwhile open-source projects.
- Go ahead and get a master's degree immediately upon finishing up your BS. Then you become a serious computer scholar, and not just another kid who got a CS degree for the money.
Dan is wrong. Those classes are key. (Score:3, Insightful)
Likewise, Computer Science Majors don't have super-specific classes. Instead, they teach you the things that you wouldn't think to learn on your own. Fundamentals that make all your work as a compsci major easier. Having a solid understanding of algorithms, what's slow, what's complex, and why has helped me produce better work many times.
If I were in charge of hiring and I had a developer position open, I probably wouldn't hire someone if their school curriculum consisted of the classes he listed. Tech and code come and go, but fundamentals last forever.
Besides, if you can't learn that stuff as you go, you're not suited to a career in computer science. Only motivated and fast learners need apply!
It's a bit like Art (Score:3, Interesting)
What's worth it is learning stuff that would take you a lot longer (like maybe never) if you had to do it yourself, or interesting things that you would never have thought of learning - never knew was there to be learnt in the first place. So what if it seems "Theoretical" only.
If I were an employer, I'd ask you what projects you'd recently done for fun, not because you were told to or forced to do by your course or previous employer.
If you call yourself an artist and the last time you drew something was 3 months ago as part of your college course, well that just isn't very convincing. In contrast, you're a pretty good artist if you're absentmindedly doodling a decent caricature of me during the interview ("right brain" just has to do something whilst "left brain" is talking to me).
Same goes for programmers. I'd expect your college to teach you the theory stuff that will remain true for decades at least - algorithms, information theory etc. But I'd expect you to mess around with current stuff too, on your own, just for fun/interest - it doesn't have to be very much, and nowadays most stuff is just a few google searches away.
Oh yeah, it's fine if you don't know the fancy tools/buzzwords in the industry. But if you can't do the programmer equivalent of using a "pencil" and sketch something passable, there are plenty of cheaper people in India who can and _will_.
Saying you know UML and all the buzzwords won't be as compelling to me as you actually having written something interesting which you can describe and explain to me in the interview what bits you think are nifty.
Anyone can say they know some buzzword and regurgitate the relevant keywords and phrases, and stick that in their CV. If people needed that, they should use google. If they only need just a bit more AI, maybe they should outsource
However, I'm not an employer at the moment, so maybe you should go with the flow, and listen to that buzzword guy
Dan doesn't get it (Score:5, Insightful)
For one thing, the "programs" Dan is talking about are primarily things that I've discovered through years of experience (for example, real world Database Design), or things that I've picked up in a weekend over the course of my employment (for example, a second 'Big' language, a scripting/'agile' language or two, XML (and why it's actually a pretty terrible file format), and common protocols).
But they all share one thing in common: the courses that Dan are suggesting would be great at somewhere like ITT Technical Institute, or at Devry "University," but they do not belong at an academic institution--by and large. The things he is proposing are largely vocational. They'll make for an okay programmer, and probably only a okay programmer in one field. They do not make a well-rounded computer scientist, nor do they help you out when you decide that you don't want to do database design anymore, you want to write commerical shrinkwrap software instead.
My well-rounded CS education has allowed me to run the gamut of employment in computer science related areas. I started out in Telcom, moved to commercial shrinkwrap, wrote several video games for very large video game publishers, and now I design graphics hardware for the market leading graphics chip company.
Which of the courses there in Dan's suggested curriculum are going to allow me to do all of that? I'll give you a hint; they aren't there.
Without advanced mathematics (Calc II, Linear Algebra), I would've never been able to do graphics programming, which would've kept me out of the commercial shrinkwrap business (where I did image editing software). It would've further kept me from doing 3D grapihcs applications, which would've kept me out of the game industry as well as my current position. Without Advanced Data Structures, and Automata theory, I would've been unable to write code that was efficient enough for the high performance needs of the games I worked on.
In short (too late), Dan's proposed course load (of bullshit) would lead you to be a moderately acceptable programmer. You would be able to make a living, but you would always be one of the first to be laid off. Get a real education from a real institution of higher learning, and bring me good fundamentals. Because for pretty much all junior level positions, it's on-the-job-training. Without good fundamentals you will be unable to learn quickly enough to be of any use to an employer.
Take the theory, but don't pass on the practical. (Score:5, Insightful)
I've been out there with a CS degree for over 20 years. Yes, the theoretical classes are very important. A good mathmatical CS backgroud will give you a leg up in the long run. As others have said, it is important to learn the theory and why different approaches, OS's and languages exist. It will help you dig into the practical topics as programming languages, platforms and operating systems change. It will let you keep up with different philosophies of how to design a system, and maybe you'll understand why the flavor of the month is popular. Hopefully you'll learn to not be dogmatic.
Being dogmatic and a lack of flexibility has you using the equivilent of a hammer for everything. Very soon that will cause a career change and not by choice. Employers want people with a full tool belt. People who know how their tools work and why they use them. They also like to see that you change your tools as things evolve.
Where it is offered, takes classes where design or working within a team is required. It will give you an idea of programming within a team. People skills are important in the real world.
Do not pass on internships, involvement in open source or school projects. Anywhere there is a team of people writting code that will be used in a production environment by more than a few people. This will give you the leg up when you graduate. To say that you worked on code that is in production somewhere. Even if you can show you fixed a bug a month in firefox or apache. It shows you wrote peer reviewed code. You have code in production.
Use the internships to find out what you want to do. Try to get an internship with different companies each summer. Different evironments. Different types of projects. Different industries. Do not choose based on the cool company. Some cool startup doing something new might be cooler than google or microsoft.
High school counselors are failing our students... (Score:3, Interesting)
The courses you listed are indeed useless for "getting a job" as they are in nearly every undergraduate major at major universities. And, contrary to what most high school students are told, the more elite the university, the less your degree will be helpful to you in just "getting a job."
Universities do not claim, and do not intend, to create workers. They do not provide "job training." They are not designed to find you a place at a company, but rather to give you the skills that you need to establish for yourself a place in the world.
Mere job-seeking and work as "an employee" requires that you limit the authority that you take for yourself and your actions; job seekers must order their universe using the already existing structures of the marketplace and the companies within it, and must order their daily lives and work according to dictates from above, in whatever company the end up working for.
Universities by contrast, in particular the elite ones, develop individuals who transcend marketplace, corporate, authority, and governmental structures. Their goals are to produce amazing people who will someday create those structures for others (i.e. the job-seekers and employees) rather than efficient people to populate them.
Many people are not suited to life outside of the employer-employee relationship. It implies a higher level of initiative, a greater amount of responsibility, a greater amount of culpabilility, greater stress (and possibly uncertainty) in life, and the requirement that you always think globally, flexibly, and adaptably, across a number of fields, criteria, consequences, and fronts, rather than just locally within your current task or field.
Young slashdotters: if you just want "a good job that pays well" with a minimum of other responsibilities, entanglements, or with guarantees about wages, responsibilities, and futures, you should be thinking about trade schools and vocational schools, not university, especially not top universities.
You simply do not go to a top university "to land a better job." Unfortunately, too many students do just that and then find themselves sitting around afterward unqualified for "jobs," unable to find "work" (because they are actively looking within the existing marketplace and corporate infrastructure of society, which universities by and large do not address), and saddled with debt.
For the right segment of the population -- bright, creative, self-directed, wanting to change the world rather than to work in it, willing to be flexible and to forego promises and stability -- university is precisely what the doctor ordered. For the 75% of the population that doesn't care what they do so long as it pays well, gives them a 401(k), health insurance, and the chance to climb the authority "ladder" within a single company, university is a colossal waste of time and money.
"Getting" a job (Score:4, Insightful)
Wrong (Score:3, Interesting)
* A Computer Science degree is not primarily about getting a job
* Understanding theory does in fact make you a better, and more employable, programmer
Technology versus science (Score:3, Interesting)
But it's not science. It could be argued that a typical computer science curriculum doesn't teach much science either. Quite possibly the coursework needs to be strengthened, though I know from my modest contacts with curriculum development that in practice it very much depends on how fast students can absorb the material and consider its implications. Faculty discuss this challenge all the time. To get the basics of computer science in four years is, not surprisingly therefore, about the same process, and about as hard, as doing the same thing in chemistry or any other scientific field.
So it seems inevitable that improvements to the computer science curriculum will move it some distance further away from Zambonini's shopping list than it is already. Science, after all, is a systematic discipline for discovering the nature of the universe.
I notice that Zambonini is not in the least concerned about that. So why look to a science degree to deliver something that's not in fact about science? You're shopping in the wrong store. Learning how to program, for example, is like learning how to operate a mass spectrometer. Of course you have to master the tools, but in science that itself is strictly not the goal. In a technology diploma it pretty much is.
Yes I'm posting twice, but it's because... (Score:3, Informative)
Our university teaches software engineering. The professor who teaches most of the software engineering courses is an idiot. For my project, my group and I wrote a pretty kick-ass app with some pretty kick-ass code. How? We snuck in some agile methodology, which just seemed perfect given the size of the group and the size of the project. Even though our project was the best in the class, we got a C because the specifications weren't complete, and she wasn't convinced that our automated tests would really test the code. (The other groups who got A's for testing wrote some very non-specific paragraphs about how they might test their code. None of them actually did any testing)
What this proves to me is that software engineering is easily the most useless discipline in computer science. I have never had a good experience with it. I've never known anyone who said that software engineering really makes things run smoothly. It's a business-centered/management-centered unrealistic approach to software development. It may make your boss feel all warm and fuzzy, but it won't get the software out the door on time, nor will the developers have any degree of confidence in it.
Computer Science is very relevant (Score:3, Insightful)
It's the *CONCEPTS*! Computer Science teaches the concepts behind the programming and why you should do certain things. It teaches you to discern for yourself how complex systems act. People who have certificates have reduces this profession to something most people think of as a "vocation" which is a crying shame.
A vocation is something that people learn to do without much understanding of the science or technical justifications behind what they are doing? Do you think a mechanic knows the physics of how a car works down to the smallest level? No, he only knows that which he needs to get the job in front of him done. And guess what, when he needs to learn about a new car he has to go back to school to learn about it.
Computer Science gives you the tools you need to get the job done AND it provides you with the knowledge you will need in the future to adapt because you have a deep undestanding of how things work, instead of simple rote memorization.
Understanding the concepts is what give Computer Science and, indeed, any science or engineering discipline it's power over a simple "vocation."
Don't listen to the guy who wrote the article (I already forgot his name) he sounds like he doesn't know what he's talking about.
Later, GJC
Bleh, you can learn to program on your own (Score:3, Insightful)
Re:BS degrees are more vocational (Score:3, Insightful)
Re:BS degrees are more vocational (Score:3, Insightful)
BS is an excuse to make bad decisions about partying and sex.
MS is for recovering some dignity and respectability.
PhD is for copping a gravy teaching position.
Re:BS degrees are more vocational (Score:3, Interesting)
MS = More Shit
PhD = Piled Higher and Deeper
But seriously, a PhD is no longer a ticket for the gravy train to tenure town. Tenure track faculty positions are incredibly hard to get, and if you do get one, you still have to bust your ass for a number of years doing research, writing grant proposals, etc. I took a course with a faculty member who was about a year out from getting evalulated for tenure. We had various homework assignments, and they were due at midnight on the due date. I fi
Re:no (Score:5, Insightful)
Re:no (Score:5, Funny)
What are you talking about? I'm a Helpdesk Manager, and I already get treated worse than the janitor.
Re:no (Score:5, Interesting)
While 2 years ago, there were tons of CSers unemployed, so were the EEs and the CEs. Now, I do not know of any CSers that are unemployed. I do know of a LOT of CISers and vocational people who are unemployed. I also know a number of them have moved on to other professions because the industry has shrunk.
Basically, the CS/CE gives you the ability to do anything in the software world. The CIS/Vocational gives you the ability to do just what you learned. And back in the 90's, the CIS world was learning mainframes with Cobol, RPG, and PL1. Is that were growth is? nope. Has not been for sometime. Can these people move easily to Microsoft (where the most jobs are currently), or Linux (where all the growth is)? Nope. They do not have the underpinnings to make the jump.
Re:no (Score:4, Insightful)
I'm certainly not saying that you can't pick those things up from a vocational course, but you'll be doing it on your own. It's always a tradeoff between time/cash and general well-roundedness. Personally, I got my BS because I wanted the flexibility.
The main point is that vocational programs will teach you how to code. A BSCS will teach you how to learn. It doesn't take a genius to figure out which is better in a rapidly changing field.
Touch Typing?!? (Score:4, Funny)
CS is your time to master theory and basics--the entire rest of your life will be spent learning languages X, Y, and Z, and the latest trends...
Mike
he does have some points... (Score:5, Insightful)
I see nothing wrong with the CS curriculum, however, a student should actively pursue the following weak points which Dan pointed out in his article:
Re:no (Score:5, Insightful)
This post should win dumbest troll of the year.
I used to have this debate back when I was in school with people. In the school I began my degree there were two programs, a computer science program and a more "practical" computer information systems.
In Computer Science we learned the theoretical background, we learned how and why computers work as they do, and more importantly - how to learn. Language and skills were a way to re-enforce this theoretical base.
The CIS program learned the skills of the day. You know what one of their courses were? "Programming in Visual Basic" How many of those people taking that course 7 years ago do you think are still finding gainful employment programming in VB? And how many had to go back for skills upgrading?
I remember one summer on coop, two CS students, one CIS student. It was a help desk job, nothing exciting. But a call came in to help a user with Word. The response from the CIS person, "We didn't learn Word, we learned Word Perfect." So? If you had the theoretical background you could figure it out, find the relivant connections between the two.
As opposed to myself, my primary job these days is programming in perl. Do you think I was ever "taught" perl? No, we did C, C++, Java, etc. But I had the background to learn it on my own, because I learned how to learn, I learned how languages worked through courses such as "compiler design."
So are you in the wrong program? Depends, do you want a long term job or have to retrain every few years? People like Dan Zambonini are absolutely wrong, things like "learning XML" can be done from a book if you know the relivent background about languages and such schemas. I know that's how I learned (alright, working for the 'father of XML' for a few years certainly didn't hurt...).
Re:no (Score:3, Interesting)
Re:no (Score:3, Insightful)
My undergraduate studies (which started in the mid-80s) basically taught me Pascal, Modula-2, and Oberon (guess which school I attended
On the other hand, I wouldn't be able to do my current job without Linear Algebra, and there are many days I wish I'd have paid more attention in all my math classes.
Re:no (Score:3)
As someone who teaches Linear Algebra, I'm very curious -- what kind of job do you have? (I figure it may be another motivator for my students.) And don't say you are a Linear Algebra teacher.
It all boils down to (Score:3)