Friday, May 19, 2006

Programming's Image Problem

It's not about math.

The vast majority of programming jobs these days have nothing at all to do with algorithms. I have never, in eight years of professional programming, implemented my own data structure outside of an interview.

That doesn't mean what I do is mindless. Programming these days is looking at a problem, surveying a vast toolset, and selecting the right tools to solve the problem in the right way. It's easy to do badly and incredibly difficult to do well. You have to know how all the tools work and how they work together, be familiar with their drawbacks, limitations, and bugs (both documented and non-), and know when it's the right time to use each one.

Then you write some glue code, work around some new undocumented bugs, cast the bones a few times and you have a working system. This is what most people with four year CS degrees do all day.

Yet if you're good at math in high school, they suggest computer science. Computer science undergrad programs, in general, are heavy on the calculus. We're selecting for the wrong traits here, and in the process I think we're scaring away a lot of women.

If instead we looked for organization and pattern-recognition skills in high school and encouraged those folks to look at programming, I wonder if we'd see a shift in the gender balance.

5 Comments:

At 11:46 AM, Anonymous Sara said...

Nice to stumble upon your blog! And I agree, a lot of programming doesn't involve teh algorithms you learn about when you are at school. Believe it or not, I had to write a quick sort just the other day though. Also, I think there is a lot more to it than simply finding the tool to solve the problem.

If someone comes to you and says, I want a website that does a, b, and c. You need to really analyze the needs and not just give answers, but provide a solution..the most efficient solution possible. And make recommendations for functionality to implement or take away that the requestor may not have considered.

 
At 1:22 PM, Blogger Sarah Mei said...

Agreed. A thorough understanding of math enhances one's ability to program well.

However, it's not strictly necessary anymore. If you're solving typical problems in the field, like connecting one legacy system to another, writing web services, or creating a web or desktop application, you won't use it on a day-in, day-out basis.

These days, math is another tool in the toolset, rather than the most necessary one.

And it's also important to distinguish between the math required for a BS, and the math you need to write the typical algorithms you use as a programmer.

A BS generally requires a year or more of calculus. Quicksorts, tree rebalancing, hash implementations -- they, on the other hand, use much simpler math and depend more on a thorough understanding of the data structures you're working with and the language you're writing in.

So I think we need to talk about the fact that programming in the field generally doesn't actually require that much math. There are a lot of women and girls out there who would make fantastic software engineers, but never gave it a shot because they didn't do well in high school calculus, or didn't like it.

 
At 3:00 PM, Anonymous sara said...

I agree, there are plenty of women (or men for that matter) who could be software engineers b/c it doesn't require as much math as schools require. I know my Comp Sci program required a Math minor.

I think more important than math skills are analytical skills especially for good application design. I think the math comes more into play when you are building something at machine level. But I do still believe classes such as Calculus and discreet do give an important foundation to a programmer.

I share your desire to get girls (especially young girls) involved in technology. I've been involved with several organizations that help to get kids involved in general but would love to be more involved with girls involved.

 
At 3:01 PM, Anonymous sara said...

I agree, there are plenty of women (or men for that matter) who could be software engineers b/c it doesn't require as much math as schools require. I know my Comp Sci program required a Math minor.

I think more important than math skills are analytical skills especially for good application design. I think the math comes more into play when you are building something at machine level. But I do still believe classes such as Calculus and discreet do give an important foundation to a programmer.

I share your desire to get girls (especially young girls) involved in technology. I've been involved with several organizations that help to get kids involved in general but would love to be more involved with girls involved.

 
At 8:39 PM, Anonymous Syp said...

Kudos for a blog like this! I've been thinking about beginning a blog of my own that touches on programming from a female's perspective, opportunities for a soon-to-be college grad, and just some random fun stuff.

Although, I'm not even close to having the experience you have, I haven't done much math at all based on my three co-ops I've had. I think having the ability to think in an abstract manner is key and also pattern recognition as you say. That instantly reminded me of my CS Theory class; you kind of have to train your mind to see things in a very logic-based world. I think math helps create that foundation, which is why it's probably a heavy part of the curriculum. However, I do agree that it gives off the wrong impression.

Keep bloggin! I'm looking forward to becoming a regular reader!

 

Post a Comment

<< Home