The Continuing American Decline in CS
abb_road writes "America's recent dismal showing in the ACM Programming finals may be more than just a bad year; a BusinessWeek article suggests that the loss is indicative of the US's continuing decline in producing computer scientists. Despite the Labor Dept's forecast of a 40% increase in 'computer/math scientist' jobs, planned CS enrollments have plummeted from 3.7% in 2000 to just 1.1% last year. Other countries, particularly China, India and Eastern Europe, are working hard to pick up the slack, with potentially serious long-term effects for the US economy. From the article: 'If our talent base weakens, our lead in technology, business, and economics will fade faster than any of us can imagine.'"
As a student at a major university (the University of Michigan), I must say that our CS department is extremely lacking. Computer Science must be taken either in the form of Electrical Engineering and Computer Science (EECS) - where CS is combined with EE (lots of useless info) or through the School of Literature Science and Arts (LSA) where the CS program is more direct, but students are required to take the EECS classes. One of the biggest problems is the use of the most basic programming class as a 'weeder' class instead of an actual learning tool. The class is made excessively difficult to weed out students (even though the students may simply take more time that 2 weeks to get acclimated to programming). The problem might be with curricula.
Computer Science is exactly that, Science.
You don't go to school for 4 years if you want to go be a code monkey, just like you wouldn't get a Ph.D. in Chemistry if you were going to enter pharmacutical sales. A Computer Science degree allows for study in the area of new algorithms, new computing paradigms (grid, neural net, et al.), and other RESEARCH oriented goals.
Computer Engineering on the other hand allows people to gain the skills needed to participate in industry, leading teams of developers and (hopefully) using methodologies taught in school.
Code monkeys go to ITT Tech for 2 years, get a cert in Java or something, and then go on to be programmers. The reason it's easy to outsource programming is because almost anyone can do it for cheap. I'm not trying to undermine the responsibility of programmers in any way, but when you can get a guy for $10,000 a year who has a full fledged degree, vs Joe Nobody from ITT Tech, you're going to do it and save the big salaries for the managers (not PHBs, but smaller scale tech managers with degrees in software engineering).
This is misguided. H1Bs arent the problem, and it is specious to suggest that they are. The quota for h1bs at its peak was less that 200,000 per year. This is a tiny drop in the bucket given the size of the IT industry in the US, and so small as to be insignificant with respect to your salary.
In fact, had we *increased* the number of h1b's, we may have limitted the number of jobs being shipped offshore to places like India. In 2000 there was a shortage of good programmers - and a limit on h1bs, so the marketplace found a way. Although there are some exceptions, the vast majority of h1bs here stay here and become permanent residents and often American citizens, either way paying our taxes. A job that moves "offshore" has no such effect.
What causes the decline in enrollment is the hype associated with both of these effects - in large part they are small in comparison to the size of the IT marketplace. And if you are a programmer, be rest assured, good programmers are hard to find no matter what country you look in.
Hear, hear!
I have also participated in the ACM programming contest (only got to regional competition, but it was fun). I had the unusual experience of having a programming-related job while I was still in college, and I can certainly confirm the parent's description of ACM programming contests being far from real-world earning-an-income coding. It's clear when you realize that an 8 to 5 desk job is much different than you remember from the contests in college, but it's really clear when you've already got a programming job and you go to an ACM programming contest.
The really successful coders are the ones that can learn new APIs and languages over a weekend. They're the ones who can communicate with non-technical people. They're the ones who can write a design for an application that will take a team of twelve developers a year to implement. The ACM programming contest compares to real-life CS work in the same way that a lumberjack competition proves a person's suitability for work in the logging industry. In both cases, the two sets of skills (contest vs. real life) overlap very little.
I pity the foo that isn't metasyntactic
I would encourage you to find a niche. Someting hard to send over seas. In my case it is programming, databases and business process modeling for an Env. Engineering firm. If fact, you should take some project mgt. courses and business process modeling courses.
Find a small to midsized company, show them how you can help them apply technology to solve problems. The technolgy, being 'buzz word compliant' is secondary, it just takes a little retraining. And college is all about retraining yourself, right?
Also, if you were in the military you have at least a minimal security clearance. Even if you do not like it, you might want to look at a defense related company to start out. First jobs always suck. Just do it for a couple of years for the experience and then get out.
my $.02
putting the 'B' in LGBTQ+
Disclaimer:: this is purely anecodotal and from one univeristy...
I was a computer science major for 3 years, but was always taking classes outside teh department "for fun". Half of my profs were non-native speakers which made difficult subjects even more difficult. For example, a friend of mine went an entire semester of assembly trying to figure out what the hell a regis was. The professor was simply referring to registers, but never bothered pronouncing the whole word.
In computer architecture, the book came with a cd full of power point review slides. Because the prof couldn't converse in English, she just read the slides offered by the CD. OK, great. But when you don't get what the book is talking about, the review slides/therefore class notes are in the direct language of the book, and the professor can't converse in English-- you are screwed.
My point isn't that CS profs have accents. My point is, Universities aren't hiring based on teaching skills and the students pay for it. I don't need fluent speakers, but I do need someone who can explain difficult concepts in understandable terms.
It's certainly never been "cool" to be a programmer, but for a while there it looked like that was the way to go to earn massive $$$. Dot Com crazyness was in full swing and many of the students who would normally get MBAs tried the CS route instead in the hopes of getting some of that fat venture capital and possibly ride the bubble.
Those days are over (for now) and those students have gone back to pre-law or MBA courses. Also, the fact of the matter is that in a CS cirriculum (like engineering), you're going to work twice as long as your English/History/MBA friends who are always out partying and never seem to study. You'll be taking the "hard" math courses while they're learning how to draw graphs incorrectly in Economics. They'll have plenty of time for shmoozing with girls while you work on two projects until late in the night. When you graduate, they may very well make more money than you (or they'll end up broke and living with their parents, depending on how good their network is by the time they get out of college).
On the other hand, you'll be creating something that will be useful to people. Those guys will often only manufacture bullshit for the rest of their life.
I read the internet for the articles.
The *only* thing I leared from preparing and winning the regionals was dynamic programming. But I actually learned that in class.
The problems are such that there are two skills involved in winning: 1) writing bug-free small programs and 2) understanding the wording of the problem. The first favors asian cultures which teach more by rote and are higher pressure and more exacting.
I don't think that the internationals are translated into the team's native language, but if so that would definitely be a huge bonus for them. English is very vague but also very expressive (or at least how they write the problems is). Chinese for example is not, for instance you don't say 'have you eaten yet?' you say 'eat, no eat?' and you are supposed to understand from context what that means. So, if translated, the problems would really have to explain exactly what was meant instead of being close enough.
I think the loss of Dr. Henry also had something to do with the showing this year. We'll all miss her, that knew her. =(
spoken like a true professor. "those who can do, those who can not teach" I went to three differnt universities and found that every cs course i took was based on therory not experience. it does'nt take 4 to 6 years and 80 grand to learn problem solving, you either have it or you don't. i have been in the industy for over 10 years now and in the first week i found out what you don't know you can learn. i don't have a cs degree but somehow i figured out how to make invisability with a projector, usb cam, and a rendering program. i have been a consultant, sys admin, and consulting business owner. i'm good at what i do and i know plenty of great consultants w/o degrees. (a consultant is the person that does the major projects that you dumb ass can't figure out) and if a company is hiring and insists upon a degree then i say let them hire the monkey with letters behind his or her name.
God Bless America. No, I mean my god not yours.
And then a lot of the nazi scientists came to avoid the Russians or trials for war crimes etc. Both the USSR and the USA got a lot of these scientists to work for them after the war sometimes in exchange for not asking questions about how their research had been focused before...
Out of the last 9 programmers I've hired in the last two years, only two had CS degrees and we had to let them go. One is currently employed at Rally's Hamburgers (guess it was good that he learned how to solve a superset of problems in college). A CS degree doesn't necessarily prepare everyone to be useful. One of my best programmers barely got his GED.
"Few people in a programming environment want to work with a computer scientist. Programmers want to work with other programmers. Performance is not much of an issue to the point that you need a CS to come up with algorithms that are new and unique to the problem. Programming primarily consists of things like inventory, payroll, scheduling, POS devices, and things like that. Sure there are some places for CS people where performance is pushing the envelope like CAD/CAM/games, but those are a small percentage of what is being programed on a daily basis."
This is the most naive thing I've ever read I believe. For instance:
"Programming primarily consists of things like inventory, payroll, scheduling, POS devices, and things like that."
OK? This is all we need computer programming for. This is a tiny subset of programming and these types of jobs are best left to the amateurs (MIS).
"Sure there are some places for CS people where performance is pushing the envelope like CAD/CAM/games, but those are a small percentage of what is being programed on a daily basis."
I don't know, maybe high end Web development? These things are gett5ing pretty complex and the need to know about load balancing (our sites can get anywhere from 10 hits/min to peak at 1,000,000/min), database administration, database access (huge performance figure!), networks latency issues when contacting remote sources for content, etc and the general business logic in the software. Performance in critical in many of these things. There is a huge difference in a user having to wait 3 seconds and 6 seconds for a query. Missions of dollars in difference. This can be covered up with hardware, but any company that prefers to be successful will pay their knowledgeable employees to make it work with less. That's why I get paid. I replace machines.
"If you are a dreamer, a wisher, a liar, A hope-er, a pray-er, a magic bean buyer
I assume that you aren't contracting as an employee of your own corporation. If so, you should be able to deduct education costs as a business expense, up to $5250 under an educational assistance plan. IRS publications 525 and 15B cover that.
I also wonder whether you could take it as a deduction on your personal taxes. Have you spoken with an accountant? Pub 15B under Working Condition Benefits discusses deducting education expenses if they would be deductible by the employee as a business expense, and mentions specifically a test of whether "[t]he education maintains or improves skills needed in the job."
Larry
A lot of people assume that you will maybe get a job for a couple years before you have to train your replacement in a third world country who will make $2 an hour.
I agree with this, but also, that in terms of programming, as languages get more powerful, many developers realize that after age 35, you become too expensive and they can hire someone right out of school to do many of the things you do. That's not to say that this applies literally and a season developer doesn't bring many skills to the table that many companies need. Rather, there aren't enough jobs for super-experienced people.
I have been in the field since the early 90's and as I look around the many offices I have been to, the overwhelming majority of 'computer people' are 30 and under. Granted some go into management, but that still doesn't bode well with engineering-types.
Of the two best young computer scientists I know, one is running a hedge fund and the other is working for a derivatives firm in New York. The young Stanford students I talk to are going into finance, law or bio.
To pick just one example, the Kalman Filter, which is used for everything from radar tracking to helicopter stabilization, relies on linear algebra. And physics gives an excellent background in learning to apply mathematical modeling techniques to real-world phenomena. One of the best (or at least most interesting) distributed version control systems out there, Darcs, was written by a physicist, in the Haskell programming language (the latter of course being based on the lambda calculus, another seemingly esoteric subject which is so fundamental that it really ought to be taught in high school). Darcs is based on a physically-inspired theory of patches.
There's a problem here which was described by Paul Graham as "The Blub Paradox" (in Beating the Averages). Graham writes "But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up." It's not easy to correctly assess that which you do not (yet) understand.
I agree, this is a big part of the problem. This comes from the fact that everything about computers, and particularly software, is so relatively new. As alluded to elsewhere in the thread, you don't get HR people trying to hire mathematicians or even economists for accounting positions - they know better than that. They just don't know better than that, yet, when it comes to programming, particularly in "IT". And this confusion affects academic curricula, too - universities want to satisfy the commercial demand with subjects they already teach, and academic computer scientists don't want to turn themselves into a Java instructors any more than they absolutely have to.
I think that'd be a start. However, I also think we'll eventually find that the tentacles of software are so diverse that "software engineering" is too broad a subject, and we'll end up with a "software school" analog to "medical school" or "law school", where a wide variety of subjects are taught, including theory, engineering, and other topics. I notice CMU has a "School of Computer Science already, and Northeastern has a College of Computer and Information Science, but most other institutions still treat CS and related disciplines as a "department".
Yep. I wouldn't have even considered transferring into the Engineering CS track.
I was actually targetting myself at the L&S CS program. IIRC, there were like seven requirements for declaration: 65B, calculus physics, natural sciences Diff. Eq/Linear Algebra, Calculus, Discrete Math, and Circuits. They strongly wanted you to have 5 of them completed by the time you transferred. Circuits weren't offered at Foothill (but rather De Anza, which is not too far away). I had calculus and natural sciences squared away. Diff. Eq. was proving pretty hard. I hadn't yet taken linear algebra, physics, or discrete math. On top of that, I had to complete my breadth requirements. Normally they don't want you to do this if you're a CS major, but one of the conditions of my guaranteed transfer agreement was that I complete breadth prior to entry.
The real kicker was the fact that my sixteen units of CS coursework wouldn't articulate and I'd have to take them over again. Apparently it was just a big political thing in Berkeley at the time: they wanted everything done from a very theoretical approach, they did everything in Scheme, and they were really difficult about giving other colleges course equivalency. Foothill's CS courses would've satisfied requirements at any other UC, but not UCB. None of the counselors brought this to my attention at the time, but then again, we all know that community college staff, counselors in particular, are utterly braindead.
The upshot of it was that if I worked my butt off and taken a full load the entire time with very little room for extracurriculars or working, I could've transferred only to have to take a year and a half of remedial coursework that I anticipated would be unnecessarily tedious to separate the Big Geeks from the Little Geeks. This would've meant, in the long run, staying on for an extra semester or two in Berkeley, and accumulating another year's worth of debt.
Anyway, I'm not really fishing for sympathy per se. Rather, despite my talents in the subject, the university made it unduly hard for me to get what I wanted, so I decided to major in English instead and program in my spare time. UCB set up red tape to discourage people from getting CS degrees, and it worked. Looking at the L&S site now, it seems like their requirements are less draconian. It's not regret I feel, really. I just feel like I was cheated.
And that is what I get paid to do every day, automate multiple systems so that someone doesn't have to manually move (or transcribe) data from one system to another. I extract, reformat, import data automated every day. Load balancing, of course. It isn't rocket science or anything of similar scope.
I also improve human vs. computer interations every day so that they take less time and/or reduce errors. I analyze the entire process (both human and computer combined) to determine the best course to pursue. I cover the middle ground between incomplete multi-million dollar vendor products often written by very well educated (but sometimes incompetent) CS grads who can't see the big picture to save themselves. Their MBA managers can see it even less clearly!
And I do this all on an AA degree in electronics (and a CS dropout from the early 90s)!
I don't routinely use any math above Algebra or Trig on a daily basis nor to any of my collegues. There is only so much that can be gotten from this math and sometimes the easiest method to maintain is the simplest. When performance has room to spare, the ability to maintain and extend the code is more important than a fancy trig or calculus formula or a few less lines of code.
Those payroll, inventory, POS, and the like are well more than the majority of the work out there in the programming realm. Only your apparent arrogant narrow minded view of computer world seems to see it differently.