Categories
academics

Peer review in the electronic age

In academic computer science, conferences are often more important than journals, but

The current system of publication in biomedical research provides a distorted view of the reality of scientific data that are generated in the laboratory and clinic. This system can be studied by applying principles from the field of economics. The “winner’s curse,” a more general statement of publication bias, suggests that the small proportion of results chosen for publication are unrepresentative of scientists’ repeated samplings of the real world. The self-correcting mechanism in science is retarded by the extreme imbalance between the abundance of supply (the output of basic science laboratories and clinical investigations) and the increasingly limited venues for publication (journals with sufficiently high impact). This system would be expected intrinsically to lead to the misallocation of resources. The scarcity of available outlets is artificial, based on the costs of printing in an electronic age and a belief that selectivity is equivalent to quality. Science is subject to great uncertainty: we cannot be confident now which efforts will ultimately yield worthwhile achievements. However, the current system abdicates to a small number of intermediates an authoritative prescience to anticipate a highly unpredictable future. In considering society’s expectations and our own goals as scientists, we believe that there is a moral imperative to reconsider how scientific data are judged and disseminated. (cite)

See my previous notes on refereeing in computer science.

Here

Here

Here

Categories
software business

Computer Science as a failed discipline

Phrenology
Phrenology

I write an email to a CS Prof. asking if they have any followup work on some nice OS measurement research they published a couple of years back. The response is that there is no followup and then:

Me: Too bad. Is it just me or has everyone given up on measurement in OS research?

Prof: It is tough to get reviewers to not have the “there is nothing surprising here” reaction to a measurement study.

For many years, people working in academic computer science argued about whether the field was “science” or “engineering”. To me, this is a silly distinction for a lot of reasons, but currently the field seems to have settled on “neither”.


Categories
software business

the male weirdness of computer science

ELLEN SPERTUS, a graduate student at M.I.T., wondered why the computer camp she had attended as a girl had a boy-girl ratio of six to one. And why were only 20 percent of computer science undergraduates at M.I.T. female? She published a 124-page paper, “”Why Are There So Few Female Computer Scientists?”, that catalogued different cultural biases that discouraged girls and women from pursuing a career in the field. The year was 1991.

Computer science has changed considerably since then. Now, there are even fewer women entering the field. (RANDALL STROSS Published: November 15, 2008 New York Times)

When I was a CS Department Chairman (worst job EVER), they sent me to some junket in Utah where there was a seminar on this very topic and it was clear that nobody had any idea (there was a guy who claimed it was because math was too hard for girls, but I don’t know if he survived the meeting). I think it’s a combination of two things game/geek culture and the isolated cubicle job prospect. Well, of three things, game/geek culture, isolated cubicle jobs, and the “science/engineering” envy that has permeated US Computer Science departments. Those and maybe too many Monty Python references.

When I was teaching intro CS, it was a shock to see how ugly and weirdly competitive the classroom environment had become – not at all like when I was taking intro courses or starting to work in the industry. The students with some computer background, 100% male, seemed bent on trying to intimidate the others with their (mostly pointless or incorrect) knowledge. I can’t express how different this was from the distant past when I took CS intro courses in the highly enlightened precincts of the U. of Arkansas (FORTRAN on punch cards!) and the University of South Carolina. In those days, sitting in on an engineering class was an unpleasant excursion into an exclusively male enclave and very different from CS classes.

And who wants to sit in a cubicle farm, cranking away for the benefit of “the stockholders” with a bunch of hyper-competitive but not very nice people? One of the criticisms we got at FSMLabs at one time from potential investors was that we were running “a lifestyle business”. And we’d go to The Valley and see all those companies where there were game rooms and even one, which I will not identify, where the startup CEO and his employees would gather round amps and play Louie-Louie in between rounds of pizza and coke and coding furiously. Not that working in an even larger cubicle farm in a non-start-up seems much better. Why is it that engineering/CS companies are so dedicated to making the work time of their employees so horrible? And why should programming be a back office function anyways?

Finally, returning the the University, the decline of women in CS started at around the same time that the field came under heavy pressure to “professionalize” in the Universities. There were people who insisted that CS become a regular engineering discipline and there were people who wanted CS to be a particularly tiresome branch of mathematical logic, and, worst of all, there were people who wanted CS to be devoted to learning how to use whatever applications and tools were currently popular in industry. I mean, given the choice, what rational person would pick 4 semesters of J2EE over something like understanding mitochondria? CS is an enormously fascinating subject that touches all areas of how people work and think and how the world works, but CS education seems often to be devoted to obscuring that.

Of course, I’m operating on anecdotal information and I’m not a woman so I may be completely off.

Categories
algebra

Data structures and algebra

[Edited 9/10] There’s an easy connection between data structures and basic abstract algebra that may or may not mean anything, but keeps getting rediscovered. I’ve never seen it clearly explained (anyone with a reference or who notices an error in my rusty algebra- please send me a note! A discrete note would be nice -) ).

What keeps on getting rediscovered is that objects with invertible and commutative methods would make things very convenient especially for transactions and for concurrent access. What I have not seen explained is that this discovery reflects the distinction between groups and monoids.

A monoid is one of the simplest algebraic structures and is usually given as a set M of elements and and a binary operation \(\circ\) on elements of M with the following properties:

  • Closure: for every a and b in M, \(a \circ b\in M \).
  • Associative:    \(a \circ  \) \(( b \circ c ) \) = \((a \circ b) \circ c \) for every a, b, and c in M
  • Identity: M contains an element I so that for every \( a \in M, I \circ a = a \circ I =a \).

That’s it. A pair \((M,\circ)\) and three conditions: closure, associativity and identity. The natural numbers 0,1,2,… form a monoid with ordinary integer addition as the operation and 0 as the identity. The positive numbers form a monoid with 1 as the identity and multiplication as the operation. More intriguingly for our purposes, the methods of an abstract data type or object generate a monoid.

A monoid \( (M, \circ)\) is “generated” from a set X if and only if X is a subset of M and every element of M can be constructed from elements of X using the operation. For example, the monoid of non-negative integers with addition as the operation can be generated from \(\{0,1\}\) since \(2= 1+1, 3 = (1+1)+1\) and so on. One really simple type of monoid is the set \(E^*\) of all finite strings that can be generated from an alphabet with string concatenation as the operator.

We can use the methods of an object as the generators of a monoid as follows. Let’s define an object by a set V of possible values and a set F of methods that can act on the object. A method is really just a function from V to V so that if the object has value v and we apply method f the object value becomes f(v). The binary associative operation of “function composition” can be used to construct “programs” from methods: \(f (gh))(v) = f(g(h(v)))\). The monoid generated by the methods, then, is the set of programs that can be constructed using function composition on the methods. All we have to do further is insist that there is a null method \(Null(v)= v\) is in F.

For example, if our data structure is a stack and our methods are \(push_v\) for every v in some set of values V, plus pop, add (pop the top two values, add and push the result), sub, dup, swap, and \(null\), we can build a Forth Monoid.

If a is an element of a monoid and there is a second element b so that \(a \circ b = I\)  then b is called the “inverse” of a. If there is an inverse for every element of the monoid, then the monoid is called a “group”. (Note that in a group if b is the inverse of a, then a is the inverse of b because of associativity. If the group operation commutes, the group is called Abelian or commutative.

Most monoids are not groups. For example, our Forth Monoid has an inverse for “dup” (“pop” ) but pop does not have an inverse for a very interesting reason: pop loses information. Add has no inverse for the same reason: if the stack is (100,200) and an add method produces (300), then there is no operation that will deduce magically that 100 and 200 were on the stack before and not (0,300) or (1,299) or …  Monoids that are not groups lose information when they compute programs. If an object is associated with a group, then no matter what the starting value of the object, if we know the program that was applied to the object, we can produce (in theory) an anti-program that returns us to the initial state. An example of an object that generates a group is an incrementer with the single method “add1” with values over the set 0 – (232 -1) The inverse of add1 is sub1 which can be generated by 232 add1’s (note that  the words “efficient” or “practical” did not appear anywhere above).

It has been noticed more than once that data structures whose monoids are groups would be easier to parallelize or to use for transactions. For example, if programs can be inverted: so that for every program p there is a -p with -pp = I then we can unroll back to earlier states. That is, if we apply f,g,h to the data structure, and then realize that the transaction cannot be completed, we know that \(-h(-g(-f(f(g(h(x)))))) = x\). We do not have to know what “x” was to undo the transactions. If the programs “commute”, life is even easier, since undoing a single method application can be done at any time, without undoing other method applications. With a little thought you can see that a commutative group data structure is convenient for parallel computation because the order of operations doesn’t matter (less synchronization required) and because every operation is reversible. So if Task T starts modifying the data structure and more important task K interrupts, T’s partially completed changes to the data structure can be rolled back and K can do what it needs.

I’m not completely convinced that stumbling into group theory tells us anything useful about data structures except that computer science is hard and is mostly concerned with horribly irregular structures that do not possess convenient properties. But groups and monoids keep popping up in computer science, even though theoretical CS people seem to not be interested anymore. Famously, state machines determine monoids (or semi-groups) and there is a body of mathematics called Krohn-Rhodes theory which is concerned with factoring monoids into cascades of groups and residual monoids that correspond with splitting state machines into pipelines that have no feedback. Also there is a nice relationship between logging and group structure: Most data structures cannot be practically converted into group like structures even though every monoid can be made into a group by adding a log.

Suppose we make our Forth object have values (data-stack,log-stack) where the log-stack is essentially a stack of data removed from the stack so that “pop” removes the top element of the stack and pushes it onto the log stack – then “invert-pop” can pop the log-stack and push the value onto the data stack. I wonder if “bounded invertibility” would be an interesting property. The interesting Forth objects have a bounded stack anyways. Suppose we add a smaller log-stack so we can invert some programs: suppose the methods are invertible and programs constructed by composing at most K methods are invertible.

Anyways, there is something worth digging out in all this: think of filesystems designed to be K-deep group-like.

(I was inspired or provoked to produce this note after attending a talk by Maurice Herlihy at UT. I can’t say I understood much of Professor Herlihy’s talk (my fault, not his) but he was discussing the utility of converting data structure monoids to groups without mentioning either groups or monoids. I also found out that distributed shared memory is still around- how depressing.)