January 21st, 2007

When all things are equal, inequality reflects failure.

Virginia DeBolt responded to my earlier writing about technology education being broken with a post about Educating Women in Technology. She references two innovative programs: New Horizons, at Mills College in Oakland, California, which teaches computer technology to those with a non-technical background; and the University of Colorado's Bachelor of Innovation degree.

Though I agree with Virginia that both programs are an excellent step in the right direction, they don't address the fundamental issues that lead to what I consider crippled and ineffective computer science university programs. Take, for instance, the New Horizons project: it provides a way for people with a liberal arts bachelor's degree to get a Masters degree in computer science. It's open to both men and women, but unlike traditional computer science courses, there are many more women than men.

Much of the emphasis of the program is providing a less intimidating environment. Borrowing Virginia's quote from a San Francisco Guardian article on the program:

Introductory CS classes at most universities "act like weeder courses," scaring away all but the most confident students, [Mills computer science associate professor Ellen] Spertus says. Typically, up to half the students fail or drop out of introductory CS classes at other institutions. Spertus says this phenomenon hits women hardest because they may have less computer experience as well as less confidence…Spertus finds that many students going into her program suffer from low self-esteem — especially female students. She says they'll be earning A's in the program's classes but will be convinced they're not doing well and somehow "don't belong." Her teaching style, simultaneously rigorous and nurturing, helps change their opinion, she hopes.

I agree with the sense of 'not belonging' that many women experience in traditional computer science programs, but I disagree with Ellen Spertus that lack of confidence is a major deterrent to women in computer science. Women make up half, or more, of the students in several different extremely rigorous and/or competitive fields at many universities: including mathematics, medicine, law, most of the sciences, business, and others. Unless we think that computer science only attracts the less confidence, we should consider that there are other factors in play. These factors may lead to a growing lack of confidence, or may be perceived to be based on lack of confidence, but I would say that this is more an effect than a cause.

The New Horizons program is successful in that the many of the cultural issues associated with the field are eliminated, primarily because most of the students are women. Mills College is a college for women, and though this program is open to men, I would bet that most men would find it uncomfortable to get a degree, even a Master's, from a college that is predominately a women's college. As such, the program stays dominated by woman, and that's one factor thats significantly different from other comp-sci programs. More importantly, the program also provides a very effective environment for women and men with families, jobs, and other non-academic priorities–something that wouldn't be tolerated in most computer science programs. Actually, it wouldn't be tolerated in most academic programs, which are, more or less, geared to the mindset of an 19 year old male from an affluent family.

(I also don't know if I agree with the statement about computer science being a lucrative field, with globalization's massive impact on this field.)

New Horizons is effective, but this approach is more of a bandage than a solution to a problem. We can't continue the 'separate but equal' routine of dealing with the problem of astonishing lack of diversity in the computer field. Leaving aside culture as the only determiner–because after all if such is the sole criteria for women in college, than wouldn't this also impact on women in law and women in medicine?–those components of computer science I consider especially broken have less to do with how the environment is managed, and more to do with the subject, itself.

Computer Science suffers from an early and inappropriate association with engineering, another field that tends to be massively male dominated. In fact the two fields, computer science and the different flavors of engineering, are always the departments in any college that have the fewest women students. Because of this early association, there's a strong engineering bias built into the field of computer science: a bias that doesn't necessarily make it a 'better' field, numerous books on the subject aside.

We assume this engineering connection makes the field of computer technology better. Why? Because the people in the field most successful are those more capable of adapting to the odd and pervasive cultural and linguistic biases inherent in engineering. Since the most successful people in the field are the ones most likely able to establish a pattern of what are 'good' or 'bad' computer science practices, an engineering bias (evidence of membership also demonstrating a gender and a cultural bias) has been interwoven into the field in such a way that it's almost impossible to be able to view the practical application of computer technology separate and apart from engineering practices.

It is an inappropriate blending of fields; a coercion of the natural growth of computer technology. It's like visiting a relative and wearing his or her clothes: they might seem to fit, but you're never completely comfortable because you know the clothes are borrowed.

A good example of the engineering influence in computer science is the linguistic bias inherent in programming languages. Grace Hopper was the first to promote the concept of an English-like syntax when creating computer programs. Her work ultimately led to COBOL, which has been the butt of jokes and criticism since. One such criticism is that COBOL is excessively verbose. This is interesting when you compare it with the newer generation of languages popping up in the field just at a time when not only has the numbers of women not been increasing–our numbers have been shrinking. In particular if you follow a sequence from Perl to Python to Ruby, there's one obvious trend: the language is losing its verbosity. Ruby is so stripped down to the barest minimum to support the programming constructs that you could almost write a complete weblogging tool in 20 lines or less.

This lack of verbosity makes for shorter programs, and less time to write such programs. However, the language is also incredibly cryptic.

Compare PHP or Java, which though not as verbose as COBOL are still 'chatty' compared to Python and Ruby. I've worked with a huge number of programming languages, over 23, yet I have found myself increasingly 'alienated' if that's the word, from the languages in use today. In fact, one of my biggest criticism's of Prototype, the Ajax/JavaScript library, is it's use of Ruby constructs, and functions such as $(var), to access an element in the page.

Programming constructs such as this may strip away the 'fat' that English or other linquistic components add to other language variations, but at what price? I wrote someone once that when I first saw a 'larger' Ruby application (larger being relative), my first thought was: this is a language written by men for men.

A better way of saying this, though, is that this is a language that favors a certain mental bias; one that's pervasive in engineering and that heavily influences computer science, both in an educational sense and in practice. It is a bias that favors a more mathematical, or perhaps spatially holistic would be a better term, view of an application over a more verbose, verbal view of the same.

Spatial over verbal: where have we heard that before?

We've all heard the results of controversial studies that report cognitive differences between women and men in two main areas: women have greater language skills, while men have more spatial acuity. Of course, many of these studies are flawed, with samplings too small to really understand what constitutes a 'significant' difference. It's also difficult to strip out the environment; to deny that boys are more encouraged to indulge in solitary past-times such as taking apart the toaster or working on the car; while girls are encouraged to spend time, even hobby time, with their friends.

Regardless of whether there really is a gender bias when it comes to language and spatial reasoning, programming languages–from COBOL to C, from BASIC to C++, Java and PHP to Python and Ruby–do reflect a cognitive bias: either exhibiting a bias towards the verbal or a bias towards the spacial; a bias that can impact on how well a person uses the language, or more importantly, how comfortable they are with the language.

A better explanation of my initial perception of Ruby would be that it's a language that's biased towards those who favor the spatial over the verbal, and I'm most comfortable working with a language designed for those who favor the verbal over the spatial. Not to say I can't learn Ruby or Python, and even grow to appreciate and like both. However, it's like putting on my cousin's pants: they might fit, but I'm never going to be as comfortable in them as my cousin.

The Wikipedia article associated with computer programming has an interesting remark:

Another ongoing debate is the extent to which the programming language used in writing programs affects the form that the final program takes. This debate is analogous to that surrounding the Sapir Whorf hypothesis in linguistics.

The quote has to do with linguistic determinism, whereby the language we use determines how we think. There's disagreement on this, and studies supporting and studies refuting, but it is a fascinating subject. Made more so by extending it to the computer languages we use, and how they impact on the overall structure of a program. Again, are programs such as Agile arising because of the fact that our practice of technology is skewed to a specific bias, not to mention personality?

Perhaps we'll find that object-oriented development is really an outgrowth of a bias toward the spatial over the verbal, and that we've managed to create an entire field that consists of one gigantic human filter. We don't know, because we've never thought to challenge the disparity in the computer science field based on the development of the subject, not just the environment.

That's why I say the computer science field is broken, and rather than focus purely on environment or culture, we need to examine the myriad ways in which it is broken, recognize each, and find solutions: we can't depend on providing 'warm nurturing environments' as being the end all, be all solution for every problem.

For instance, if the computer science programs were split up in universities, with computer technology incorporated into other fields such as philosophy, library science, psychology, math and so on, we might find that each field ends up with its own programming languages–like a suit of clothes custom made for fit and comfort, compared to buying off the rack or worse, borrowing from our cousin, who has the worst taste. The Bachelor's of Innovation somewhat reflects this, but again that's seen more as an interdisciplinary field than realizing that computer technology is a part of lives, is a tool, and how we teach it should reflect this.

Comments
1

But Computer Science (and programming, the trade) are indeed like Engineering. They're what I call "objective" professions, while law or politics are "subjective" professions. An "objective" profession is one where the *professional* *goal* does not depend on what people think. That is, whether or not your algorithm or program works, does not depend on whether or not you're a buddy of the compiler.

Anyway, I think the disproof of your theory above is that there aren't a lot of African-Americans (and I use the term advisedly) in Computer Science or programming either.

Your article above is basically an "evolutionary psychology" argument, and those are often appealing stories, but unfalsifiable.

2
Shelley - 2:47 pm 1/21/2007

Disagree with you, Seth. You're assuming that because an algorithm has a expected result, that people don't have different opinions about how that algorithm was designed, and whether it could be improved upon. You're a developer, you know what the likelihood of that happening is.

Then there's the language element, and people will fight to the death about which is the 'better' language, or the 'better' development paradigm and so on. Computer science is an immensely subjective field.

But law on the other hand, seeks to be as objective as possible. True, judges have to form opinions, but they'd rather you bring in relevant cases so that how much of the decision they make is as narrowly dependent on their opinion as possible.

Engineering is very subjective. Build a bridge between these two pieces of land, over that river: look at how much these bridges differ, based on aesthetics as much as physical constraints.

I mention about lack of cultural diversity, but the lack of black membership has a greater distribution over all the fields. There are not as many blacks in computer science, true, but unfortunately, the numbers of blacks in college in all fields don't reflect the population. Women, on the other hand, make up over 50% of the college populations. There's more than just environment at work.

I don't think creating 'warm and nurturing environments' will be as effective as eliminating computer science as a separate field, and incorporating computer technology more effectively into main professional areas.

As for more blacks in the field, I don't know if I can speak to that, because I'm not black. I would appreciate hearing from blacks in the field what their opinion is, and what they would suggest. Same for Hispanic, as they're even less represented.

People have spent close to two decades trying to figure out how to change the environment to make computer technology more inviting to a more diverse group. It's not working, and I think we need to look beyond just the environment, and at the very practice, itself.

3

Umm, how many court decisions have you read through? My sampling is biased, but there's too many which run roughly "Defendant is a sleazeball, plaintiff is a pillar of the community, guilty, guilty, guilty.". What you call "objective" is in fact not objectivity, but an attempt to have the subjective component favor as specific position. Every field has a body of knowledge to it and some social interactions. But in terms of whether the bridge falls down or not, that doesn't depend on being part of the old-boys network.

In fact, I'd say the argument for environment is strengthened by looking at high-pressure professions. It's *not* about whether someone writes a module about Playboy centerfold metadata. It's about the acceptability of the profession, AND the ways people's lives have been restructured to take on the burdens of such a profession.

Both factors - acceptability and high-pressure career - are at work. So when one points to law, medicine, those are *generally* acceptable professions. Whereas, until recently, Computer Scientist/Programmer was not.

By which I meant, if kid male or female said "I want to be doctor" or "I want to be a lawyer", that was generally OK from the standpoint of peer acceptance (I mean different from "Women can't …", the general "That's a weird job"). "I want to be computer scientist" was not.
And one particular place where doctor/lawyer is sometimes iffy is some parts of the African-American community (again, something I mean very specifically as distinct from black).

Computer Science is a seperate field, or at least, a specialization of mathematics.

Programming is a vocation that has little to do with Computer Science, and is a separate field too. Note everybody "writes" to some extent - memos, reports, presentations - but "writer" is a specific job, with department and classes and so on.

4
Audrey - 10:31 am 1/22/2007

My experience of Ruby seems to be significantly different than yours. It's my favorite of the programming languages I've used so far because I can write clear, descriptive code without struggling to make the language syntax fit. I think it lends itself to keeping things human-readable. I don't know who wrote the larger program you looked at, but I would say any obfuscation is more a reflection on the programmers who wrote it than the language itself.

5

Besides Cobol, I wonder if there are any other languages created by women. If an interpreter doesn't exist, maybe there's at least a grammar for the language? Or even just some pseudocode for a small trivial project, like ray tracer or some such?

6
mclaren - 2:23 pm 1/29/2007

Couldn't agree more. CS programs seem to focus not just on hard-core left brain math, but on _useless_ math. Example: the CS courses I took featured not only calculus and analytic geometry (reasonable, you'd expect to have to learn calculus in a technical major) but went much much farther. Among the useless junk we had to learn: finite automata and the Turing Halting Theorem. Now, I ask you — when is the last time *you* needed the Turing Haltin Theorem to write a computer program? Assembly language I can understand — it can sometimes help to understand the guts of the hardware, especially when you're doing pointer arithmetic, or dealing with an issue like porting from a little-endian to a big-endian machine. But here's the other junk we were forced to learn: graph theory. Queuing theory. Combinatorics. And on. And on. And on! Look, these heavily mathematical subjects make sense only if you're going to spend your life doing mathematical programming. Say, writing a numerical analysis program to do finite element analysis of the nonlinear shockwaves coming of reactive ablative tank armor. And guess what? CS major _never_ do that kind of programming. N*E*V*E*R. Anytime an employer wants heavily mathematical programming done, they always hire someone with an MS or PhD in math. Always. Without exception.
At the same time, CS degrees nowadays seem to utterly ignore many crucial issues in contemporary programming. Example: as Joel Spolsky has pointed out, the web is becoming the default platform for design rather than the Windows API. PHP is basic to the web. Few CS courses, even today, teach PHP. Python? Hah! Fuhgeddaboudit, as they say in Brooklyn. The graphic design aspects of web design? No way. I have seen not a single CS department that teaches graphic design for web design to CS majors — instead, it's javascript, javascript and more javascript. Perl. MySQL. C++.LISP (or Scheme). All heavily technical, all intensely math-oriented.
And people wonder why web interfaces look like junk? People wonder why web UI usability is down the tubes?
One of the most crucial points you made is that current CS teaching not only turns off most women, it turns off most men. This is not just stupid, it's crazy. The asian countries out-graduate us in CS in absolute numbers, and relative to their population they produce orders of magnitude more CS grads. That wouldn't matter if the U.S. were still king of the hill and ruler of the world economically, but we're not. America needs as many CS graduates as it can get. Pissing away 50% of the American population and in effect telling 'em "Get lost, you didn't meet our math macho requirements" is insane. It's demented. I mean…think about it. We are flushing huge numbers of students out of CS programs like waste _because they can't prove the Turing Halting Theorem_ or because _they fail a final in graph theory_. That's psychotic. I have _never_ had to use graph theory to write a program. NEVER. Ever. I have never _met_ anyone who ever had to use graph theory to write a program. If you ever need that kind of stuff, you just go to the IMSL numerical libraries and download a package that does it. You never ever have to roll your own, unless you're doing primarily math programming — and if you are, I guaran-frickin'-tee you that you're not a CS grad, you've got at least an MS in math. And chances are you're working in FORTRAN, not Javascript or Perl or LISP or C++.
The big problems, the real problems, I've encountered in writing programs, are the same ones everyone else encounters — malloc issues, losing track of global vs. local variables, syntax errors, instantiation, encapsulation, and most of all, the incompatability mess. What works on browser A breaks on browser B. Or compiler A vs compiler B. Or Linux distro A vs linus distro B.

7
Eric - 2:42 pm 1/29/2007

I have to agree with Audrey regarding Ruby (and Python for that matter). While I am not familiar with COBOL, I have seen the verbosity in C# and Java and I feel both Python and Ruby allow a much simpler and semantic means of writing code.

With that said, your point regarding the language still makes sense. I think the verbosity of Java and C# severely hinder elegance and expressiveness, which makes coding more mundane since it is more about setting variable than describing an algorithm or operation.

Of course, I might have completely missed the point here as well in which I apologize. Either way, a very interesting article.

8
swan - 10:19 pm 1/29/2007

I think one aspect of the problem is that a CS degree is actually a combination of "science" and "applied science". Universities make a distinction between Physics and Applied Physics, and between Math and Applied Math. Why not a similar CS and Applied CS (which is really software engineering)? Why not teach design patterns, test-driven development, refactoring, principles of GUIs, structure of programs, etc?

On the other hand, Assembly language made me truly grok pointers and memory usage. Computation theory made me appreciate what is really going on with regular expressions. Doing a raytracer for computer graphics made me understand linear algebra and appreciate the practical use of math. There is a difference between an education and vocational training. If you find yourself asking "but when have you ever used x?" then you're thinking of vocational training. If you go "hey, that's pretty neat" regardless of whether you have any intention of doing video data mining (or whatever), then you're thinking of education.

That's the second problem: we have yet to determine whether we are going to college for an education, or if we're going for vocational training ("to get a good job").

Thanks to all those who have contributed to the discussion. Comments are now closed, but you can contact the author of the post directly.