Jump to content

Computer Science Majors Rebounding


Pangloss

Recommended Posts

http://www.insidehighered.com/news/2008/03/05/compsci

 

New national data show that what has been a traumatic decade for computer science departments is finally starting to turn around. For the first time since 2000, the number of newly declared undergraduate majors at doctoral-granting computer science departments is up.

 

Well that's good news! Of course, given the current financial aid crisis, they may be some seriously broke students for a while, but at least enrollments are up.

 

One thing I think the story misses is that Computer Science majors today are not like Computer Science majors ten years ago. They're aiming for R&D jobs, or advanced product development, not routine client-server, business-aspected programming positions. THOSE careers are now covered largely by IT programs in for-profit institutions and online schools.

Link to comment
Share on other sites

I'm not sure if this is quite what you meant, but I've noticed that the "serious" CS schools seem to focus on Java and the "practical" programming schools (programs in IT, CIS, MIT, etc) focus more on Microsoft stuff (based on the .NET Framework). That's not across-the-board, but it does seem to be a trend. I teach at a private, for-profit school focusing on IT undergrads, and I spend most of my time teaching programming to students who will likely work on client-server business intelligence reporting, and we use Visual Studio and SQL Server for everything. But at the private, non-profit school where I'm working on my PhD, it's all Java and Oracle.

 

The disparity is rather stark -- these IT students from the for-profits certainly aren't going to be inventing the next great wave of "killer apps", especially if too much of their "programming" time is spend clicking "next" in some Microsoft wizard. But I think it makes a lot of sense in terms of getting educated workers into sensible career paths. Your typical business application programmer really doesn't need to have a lot of advanced knowledge of calculus, complex algorithms, and so forth. They're mostly just filtering data from a big table and making it look nice.

 

Another example of how the program does work is that a decent percentage of my students go on to masters programs in CIS, MIS/MIT or even (sometimes) CS, which suggests that their education transcends mere application training. (Not that you were suggesting otherwise, I'm just tossing out some of my thoughts for discussion.)

Link to comment
Share on other sites

The problems I'm referring to stem from curriculums which center around a single language, particularly when that language is designed to abstract what the programmer is doing away from the underlying concepts. When I say "Java schools," the term could apply just as easily to a program where virtually all concepts are taught in C# (although personally I'd consider C# a better language than Java). It's borrowed from Joel Spoelsky, who describes the problem I'm talking about here:

 

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

 

The university I attended was a Java school through and through. Almost every single class we took used Java as the one and only language option for completing assignments. Things got downright silly when the class in question was something like systems programming.

 

I think it's the duty of a CS program to expose students to a variety of languages. Java certainly isn't the most horrible language in existence and is actually getting a lot better, but in the pantheon of languages it's something of a mid-level grunt work imperative language. It's relatively fast, garbage collected, and generally easy to program in if you don't mind typing lots of boilerplate.

 

But, learning a language like that shouldn't be the be-all and end-all of your CS curriculum. I think in addition to that it's important to learn at least one high level (preferably functional) language, which introduces to you the concepts of lambda expressions / closures (coming soon to Java, I guess), but more importantly functional approaches to problem solving, particularly the map / filter / reduce concepts. MIT teaches Scheme as a freshman course, for example. I think it's also important to learn a low-level natively compiled language, preferably C. Understanding the complete spectrum of languages from Turing to Church is critically important to understanding what programming is all about.

Link to comment
Share on other sites

I see what you mean. I wondered about this heavy Java focus myself when I was working on my Masters. We kept being asked to write code in Java that was supposed to do show how things worked in some other language! It was particularly kooky in the AI course, as you might imagine. The only time I remember doing something outside of Java was for a paper I wrote demonstrating that PostScript was a Turing-complete language. (lol) I did learn Assembly but that was actually a pre-requisite to the program.

 

So yeah, what you're saying makes a lot of sense, and I can see how that might be a problem for CS programs these days. The temptation of "Java everywhere" must be pretty strong due to the level of development of those tools compared with tools available for other languages. They're basically saying "well at least we're not in .NET" and calling it a day.

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...

Bear in mind that many programs that have shifted away from C/C++ aren't teaching system programming, they're teaching client/server business database programming, which is a whole different animal. Microsoft and Sun have made is so easy to write these sorts of programs that they really almost can't even be called "programming" anymore, at least in the same sense that Computer Science programs are talking about, and for jobs like you'll notice that they're not asking for CS degrees. Any IT area will suffice, or they may even settle for management with IT focus.

 

So Java and C# have a very firm and important place in the programming language hierarchy. It's just not the correct place for CS majors.

Link to comment
Share on other sites

Bear in mind that many programs that have shifted away from C/C++ aren't teaching system programming, they're teaching client/server business database programming, which is a whole different animal..

 

A couple of my friends are taking a database theory class at my university...most of the projects were how to design databases...and 3 weeks before the end of the semester they had to write a C++ program that allows database manipulation. I was shocked because I would of thought that the prof would let them use C#/PHP, etc....but Nope!

 

Now for the CIS courses, they do teach a lot of the business database programming.

 

BTW, here is the CS curriculum. http://cms.uhd.edu/degrees/bs_cs.php

 

Elective classes can be found in the catalog...which have some cool and interesting classes.

Link to comment
Share on other sites

Sure, CS programs still have to cover database manipulation, and they're not going to demand that students learn a new programming language for that, so it makes sense. I assume they all do something along those lines.

 

Actually I wouldn't be surprised if some CS programs do at least a brief overview of Web application technology just so that their students will know what's going on out there, since that's where a lot of the jobs are. It's awkward that CS programs are cranking out programmers who are overqualified and untrained for the most common variety of programming positions. (Not that it matters, since a CS grad should be able to get up to speed on that stuff in about 5 nanoseconds with just a few tutorials.)

 

But of course ultimately you don't want CS grads taking those jobs. That's what they did 20 years ago, but today we want those people developing the next generation of programming techniques, as well as really advanced current-gen applications that step way beyond current garden-variety ASP/PHP techniques.

 

I'll deal with the local grocer's web site needs. Go win some patent cubes and make me the next Google. :)

Link to comment
Share on other sites

Sure, CS programs still have to cover database manipulation, and they're not going to demand that students learn a new programming language for that, so it makes sense. I assume they all do something along those lines.

 

Actually I wouldn't be surprised if some CS programs do at least a brief overview of Web application technology just so that their students will know what's going on out there, since that's where a lot of the jobs are. It's awkward that CS programs are cranking out programmers who are overqualified and untrained for the most common variety of programming positions. (Not that it matters, since a CS grad should be able to get up to speed on that stuff in about 5 nanoseconds with just a few tutorials.)

 

But of course ultimately you don't want CS grads taking those jobs. That's what they did 20 years ago, but today we want those people developing the next generation of programming techniques, as well as really advanced current-gen applications that step way beyond current garden-variety ASP/PHP techniques.

 

I'll deal with the local grocer's web site needs. Go make me the next Google. :)

 

 

Very true. I actually started to dive into the ASP.NET/C# because I thought that would be the "future"...and I even landed an internship with a very large national defense contractor doing this kinda stuff...but I do not want to do this for the rest of my life. I want to go back to my roots and develop some software, not web-ware.

 

But its really hard since everyone is jumping on the "Web 2.0" bandwagon(like I was), and it seems that no one is interested in "stand alone" desktop software anymore.

 

What to do...what do to...

Link to comment
Share on other sites

Yes, actually that raises another interesting problem, which is that languages like Java and C# are so seductively easy to use. The fact that so much is handled for you in the background makes for lazy programming habits and very little learning going on. Which is the POINT -- the goal is productivity, not learning. Microsoft actually touted the fact that Visual Studio 2005 reduced the amount of coding necessary in a typical application by a whopping 75%, due mainly to additional automation in the area of connection management, to the point where you can literally drag-and-drop a database table onto a web page and immediately publish it. Data-driven Web apps without a LICK of code. (Thank god we still teach ADO, or I don't know how we could hand these kids diplomas with a clear conscience.)

 

And as you say, everyone and their mother (literally) is on the Web app bandwagon. Hardly anybody writes business applications in regular Windows forms anymore. Why bother? A Web app doesn't have to be installed, which means it's easier to support and upgrade, and the same interface can be used either in the office or via telecommuting. WHY write a Windows app?

 

The only saving grace here is that really front-line, leading edge stuff always requires the best minds and best thinking and hardest work. Even if it's just a business app, if you want a first-rate, cutting edge app that really raises the bar, you have to get the best people for that work. The wizards won't cut it. And after that bar gets raised, Sun and Microsoft come along behind and turn that into a wizard. A typical example of that it's what's happened to AJAX, which just a couple of years ago was cutting edge stuff from really smart programmers who pushed Javascript to the limit, but now it's a minimum expectation for any web app, and it's been fully wizardized (at least on the ASP side, not sure about the LAMP side, but I assume so).

 

There is room for CS grads at the high end of that, but they really should be at the high end of that, not sloughing it out in the trenches making the beer-hazed MBAs happy.

 

But I digress -- read some of bascule's posts here about other programming languages -- there's a heck of a lot going on out there. It's a very exciting time to be breaking into computer science and programming as an academic pursuit, and even to be looking at the high end of the to-do list in the business programming world. If you compare Computer Science with other academic fields, there's always something interesting going on, there's never a shortage of research positions (do you know how tough a road it is for PhDs in Astronomy?!), and you have great options in the business world at any point in your career.

 

Which is, of course, another kind of trap, as far as the human experiment is concerned (so much money in CS and so little in other important pursuits), but that's another discussion.

Link to comment
Share on other sites

im glad that my university still sticks with C and C++.

 

C is a great language for teaching systems programming and the general theory of context free languages as they relate to the recursively enumerable set of languages (i.e. how C, a context-free third generation language, maps to assembly, a recursively enumerable second generation language). The latter is something I'd expect you'd be introduced to in a compilers course, which is the only other place C belongs besides a systems programming course, imo.

 

C++ is a terrible language riddled with overcomplexity and the enormous legacy of C. While I think it's great your university is introducing you to more than one language, C and C++ are two very low level choices, and C++ is a terrible language to use as an introduction to object oriented programming.

 

Yes, actually that raises another interesting problem, which is that languages like Java and C# are so seductively easy to use. The fact that so much is handled for you in the background makes for lazy programming habits and very little learning going on. Which is the POINT -- the goal is productivity, not learning.

 

[...]

 

read some of bascule's posts here about other programming languages -- there's a heck of a lot going on out there.

 

I'd like to take this opportunity to note that Java and C# are both relatively low-level, boilerplate-ridden static languages, especially compared to modern dynamic languages like Python and Ruby.

 

That said, static languages don't need to be boilerplate-ridden. Languages which use static typing with type inference can eliminate much of the boilerplate. This includes functional languages such as O'Caml, Haskell, and Clean. Note that these languages also match or exceed Java's performance.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.