Archive for August, 2008

How to Leverage Your Understanding of Your Personality Type to Get What You Need

August 29, 2008

I apologize for this up front. I hate the psycho talk.

Fred: I really like superheroes.

Bob: I hear you saying that you really like superheroes.

Fred: Yeah… uh… I do. Do you like superheroes?

Bob: You’re asking me if like superheroes. I understand that. You are trying to relate to me. This is good.

Fred: Uh… I’m trying to find out… uh…. Oh, never mind.

Bob: You know what you’re problem is? You never reflect anything back to me. I reflect your thoughts back to you and it shows that I care and appreciate you. You are totally insensitive and do not know how to have healthy communication.

Fred: I hate you.

[Extend, remix, and rework above until it’s a full fledged Monty Python sketch.]

So yeah, this is fundamentally stupid, but it may be helpful if you take it with the usual caveats and grains of salt.

You need to learn to negotiate. If you have a genuinely rare personality type, you tend to cave in to other people’s assessments of you way too quickly. They’ll walk all over you because they don’t understand you and don’t think your perspective has any value. You adapt to the majority all of the time, but they will cut you down for implying that they need to accommodate you in any way. They think they have you “pegged”, but the real problem here is that they don’t have enough empathy to actually care about this. There may not be any real ill-will or animosity behind their attitude: they’re dealing with something they don’t know anything about and they *don’t know* that they don’t know anything about it!

What this means is, you don’t have to be hurt or insulted by their ham-fisted attempts to belittle or blow off your needs. You have these discussions all of the time because you’re literally a square peg in a round hole– you’re the odd man out. You’ve been criticized all of your life so you’re probably oversensitive at this point: when these people come after you, you are humiliated and maybe turn your anger and disappointment inward. This results in a downward spiral of depression and/or classic co-dependent behaviors. Some people will push you over the edge and you’ll explode in what looks to them as being completely random outbursts of anger. This makes you look bad. You look like a freak, and then they take the moral high ground… and from that position of relative power they’ll continue to turn the screws on you and kick you while you down. (Figuratively speaking, now. Stay with me, here….)

Don’t take the bait. Stay calm. Don’t be shocked that you have to keep explaining your perspective. If you hang back and give them enough rope, they’ll hang themselves. You’re not asking for much: just a little sympathy, that’s all. Just some sort of compromise here or there. You’re flexible. When they can’t handle this, they will resort to being negative… they might whine or criticize you… they may even try to commit some form of character assassination. But none of this has to affect you. It doesn’t bother you at all! The balance of power has shifted because you know what’s going on and they don’t.

Stand your ground. Have patience. You don’t have all of the answers, but you have to help your friend collaborate with you to form a solution that may end up surprising both of you. But stop apologizing and stop taking these sorts of conflicts personally. That’s not doing any of you any good. The other person will ultimately benefit from working with you in these things, so stop beating your breast because you feel like you’re so selfish you can’t even raise the issue. You’re not being selfish… you’re the one being the mature one and you’re trying to make a positive contribution to improving things.

Things aren’t as bad as you think.  You can benefit so much by just a small number changes.  Go ahead and stand up for youself.  You do deserve it.  And they do, too.

Hey… You forgot to tell us how to get the most out of this guy!

August 28, 2008

First… this guy we’re talking about. He is NOT a genius. That was totally the wrong choice of words. He may have a high IQ, he may be considered to be “gifted”, he may pretend to play the part of the disheveled nutty professor… but he’s really just an average guy that likes to tackle hard problems. He often gets out of his depth– in fact he’s not happy unless he *is* out of his depth! But he loves the inherent struggle to get control of such a situation.

I’m not the first person to write about this personality type, but I may be providing some new insight into how this guys brain actually functions– I may be describing how this person thinks… literally from the inside. Some of what I say may be generic to your typically “male” approach to things (ie, “man-cleaning), some may be more applicable to the creative (“right brained”) process in general. In any case, this person tends to make sweeping generalizations for the express purpose of jump starting his analytical juices so he can begin to tackle other aspects of a problem. “Normal” people often get hung up on picking over where the generalization breaks down, and cannot seem to grasp the overall picture he’s sketching out. A good collaborator would instead put in his two cents in by taking part of the idea and running with it, but some people prefer to snipe at him instead of being “a real team player.”  (Just kidding… I really would like some hard data on the ADD vs non-ADD, Autism vs non-Autism, male vs female, creative vs non-creative axes… but we have no Jean Piaget to develop and execute the experiments at the moment.)

Another thing he’ll do is take a set of premises and see where they lead regardless of his personal opinions and hunches. He’ll present a perspective as if it were his own so he can stand back and judge how that thread fits into the big picture. Regular people fail to notice the smile in the corner of his lips when he rapidly summarizes a set of talking points as if they were his own– he may actually be lampooning a perspective, but his “method acting” skills are so good people really think he actually holds those obnoxious opinions!

At any rate, most people failed to read between the lines of the last post– mainly because I stopped in the middle and dressed up what I had. (I was thinking… “yeah, you think you can identify with that first post… but there’s *no* way any of you will be able to relate to *this*! Before I go any further, let’s see how this one goes over….”) So… here’s the missing tips completely spelled out for you:

To get the most out of your nutty self-obsessed right-brained wanna-be mega-geek: let him solve problems his own way. Let him develop tools/abstractions that help him hide the sort of details and menial tasks that sap his strength. Force him to get up and go exercise or relax. Don’t hold a nebulous unfinishable to-do list over his head to guilt trip him– he will come down off of his creative high and beat himself up for being irresponsible and may even shut down emotionally. Allow him to relate to people one at a time– a hike with only *one* of the children, dates and activities without a big crowd. Don’t take it personally when he absolutely dreads doing activities you think are “fun”. Occasionally go stand by his desk until he gets that nagging little task done. Tell him things like, “if you don’t get anything else done today, please look into x; it’s really important to me.” Alternately, you can go with something like, “we have a critical secret mission and only someone like you can save us; we will hold down the fort and cover for you, but it is urgent that you work on this today.”  And no, he doesn’t need all of a June Cleaver, a secretary, and a personal accountant– he does need someone to play the part of a “coach”, though. And someone that can organize some of the pesky details into something he can act on can be critical to this guy getting anything done. You more than likely have some valid complaints about his performance, but anything that smacks of character assassination will destroy him and cause him to withdraw and shut down.  A little bit of sympathy can go a long way with this person– he criticises himself more than anybody else anyway.  He is capable of minimizing the negative consequences of his traits, but he cannot accompish anything useful for you if you refuse to give him the slightest feeling of acceptance.

For a lot of people this guy is just not worth the trouble… but again, he can be an amazing part of the right team.  Of course, the “right team” can change as he continues to grow in different directions, so be prepared to reassess his role and how he fits into things every six months or so.  Having him around means he will solve some things that are important, but that nonetheless fail to show up on anyone else’s radar.  He can be surprisingly child-like despite his nuanced positions and “deep” thinking.  If you lack the empathy to provide this guy with any sort of “nurture” or encouragement, then he will burn out very rapidly and you will waste whatever you’ve invested in him.

This guy is not a good fit for just any place.  In spite of the thinly veiled romanticism in the previous posts, do not fail to account for the warnings I’ve listed!  Things can go very very wrong with this guy if you humiliate him to the point where he shuts down.  (And yes… this dude needs to wake up and figure how to cope with his own personality if he wants accomplish anything.  He is totally driven to help people and do useful original work, though.  If he can get ahold of himself and/or get the right kind of support, there’s no telling what he’ll do.  [At least, he has to tell that to himself just to keep going.] Beating himself up all the time because he’s not “normal” is a complete waste of his energy, but he needs to pay special attention to when he says yes to anything.  If he can’t say “no” or can’t recognize when he’s not a good fit for something, there’s plenty of disappointment for everyone on the way!)

Edit: Getting lots of negative feedback now.  I think I’ve pinned down the exact thing of what causes this person to get depressed… and why certain things are so debilitating to him.  This is very valuable information for me… and I’m not sure how many counsellors/psychiatrists/whatevers could have helped determine this.  And yes, I had to write this, put it on the line, and fool myself into thinking it was relevant in order to see this.  (That’s the point of these posts!  This is the thinking process in action!)  The concepts hang well enough together to be useful to me, but are in a medium where they gain a large audience in spite of their rough form.  Oh well.  Carry on.  Nothing to see here.

How to Get the Most Out of Your Eccentric Programmer/”Genius”

August 27, 2008

I recently posted about a set of programmer personality traits that I’d noticed. At first I thought they were relatively rare, but it seems to me much more prevalent than I’d thought– even the widely read Ruby blogger “raganwald” seemed to admit that he had many of the qualities I was describing. For now we’re going to assume that people like this are not sick even though a subset of the traits may sound superficially like some cases of autism or even schizophrenia. We are also going to completely leave out the question of drugs and ADD/ADHD diagnoses and instead focus on how the environment can be adapted to the programmer– and how people close to the programmer can best take advantage of his inherent nature. A lot of these comments are going to be hit or miss depending on the person, but some of these may be helpful to the extent that the same mental frame of being is at work.

People with this type of personality might not do well in school, but are extremely good at picking out books and managing their own personal training program. They will pick up a rare set of skills on their own just for the fun of it– skills that aren’t or can’t be taught in schools. They aren’t attracted to the field of computing because of the money (though that doesn’t hurt) but are terrified of getting stuck in a job where there’s nothing left to learn. People in other careers speak of a “seven year itch” phenomenon, but these guys have a “two year itch.” These guys will change jobs not so much to get a raise… but to keep from getting bored.

As far as dating and relationships go, women should be careful with this guy. When you first meet, you will become his “pet project” for a time. When he’s finally solved all of the problems (as it were) he’ll be ready to move on to another project– probably something really abstract that you don’t care about and can’t relate to. He’ll be shocked when you have no desire to support his new project and won’t understand why you’re so hurt. More than anything else, he’ll need to feel that you accept him in spite of this change. If you can’t deal with this transition and don’t want to support him in his constantly changing obsessions, then the relationship can’t work. If you are dating someone like this, make sure you extend the “courtship” phase to double what would make sense for any other couple. Make sure you can deal with the changing dynamic of the relationship before you make things permanent by “tying the knot”.

The thing is, most people really never think. At least, the concept of what thinking is to this programmer is radically different from that of “regular” people. Most people just go to work, do the same old thing, and go home. When they leave work, they leave work at work and go do something totally different. Our programmer guy can’t seem to *stop* thinking. If he’s trying to solve something difficult, he will not stop as long as he’s inspired. He can go on a date and hardly hear a thing his girlfriend wants to talk about. If there’s a lull in the conversation, his brain will drift back into his project. His obsession is like a force of gravity. He can’t just turn it on and off. He’s afraid that he’ll never get his train of thought back– if he changes gears he may never get back to it and all his effort will be lost. Alternately, the effort of getting back in gear so many times in a week or two will gradually wear him down until he’s exhausted, depressed, or worse.

People recognize this dynamic with introverts and extroverts. It’s not about someone being shy or not being talkative– it’s about whether being in a group of people in a “social” situation is energizing or energy sapping. For this guy, changing mental contexts is really draining– even more draining than having to be around people. People don’t tend to hold this sort of thing against introverts. Our programmer friend probably doesn’t even know the difference, though. He looks at those social situations and doesn’t see how they connect to his current stable of pet projects. If he’s unable to see a means of connecting the social situation to one of his obsessions, he’ll get antsy and nervous. He might even get a bizarre pit of dread welling up in his stomach at the very thought of attending such a party.

His thinking style is really more akin to the Sanford Meisner method acting school than it is to anything else. He gets into a problem space the way they “get into character.” And he truly *inhabits* the problem space. He literally organizes his brain into a model of the problem. He spends enormous amounts of effort to adapt his tools to his personal approach of thinking. He can’t discuss data or requirements verbally– he has to put it into something like Microsoft Access and sit there with a couple of key people looking over his shoulder. (Access is highly visual… and he can “feel his way” around complicated sets of data with it without explicitly thinking about what he’s doing.) Similarly, a Unix type prompt gives him god-like powers: he is everywhere in the system at once and can operate on just about any file without having to dig through an overwhelming number of screens and applications. Yes he’s highly visual in his learning style, but he’ll do everything he can from within something like Emacs if he can get away with it because changing context between a dozen mediocre visual IDE’s based on different idioms will sap his will to live– particularly if any of them are poorly designed.

This guy operates on raw intuition, but this doesn’t mean he’s illogical. In fact, this if this guy hears anything when listening to something, it’s the chain of reason. He has a hard time with religious and political groups because he winces at the slightest mismatch in logic in what’s said at the podium or in the pulpit. And he never stops thinking about the big picture and how it relates back to the official rhetoric. He might be attracted to the tidy consistency of ideologies such as Calvinism or Libertarianism, but he can end up in virtually anywhere depending on the makeup of his mental furniture and values. Wherever he is, he’s liable to be extremely hard on the leadership. This guy reads between the lines of every single pronouncement: subtle nuances of timing, the juxtaposition of topics, and even of what gets left out speak volumes to him. After any meeting he’s liable to be hashing out the implications of it with someone and fretting over some perceived crisis.

Groups need to be very wary of this individual. He can be their most zealous defender and just as quickly go to being their most ardent nemesis. To forestall this, all you have to do is clean up your rhetoric a little. To most people, “it’s just words”… but this guy spends so much time in his own head, he doesn’t really differentiate between ideas and reality. Ideas *are* reality to this guy! You don’t have to give away the farm or anything– you just have to acknowledge that the guy has a point. He *needs* quiet talks to reassure him that he’s not crazy. He understands the need for compromise or specialization… but you need to be up front and clear about what you’re sacrificing or you’re nothing but a used car salesman to him.

This guy is full of mystifying contradictions. He’s an introvert, but you might see him talking and engaging all sorts of people. He swings from being incredibly intimate to being incredibly distant. He ignores entire swaths of details as being someone elses problem, but will go out and solve the most random things that no one has even asked him to work on. What’s going on with this? At work, he might not even talk to a certain strata of people. But after doing some small task for them he might start dropping in to check on them and make sure they’re still happy. Over time, he’ll end up “walking a beat” and touching base with all sorts of people he’s worked with. (In college, he probably had friends from several contradictory “cliques.”) If people start causing disruptions near his desk, he’s liable to get up and make a round in spite of whatever he’s supposed to be working on. Random people will confide in this guy… and he’ll often take back his impressions from these talks and apply them to his secret projects.

But he loves doing favors for people. People just have to be able to communicate a little, have a finite self-contained need, and not send him on too many wild goose chases in the process. The tasks can be anything– he just needs a chance to show off his “super powers” and look smart. And he genuinely does care about people. Due to his agonizing experiences in school and his hatred of bad interfaces, he really is serious about doing what he can to make people’s job’s better. With a few of these sorts of favors under his belt, he can relate to just about anyone. But without these experiences to ground him and set the tone, he’s often at a loss what to do or say. He’s just lost. (This is part of why he has no understanding of “regular” social activities.) Traditional “ice breaker” exercises mean nothing to this person. The way to get him to “bond” with people is to make his skills relevant somehow to a single individual: it has to be ‘real’, there’s almost no other way around this. Remember, this guy’s mental furniture is completely given over to one of a half dozen secret schemes. The only way to make a person “real” to him is to get them lounging around in that furniture occasionally.

Finally, this guy often doesn’t know what he’s thinking or feeling about things. His girlfriend will often know *hours* before he does. He’s capable of writing incredibly detailed blog posts about a topic and then look at it when he’s done and then be shocked that such ideas were even brewing in the back of his head. This is a big part of what causes his procrastination. He’s always thinking about every single angle of a problem, but he’s not fully conscious of such thoughts until he’s engaged in a specific task. His subconscious mind will often drag him down if it thinks that the task at hand isn’t “real”, won’t truly be appreciated or recognized, or if the people that are asking for it aren’t serious or don’t truly know what they want. If he’s got an idea about something, he’s often better off to strike while the iron is hot. And if he seems to want to work on something else, he’ll often pick up the random unverbalized things he needed in order to “unstuck” himself on some of his other tasks that he was hung up on. Yes, he often finds out what he’s thinking by doing something totally different than what’s required! This is why handing over to some other micromanager the authority of order his to-do list is dangerous: there are a lot more dependencies and variables than what anyone else will see or care about, but that are critically important to our programmer/”genius”. This is also why he doesn’t tend to take initiative to deal with things when he starts to slide off track– he’s almost unable to pin down what’s really bothering him at any given time.

In an ideal world, he’d have “Joan June Cleaver” at home taking care of all the annoying details of life. He’d have someone to check him each morning to make sure he has dressed himself properly and hasn’t forgotten his lunch. Socially, he’d be expected to do no more than “show up” to certain key events. He’d have an accountant take care of his personal finances, and a secretary to make sure he didn’t blow off key tasks and meetings. In education, he’d be mentored, not schooled. At work, he’d be steered, not “managed”. At least once a year, he’d have the chance to work on a two-month project that he prototypes and architects him self– a project where he gets to learn a new language or technique while filling a specific unmet niche. He’d have confidants and cheerleaders… and informal “rap session” type meetings where he has the chance to think out loud and be appreciated as the “genius” that he is and the chance to do brief “show and tell” demos of his bizarre accomplishments. In a perfect world, he’d be accepted as he was and not expected to dope himself up or suppress his personality in order to fit in to whatever lame routine or tradition that’s evolved for everyone else.

Irrepressible Conflict: An INTP(?) in a Wasteland of Normalcy

August 26, 2008

“Throughout history many of the INTPs who contributed substantially appear to have never fit in with established norms enforced by the institutes of scholarship. This makes sense if the institutions are fundamentally flawed and don’t consider that different people learn in different ways. School always seemed to shut my mind down rather than open it. Only by following my own interests when I wanted did I excel. I always considered grades and deadlines as hindrances to learning. Such things are more useful for teachers and administrators than for students. Whenever I wrote a paper in college I was compelled to solve some enormous problem faced by mankind. If I could not, I thought the exercise was pointless and became disinterested. Needless to say I did poorly in school only completing three years of college.” — Glen Andrew Hendler

My first memory of that horrible consuming fear that welled up from the pit of my stomach is from when I was four. I was supposed to go to swimming lessons and I really did not want to go. I remember laying in bed at nap time, fan in the window, trying to look totally asleep hoping that everyone would forget about me. I was forced to go and I survived somehow.

Things got off track about the time I was singled out. The “challenge” program was once a week, so I was cursed with having to keep up with the school I’d missed. Completely not my forte– too many lists of things I would never get around to working on. I remember sitting at different tables at challenge… with pretty boards tacked up with cool projects to work on. I remember certain ones would stick out to me as ones I would do, but most of them… there was that sinking feeling again. I don’t know what I needed, but being left there to pick, choose, and complete those things… that wasn’t it.  It was a shame, though.  Those teachers had worked so hard to make their pretty little boards.

In middle school I would be subjected to the ultimate humiliation: I had to carry a booklet around with me, write my assignments in it, have my teachers sign off on it, and then have my mom sign off. To have to be seen by the cool kids and the cute girls every single period… it crushed my spirit. I think that was when I lost what little tolerance I had for putting up with the bureaucratic suburbanite wasteland gulag of normalcy. I stopped trying to dress like other people and I stopped listening to the same music everyone else did. I created elaborate plans of running away with a friend– we’d picked Louisiana because there was a lot of water there and we figured we could live off fish or something. Never did it, but to the extent that someone could “drop out” but still show up every day, I did.

In high school I would exert myself on anything except the officially sanctioned curricula. I read Dune, Lord of the Rings, James Gleick’s Chaos and other books in class. I would spend enormous amounts of time tinkering with complicated wargame/rpg hybrids. I would work through Pandolfini chess exercises. I collaborated with similar folk to produce a relatively clean (but self-consciously subversive) underground newspaper– completely insane: published daily, pasted down computer printouts put together during homeroom. (Do you realize what they’re doing in those schools… all of those brilliant kids marched around and made to go to… homeroom?! What?) We lasted two weeks before we were caught and duly punished. My role was not the superstar, but more of the mastermind– I could inspire people to collaborate… and I’d somehow harness and sift everything and provide a framework from which more talented people could do their thing. Okay… not mastermind: co-mastermind. But I was an enabler… a key supporting role in the center of the action. There was definitely a controlled drama to it… but what we did had to be something that ignited a fire behind our eyes. I guess we shouldn’t have watched Dead Poets Society or anything like that….

About that time some silly girl became enamored with me. I’d thought it was something that I’d always wanted, but I completely did not know how to handle it. One minute there’s sonnets spontaneously bursting from my chest (as it were)… but I was going away for a special 5 week program. Of course I said, “I’ll write you every day.” How many letters do you think I wrote? None! Completely consumed by that mysterious paralyzing fear. What the heck is that thing!? She’d later forgive me for it, though I didn’t deserve it.

After compiling underground poetry magazines and recording completely improvised song tapes (awful, but very fun; we actually came up with a few good tunes) I was about ready for college. I hooked up with someone that taught Meisner method acting and did a couple of shows. That’s another thing I remember doing in school: memorizing my lines for the plays. The horrible sinking feeling returned after our last show. Oh yeah, there was one more show we need to do; it wasn’t on the schedule. Just a random thing the director agreed to. Mentally I was already done with it and ready to move on to the next project. I declined to do the show and left my drama pals to their own devices. I felt horrible about it, but lacking the… what, mental fortitude? Character? What? I just couldn’t make myself do it.

In college I’d settle down for a moment. I’d dabbled in so many things, but never gotten good at anything. I was completely slack with music lessons up until then. What would happen if I went all out? I had to know. I loaded up on Music Theory classes and practiced for hours every day, blowing off other tasks I needed to do. I’d play all twelve scales for over an hour at a time. I switched instruments over the summer just so we could make a band– the other guy was better than me anyway. I went nuts– but come hell or high-water we were going to have a jazz group on my campus. For two years I pursued my dream… and Wynton Marsalis actually showed up along with a dozen of the state’s best jazz musicians. It was a summer camp thing and I’d become sort of a cult hero to some of the classically trained kids there– teaching them blues scales and trying to get them to improvise something with me. (I was working a summer job in the kitchen, not attending the camp.) So it’s a late night jam session and they start playing “When the Saints Go Marching In”. I check the fingering, realized I could fake this one, and went up with the band. The crowd went nuts. It was some sort of crazy cult hero thing… they all wanted me to blow the roof off and I was soaking it all in. I played two choruses and the applause was deafening to me… and I totally got out of there because I knew that was all I had considering who else was there playing.

At the end of the night Wynton took a moment to exhort the kids. His point was to a) not hog the spotlight too much… and b) when you play something… *play* it. And to illustrate his point, right? He singles *me* out. “Where’s my man that was up here,” he says, right? Except… I was the man! Good grief. I was completely floored. (The guy that disappointed so many teachers and “broke so many hearts”… he’s the one that was called out on that night. Sheesh.)

It was not to last. I was instrumental in breaking new ground by creating some kind of jazz happening out of thin air on a campus that maybe wasn’t the most conducive environment for such activity, but… what to do after that? The wall for me was conducting and Music Theory IV– the 20th century stuff. And sight singing and ear training exercises decimated me as well. Collectively all those things… I just wasn’t as into them. Not good at them; couldn’t make myself go through the months of small daily practice in them necessary to master them– but somehow not able to see how to go about it.

So with music, I’d made my first concerted effort to become disciplined in the practice of something. I was very promising and went relatively far in a short time, but conquering one set of obstacles only revealed the next set– and I wasn’t up for them. The sinking feeling won and I wouldn’t even have a lousy major in music to show for it. Part of it was that the two years was up, the fire had gone out, and a new passion was taking its place.

I knew something was wrong. Wrong with school… wrong with the world. I read dozens of books on a cross section of topics that connected together in a randomly oblique way that made sense to me. I published an essay in the college paper that would later be lampooned as being the same style as the Unabomber. I was non-violent of course, but they were dead on about my lame polemics. I could not keep my mind off of it, though. I’d constantly be connecting the dots… everything from Lewis Mumford and Neal Postman to Noam Chomsky and Wendell Berry. I really thought I was seeing something. I put together this strange project… not really an essay… more of a collection of extended quotes from books connected by my mediocre ramblings. I heard from people years later that copies of it were passed around for a long time after. Crazy. I tried to pass it off for a project for an English class, but maybe got a C or a D for it– I was totally unorthodox in my subject matter and execution. It’s a wonder I graduated.

As far as writing goes… I never could do it. Those awful five paragraph essays they made us write in high school? I just couldn’t do it. And the drafts we were supposed to do? You’ve got to be kidding me! These things ate me up. I drifted into math practically by default. The one English class I did okay in was a summer class. I didn’t take anything else at the time and all we had to do was read some stuff and then write a short little ditty about it. Instead of agonizing essays… we just had to have something reasonably coherent that was more or less on topic. I could totally get into that. (Hey… that teacher had inadvertently invented blogging! If only he knew….) I’d also done pretty good in Philosophy 101, but my teacher was more interested in clear structure to arguments than to particular styles or premises– and he was pretty unorthodox himself. In other English classes I’d get consumed with getting ahold of the deepest truest meaning of the works involved… but the cogency was beyond my grasp. English majors would laugh at me for obsessing over the authors when they could write entire papers without having even read the books. Me? I’d read entire books looking for a way to build on a single point that would probably get thrown out of the final paper by any sane editor.

Ah well…. There’s more of this, but it’s all the same: some crazy guy with a fire behind his eyes chasing something regardless of the cost… and regardless of what the “official” specifications were. I’d thought he’d grown up and moved on… but he’s still here. He’s somehow stayed with programming for more than two years, but stylistically he couldn’t avoid being unorthodox to save his life. He makes his way somehow through the cubicals and the constantly shifting requirements, but he’s always up to something. There’s always some sort of damn fool idealistic crusade brewing in the back of his mind….

Do you know any programmers that exhibit these personality traits…?

August 25, 2008

I’ve been observing an unusual programmer friend of mine for some time now. (Yeah… a “friend”, that’s it….) He has such a strange combination of potential and incompetence that its hard to tell if he is just lazy or if he has a “light” form of autism or some other disorder. I try to avoid “easy” pop-psychology terms when discussing him, but try to be as specific as possible when listing his qualities:

* Inability to absorb too many details verbally. Extreme learn-by-doing and learn-by-example learning style. If in a class situation, tends to need to engage somehow by asking questions and relating material back to other experiences– seen as disruptive by “normal” people. If asked to work on something concurrently with the lecture, will focus so much on the task at hand that he won’t catch additional instructions that were not presented in the main– and he’ll often ask the exact question that the teacher just answered.

* Inability to multi-task.  If you tell him to do three things, he’ll do one really well, misinterpret what you meant by the second, and completely forget about the third.  If you need a quick favor, your best bet is to tell him you really need it and then stand right there until it’s done for the three minutes or so that it takes.  (Think Butterbur from Lord of the Rings: “One thing drives out another!”)  Tends to have a “tell me what to do, but don’t tell me how” attitude.  His theme song is “I Did it My Way.”  He hates phones and prefers emails.

* Inability to manage or even to “see” certain classes of “mundane” details. (Knowing what to eat from the fridge and when; strong aversion to balancing a checkbook or going through a stack of bills. When cleaning the kitchen, only certain zones get attention; practically unable to get every last dirty dish to the sink– sorta need someone to help by putting the dirty dishes in the sink so they’re all identified.)

* Inability to organize. (Cleaning method: put everything that doesn’t have an obvious place into one or more miscellaneous boxes. Once a year throw out most of the boxes when the contents are “stale” enough. Paperwork management technique: accrue random papers. Act on the most urgent and throw them away. Periodically clean off desk by boxing up the remaining papers and throwing them all away when they get sufficiently “stale”.)

* Capable of working through entire books of information; does especially well with brief descriptions/examples followed by exercises. Capable of working for extended periods of time. Capable of relating the information to other experiences/activities in creative ways. A strong “visionary” streak. Good in brainstorming sessions. A strong focus on the implications of new ideas/frameworks/strategies. Can do a great deal on his own, but will often miss key techniques due to his “detail blindness” and lack of thoroughness– he relies on common sense, inspiration, and brute force in order to keep up with “normal people.”

* Capable of coming up with pretty good project ideas on his own, but does not take on projects for the purposes of finishing them– he’s mainly interested in projects as a means of mastering a skill or proving a point. Worried about “being ready” for a time when the skill/idea will be needed in a “real” situation. Very lazy in the mathematical/programmer sense– will spend incredible amounts of time to get something “right” so that “work will be saved later”. There’s generally not a net gain in time saved, but if a set of details is dealt with well enough, they no longer have to be bothered with– freeing up a great deal of mental capacity for this person!

* While he can’t absorb details verbally, he has an unusual degree of empathy. He can view things from other peoples perspectives somehow unlike the usual “arrogant programmer geek.” He also has a sense of timing, flow, balance… some sort of artistic flair that shows up occasionally.  Stereotypical “top notch” analytical problem solvers tend to lack these qualities.

* Faults tend not to show up terribly badly unless he’s put in a situation where his weaknesses are key to the task at hand. In order to excel in one sphere, he will often sacrifice another– it’s as if there’s only so much “detail” stress/worry his brain can handle and it just shuts down after a certain point. Faults become obvious when there ceases to be a reserve he can “steal” from in order to fuel his efforts in other areas. The structure of school covered up his problems for many years– his worst failures were viewed as “slacker” laziness. The fact that most classes were over in a few months meant he could just move on before things could come to a serious crisis. It’s only in long term situations where his personality really starts to have obvious detrimental effects on things.

* If he can team up with a solid detail oriented checklist/calendar type person, he can be an awesome supplement to a team or company. This doesn’t always pan out due to personalities and politics, but when “the stars are aligned” things can really hum.

Is this guy sick?  Looking at it myself, I tend to think “irresponsible.”  At the same time, it seems to take him enormous amounts of willpower to do ordinary things.  Should he content himself to finding a niche where his problems aren’t as relevant, or should he try to fix this? Are there drugs to fix this, or is he just naturally a square peg in a round hole that walks to the beat of a different drummer, etc etc? Will fixing this sacrifice his creativity? Do you know of any other programmers like this and what they did to cope with their weirdness?

Rant: Why Optio is a Steaming Pile of Horse Hockey

August 13, 2008

1) The Properties Pop Up: If I click on a text item or something to look at the properties, edit something, and then click on another text item… guess what? 99% of the time I’m going to want to see the properties on that other thingy! Why do you close the #@*&! properties window every time I click something else?! And why isn’t there a properties tab docked to the side of the editing window?

2) How the heck am I supposed to keep up with all of these sections? These different colored groupings of text items just float around on the screen and overlap each other. Complex reports might have a dozen of these. Half the time that I try to slide one of these around to where I can work with it, I click a text item instead and drag it half way across the screen.

3) What on earth are you doing to the undo buffer to clear it out every five minutes? Does hitting the properties button really clear it like I think it does? You guys are driving me nuts!

4) Whatever it is that you’re doing with clicking more than once to cycle through all of the objects in the same spot, it isn’t working for me.

5) Can you guys spread the report definitions to any more screens than you have? Let’s see… we already start off on the wrong foot by the fact that we’re parsing some stupid text file to begin with. So I have to fool with both a text parsing screen *and* a layout screen. The layout screen lets me switch between First, Middle, Last, and Single views. I often have to fix things on more than one of these separately… or introduce weird errors inadvertently because I can’t visualize the interactions all at once– they’re spread across too many screens. Then there’s the fact that parent-child behavior is governed by one or more of 8 or 9 check boxes. And then there’s properties on the main screen that I can’t get to in the layout and text parsing screens! You guys have taken a simple concept and made it impossible to visualize. I hate you.

And while we’re on a related topic…. 5250 emulator, I’m talking to you, now. You’ve got cut and paste buttons on your tool bar but you don’t respond to the usual short cut keys on the keyboard. What the heck are you thinking! Half of what we do in IT is cut and paste crap that we haven’t automated, yet. With this one un-feature you make everything a pain in the hiney. I hate you.

And all of this “legacy” RPG code that’s still being maintained. Why do we have code to create these stupid text files anyway? I mean, if I’m going to do anything with them, I’m going to have to parse them back into tabular form anyway. (See Optio, above.)

And you stupid AS/400 machine thing. Why do you treat these text documents as second class citizens? “Spool Files” you call them. If I run a report, I probably want to do something with it. Why do you start these lame batch processes and then make me go dig around for it. If something went wrong, why do I have to go dig around to go find out what happened. You ever hear of a pop-up window? I never thought a program could make me yearn for J. Random Modal Pop-up Form, but you’ve done it!

And you stupid AS/400 application developers. Why do you think I like hitting the sequence enter, F3, shift-F6? Why would you think I would want to enter the exact same criteria followed by that sequence for 5 different reports? You know… couldn’t you have just coded it so that I enter the criteria once and then you try to run all of the reports with the same criteria… but then tell me if something is wrong and let me correct it right there maybe? Did you ever think of that? Enter, F3, shift-F6. Argh! It’s a fricking set of reports, not an assault rifle! I hate you!

Oh yeah… and if I make a mistake while entering stuff, here’s an idea: make a sound like breaking glass and stop accepting any input until I hit the control key! I love it! Bwa-ha-ha! Yes! You guys are fricking geniuses!

Oh man…. But you think you can learn Java and really start doing cool stuff? Do you realize how slow and annoying your stupid Java applications are? And how much of the AS/400 pain you perpetuate right in the web browser? Have any of you even heard of grid controls?

But Optio… Optio…. I’m sorry you guys got bought out. I was impressed with the quality of the tech support you guys did before that. And your training class was very well run. I appreciated that. All I’m saying is… I probably wouldn’t have needed a training class if you guys had made your program just a little bit easier to use. I mean… it’s like you’ve never seen Microsoft Access before or something.

But really, I hate you. I hate you all.

Random Notes on Intermediate Perl/Emacs Stuff

August 5, 2008

The learning curve is steep. It’s hard to know what to prioritize. Perl makes life easier, though, in that the bottom 30% of the language is so all around useful, you can get all kinds of things done even though you “speak Perl like a three year old.” For the rest of it, I just stop every few weeks and take an hour to focus on the two or three things that bug me the most. My theory has been, that as long as the combination of Unix-like shell, Emacs editor, and Perl scripting is applied to my daily work, there’ll always be enough payoff that it’s worth my while to learn the things I’ve been putting off– so that in 6 to 8 months I’ll actually start to gain some genuine skill.

Here’s a few things like that that I finally took the time to address:

(global-font-lock-mode 1)

Put this in your .emacs file to enjoy the wonders of syntax highlighting. Yea. (I wondered why the Windows version was in color where the Cygwin version wasn’t….)

There’s also two Perl modes, for some reason. I actually kind of liked the default one better than the M-x cperl-mode that you’re supposed to use instead. In color, your hashes look atrocious… and your useless spaces show of as abrasive underscore lines…. I use those lines to mark my place in my project– to sort of delineate where I’m working. Cperl-mode seems a little more sluggish to me when it has to place your braces where they belong, but I like the way it spaces things better. (And people talk about how hard it is to parse Perl… it wasn’t long before I broke the syntax highlighting with a line that had a mess of single and double quotes on it. Maybe switching color mode on was not a good idea.)

Perl has anonymous functions and also functions that operate in list context. As much as Larry hates parentheses, it’s clear that he doesn’t hate Lisp concepts….

If you’ve got an array of strings, you can grep them with an anonymous function. Map can be used in a similar way:

my @array = qw/ apple bus cat dog elephant/;
my @things = grep {length($_) > 3} @array;
print "*$_*\n" for @things;
my @stuff = map {"--$_--"} @things;
print "test: $_\n" for @stuff;

# Altogether now:
print map {"!!!$_!!!\n"} grep {length($_) == 3} @array;

Now here’s the cool thing. I’m thinking to myself… wouldn’t it be great if you could refer to files streams in list context? And sure enough…

print map {“!!!$_!!!\n”} grep {length($_) == 3} <>;

This works! All of that accidental complexity in my Perl scripts due to excessive looping and if-then-else blocks… this one idea puts a huge dent in it.

I have to admit, this gave me flashbacks to my college Calculus class. We’d been working through a huge number of problem sets for a few weeks… and the professor comes in and teaches us a trick that showed us we were really doing things the hard way. The “regular” kids were disgusted. Why did he waste all our time? My theory was, that for most of us, we would not have appreciated the trick (and maybe not even understood it) if we hadn’t done the work first. Back at the code bench, this translates to… write bad Perl scripts to do practical things at work. Then clean them up with map and grep. Now you *really* know what they were trying to tell you back in chapter 3 of SICP! You know it down in your fingernails….

Okay, one last note. A few weeks ago, we saw that to really get functions to work with accepting arrays as arguments and returning groups of them for their return values, you had make the mental and semantic leap to begin thinking in terms of references. This seems to be a little tricky, because it doesn’t appear to be a “reference” like what I’ve seen in other languages– maybe it is, but if I “my” the sucker in a subroutine, it looks like that’s copying it, at the very least. Anyways, I’ll gradually assimilate that in time. We don’t really care what a reference really is yet– we just want stuff to work! Especially with hashes!!

my ($foo, $bar) = test2();
my $value = ${$bar}{2};
print "The value of foo is $foo and the value is $value\n";
print "We could have just said, '${$bar}{2}', too.\n";

sub test2 {
  my $foo = "hello";
  my %bar;
  $bar{2} = "world!";
  return ($foo, \%bar);

So, to cast the reference (stored in a scalar) into a hash so that we can ‘talk’ to it, we have to ‘fancy’ it in two places. I was thinking that the curly braces around the key would tip Perl off as to what we were trying to do…. And when that didn’t work, I was thinking that some sort of casting with a % sign somewhere would be the ticket. Thanks to Intermediate Perl, though, we know what we need to keep rolling….