The Programmer's Stone
JeremyNobody writes "The Programmer's Stone is a marvellously insightful essay on the nature of programming. It makes a great distinction between "mappers" and "packers" that sheds a lot of light on hacker culture. It also has a lot to say about the Quality Plateau, Design Patterns, the povery of methodologies and the false goal of deskilling. Not to
mention Who Stole my Vole ? "
. . . the story of my life.
Don't let too many years go by before you decide to move.
"The number of suckers born each minute doubles every 18 months."
These are my friends, See how they glisten. See this one shine, how he smiles in the light.
The guy is obviously a goddam packer, and not one of us fine mappers who can spot concurrency problems from a mile away. :)
Here is what I would have done with the original code: short of replacing the mutex with a critical section, I would eliminate the case in which the mutex is tested for abandonment. The logic of the system should guarantee that mutex abandonment doesn't take place. It can only happen if you have threads that mysteriously terminate when they should not, like in the middle of holding a critical lock. When that happens, your software is screwed; you might as well dereference a null pointer and call it a day. So these error checks are a complete waste of time and indicate a strong packer mentality---``I don't know what the hell is going on in this software, or what the relationship is between this function and the rest of the system, so I will guard myself against every possiblity, real or imagined.'' It would be better to inspect all of the critical regions of code protected by that mutex and verify that all of them properly release the lock, and do not terminate the thread in the middle.
And yet your original mispost got moderated as 'insightful' whereas your followup was what was 'offtopic.' Huh.
---
"'Is not a quine' is not a quine" is a quine.
"'Is not a quine' is not a quine" is a quine.
Quine "quine?
For many years I have summed up my philosophy as: "Challenge the Default Assumption", and applied this principle in every domain. It seems like a reasonably good technique for ensuring that new experiences and techniques get mapped instead of merely packed.
Peace and love, y'all
(Hopefully this isn't redundant..)
The "Packers" vs. "Mappers" distinction looks a lot like the Sensing vs. iNtuiting distiction in the Myers-Briggs Type Indicator and it's ilk.
See http://www.keirsey.com for an online MBTI clone, or http://www.skepdic.com/myersb.html for a more skeptical look at MBTI.
You've completely missed the point.
We have this knowledge of the "nitty gritty" details because we find them interesting.
I don't think I did. You find them interesting because you learned enough of them for your innate ability to think (to "map" as these folks put it) began to get interested in acquiring facts because you began to see a "map." I'm suggesting that "mapping" emerges naturally from sufficient observation of "facts." The problems come when people confuse information and judgement. When one becomes bigoted about facts. When one comes to accept facts not because they are observed, but because they are believed. This is the difference between knowledge and faith, and the application of judgement based on observation rather than belief is the difference between wisdom and dogma.
No, the acquisition of knowledge is learning, a new discovery, a source of exhiliration.
Having useless facts rammed down your throats by clueless teachers in the cesspit we like to call public education is drudgery.
There is no substitute for study, for the exercise of memory. There is no subsitute for rote learning when it comes to the acquisition of "facts." Facts become the arsenal for the expression of "thought," which is the higher synthesis of information, the only truly human act.
It will if you are capable of mapper thinking.
Ever heard of tech manuals?
A mapper is not daunted by lack of knowledge.
A packer is limited by lack of thinking.
What does that mean? I have never met anyone incapable of mapper thinking. My point was that learning facts is a straightforward application of self-discipline -- that learning the facts is required in order to think, and that "mapper thinking" doesn't contribute to this process. In fact, I am arguing that mapper think emerges from having a large and wide-ranging body of knowledge. This notion that "mappers" are some sort of intellectual elite, above mere fact, is, in the literal meaning of the word, poppycock. I completely agree that mapper thinking exists. I just think it arises from a combination of wide knowledge AND self-confidence that one's thoughts are worthy of expression.
What I think public education does wrong is NOT the rote teaching of facts, but rather the ongoing process of humiliating children into thinking that their thoughts, their creativity has no value. What schools (painted with an overbroad brush) do wrong is that they criticize children when they have an insight, a flash of original thought, and they get shot down because that thought happens to be contradicted by a fact they didn't know about. That discourages the child from ever exressing another insight because they might be "wrong."
Feynman? Whatever. Feynman's DAD on the other hand is a miracle. Feynman's dad would not say, "No, that's wrong." instead he would say, "Interesting idea. I wonder how we can test that?" Feynman being a genius was inevitable after that.
No, the problem is that they teach you WHAT to think instead of HOW to think (packer vs mapper, anyone?).
Everyone knows how to think. What schools do is to shut down the desire to think. Big difference.
There is a BIG difference between how the function code pins work on the m68000 CPU and the dates that each explorer came to the americas (Can you believe that in grade 9 I had to memorize this shit in order to pass the course?)
Yes, I can. And I think there's nothing wrong with that. I'm not sure why you think there is. You never know when those facts may become integral to a much more sophisticated thought. No datum is without value.
I have never taken a computer course in my life and I now make my living writing computer software. I'll tell you this, though. While I am often a much more innovative programmer than those I have worked with, I had a lot to learn to learn from those people with their "useless" education. I had to learn a lot of engineering principles. I learned a lot about program stability, testing, completeness, and development process from those people. They have a lot of useful, practical knowledge that would otherwise only have come to be by my continuous process of Innovation by Spectacular Public Failure (I'm thinking about getting a patent). All the "mapper" thinking in the world doesn't prevent you from having to rediscover a fact that others already knew and you could have learned if only you had shut up and listened. Creative thinking is great, but no matter the subject, there is definitely somebody out there who knows something about it that you don't.
- Thomas Edison did NOT invent the lightbulb.
I never thought or said he did. He did make a commercial success of it, however, and by a very Microsoft like marketing practice made himself into the "lonely genius inventor," (like claiming to be a "mapper," perhaps?), never mind the 80 engineers working for him who actually ran all the tests and did all the experiements. Still not sure what your point is...
- The Wright brothers were NOT the first to fly a manned airplane.
Right again. Still not sure what your point is...
- Columbus did NOT discover America.
Nope. Instead he made the greatest face-saving PR move in history. I think it's fair to say America had already been discovered. By the Native Americans, at the very least.
- "Honest" Abe Lincoln, your favorite president, was very much in favor of the slave trade.
Not so. This is a gross misunderstanding of Lincoln's position. He was a politician. And while he was personally opposed to slavery and the slave trade, he had to be elected. The slave trade was a northern economic concern. There was no way for a political animal to take it on directly. He also was overwhelmingly concerned with the preservation of the Union, and as such he backed away from policies that could have been perceived as abolitionist. BTW, there was very little import of slaves by the mid-nineteenth century. Most southern plantations were "breeding" their own. In fact, the Confederate Constitution outlawed the slave trade as a nod to British opposition, and in hopes of encouraging them to recognize the Confederacy. It is one of the more seemingly incongruous elements of the Civil War period.
BTW, I learned much of this in school (I was a history major) and I read a lot of it in books. Didn't "map" any of it.
No, I think the only evil is the crushing of self-expression, the discouragement of child-like wonder, the disconnection of inference and imagination. It isn't memorization of dates. You are going to find through your life that people sometimes get the facts wrong; that some of the things you think are important to memorize turn out to be useless (to YOU); that things you beleieve turn out to be wrong. What matters then is your willingness to explore. That's what gets shot out.
Yes, I think we do agree. What I think rankles me is the high-handedness of anyone who believes he belongs entirely to one camp and is therefore able to label others as belonging entirely in the other camp. My observation of human behavior doesn't bear this out. Everyone is capable of, and at times requires both kinds of thinking.
This tendency to observe something as obviously multivariate as human learning, and then to arbitarily create a handful of categories and then slam people into them (as if there were only that many kinds of people) is intellectually (and aesthetically) repellent to me. I also notice that people who categorize in this way tend to create a category with attributes they value and admire and another category with traits they dislike and revile, and then they firmply place themselves in the first category. All of these "models" of behavior seem to me to be self-serving. They seem to be a way for the creators of the model to feel good about themselves. While that's very nice, and more power to them, do not expect me to adopt their labels and say, "thank you very much. I will be so much happer knowing I am a 'type X!'. Obviously THIS is what has been holding me back all of these years!"
It is such a gross oversimplification of a complex phenomenon that it cannot help but be inaccurate.
I'm not saying generalizations are without value. If we could only talk about human behavior at the level of indivduals, we would never find patterns (in fact, we would never develop a vocabulary for it). In some cases it is the vagueness, in some cases it is the self serving quality.
I do not see a big difference between someone saying, "I am a mapper," and someone else saying "I am a Capricorn." They are both saying equally vague and meaningless things about themselves.
You willingness to dismissively throw a label on so many people you have never met, whom you know nothing about by observation, but only by assumption, and to suggest that all of the problems of the world are their fault (for obviously, you as a mapper are above any responsibility for the ills of the world) is the worst sort of uncritical and bigoted thinking, rooted, if you look deeply, not in any observation on your part, but rather on your prejudice, and, if you'll forgive me joining in, rather packerish.
Please forgive me for the tone. I am not trying to single you out personally, because I am in general agreement about the nature of open-mindednees and free-thinking. It's just that I am always suspicous of anyone who is so freely claiming to be an open-minded free-thinker. I have found this is usually an unexamined belief. I happen to feel your conclusions about the deficiences of a significant portion of the human race whom, I am fairly certain, you have never met tends to bear out my conclusions.
I cannot comment on Judge Dredd. I know nothing about it.
I don't wish to belabor the point. I can assure that nothing you have said puts me on the defensive. Perhaps I infer to too much from your writing style. If you go back and read your statements, they appear rather absolute.
I'm sorry, but to find fault with the behavior of others and to reduce their whole humanity to a label, whether it be "packer" or any other label is the definition of bigoted. Again, perhaps this is me drawing overbroad conclusions from your style of rhetoric. I apologize if that is so. Even so, while you may not be guilty of these tendencies I expression concern about, the ability to use ideas like this one (and like DiSC, or like Strong-Campbell, or like any of a host of other psychological categorization systems) to segregate and create identities can be terribly abused. I am urging caution.
The reason I have invested so much effort in striking the flanks of these ideas is because they are compelling. The seem holistic, and they appear to match experience. I think there very much is something of value here. I am merely suggesting that the ideas are vague, overbroad, and incomplete. I do not for moment think they should be dismissed or suppressed; merely examined closely.
I am very willing to entertain your point of view. I entertained it very thoroughly and considered with much reflection before I committed my concerns to "paper."
The one phrase in your most recent reply that causes me deep concern is "...people are missing their full potential (not to mention annoying others incessantly) as a result..." People who don't think like you do are annoying and those people are packers?
I am not a literal-minded automata, I am merely concerned because I think many people can (and will) take these ideas not as an agenda for self-improvement, but as assurance of self-superiority, and a way to dismiss the opinions and thoughts of people whose way of thinking they find annoying.
I am not a robot, I am not a genius (I think genius does not exist, actually -- it is merely full engagement of the human mind, much as I think you believe as well), I am human being with the full mix of intellect and prejudice, of reason and emotion, of calm and rage. So are you. So is everyone who annoys you. I simply mistrust that urge in me that suggests I see clearly where others do not. There are real differences in ability, but this does not necessarily correspond to social value.
Please understand, I believe that you want to put these ideas out not to show the superiority of people who are "mappers," but rather because you believe that these ideas might help to liberate the thinking of people who haven't thought that way for some time because of social forces that discourage it. I believe your evangel to be one of liberation. I truly do. It is just that ideas like this can "tribalize" (if you'll fogive the disgusting neologism) and that does real harm.
I try to live my life by a rather classless little cliche: "If one person tells you that you have a tail, you can laugh and tell them to go to hell. If two people tell you that you have a tail, it is time to check your ass."
I am merely asking you to check your backside.
And of course that should be "express," not "expression" in the second paragraph. Ah, Preview, where is thy sting? ;-)
The essay is so heavily slanted towards the opinion that "mappers" are good and "packers" are bad that you can't help but put yourself on the side of the mappers, simply to avoid putting yourself into the PHB, packer mold.
But to say that people are either one or the other, mapper or packer, is ludicrous. Everyone has pattern matching skills, everyone tries to fit problems into domains they know, and everyone knows that stepping back from a problem to see it in new light is often helpful.
That some people are better at seeing patterns than others is not shocking news. Nor is it news that some people doggedly try stupid things until one of them works. But, a person who tries all fifteen keys on his key ring before finally opening his own front door might just be a fantastic improvisational musician (improvisation being much more ephemeral, non-analytical and dependent on "mapping" than programming).
There were some good and interesting points in the essay. But the distinction between mappers and packers just doesn't hold up.
I have discovered a truly remarkable proof which this margin is too small to contain.
Well, Richard Feynman was involved in the investigation after the Challenger disaster. Someone who knew him as a friend asked for his opinion---which spiralled into Feynman sort of joining the investigation and uncovering some key evidence.
I couldn't say for sure what "six lines" means. Maybe the seven separate segments that form the SRB? Beleive it or not, here I am at NASA and we haven't even got a picture of an SRB handy. The irony!
quickie definitions for the acronym impaired--
SRB = solid rocket booster
STS = space transportation system (the shuttle)
Offtopic: Saw a diagram the other day with an object labelled `RMS handle'. No, don't get your hopes up that's Stallman's going into space. It only meant `remote manipulator system';)
This would probably be a good place to disclaim my opinions as my own and not those of any employers or agencies. Blah.
>Anyone else has the impression that programming courses are made up for those who don't grasp the concept of programming?
:)
:)
Yes, that would be the point - they're in the class to learn it.
However, too many people go in there and never quite 'get' programming, on a gut level. I totally agree with that. I've seen the sorry results of it - clueless people who produce horrid code, and don't understand *why* it's horrid.
Not that I'm perfect, but the other developers in my group don't groan *too* loud when they see my code.
I just have read it all the way through (it took about 4 hours), and it really is as good as it looks.
The biggest thing I got from this is a word to describe myself. I am a Mapper (so are you, probably).
One note, for anyone who makes it to the brief discussion of the Prisoner's Dilemma at the end. Go and read The Origins of Virtue by Matt Ridley. It covers this situation and the more general problem of co-operation in an egotistical world. It starts at the level of chromosomes (there is such a thing as a parasite chromosome) and goes up the levels to society, subcultures and the whole world. Its definitely the work of a Mapper.
Paul.
You are lost in a twisty maze of little standards, all different.
In fairness to NASA, bear in mind the following poinsts: People's lives depended on doing this stuff right. Ad-hockery in safety contexts has caused quite a lot of accidents in the past. Hence requiring the technicians to follow the procedure was the Right Thing. It probably did work out cheaper for NASA to employ these technicians to count around hundreds of little holes all the time than to verify the safety of the change (what type of paint? would it react with the fuel?) and reprint all the procedure manuals to accomodate it. A much bigger problem with the mindset was the quote "a 4kHz oscillation is in our database". This turned out to mean "we have a major vibration problem with the engine, but the management don't want to know about it". Paul.
You are lost in a twisty maze of little standards, all different.
The thing about being a mapper is that once the map of the processor is established, details like the state of the interrupt enable flag become obvious. You don't have to learn them, you just deduce them from the map.
I recall an incident where my wife was revising for an exam. She had written half a dozen equations down and was trying to learn them. I glanced at the sheet and said "Why bother learning all those? You only need these two simple ones and you can derive the rest". It summed up the difference very clearly.
Paul.
You are lost in a twisty maze of little standards, all different.
To me programming is really pattern matching - you translate the requirements into a high level abstraction, then morph/manipulate that abstraction until it fits the form (a meta-pattern) of an interconnected set of previously encountered/implemented forms. In other words, you find the solution rather than solve the problem. It's much easier that way!
I was introduced to Alan Carter's writings (and his concept of mappers and packers) about a year ago by a mutual acquaintance who independently discovered some of the same concepts, not by working with programmers, but by working with ADD diagnosed children.
I would have most likely been diagnosed with ADD, had I been born later than I was. Since I first heard of ADD, it scared me... "Let's pump these children full of drugs, since we can't control thm..." Yet if that was done to me... shiver
I have found the concept of packers and mappers to be very true in my experience, though not in those terms. I have always seen people as "button pushers" and "problem solvers". I have met many people that seem to beleive that the only way to solve a problem is a procedure. "If the green light goes on press the red button." If you try to explain what the green light means and what the red button does to fix it, they will listen, and probably retain much of this (I have found many button pushers/packers take tons of notes...), but if one day the red button doesn't work, they will be completely lost as to how to solve the problem, no matter how trivial the solution is.
Yet, I have also noticed that many people do have "mapper" abilities, but only in certain areas. For example, my mother could easily cope with missing an ingredient in a recipe, mapping all here knowledge of cooking to come up with an alternative, understanding everything involved. But if presented with a new task on the computer, she will not even try explorering the menus, or the help system. She will look imediately to me for a procedure.
It is probably related to the way people learn a subject that determines how the act in regards to that subject. If you learn something almost entirely on your own, you will be essentially forced to "map" while if it is taught to you by others, you will likely only "map" if that is your dominate mode of thinking. In other words, you will learn in the manner you learned to learn. You will solve problems in the manner you learned to solve them. If you are inclined toward "packing", you will default to it. If you are inclined toward "mapping", you will default to it.
I consider myself in that group which "packers" don't understand. I have worked with to many people of the "button pusher"/"packer" midset to dismiss the existance of this distinction in thought models. I would not go so far as to say that they a disjoint, far from it, but I will express the little bit of arrogance that most "mappers" likely share: Society would be better off if we taught our children to be "mappers", and if we aspired to lift our friends, coworkers and love ones out of the "packer" mentality.
MetallicBurgundy
Those who divide people into two kinds and those who don't.
Seriously, though, I think programming is more than mere 'mapping' vs. 'packing'. I'm a database programmer from way back, and one of the first things I do is identify all the data elements in the problem domain at hand (this would be the perjorative 'packing' as I understand it). Yet, having done this, it's much faster then to proceed with the mapping phase: identifying relationships, constraints, business procedures, UI elements, etc. As you go, you enhance your data model and validate your mappings against elements of the data model. Is this so strange?
It's almost like the dichotomy between top-down and bottom-up design. It's best not to do one or the other, but to approach a design from both ends (and the middle!). Any piece of hard-won knowledge about the problem domain that you come across has a place, even if its mapping isn't readily apparent... don't lose it!
If you post it, they will read.
The packer/mapper concepts look _a lot_ like concepts in Objectivism, only not as well developed. Ayn Rand talks about (and all of her villians in her fiction were instances of) concrete bound mentalities, these are clearly packers. The mapping concept is a primitive form of AR's theories on concept formation. Anyone who feels the mapper/packer concepts are like a flash of light in a dark room should probably go look into Objectivism for a far more developed theory.
-- Eric
"There is no surer way to ruin a good discussion than to contaminate it with the facts."
I went through it quickly, until I hit the part (on the second page, I think) where they prettify some Win32 code from a book. I was delighted by their choice of brace style, and joyed by their slamming of the (IMO) awful Hungarian style, but then it hit me: they use parenthesis on their return statements! I never did understand why some people think return should have function calling-like syntax. Er, not until I looked it up in the C FAQ, question 20.19, that is. Hint: historical reasons. But anyway, yuck! :)
OnOntopic: It did seem like a very good read, with lots of interesting ideas. It's nice to see ESR doesn't have a monopoly on this kind of material.
main(O){10<putchar(4^--O?77-(15&5128 >>4*O):10)&&main(2+O);}
...kind of like mine! I really like his concepts, although, coming from a similar point of view, I think that he is trying to apologize for his way of thinking and behaving--much like mine--using a new set of terms he creates. I used to call the dichotomy worker-bees and hackers. I remember getting punished for reading ahead in the book, or even reading a genetic engineering book in 9th grade biology. It is certain that the education system of today rewards his 'packing' behavior, and at best compartmentalizes--gifted and talented--the 'mapping' activities to avoid contamination. I do like his approach though.
Remember this...no eternal reward will forgive us now for wasting the dawn....(jim morrison)
Hello everybody,
First - apologies for the extreme length of this mail - I'm not really acquainted with what is acceptable by Slashdot norms, and I have no webspace to put this rant on to link to, so please bear with me.
This mail has several purpose. One, to point to further material that Alan produced, because many new ideas evolved, and were written down. If you liked the Stone, you might like the rest as well. Second, to answer a few of the criticisms, comments etc. that popped up in the thread.
I'll introduce myself first. I have been acquainted with Alan Carter, half of the duo that produced the Programmers' Stone (I'm pretty sure he wrote the entire thing), for more than a year now (although I only recently met him 'live'. When introduced to his writings by a mutual friend, I fully experienced the a-ha erlebnis some of you will have experienced as well. The phenomenological side of the mapper description fit my situation extremely well, and solved quite a few conundrums that had been puzzling me.
I immediately resolved to contact him, and we started to collaborate. One of the immediate results was an e-mail discussion group, consisting of some of his friends (amongst whom figured Bill Allsopp, the guy who works a lot with ADHD children - he was mentioned in one of the thread messages), and some of mine. Most people were generally quite like-minded (they could all be categorised as mappers in various degrees), but still there were some differences. Differences, mainly in attitude and drive, that later caused the group to break up, but not before having produced tons of reflections, ideas etc. The most important idea to come out of this resulted in the M0 paper.
Building on the M0 idea, Alan produced a series of 6 papers, delving further and further into life, the universe and everything. The M0 paper and some other stuff is available on the Web (http://www.melloworld.com/Reciprocality - watch out, the URL is case sensitive ! - and they're sometimes unreachable anyway), but I can mail you the six central, current papers on demand (//mailto:parickx@janbe.jnj.com).
All of this is experimental stuff - some newer ideas I discussed with Alan when meeting him have not been incorporated, and the whole thing is an outline, and would need quite some work - you have been warned.
OK, now for some comments on what has been said in this thread.
* Packers/mappers : a continuum ?
Yes. It always is easier to just go ahead and state everything in black and white. That is indeed what Alan has done in the Programmer's Stone. The text itself does need refining on that point. At one point Alan drew up the 'Matrix of Doom' which was already a much more elaborate categorisation. It never got discussed much further, and probably could do with more refining.
Personally I very much believe there's a continuity. I also don't think they're necessarily a good categorisation of the universe. Essentially, the human psyche is not linearly separable (my opinion). If one could classify or describe the mind as a multi-dimensional space (say n dimensions) (like MBTI does - they have four dimensions n=4) with each two values, at the simplest level), linear separability would mean you could categorise different classes by drawing a set of n-1 dimensional structures (hyperplane I think the correct term is) that separate the different classes.
To simplify the math-speak, picture a two-dimensional space. In this space, a hyperplane is one-dimensional - a straight line. Linear separability of a set of points means you can draw a line or a set of lines in a way that you get different delimited areas each containing one category. In a one-dimensional space it's even easier : linear separability means you can mark a number of delimiting points, and each category should entirely be between two delimiters, and between each set of two points there should be at most one category.
Placing all human psyches on one single line, and saying you can divide them up with one marking point, is to my mind pure folly (although many people tried over and over again). It amounts to ignoring the complexity of reality (but people are extremely good at ignoring reality, not in the least those who call themselves philosophers).
Still, some approximations can be made succesfully. I believe Alan and Colston at the very least succesfully identified and described some subgroups of humans. The members of the 'mapper' cluster identified all experience the a-ha erlebnis when reading the paper (I'll get to the relation with MBTI in another paragraph).
Packing is a very real phenomenon as well. Only, one should not jump to conclusions and say "one is good, one is bad". Both clusters differ mainly by having adopted through the ages a different cognitive strategy (or by having a genetical preference for one strategy - I'm not committing myself here, and I actually believe the truth is in the middle somewhere). The strategy is partly communicated from generation to generation by culture - I believe this could be demonstrated.
These cognitive strategies could be viewed as different evolutionary strains (whether sociological/psychological or genetical again I do not presume to decide upon). And much as elephants, giraffes, tapeworms, rattlesnakes etc. have evolved from the same beginnings, several strains could have evolved in humankind, of which mapping and packing could be major strains (with lots of subspecies maybe). Is an elephant better or worse than a giraffe ? Or than a rattlesnake ? This probably mainly depends on where you are in the foodchain - but you seen the point : a priori there's no reason to believe one is 'better' than the other. The same mindset should be adopted when approaching the packer/mapper categorisation.
Alan firmly believes however packers have done very bad things. He has ample reason to think so, partly because of his personal background. One of the things packers I think have brought into the world is the ubiquitous guilt and blame mechanism, which is a rudimentary form of social control, and which has grown into a cancer. People working at big corporations know what I'm talking about : blame is almost ritually shifted around until it hits a victim that cannot defend itself.
This is done because nobody wants to take responsibility : if I see a problem coming up in somebody else's project, will I tell them ? Nope, because if I tell them I will become the problem to them. Compare this to Feynmanns account in 'Surely you're joking mr Feynmann' about the safes at Los Alamos. To demonstrate security was inadequate, he started figuring out how the safes could be cracked - an it turned out that it was relatively easy. Even before he could do this, he was telling everybody security was inadequate. When word got round he could crack the safes, people started keeping him (and nobody else!) out of their offices - he had become the problem. This superficial kind of reaction is typical of packers - they have problems seeing the 'deep structure', the 'real problem', and only detect the superficial symptomatic problem - Feynmann could get into their safes (whey they exhibit this peculiar problem - more on that later).
These are bad problems, ubiquitous in society as we know it. Mappers probably suffer from other problems, but being a minority (more on that later), they never pervaded society. And nobody knows what a mapper-dominated society is like, because it doesn't exist now. It might have existed (Alan thinks it was the original state) but I don't think so. I think an evolutionary picture, with different strains springing up real soon, is probably more accurate. And it is great for avoiding the moral crudader-trap of dividing everything up into good and bad (I've been working on a theory of social-psychological fundamentals myself, shameless plug, and I think I'm on to something, but it has yet to be linked into Reciprocality. It does give a basis for a new morality, not founded on any funny dogmas... ask me about it if you're intrigued...).
So - packers aren't any badder than mappers - but there's a lot more of them, and mappers tend to suffer badly from some of the mechanisms they brough into being, which leads me nicely into my next topic...
* The invisible persecution of mappers
I'll dig up the bible here. I'm not at all religious, but I'm going to demonstrate even the old Jews knew about packers and mappers. I specifically refer to the person of Joseph, who was sold into slavery by his parents, because he was always daydreaming - a typical mapper symptom. In Egypt, whilst in prison, he interpreted a few of the pharaoh's dreams, thus predicting a few things succesfully. He was released, and eventually made it to Pharaoh himself if I remember correctly, and saving Egypt from a bad famine in the process.
I would like to advance the hypothesis that Joseph was an archetypical mapper, cast out by his family because they were a bunch of farmers, for whom the packer cognitive strategy was more than adequate. By accident, Joseph had the chance to prove himself to the Pharaoh of Egypt by doing a bit of highly intuitive pattern-recognition, and did a lot of good, in a management position.
Go read the story, this is only a rough outline. The important bit I wanted to discuss here is the casting out bit. I put it to you that in our society, there is an invisible minority of dreamers that is being persecuted. Worst thing is : they don't even know it themselves (one, that there are others like them around, and two, that they're being persecuted). Only a few days ago, I got to know a girl described by her co-workers as being from another planet. I have talked to her a lot, and she definitely is mapper material. For the first time in her life, by talking to me, she realised she is not alone.
Think of it : in the archetypical classrooms (I'm overgeneralizing a bit, but y'all get the point), daydreamers are positively persecuted by teachers. Learning by rote is thrust upon many pupils as *the* way to do it, the system often even doesn't allow any other approaches (never had to learn a poem by rote ? what's more nonsensical than learning a poem by rote ? would anyone of you teach computer science by having pupils learning actual source code by rote ? I didn't think so... (algorithms is different - they're 'meaning' rather than form, just as the poem is 'form' and the meaning behind it is the meaning...)).
And socially, mappers have a hard time as well. Mappers tend to be interested in a lot of things, and have the automatic reflex of trying to find out the deep structure of *anything*. In many cases, whenever they hear a new, fundamental insight, be it about bee-keeping, writing a web-server, why the Germans lost WWII or just about whatever, their attention will focus on it (a new pattern or bit of deep structure to discover!) and they will delve into it. Packers will often find these non-useful things incredibly boring. And mappers being a minority, they get isolated. In some cases they become 'jesters' - discovering that putting the truth into a humoristic form (irony & sarcasm) makes a huge difference - it becomes digestible. Packers don't *have* to think about the sarcastic comments - they laugh and continue on. And as laughing is fun, they accept the mapper a little bit. So this is a typical social niche for mappers.
And so on and so on. Fellow mappers will definitely recognise the persecution problem. The most flexible ones might have solved it, but I wonder if any mapper had a really happy childhood - my guess is that many either spend it in isolation, or have to fight for recognition and harden up - I know a few cases like that; I'm one of the soft cases. When hardening up, these mappers I think learn ad play the packer game. They migh become very succesful, but I think they turn into high-end packers themselves after a while, losing the Child inside (mappers often have a strong child in them - time to bring up a Zen motto 'always keep the mind of a beginner', and "conventional" wisdom : learn and see the world through child's eyes : I think the trick is not to forget...
* MBTI
I was quite amused at one response in the thread, which stated that mappers are simply the INTP category in MBTI. The amusement stemmed from the fact that during the MBTI course I did the test and came out... INTP. I have given the matter a lot of thought, and although there probably is a correlation, it isn't strong enough.
I'm reasonably sure N (iNtuition) is a very strong mapper factor. It has a lot to do with the unconscious pattern detecting abilities almost anybody has. Mappers probably have high amounts of intuition in general - and it's essential to their cognitive strategy. The cognitive strategy of a mapper consists of detecting the 'deep structure' of the contemplated problem (a job for which you need advanced pattern detection), extracting and storing that structure, in a more or less object-oriented way (by creating classes in the mind, having properties attached, and having relationships between them). I think mappers are highly apt at manipulating and exploiting these mental structures. Packers on the other hand rely much more on learning by rote : storing packets of information, storing procedures, and not trying to figure out how it all fits together. Mind you, I think packers are people who get things done - basically because they spend little overhead on all the issues that aren't immediately relevant. Mappers have a lot of cognitive overhead, but are able to build more elegant, economic end-products.
Anyway, that's the N-mapper correlation. the opposite for N is S (sensing) and has to do (I think) with seeing reality directly as it is. I think the MBTI goofed on this one - packers don't see reality as it is (deep structure isan integral part of reality, dammit !) but they absorb reality in 'literal unlinked bits' - of course they don't make associations as easily as N people in that case !
The I (Introvert) correlation I think is probably mainly an environmental product, due to the packer dominance. Mappers are a minority, are repressed, and are forced into their 'own world' (often a fantasy world - hackers might start to see the deep-structure/hacker/science-fiction/fantasy/imag ination/daydreaming pattern emerging here, one of the reasons in the past I sometimes thought of posting to slashdot about the mapper/packer documents). So they rate introvert. I myself used to be very introverted - I had few or no friends, I spent all my time in my room, I never went out; at school I was hunted by other kids, who had no end of fun laughing at the fact that later I wanted to become an astronaut - in contrast, after through circumstances I 'blossomed', at work I was estimated as being very extrovert (can't shut up - this mail is a good example) and people were surprised I scored as introvert on the test.
Actually, I was almost right in the middle between introvert and extravert. These experiences have led me to believe that introvert/extravert is not a relevant dimension for mappers/packers a priori, only circumstances created the introversion preference.
As for the T - although I personally have quite a rational slant (I've got a bloody university degree in Math for chrissakes) I'm very emotional as well (very strong empathy - another trait which I think strong mappers have - the hard ones lose it because it's a very bad trait in a packer-dominated society - it subverts many procedures), and I scored about evenly on T (I forget wath it stands for, but I though it had to do using rational thought when making decisions) and F (which stands for Feeling - meaning those people make decisions based on emotions). I don't think there's any correlation - T and F people are equally likely to be mappers. Only F people might be less likely to be diagnosed as one, because many emotional reactions are socially programmed (think of how you would at first react to seeing a topless person walking by in the street - the reaction is socially programmed, in several tribes the clothing standard is a loincloth, and I guess there must have been tribes where nothing was worn frequently), and when you react to an event, emotional processing is neurologically faster than rational processing, so neurological response happens first. And since the social/emotional programming is mainly packer-made due to their superiority in numbers, F people will first react the packer way... QED (ok this is just a theory I just made up, but it makes some sense to me).
And finally, P or J : I think J means 'Judging'. Extreme J's are very well-planned people, not liking unexpected things, and planning everything, and adhering as much as possible to the rules. P (forget what it stands for) are fly-by-the-seat-of-my-pants types. I think there's no natural preference here, but I think packer society trains people to be as J as possible, thus there could be a slant for typical packers to be J.
What I'm basically saying is that when analysed, mappers and packers would be all over the place in the 4 by 4 MBTI matrix, with maybe a preference for mappers to be N (although mappers trained into packers might score as N whilst getting diagnosed as packers). I fully expect however that manifest mappers would be more strongly clustered (I would expect them to score higher on N and P) because I think certain types might be more resistent to social programming.
* Wrapping it up
There is more, much much more to be said. Anybody should feel free to contact me if you want any of the other written materials (which admittedly need to be worked on, but we could do that together ?). For reference : e-mail : parickx@janbe.jnj.com Alan and I have often played with the idea of making the whole thing an open-source project, by setting up some kind of organic website. We're not out to win any Nobel Prizes by cooking up a theory in secret then publishing it, or something like that. We just want to make the world a better place :-) And I'm not a blind idealist either (although it's hard to avoid the trap of putting everything in a black-white way, and putting in the nuances would take ages).
We're also incredibly interested in validating the whole thing scientifically (the M0 paper actually adresses a neurological/biological phenomenon that might lie at the base of packer dominance - we'd so like to test it, any neuro-chemists in the crowd ?) so we try and be rigid. After all : anything I have said is true in one sense, false in another sense, and completely meaningless in another sense (I'm not a total relativist - think again if that was your conclusion, or read some RA Wilson).
I'm also prepared to erect a second, new mailing list (the archives of the first one contain some very personal material, and are only accessible to those who were there - I know it's dangerous saying this in a roomful of hackers, but if you're a real hacker you know the meaning of respect and responsibility).
So, fire away any comments, and anybody is welcome (especially critics, since their comments are the ones that show us our errors - much like in physics you test any theory by attacking it on all sides all the time).
Take Care All !
Philip Arickx - //mailto:parickx@janbe.jnj.com
Your post quite clearly shows that you don't know a first thing about Computer _SCIENCE_ (or then again maybe you overstated your opinion on purpose). CS is not primarily about programming. As a sidenote, Haskell can probably kick most languages' buts quite easily. Just because you don't understand the beauty of the language you start to bash it. I was like that a long time ago when I thought that C++ was the one true language; then I grew up.
Programming is about how you solve the problem and how you arrived at the solution. How can you be sure your solution is correct, unless you can duplicate and verify your reasoning ? (see Dijkstra: A discipline of programming). It also matters a lot if the complexity of your solution is O(log n), O(n), O(n log n), O(n^2) or O(2^n) (see e.g. Cormen et al.: Introduction to Algorithms). If you're trying to solve an NP-complete problem you'd rather try to come up with an approximate solution than try to solve it with brute force. How do you know an NP-complete problem if you don't know algorithmic theory ?
How you solved it and in what language also matters (there's this thing called _software engineering_, maybe you've heard of it ?). The Tao of Programming quite clearly states that you (or someone else) will have to maintain that solution sooner or later. (see e.g. Pressman: Software Engineering: a Practitioner's Approach)
Maybe your hacker brain doesn't quite get that hacking is not science. Go work if you want to hack, computer _SCIENCE_ is supposed to teach a _scientific_ way of thinking (you know, models, testable theories, reproducible results, the thesis/antithesis/synthesis stuff, etc.). There are many misguided schools, which don't do this however and it's going to be worse because of industry pressure on the schools. If it were up to me, reading Dijkstra, Hoare, Mills and Knuth would be mandatory and I would also skip CORBA, Java, RUP, UML and OO in favor of formal specification and verification, algorithmics, conceptual modelling (formal ontology, description logics, etc.), AI and similar more theoretical areas of CS. It is my experience that the theoretical areas of CS contain a lot more useful (and longer lasting) subject matter than any of the industry-hyped technologies, which come and go.
ACAlthough, autism has had some slashdot attention lately, but let's not go overboard ascribing everything to it. ;) It's not productive to merge ``autism'' and ``intelligence'' as synonyms for the same thing; the power of words lies in their ability to discern among meanings.
In Chapter 2, section ``Quality Plateau'', the author attempts to restructure some skanky looking function written for the Win32 environment. For the sake of making it look more readable, he suspiciously moves a mutex release so that some accesses to global variables are no longer protected! The whole point of the mutex is so that you can safely and atomically do the g_nIndex++ and the update of the g_dwTimes[] array! (I know because I chased the reference and looked it up on the book. In _Advanced Windows NT_, a critical section is used instead of a mutex).
;)
I would restructure the piece of code by calling GetTickCount outside of the critical region of code, and only do what is absolutely necessary while the lock is held: namely the update of the shared data.
Also, what kind of a dorky cheesehead thinks that changing from one bracing style to another is a form of simplification?
Overall, I find the piece to be a rambling bunch of psychobabble designed to stroke the egos of programmers, who will at once fancy themselves to be the good mappers and not the evil peckers. Oops, packers.
I've put up a temporary mirror and list of mirrors. I'll remove it in a few days so enjoy it while it lasts. I also zipped up the entire contents so you can download it for later reading. From what I've read its really good. The url is:
http://www.geocities.com/tekhi r/Progstone/index.html
Feynman found that one of the problems in setting up the boosters had to do with aligning the segments at the launch site. He asked the technicians, if some alignment marks (six lines) painted on the booster would help. They said "yes, but we're not allowed to. It's not in the spec'"
BTW: This specific item turned out not to be directly involved in the disaster, but did point to the mind set that caused it.
Just a couple of comments. Personally, I think this has a bit of the problems that many writings by talented but inexperienced writers often have. I'm not an expert, but hear are a couple of points that I think hurt the flow:
1) There seems to be a trend in this for broad over-generalization and labeling. Things in life never fit into tidy little packages, and writing should reflect that. In the second section of chapter 1, for example, the author claims that the state of programming as a whole is horrendous.
I just can't agree with that belief. The book also labels people and idea's in a manner which is inconsistant with reality.
2) Secondly, I feel that the author has a pretentious, arrogant tone that makes me question the foundation from which the author is working. A bit of modesty, in my opionion, never hurts writing.
-- Moondog
In the final code, ReleaseMutex() is not called when Index == MAX_TIMES.
That kind of reduction causes hard-to-track bugs :(
Chivalry is not dead, it's just frequently misspelt. - M. Langley
This is the sort of psychobable that led me to drop the school of Psychology in favor of a Computer Science degree (since then, I've found CS to be as much alchemy as Psychology).
When you try to quantify and categorize behavior, you always find that you:
1) force fit folks who don't fit; change the song to make the words rhyme.
2) have too many exceptions to be a scientifically valid theory.
So, it's my turn:
You have four types of programmers:
1) Clueless -- in way to deep over their heads, don't understand the subject, and it shows.
2) Hacker -- I'm going to fix this problem any way I can and by any means necessary and am going to be obsessively focused. Can cause a coronary if allowed to work with Windoze for more than a year (unless they figure out that the solution requires a fork-lift).
3) Guru -- Everybody turns to them for an answer; in reality, they just know how to use the man pages.
4) Primadonna -- works well in teams of 1 or fewer. Must understand everything in minute detail before any work can be started. Has written the ultimate "hello whirrled" program.
I've been all of these often; sometimes in the same day.
Chris
When I die, please cast my ashes upon Bill Gates -- for once, make him clean up after me!
I believe very much that solutions emerge from holistic understanding of systems; from knowledge of computers, systems, and people so deep that decisions are more instinctual than conscious. That has been my experience. The "aha!" feeling. The flash of insight.
This appears, in this messy and poorly organized essay, to be the essence of mapping.
What I dislike about this is that this non-linear thinking arises most frequently from the fertile soil of "packer" knoweldge and experience. Every programming "genuis" I have known has not only been capable of this instinctual synthesis, but has also been posessed of encyclopedic knowledge of these nitty-gritty technical details.
The acquisition of knowledge is drudgery. The syenthsis of fact into insight is creativity. All the creativity in the world will not help you, however, if you are writing and operating system and you don't know that the interrupt enable flag is cleared on entry to an interrupt service routine and must be set on exit.
I guess what I am saying is that while modern pedagogy may overemphasize rote learning over synthesis, thought, holisticism, without the facts you have nothing.
I tend to believe that the problem lies not in how education teaches facts, but rather in that we have "dumbed down" the number facts taught. I think the human mind is so hungry for patterns that, if taught enough facts, and allowed the speculate, this facility for insight will develop on its own. When you are not taught enough about anything to see the interconnectedness of things, is it any wonder we are locked in this "packer" mode?
I remember being fascinated by the fact that the mutilples of 9 add up to 9 (for the first few mutltiples:
9x2=18 1+8=9
9x3=27 2+7=9
...
...
You find patterns like this all over the place. How 'bout the fact that you can calculate pi with this little succession:
4 * ((1/1) - (1/3) + (1/5) - (1/7) + (1/9)...
I guess what I'm trying to drive at here is that I think the solution is NOT to push people into the fog, but to expose them to as many FACTS as possible. Their native curiosity will bring out the innovative qualities.
Unfortunately, we dumb everything down and add the "Simpsonsesque":
"Added extra clap: Not college material."
No wonder all the TQM and ISO 9000 and Vision Statements and Mission Statements seem to me to be a pile of crap, and yet genuine "quality" has always been more important to me that to everyone else.
No wonder it's so important for me to gain a real understanding of the problem, while everyone else just dusts off one of their old methodologies.
Suddenly it all becomes clear. I can't wait to read the rest of it!
RP
Yeah, it was an interesting read, but I don't think it contains any deep revelations.
/. readers do work in corporate coding environments where these practices hold sway, but I'd guess we don't need much convincing. Linux and other successful free software projects prove convincingly that traditional "software engineering" principles are not necessary to make high quality code.
Structurally, the piece is a mess. This would seem to be a bad sign when the subject is one as exacting as programming! I realize that it was written mostly as the outline of a course, but still.
The main thesis appears to be that the most important attribute of people's cognitive styles is the one-bit mapper/packer distinction. As far as I could tell, "mapper" is pretty much the same old "think outside the box" philosophy, while packers are a strawman for inside the box thinking. Ok good, now I understand the world a whole lot better.
The piece did have some interesting moments. I liked the section on the quality plateau. There is a clear moral I get from the story:
An ounce of simplicity is better than a pound of abstraction.
A lot of the piece seems to be railing against traditional "software engineering" practices. Probably a lot of
The concepts of programming, especially those specific to larger projects with many people, are very difficult to master. A lot of writers on the subject delight with with oversimplified metaphors that are actually fairly easy to understand. In the best case, these metaphors actually capture an interesting aspect of programming. I'm not sure that this piece really achieves that goal.
LILO boot: linux init=/usr/bin/emacs
I was introduced to Alan Carter's writings (and his concept of mappers and packers) about a year ago by a mutual acquaintance who independently discovered some of the same concepts, not by working with programmers, but by working with ADD diagnosed children. Since then, i have had numerous discussions about this topic and several points usually come up which i thought i would put here:
1. Alan is not simply labeling two categories of people. He believes that *all* people are born with "mapping" abilities and that these abilities are crushed out of children at an early age. He sees "packing" as a correctable condition, and the Programmer's Stone is intended to do just that (for programmers anyway). He says he has achieved remarkable successes, but i, of course, have no idea.
2. It is extremely difficult to talk about this subject logically. One direct consequence of the description of packers is that they cannot understand mapping. Thus, if you and i disagree, i can always claim that you are a packer and just don't get it. This means that the existance of these two different mindsets can't really be proved. However, it clicks with some people and seems very, very *true* to them.
3. Alan does talk about mapper and packers as if they are discrete, exclusive states, but a lot of people i've talked to believe that people exist along a continuum between these extremes. I'm fairly certain that Alan thinks that as well, but he doesn't explictly say so.
Some of my thoughts here are shaped by things i've read in some of Alan's other writings, especially his "Reciprocality Paper". I am not going to post a link to that paper because the site i got it from seems to disappear periodically, and currently seems to be gone. Also that paper contains an odd Cosmology which i find interesting but which i basically think is a load of nonsense.
-- Mike