I remember reading in a paper once that contour advection simulations are not space-filling. I thought this was interesting, but my normal reaction is first, to be skeptical and second, well why not try it out myself and see? There are actually practical applications for this result--I once did a derivation attempting to link Lyapunov exponents to the diffusivity in which I assumed the fractal dimension of an advected contour was constant, thus not space-filling.
And so was born the space-filling experiment. My first attempt used a swap file to hold the advected contour as it grew to (hopefully) epic proportions. I realized much later that this was a dumb approach, especially in the world of multiple cores and distributed memory. Instead of working on one massive contour--which required a specialized executable--why not just string together a whole bunch of smaller contours? Each contour is advected as a separate process. Once a contour gets too big, it is halved and each half given its own process. Later on, the contours can be spliced back together. To facilitate this, we use an aggregate naming system: every time a contour is split, the output file names are updated by appending a '0' to the first file and a '1' to the second file. Simple, lexical ordering can tell you which contour goes where.
The main issue with this exercise is the recursive, exponential process allocation. If things go wrong and start to run away, it can eat your computer rather quickly. It is possible of course to delete the whole process tree. Someday I might even write that script. The other issue, unfortunately, was that it didn't work. Even at 60 million nodes, the fractal dimension was still well under two and showed no signs of flattening out.
What I find most interesting about this exercise, however, was how it unlocked for me a big part of the philosophy of Unix programming. I had already realized how much better small, specialized programs strung together work for most applications than monolithic, general programs, but hadn't realized how well the philosophy 'scales' to parallel programming. Here, instead of running one program which subsequently spreads itself over several processors, we split the program into multiple processes each of which are run separately. It works especially well for "trivially parallel" problems, such as this one, however Unix does provide a plethora of message-passing facilities that allow processes to communicate with one another.
The main point is the division of labour into processor-intensive problems which are solved by compiled executables and non-processor-intensive problems which are solved by shell scripts calling the executables. Each represents a distinct "level" and there often seems to be a point at which the problem handled by an executable--normally viewed as a discrete granule by the operating system--is about the right size. The real irony is that I spent quite a long time devising an extremely clever algorithm for parallel processing of contour advection. It involved splitting the contour over a fixed number of processors and passing points between them to ensure a balanced load such that each processor would finish in roughly the same amount of time. Presumeably it would've been written using MPI. Screw that. Just divide the problem into a larger number of processes than there are processors and let the operating system balance out the load for you.
One of the reasons the methods I'm discussing here are less known and used than in the past is because of increases in computer power. In the past, to perform a series of operations on matrices it would have made sense to output one result to a file then call another executable to operate on that result. In today's world, where operations on even large matrices are trivial and the storage requirements even more so, you can do everything in a single interactive program, storing the results in RAM as you go along. Nonetheless, it's interesting to examine the parallels between a programming language and the Unix operating system--Unix is in fact a programming language designed to operate at the file system level. Files are akin to variables, executables are subroutines and pipes are like nested function calls.
Saturday, August 10, 2013
Wednesday, August 7, 2013
Miscellaneous ramblings: ctraj and higher-order functions in C
Paul Graham is a well known personality in the tech world and he has a number
of outspoken opinions about computer programming.
While I enjoy reading his essays, I don't often agree with him.
A constant claim of his is that some programming languages are more powerful
than others because they are more expressive.
For instance, in Lisp, you can create a function (a higher-order function)
that returns another function, whereas in C this is quite a lot
more difficult. You can also perform similar types of meta-programming--programs that write programs--very easily in Lisp, whereas in C this is a bit
more tricky.
I would argue that this is, in fact, a deliberate design decision in C, and a very wise one at that. The chief reason for it is efficiency--the style of programming possible in Lisp is often very difficult to optimize. Suppose we have a function that returns a function. What if this returns another function that returns a function? It's impossible for a compiler to predict how far this recursive loop will unroll, thus such higher-order functions would almost by necessity be left uncompiled until run time.
In fact, a C program can extend itself at run-time--with higher-order functions and whatnot--and it's actually quite easy to implement. The latest version of ctraj demonstrates how it can be done, more or less. All the main algorithms--trajectory integration, tracer simulation and contour advection--in ctraj have been refactored to make them more general. All of them call a base-class that represents a velocity field that, at least in theory, could be implemented in just about any way.
I was most interested in integrating velocity fields with simple, analytic representations, such as the blinking vortex. An obvious, but naive, way of doing this would be to write a new class for each velocity field. Instead, I wrote a class that is just a wrapper for a function that, from the program's point of view, doesn't even exist yet. When the program is called, the user must supply the name of the object file containing the function, and it's entry point. The function is then dynamically linked in, allowing the main routine to integrate any arbitrary function, without recompiling the main "engine."
In this example, the user must both write and compile the function to be linked in--the software is after all designed for scientific researchers--but it's easy to see how both could be done automatically by the program itself. In other words, once the programming language has access to the operating system and a dynamic linking library, writing higher order functions is always possible.
To download the latest version of ctraj, click here.
Another puzzling claim that Graham makes, right at the beginning of "On Lisp," is that Lisp somehow makes bottom up design--writing a language on top of the language that better solves your problem--easier. Every good programmer is very familiar with bottom-up design and uses it extensively and any 3GL allows it. What are subroutines other than user-defined commands? Commands that extend the language and allow you to implement a new language on top of the old language. Within limits, obviously: the syntax is fixed after all. Relatively few languages actually allow you to extend the syntax. Lisp is no different: unlike most languages, there is in fact only one syntactical construct! --which is perhaps both its greatest advantage and its greatest limitation. Perhaps it is easier to write a compiler or interpretter in Lisp--it probably is, I've never tried it so I don't know--but until those nuts and bolts are sorted out, you're stuck with the usual prefix operator form--commonly called a function--just like every other language. I am actually working on a language that allows the syntax to be arbitrarily extended. It's not much of a priority, so I don't know when I'll finish it. The main issue is what the base language should look like.
It's not just 3GL's that allow abstracting larger pieces of code into a single or fewer commands. Any software tool that contains something like functions, procedures or macros will allow this--even a gosub command will do. Practically the whole business of computer programming is the act of cleverly abstracting a problem into a set of more convenient sub-problems. The very nature of programming languages mean that any language can be re-written into any other language. One of the reasons that I haven't bothered to learn Lisp yet is that it would take a lot less time to write a Lisp-like interpretter than to learn all of the commands and syntactical sugar of the actual language.
In the past I thought that using C and C++ instead of Fortran 77 (still popular to this day) was a great boon for scientific programming since it allowed for dynamic memory allocation and pointers made it easy to create powerful and flexible data structures such as linked lists. I thought switching to Lisp or even Prolog might offer up similar advantages. It's easy, however, to exaggerate such advantages. In practice, I find that I rarely use specialized data structures except within algorithms that are well encapsulated to begin with (such as in a sort routine, for instance.)
Going back once again to ctraj, a good example is the contour advection algorithm. My first attempt at contour advection, written in IDL, used a linked list. The version in ctraj, however, uses cubic spline interpolation to calculate the curvature, so the coordinate list has either to be converted to an array or already be in the form of an array. Therefore it uses a pair of arrays that are constantly re-allocated.
In Fortran, I would solve the problem by just using fixed-length arrays. Since the program bums out at about a million points, there's our length. Of course arbitrary limits are another pet-peeve of real computer programmers. It's not as bad as all that--in real life, there is always a limit, whether it be the maximum size of the executable allowed in RAM, or the RAM itself. The fact that the contour advection simulation bums out at a million points or so is not so bad either--it's quite easy to split the simulation into two or more separate processes which can then be farmed out to different processors. More on this in the next article.
As another example, it's quite easy to write a linked list in Fortran 77. It takes a bit more thought and requires passing a "work-space" variable to the subroutines (common practice in Fortran 77 programming) but once it's done it can be re-used as needed, just like any suite of subroutines. Maybe if I get around to it I'll post my version of a linked list written in Fortran 77. I guarantee that from the interface level it won't look much different from the equivalent code written in C.
I would argue that this is, in fact, a deliberate design decision in C, and a very wise one at that. The chief reason for it is efficiency--the style of programming possible in Lisp is often very difficult to optimize. Suppose we have a function that returns a function. What if this returns another function that returns a function? It's impossible for a compiler to predict how far this recursive loop will unroll, thus such higher-order functions would almost by necessity be left uncompiled until run time.
In fact, a C program can extend itself at run-time--with higher-order functions and whatnot--and it's actually quite easy to implement. The latest version of ctraj demonstrates how it can be done, more or less. All the main algorithms--trajectory integration, tracer simulation and contour advection--in ctraj have been refactored to make them more general. All of them call a base-class that represents a velocity field that, at least in theory, could be implemented in just about any way.
I was most interested in integrating velocity fields with simple, analytic representations, such as the blinking vortex. An obvious, but naive, way of doing this would be to write a new class for each velocity field. Instead, I wrote a class that is just a wrapper for a function that, from the program's point of view, doesn't even exist yet. When the program is called, the user must supply the name of the object file containing the function, and it's entry point. The function is then dynamically linked in, allowing the main routine to integrate any arbitrary function, without recompiling the main "engine."
In this example, the user must both write and compile the function to be linked in--the software is after all designed for scientific researchers--but it's easy to see how both could be done automatically by the program itself. In other words, once the programming language has access to the operating system and a dynamic linking library, writing higher order functions is always possible.
To download the latest version of ctraj, click here.
Another puzzling claim that Graham makes, right at the beginning of "On Lisp," is that Lisp somehow makes bottom up design--writing a language on top of the language that better solves your problem--easier. Every good programmer is very familiar with bottom-up design and uses it extensively and any 3GL allows it. What are subroutines other than user-defined commands? Commands that extend the language and allow you to implement a new language on top of the old language. Within limits, obviously: the syntax is fixed after all. Relatively few languages actually allow you to extend the syntax. Lisp is no different: unlike most languages, there is in fact only one syntactical construct! --which is perhaps both its greatest advantage and its greatest limitation. Perhaps it is easier to write a compiler or interpretter in Lisp--it probably is, I've never tried it so I don't know--but until those nuts and bolts are sorted out, you're stuck with the usual prefix operator form--commonly called a function--just like every other language. I am actually working on a language that allows the syntax to be arbitrarily extended. It's not much of a priority, so I don't know when I'll finish it. The main issue is what the base language should look like.
It's not just 3GL's that allow abstracting larger pieces of code into a single or fewer commands. Any software tool that contains something like functions, procedures or macros will allow this--even a gosub command will do. Practically the whole business of computer programming is the act of cleverly abstracting a problem into a set of more convenient sub-problems. The very nature of programming languages mean that any language can be re-written into any other language. One of the reasons that I haven't bothered to learn Lisp yet is that it would take a lot less time to write a Lisp-like interpretter than to learn all of the commands and syntactical sugar of the actual language.
In the past I thought that using C and C++ instead of Fortran 77 (still popular to this day) was a great boon for scientific programming since it allowed for dynamic memory allocation and pointers made it easy to create powerful and flexible data structures such as linked lists. I thought switching to Lisp or even Prolog might offer up similar advantages. It's easy, however, to exaggerate such advantages. In practice, I find that I rarely use specialized data structures except within algorithms that are well encapsulated to begin with (such as in a sort routine, for instance.)
Going back once again to ctraj, a good example is the contour advection algorithm. My first attempt at contour advection, written in IDL, used a linked list. The version in ctraj, however, uses cubic spline interpolation to calculate the curvature, so the coordinate list has either to be converted to an array or already be in the form of an array. Therefore it uses a pair of arrays that are constantly re-allocated.
In Fortran, I would solve the problem by just using fixed-length arrays. Since the program bums out at about a million points, there's our length. Of course arbitrary limits are another pet-peeve of real computer programmers. It's not as bad as all that--in real life, there is always a limit, whether it be the maximum size of the executable allowed in RAM, or the RAM itself. The fact that the contour advection simulation bums out at a million points or so is not so bad either--it's quite easy to split the simulation into two or more separate processes which can then be farmed out to different processors. More on this in the next article.
As another example, it's quite easy to write a linked list in Fortran 77. It takes a bit more thought and requires passing a "work-space" variable to the subroutines (common practice in Fortran 77 programming) but once it's done it can be re-used as needed, just like any suite of subroutines. Maybe if I get around to it I'll post my version of a linked list written in Fortran 77. I guarantee that from the interface level it won't look much different from the equivalent code written in C.
Monday, June 24, 2013
All men are rapists
Lately I've become interested in debates between feminists and men's rights activists. In particular, there is an increasing amount of pressure by feminists to address "epidemic" levels of domestic violence and rape. Much of it borders on hate speech. There is one aspect of this I would like to take issue with: the idea that all men are capable of rape. The story, at least as told by feminists, is that we are living in a "rape culture" and that men must be conditioned not to rape. Some feminists go so far as to assume that all men are rapists until they can (somehow) prove otherwise. By that logic I should assume that all women are liars. Statistically I'd have a much better chance of being right. Or perhaps assume that the black teenagers hanging around the street corner are potential muggers.
My question is simple: are all men even capable of rape? And by capable I mean actually physically capable. Can they achieve an erection under circumstances akin to rape? Human males are quite different from just about any other mammal in that they have no bone inside their penis. An erection is maintained by blood-flow alone. This also means that they cannot simply have sex on demand. Something must arouse them.
I hear a lot of talk about how men must impress women in order to gain access to them--by becoming an "alpha" or whatever. But the implication of male physiology is that the female must also impress the male by sexually stimulating him. It's an entrenched position that men rape far more frequently than women, at least when it's even acknowledged that women rape at all. The typical argument against women raping men is that it is impossible to force a man to have an erection. This same argument can also be used to show that not all men can rape. Just as they cannot be aroused by being forced into submission, they are not necessarily aroused by forcing another.
I find the notion that "all men are potential rapists" offensive in the extreme because it implies that all men are violent psychopaths who are sexually aroused not only by violence, but by their own violence.
My question is simple: are all men even capable of rape? And by capable I mean actually physically capable. Can they achieve an erection under circumstances akin to rape? Human males are quite different from just about any other mammal in that they have no bone inside their penis. An erection is maintained by blood-flow alone. This also means that they cannot simply have sex on demand. Something must arouse them.
I hear a lot of talk about how men must impress women in order to gain access to them--by becoming an "alpha" or whatever. But the implication of male physiology is that the female must also impress the male by sexually stimulating him. It's an entrenched position that men rape far more frequently than women, at least when it's even acknowledged that women rape at all. The typical argument against women raping men is that it is impossible to force a man to have an erection. This same argument can also be used to show that not all men can rape. Just as they cannot be aroused by being forced into submission, they are not necessarily aroused by forcing another.
I find the notion that "all men are potential rapists" offensive in the extreme because it implies that all men are violent psychopaths who are sexually aroused not only by violence, but by their own violence.
Thursday, June 6, 2013
Thoughts on Turing-completeness
Writing this sparse matrix calculator has gotten me thinking about software tools and Turing-completeness. The sparse calculator, at least as originally conceived, wasn't meant to be a a general-purpose computing tool. It was simply meant to do some simple computations with sparse matrices: mainly find the eigenvalues and solve matrix equations.
It seems to be the fate, however, of just about every software tool (especially mini-languages) to acquire, at some point, the trappings of a full-featured programming language. Suppose you want to write your own solver or eigenvalue routines instead of just using using built-in functions? At the very least this will require iteration capability and the ability to exit from that iteration based on some criterion.
The complexity required for Turing-completeness is surprisingly low. I'm wondering at what point the sparse calculator will acquire it--or perhaps it has already with the addition of vector-subscripting and subscript assignment? In the course of the minimal research I've performed, one thing that comes up repeatedly is this idea of non-halting programs. After all, one of the properties of a Turing-complete Turing-machine is halting theorem: that no general algorithm exists that can prove with certainty whether a program on a Turing-complete machine halts or not.
First of all, I've always thought that halting theorem was over-emphasized. After all, human programmers write programs that halt all the time and they can frequently determine whether a program halts or, if it does not, why. Just because you cannot prove whether or not some programs halt, does not mean that you should not do the work for those that are less pathological, i.e., that are easy to classify. Typically these less pathological cases will be the ones of interest anyway, that is, more real world as opposed to "of theoretical interest." The problem is equivalent to that of automated theorem proving. There is plenty of work being done and plenty of software in that area, even though theorems exist that are unproveable.
It's obvious that being capable of non-halting behaviour is a necessary, not sufficient, condition of being Turing-complete. But I question this as well: couldn't we have languages that are, for all intents-and-purposes, Turing-complete, yet still always halt? In array-based languages such as APL, MatLab, Interactive Data Language and many others, you can do a lot of both the iteration and conditionals using array operations. And at least in IDL, you ought to because it is more efficient: array operations are built-in while loops and other control-of-flow operations are interpretted from byte code. Since arrays always have a finite length, this implies that any array operation will ultimately halt. I find I like the idea of element-by-element comparison, array element selection and similar mechanisms since these have more of a declarative feel. I remember being disappointed by the control structures in Awk, because while in concept the language had a strongly declarative feel, the control structures simply aped those of common imperative languages.
It seems to be the fate, however, of just about every software tool (especially mini-languages) to acquire, at some point, the trappings of a full-featured programming language. Suppose you want to write your own solver or eigenvalue routines instead of just using using built-in functions? At the very least this will require iteration capability and the ability to exit from that iteration based on some criterion.
The complexity required for Turing-completeness is surprisingly low. I'm wondering at what point the sparse calculator will acquire it--or perhaps it has already with the addition of vector-subscripting and subscript assignment? In the course of the minimal research I've performed, one thing that comes up repeatedly is this idea of non-halting programs. After all, one of the properties of a Turing-complete Turing-machine is halting theorem: that no general algorithm exists that can prove with certainty whether a program on a Turing-complete machine halts or not.
First of all, I've always thought that halting theorem was over-emphasized. After all, human programmers write programs that halt all the time and they can frequently determine whether a program halts or, if it does not, why. Just because you cannot prove whether or not some programs halt, does not mean that you should not do the work for those that are less pathological, i.e., that are easy to classify. Typically these less pathological cases will be the ones of interest anyway, that is, more real world as opposed to "of theoretical interest." The problem is equivalent to that of automated theorem proving. There is plenty of work being done and plenty of software in that area, even though theorems exist that are unproveable.
It's obvious that being capable of non-halting behaviour is a necessary, not sufficient, condition of being Turing-complete. But I question this as well: couldn't we have languages that are, for all intents-and-purposes, Turing-complete, yet still always halt? In array-based languages such as APL, MatLab, Interactive Data Language and many others, you can do a lot of both the iteration and conditionals using array operations. And at least in IDL, you ought to because it is more efficient: array operations are built-in while loops and other control-of-flow operations are interpretted from byte code. Since arrays always have a finite length, this implies that any array operation will ultimately halt. I find I like the idea of element-by-element comparison, array element selection and similar mechanisms since these have more of a declarative feel. I remember being disappointed by the control structures in Awk, because while in concept the language had a strongly declarative feel, the control structures simply aped those of common imperative languages.
What's wrong with science: academe
One of the things I hated most in elementary school was reading comprehension. It went like this: read a passage or short story and then answer a bunch of questions about it. But there was a rub: not only could you not quote from the story, you had to explain your answer. This irked me no end because the correct answer was almost invariably sitting right there, stated baldly and directly within the text. And being in third grade, try as I might to paraphrase it, there was no way I was going to come up with a piece of prose that stated the same thing quite so well.
I find a lot of life is like this: trying to explain to people things that really should be self-evident. And part of the reason that people are so unreasonable is the mental gymnastics they have to go through in order to earn marks in school. This of course continues well past college: college just sets it like concrete.
Are you searching for that virtuoso, three page proof that will win you accolades among your peers and hopefully win you a professorship? The purpose of science is not to make things complicated, rather it is to simplify them. The real beauty is the one-liner that makes you snap your fingers and say, "Aha! It's so simple..." I went into physics because it is simple, unlike psychology: because understanding a particle in a box is simpler (one hopes) than understanding a human brain.
I realized early on in my science career that it's probably far easier for an intelligent person to forget about jumping through all the hoops they set for you on the way to becoming a verified, card-carrying, official, professional, bona fide, authentic Scientist (TM) (C) B.S. M.S. M.D. Ph.D. and just focus on making some really big discovery. Once you do that, qualifications mean nothing.
Of course, if you are doing this, this means you are actually working on difficult, interesting problems. As a scientist, even a scientist in training, isn't this what you should be doing? I'm not saying that the two are mutually exclusive, that you could be working on difficult, interesting problems at the same time as you are working towards a degree. But in practice, they often are.
I find a lot of life is like this: trying to explain to people things that really should be self-evident. And part of the reason that people are so unreasonable is the mental gymnastics they have to go through in order to earn marks in school. This of course continues well past college: college just sets it like concrete.
Are you searching for that virtuoso, three page proof that will win you accolades among your peers and hopefully win you a professorship? The purpose of science is not to make things complicated, rather it is to simplify them. The real beauty is the one-liner that makes you snap your fingers and say, "Aha! It's so simple..." I went into physics because it is simple, unlike psychology: because understanding a particle in a box is simpler (one hopes) than understanding a human brain.
I realized early on in my science career that it's probably far easier for an intelligent person to forget about jumping through all the hoops they set for you on the way to becoming a verified, card-carrying, official, professional, bona fide, authentic Scientist (TM) (C) B.S. M.S. M.D. Ph.D. and just focus on making some really big discovery. Once you do that, qualifications mean nothing.
Of course, if you are doing this, this means you are actually working on difficult, interesting problems. As a scientist, even a scientist in training, isn't this what you should be doing? I'm not saying that the two are mutually exclusive, that you could be working on difficult, interesting problems at the same time as you are working towards a degree. But in practice, they often are.
Tuesday, June 4, 2013
Women in science
When I was a youth, I considered myself a feminist. I even wrote stories about a swash-buckling woman pirate (there were actually real women pirates--look it up). As I grew into adulthood, that began to unravel--about the time, in fact, that I took a course in women's studies at university. A friend of mine from the physics department was the AV guy for the course and so had to sit in on the lectures. After one of them he said to me, "I find her arguments speculative and inflammatory." After some thought, I realized that he was quite right.
One of the essays I wrote for the course was about discrimination in science. Increasingly, I'm also beginning to question whether the lack of women in the "hard" sciences, math and physics in particular, has anything to do with discrimination and might rather be caused by other factors. To tease out the answer to this question is quite difficult and there are no doubt multiple factors.
Instead, I'm going to look at a closely related phenomenon: the lack of female editors on Wikipedia (estimated at around 16%) and the lack of females creating open source software (probably less than 5%). Based on personal experience, it's virtually impossible that this discrepancy is caused by any kind of overt discrimination. The reason I say that is simple. I have been both a Wikipedian and an open source software developer for several years now. Neither activity require any qualifications, nor do they require permission. All you need are a few technical skills or the patience to learn.
In the case of Wikipedia, you don't even need to be the stereotypical "tech geek"--the only technical skills you need are the very simple mark-up language and you can write about anything you like. So if you aren't interested in math or physics or computer programming, you can write about ladies handbags or your favourite soap operas or whatever. The articles on popular culture, in fact, far outnumber the articles on technical subjects.
In all the time I've been working at these things the amount of human interaction I've experienced has been minimal which is the way I like it. So I can only conclude that the real reason for the lack of females is up to one factor and one factor only: interest. Women are simply not interested in doing this kind of work. After all, unless your project hits it big like Linux, you get no rewards other than personal satisfaction.
If you enjoy programming, you already know how easy it is to engage your passion, but in case you don't, let me tell you. Most of my programming is done on a netbook that cost me $350 which is not a large sum of money and I've seen similar models go for as little as $200. My computer has a dual-core, 1.66 GHz processor and is more powerful than many super-computers from 20 years ago. In addition to a computer, you will also need software: a programming language in the form of a compiler or interpretter. I use the GNU suite of compilers which includes C, C++ and Fortran and can be downloaded for free. It will even run on Windows using another free program called Cygwin.
To turn the software you write into open source, you can start an account on Sourceforge and upload it so that others can download and use your software, or if they choose, modify it or use it as a starting point for their own work. The amount of human-to-human interaction up to this point has been all but nil. In other words, ladies, if you want to become free software developers, get coding because nobody and nothing is stopping you.
Suppose that you are a geek (which in my case is not supposition). You have virtually no romantic prospects, maybe not much of a social life and you are wary of the bullshit that might get you there. But you know what you like. You enjoy tinkering: writing computer programs and learning about science. And you are honest. So you take this passion and this integrity and you pour it into a hobby--developing free software. At first, nobody notices because you yourself are also a nobody. But because of your passion and because of your integrity, everybody starts using it because it's just so damn good.
Seems like the dream scenario right? Geek loser makes good. Except now come the wannabes and coat-tail hangers who want in on a piece of the action, even though they may not have half the passion or ability. It's hard to view feminist complaining about this issue in any other way--they see what men are up to and they want a piece of the pie. Nothing is stopping a determined woman--any woman--from opening an account on Sourceforge and starting up her own Software project or from starting an article on Wikipedia.
One of the complaints that gets bandied about from feminist quarters is this nebulous concept of "harassment"--that women who try to do so are routinely harassed. In many instances, I suspect they are confusing standards and normal "turf wars" with harassment. Wikipedia has certain rules and guidelines that must be adhered to in order for it to be what it is. If you fail to abide by these rules, yes you will be warned and your edits removed if you do not address the issues.
Turf wars are a bit more tricky. If you invade or otherwise get involved in a project or article that is already quite advanced, it's quite common to be harshly criticized for your work. The men (we know already that it's mostly men) who work on these things invest in them a lot personal passion and the fact that they don't want some newbie to step in and change the direction of a project is a sign of this passion. So in some ways, it is a very positive thing.
Speaking personally, I know that I too am very particular this way and also that I don't have much of a stomach for the type of turf wars I was just discussing. The solution in my case was simple: I work solo on all my free software and I only work on Wikipedia articles that few others are interested in yet I have expertise in.
There is one final issue I have not yet touched on and that is the idea that women have been socialized to be less interested in things like math and science. This is possible, but it may also be something that is inborn--this was almost taken for granted less than 50 years ago. It's hard to come to an objective determination in the matter especially since feminists will try to undermine any evidence that suggests it is as the whole debacle with former Harvard president Lawrence Summers shows.
On the other hand, girls now lead boys in just about every school subject and I believe that includes math and science. Also, as I already pointed out, editing Wikipedia requires little technical ability.
Attempts to redress the balance through "affirmative action" programs are damaging to both men and women. Damaging to men because they no longer compete on a level field. Damaging to women because the abilities of any woman who "makes it" are now suspect.
One of the reasons levelled by feminists for the lack of females in this or that field is the "lack of role models." This, unfortunately, does not fly: if you look back through history, there have been always plenty of notable women doing just about everything, from pirates to mathematicians to composers, even if they have been in the minority. Think of the courage and determination it required for these people to get to where they were given the reigning social prejudices and strictures of the time. If modern women cannot emulate these matriarchs, despite these barriers having been knocked down, despite a plethora of affirmative action programs such as grants, scholarships and mentorship programs available only to women, perhaps the problem is not with society at all but rather the modern human female.
One of the essays I wrote for the course was about discrimination in science. Increasingly, I'm also beginning to question whether the lack of women in the "hard" sciences, math and physics in particular, has anything to do with discrimination and might rather be caused by other factors. To tease out the answer to this question is quite difficult and there are no doubt multiple factors.
Instead, I'm going to look at a closely related phenomenon: the lack of female editors on Wikipedia (estimated at around 16%) and the lack of females creating open source software (probably less than 5%). Based on personal experience, it's virtually impossible that this discrepancy is caused by any kind of overt discrimination. The reason I say that is simple. I have been both a Wikipedian and an open source software developer for several years now. Neither activity require any qualifications, nor do they require permission. All you need are a few technical skills or the patience to learn.
In the case of Wikipedia, you don't even need to be the stereotypical "tech geek"--the only technical skills you need are the very simple mark-up language and you can write about anything you like. So if you aren't interested in math or physics or computer programming, you can write about ladies handbags or your favourite soap operas or whatever. The articles on popular culture, in fact, far outnumber the articles on technical subjects.
In all the time I've been working at these things the amount of human interaction I've experienced has been minimal which is the way I like it. So I can only conclude that the real reason for the lack of females is up to one factor and one factor only: interest. Women are simply not interested in doing this kind of work. After all, unless your project hits it big like Linux, you get no rewards other than personal satisfaction.
If you enjoy programming, you already know how easy it is to engage your passion, but in case you don't, let me tell you. Most of my programming is done on a netbook that cost me $350 which is not a large sum of money and I've seen similar models go for as little as $200. My computer has a dual-core, 1.66 GHz processor and is more powerful than many super-computers from 20 years ago. In addition to a computer, you will also need software: a programming language in the form of a compiler or interpretter. I use the GNU suite of compilers which includes C, C++ and Fortran and can be downloaded for free. It will even run on Windows using another free program called Cygwin.
To turn the software you write into open source, you can start an account on Sourceforge and upload it so that others can download and use your software, or if they choose, modify it or use it as a starting point for their own work. The amount of human-to-human interaction up to this point has been all but nil. In other words, ladies, if you want to become free software developers, get coding because nobody and nothing is stopping you.
Suppose that you are a geek (which in my case is not supposition). You have virtually no romantic prospects, maybe not much of a social life and you are wary of the bullshit that might get you there. But you know what you like. You enjoy tinkering: writing computer programs and learning about science. And you are honest. So you take this passion and this integrity and you pour it into a hobby--developing free software. At first, nobody notices because you yourself are also a nobody. But because of your passion and because of your integrity, everybody starts using it because it's just so damn good.
Seems like the dream scenario right? Geek loser makes good. Except now come the wannabes and coat-tail hangers who want in on a piece of the action, even though they may not have half the passion or ability. It's hard to view feminist complaining about this issue in any other way--they see what men are up to and they want a piece of the pie. Nothing is stopping a determined woman--any woman--from opening an account on Sourceforge and starting up her own Software project or from starting an article on Wikipedia.
One of the complaints that gets bandied about from feminist quarters is this nebulous concept of "harassment"--that women who try to do so are routinely harassed. In many instances, I suspect they are confusing standards and normal "turf wars" with harassment. Wikipedia has certain rules and guidelines that must be adhered to in order for it to be what it is. If you fail to abide by these rules, yes you will be warned and your edits removed if you do not address the issues.
Turf wars are a bit more tricky. If you invade or otherwise get involved in a project or article that is already quite advanced, it's quite common to be harshly criticized for your work. The men (we know already that it's mostly men) who work on these things invest in them a lot personal passion and the fact that they don't want some newbie to step in and change the direction of a project is a sign of this passion. So in some ways, it is a very positive thing.
Speaking personally, I know that I too am very particular this way and also that I don't have much of a stomach for the type of turf wars I was just discussing. The solution in my case was simple: I work solo on all my free software and I only work on Wikipedia articles that few others are interested in yet I have expertise in.
There is one final issue I have not yet touched on and that is the idea that women have been socialized to be less interested in things like math and science. This is possible, but it may also be something that is inborn--this was almost taken for granted less than 50 years ago. It's hard to come to an objective determination in the matter especially since feminists will try to undermine any evidence that suggests it is as the whole debacle with former Harvard president Lawrence Summers shows.
On the other hand, girls now lead boys in just about every school subject and I believe that includes math and science. Also, as I already pointed out, editing Wikipedia requires little technical ability.
Attempts to redress the balance through "affirmative action" programs are damaging to both men and women. Damaging to men because they no longer compete on a level field. Damaging to women because the abilities of any woman who "makes it" are now suspect.
One of the reasons levelled by feminists for the lack of females in this or that field is the "lack of role models." This, unfortunately, does not fly: if you look back through history, there have been always plenty of notable women doing just about everything, from pirates to mathematicians to composers, even if they have been in the minority. Think of the courage and determination it required for these people to get to where they were given the reigning social prejudices and strictures of the time. If modern women cannot emulate these matriarchs, despite these barriers having been knocked down, despite a plethora of affirmative action programs such as grants, scholarships and mentorship programs available only to women, perhaps the problem is not with society at all but rather the modern human female.
A tale of seven swimming holes
This afternoon I took a walk in one of the ritzier areas in my neighbourhood. In particular, I remember walking along a ridge and noticing that each house had a spectacular (and private) view of the Ottawa River Valley. But then I realized that the lovely view was marred by a large pulp mill belching foul-smelling smoke. I noted, with some satisfaction, that the same system that allows for the commodification of something so ephemeral as a view, also produces its destruction through "industry." I also found myself wondering, "Am I the only one who gets this?"
Lets say you live in a town with seven swimming holes and you can visit any one of these swimming holes any time you want. Now these beaches vary a lot in quality depending on the time of day and year and your personal tastes. One is East-facing and so is ideal for early morning swims while another is West-facing and so is ideal for evening swims. Another has large, imposing Oak trees to the South making it perfect for afternoon swims during the dog-days of summer. Of course, sometimes you are in the mood for crowds because maybe you want to rock a new swimsuit or search for old friends and so head to one of the most popular swimming holes. Other days you might prefer to be alone, either because you're depressed or have a romantic engagement and so head to one of the less popular beaches. And then, you never know when there might be an algae bloom which will make one of the lakes unpleasant for swimming
Now lets say that a bunch of development companies buy up all the land around these lakes--as they are wont to do in "free" countries like Canada--and sub-divide it into residential lots. You are lucky enough to score one of them and it is on the East-facing lake. Now you have an entire lake that you only have to share with a few other neighbours! One month later you are re-assigned at work and have to work early mornings. Two months later a giant algae bloom invades the lake. Despite chlorine treatments and other invasions, it does not clear up. You never go swimming in your town again and instead drive 250 km to an out-of-town resort.
So, were you richer before or after?
Lets say you live in a town with seven swimming holes and you can visit any one of these swimming holes any time you want. Now these beaches vary a lot in quality depending on the time of day and year and your personal tastes. One is East-facing and so is ideal for early morning swims while another is West-facing and so is ideal for evening swims. Another has large, imposing Oak trees to the South making it perfect for afternoon swims during the dog-days of summer. Of course, sometimes you are in the mood for crowds because maybe you want to rock a new swimsuit or search for old friends and so head to one of the most popular swimming holes. Other days you might prefer to be alone, either because you're depressed or have a romantic engagement and so head to one of the less popular beaches. And then, you never know when there might be an algae bloom which will make one of the lakes unpleasant for swimming
Now lets say that a bunch of development companies buy up all the land around these lakes--as they are wont to do in "free" countries like Canada--and sub-divide it into residential lots. You are lucky enough to score one of them and it is on the East-facing lake. Now you have an entire lake that you only have to share with a few other neighbours! One month later you are re-assigned at work and have to work early mornings. Two months later a giant algae bloom invades the lake. Despite chlorine treatments and other invasions, it does not clear up. You never go swimming in your town again and instead drive 250 km to an out-of-town resort.
So, were you richer before or after?
Subscribe to:
Posts (Atom)