Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Education

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?"
This discussion has been archived. No new comments can be posted.

Computer Science Curriculum in College

Comments Filter:
  • define your needs (Score:1, Interesting)

    by Anonymous Coward on Sunday September 11, 2005 @11:34AM (#13531708)
    First define your needs/goals. Are you wanting a coder position? Research? Once you've defined what it is you actually want to do with your education, then you can figure out if the courses will help you reach your goals.
  • by cheesekeeper ( 649923 ) <keeper@ma[ ]om ['c.c' in gap]> on Sunday September 11, 2005 @11:37AM (#13531727) Homepage Journal
    Computer Science is the science behind software and computer technology. It's not really meant to be practical to most of what goes on in the professional realm. If you're not meaning to do research or interesting things like AI, creating computer languages, and the like, then, yes, it's the wrong program.

    I wouldn't worry, though, as most everyone else is going to be coming from this "wrong" program as well.

  • Re:no (Score:5, Interesting)

    by WindBourne ( 631190 ) on Sunday September 11, 2005 @11:59AM (#13531864) Journal
    He is in the right program. A good Computer Science has a good to great theoritical underpinning. Look, the design paradigms will change. So will OSs. And the languages. and the DBs.

    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.
  • by IWorkForMorons ( 679120 ) on Sunday September 11, 2005 @12:04PM (#13531895) Journal
    Try explaining that to the numerous companies in and around Canada's "Tech Triangle" (which happens to include Waterloo, Ontario, the home of the supposedly famous University of Waterloo's CS program). I went to Conestoga College [conestogac.on.ca], which has a very good, very relevent Computer Programmer/Analyst course. While it's a programming course and gives you a very good basis, it also relates it to the business aspect of the world. I came out knowing how to program complete systems end-to-end regardless of the language, and can pick up most languages fairly quickly. Even the evil RPG [wikipedia.org] . And I've had extreme difficulties getting a programming position outside of insurance companies.

    The one incident that really burned me was at a job fair. I walked up to a booth for Business Objects [businessobjects.com], a company that creates add-on tools for other software. From what I saw, they used VB. I thought to myself, "I think I could do really well here". So I went up to the guy. The *FIRST THING* he asks..."Where did you go to school?" I say "Conestoga College" proudly. He says "Sorry, we don't take college students. University only." I spent the next 5 minutes pointing out all the experience I had creating software relevent to his company. He simply dismissed it. There are many other examples of the bias towards university students, but that was the one that pissed me off the most. Most companies, even software companies, have the idea the if you went to university, them you simply *MUST* be better then a lowly college grad.
  • by tmortn ( 630092 ) on Sunday September 11, 2005 @12:16PM (#13531960) Homepage
    Well then you are arguing symantics about what it means to 'learn' a language. Most fresh grad CS monkies ARE capable of picking up basic syntax of a new language in an afternoon. They are capable of turning out working code. Whether or not it is perfect and completely optimized code for the particular solution in question is an entirely different matter and I doubt if you ask them very many would make the claim that they could. But when a CS major says "I can learn it in an afternoon" all they are saying is my knowledge is not locked into a particular coding solution. Assign them a task in a specific language and they know how to get it done even if they have never used it before.

    That is not a useless skill. It is not senseless boasting. It is what CS is all about and it is largely seperated from the mechanics of actually churning out code.

    That said, current CS is so fricken divorced from the real world application of computers and programming it is not even funny. It is rapidly getting to the point where it will be entirely divorced from reality. For example I had teachers that still thought the number of times you compiled a program was an important factor. The reality of modern compiling/debuging simply had not registered with them yet. However, there is a middle ground between vocational programming classes and the pure theory BS of most CS course material. Putting the theory to work on real world projects would be a good start and it never ceases to amaze me that CS departments rarely seek out such challenges for their students.
  • by i7dude ( 473077 ) on Sunday September 11, 2005 @12:23PM (#13532004)
    no matter how many times this question gets asked...the answer is always the same; if what you care about is remaining in academia(sp?) and/or doing pure research then getting a cs degree and an advanced cs degree are all you may need (and as a result you'll probably end up getting the better part of a undergrad math degree racked up along the way).

    but, if you wish to join the corperate world of working monkeys; you really need to supplement your education either with a business or engineering minor or second major of some kind.

    i'm sure this will sound like every other post that has come before me...so i'm just adding to the mess.

    dude.
  • It's a bit like Art (Score:3, Interesting)

    by TheLink ( 130905 ) on Sunday September 11, 2005 @12:31PM (#13532058) Journal
    So what if the current job market for artists/designers requires you to know Photoshop version X, Macromedia, Pantone, etc. You should be able to learn that stuff in a timely manner. But if you can't draw and aren't creative in the first place, maybe you're in the wrong field - it might take a bit too long to teach you that eh?

    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 ;).
  • by Fnkmaster ( 89084 ) on Sunday September 11, 2005 @12:40PM (#13532107)
    While I agree with you, the programmers I've had work for me with no theoretical background are usually pretty bad programmers. The good programmers usually had a pretty strong theoretical background. Of course, it's not a necessary and sufficient condition - I have met a few with strong theoretical knowledge and poor practical programming skills.

    But I've almost never met a *great* programmer (i.e. somebody who can independently design and develop complicated solutions and implement them efficiently) without a pretty strong theoretical background. That doesn't mean you absolutely *need* a formal education, some people are great autodidacts and can learn even theory on their own, but a formal education in CS is a good way for your average bright person to achieve this goal.

    Of course, a good liberal education ought to be a prerequisite for citizenship and your other responsibilities to yourself and mankind. College isn't vocational school, and if they teach you properly how to learn and assimilate information, then picking up the skills you need for a particular job should be a piece of cake.
  • I would agree with the usefulness of a Data Structures Course. It just so happens that I started a Jr Development (Java mostly) position recently and I was not a CIS/CS major (career change from SA/Unix).

    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 ..." The theory background would have made this a lot easier/faster, rather than jumping right into a specific language.

    I definitely envy those who took any kind of data structures course.
  • by aussersterne ( 212916 ) on Sunday September 11, 2005 @02:04PM (#13532589) Homepage
    ...by telling them that you go to university "to get a better job."

    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.
  • by smallfries ( 601545 ) on Sunday September 11, 2005 @02:07PM (#13532605) Homepage
    This isn't really true at all. Most CS degrees have a mandatory project in the final or penultimate year. Similar to engineering degrees, this project forces the student to specialise in a particular area, and gain experience of a large-scale project by working in a team.

    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 experience for their first job. Most groups tend to write games (as they're more interesting) and the quality that they come up with is suprisingly good.

    The areas that come up in CS that the article poster was complaining about; vision, graphics etc are the domain specific areas in CS. In particular they teach students to apply the same core set of maths and programming skills to different areas. I don't think that this approach is that different to engineering. But then, at my uni, the CS department is in the engineering faculty, rather than the maths faculty...
  • Re:no (Score:3, Interesting)

    by danhirsch ( 904306 ) on Sunday September 11, 2005 @02:22PM (#13532695)
    I couldn't agree more. Allot of software companies hire CIS grads...mainly because they are cheaper than full CS grads. What happens when a software company retools and moves on to new languages? Either the employees 1) Move on to other companies or professions out of frustration with having to learn a new language, 2) Get canned because they are no longer in need, or 3) Ante up and push through to learn a new language. Unfortunately, 1 and 2 are usually the direction things go. CS grads on the other hand have the theoretical knowledge to move between languages with a fair amount of ease. CS grads are the ones that don't rely on the fancy gui's or pre-built code snipits and controls to do all their work...they know how to do this in code....while many CIS's do not. For me...I can look at pretty much ANY modern language and tell what its doing...get a syntax reference book, and start editing. CIS grads that I know...would just freak...because they were taught more business skills instead of theory. I don't discount the CIS degrees, I just don't think they are very practical for the true-blue programmer or shall I say "engineer". I have recently been struggling on whether I should push through and get a masters in computer science or take the easy way out (for me at least) and get a masters in CIS. I keep having to remind me of these facts...over and over... CIS curriculum teaches "Java" or "VB", while CS curriculum teaches "Data Structures" and "Operating Systems". Sure..languages (c++) are taught in these classes..but the focus is on language structure...not the language in particular.
  • by MagicDude ( 727944 ) on Sunday September 11, 2005 @02:25PM (#13532710)
    BS = Bull Shit
    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 figured that meant we had to slip our assignments under his door before he came in the next morning, but more often then not, he would be in his office at midnight working. So it does take a lot to get tenure, and also consider that a university position probably isn't going to pay as much as a job in industry.
  • Wrong (Score:3, Interesting)

    by Tom7 ( 102298 ) on Sunday September 11, 2005 @03:02PM (#13532902) Homepage Journal
    I doubt I'm the only one saying this, but let me reiterate:

    * A Computer Science degree is not primarily about getting a job
    * Understanding theory does in fact make you a better, and more employable, programmer
  • by jwiegley ( 520444 ) on Sunday September 11, 2005 @03:10PM (#13532935)
    Disclaimer: I am a university professor in CS. So, clearly, I believe in the value of a university education. But I'll try to explain why...

    "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:

    1. Never during my education in CS did I expect to become a programmer and systems administrator for a Nortel phone system. But it did happen. I was ready for it and saved my company a lot of money in consulting fees because a dedicated technician didn't have to be called in to fix little issues.
    2. Second example: One of my students obtained a job with an aerospace company and it was my responsibility to monitor them for a year to make sure everybody was happy with the arrangement. I asked what they were working on and they replied "debugging HPL programs. I've never even heard of HPL! How am I suppose to know this?". I said "neither have I. How are you doing at it". They said "Fine."
    They were "fine" because they had the necessary theory fundamentals squared away. I would trust this student to pick up anything new and previously unknown in a short time period. In general, I would trust university educated people to have this adaptability more than vocationally trained peopl.

    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.

  • by cagle_.25 ( 715952 ) on Sunday September 11, 2005 @03:13PM (#13532952) Journal
    1) "Having both" can mean something as simple as getting a CS degree and having a junior-year or junior summer internship in your field of interest.

    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. Granted, the profit motive isn't the only consideration, but still...

  • by LazyLawyer ( 610380 ) on Sunday September 11, 2005 @03:14PM (#13532958)

    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?

  • Comment removed (Score:2, Interesting)

    by account_deleted ( 4530225 ) on Sunday September 11, 2005 @03:28PM (#13533026)
    Comment removed based on user account deletion
  • by Nasarius ( 593729 ) on Sunday September 11, 2005 @03:53PM (#13533163)
    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.

    I don't know about C#, but I learned Tcl and Python in about two days each. I do the following:

    • Learn the language philosophy. Just get a very basic feel for what its creators intended, dynamic/static weak/strong typing, how it handles polymorphism and inheritance, etc.
    • Learn the syntax.
    • Read the style guide. Most mature languages have a semi-official style guide. It will usually save you a whole lot of time and frustration

    That takes maybe 3-5 hours. The rest of the time is spent coding with the API reference at your side. I'm only just started my third year of a CS degree (along with Chemistry).

    The fact of the matter is that most languages you'll be using are object-oriented imperative languages. Once you've played with languages like ML and Prolog, you'll realize how similar they all are. The "intricacies of writing code" are mostly design and algorithm choices. Figuring out how to execute the design in your language of choice is trivial.

  • by starfishsystems ( 834319 ) on Sunday September 11, 2005 @04:05PM (#13533228) Homepage
    The shopping list that Dan Zambonini has come up with is fine, as far as it goes. I'd consider someone who'd mastered that list to be well qualified as a computer technologist. He's chosen subject matter which is widely applicable and technologically stable. So this could be an appropriate curriculum for a good technical college. Most colleges, in my experience, fall far short of satisfying this list, so I'd agree that there is definitely room for improvement.

    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.

  • by alicenextdoor ( 910558 ) on Sunday September 11, 2005 @06:22PM (#13533813)
    It may be because, unlike math or physics or chemistry... there's really nothing to "discover". There's lots to invent and improve, sure... but there's no real ingrained "laws of computers" that are woven into the natural fabric of the universe. There's no Plank's Constant or equation balancing or Realtivity. There's nothing that's tangibly abstract (???) that's just THERE to explore, discover and derrive.

    On the contrary, there's a whole theory of computation that is far from fully understood. Godel's incompleteness theorem, Turing machines, the Halting problem, computational complexity (as opposed to trendy modern SFI-style complexity), issues surrounding self-replicating automata...some of the greatest minds in science, never mind computer science, have spent serious time on understanding what is computation and what are its abilities and limits. I'm sure there's room for one or two new thinkers.

Neutrinos have bad breadth.

Working...