Tag Archives: tl;dr

Risking Regret

Just north of Moab, Utah, a sandstone fin called The Lion’s Back rises about three hundred feet above the blowsand of the desert floor. It’s closed to the public now, because the public can’t be allowed to have nice things, but it used to be a famous Jeep trail. If you are a fan of scary youtube videos, you’ve probably seen the famous crash that happened there years ago (don’t worry, no one was hurt died). But back in the 1980’s, before the Jeepers really discovered it, it was just a big rock up behind the city dump.

When I was 14 I jumped off the top of it.

lions_back

You Wait What, Off The What of the What Now?

Oh, relax. I had a rope. I even had responsible adult supervision! Well, I had adult supervision at any rate.

My mom was pretty overprotective of me, and when my friend Kenn called and said “A big group of boys and girls from scouts and church are going rappelling today, do you want to come?” I was very excited but also pretty sure I wouldn’t be allowed to go. I remember asking my parents, and my mother making her “worried disapproval” face. But then Dad turned to her and said,

“If you don’t let him go now, when will you?”

Two hours later I was up past the dump near Lion’s Back learning how to rappel.

They chose a small fin next to Lion’s Back and set up practice stations for us. The first jump was maybe five feet high: just high enough to learn how to lean back into the harness. The next was ten or twelve feet: here we learned to work our way down the face. The final station was thirty feet high, enough to get a couple really good bounces off the rock as you came down the rope.

We had arrived in late afternoon, and there were enough of us there that by the time I had tried all three rappelling stations, the sun was starting to set. I figured that was the end of the day, and that it had been a lot of fun. I was really happy I’d come, and I really didn’t see what Mom had to worry about.

“All right,” hollered Kim, our rappelling instructor. “We’re running out of light, so anybody that wants to jump Lion’s Back, we’re going right now.”

Maybe Mom Was Right

I turned around from the tiny fin we had been practicing on. The Lion’s Back went straight up in front of me over 300 feet. I had a sudden attack of vertigo and I wasn’t even looking down. I remember thinking, “I’ll let the other kids go, and if it looks okay, then maybe I’ll try it.”

I think a bunch of us were thinking the same thing, and had the same looks on our faces, because Kim then said “It’s a half-hour hike to the top, and we only got time for one jump, so if you ain’t coming right now, you ain’t coming.”

I knew this was my one chance. I looked at the cliff again. So high, so impossibly, terribly high. The only thing a rational human could do from up there was fall instantly to their death. I mean, obviously. I sighed, and decided not to go, and looked down at my feet.

But then something happened. A tiny little voice in the back of my head piped up and said,

“If you don’t do this right now, you will regret not doing this for the rest. of. your. life.”

I looked back up at the cliff. Yep, still terrifying. But I looked over at Kim and said “I’m coming.”

Fear Is Intense, But Regret Is Forever

By the time we got to the top and anchored our rope, the sun was low over the horizon, starting to turn the desert flame red. Being the chivalrous young men that we were, we let the girls jump first. It was a long drop, and it took each person maybe ten minutes to get down the rope and the next person to get hooked in. By the time the boys could go, the sun was starting to dip beneath the horizon, bathing us in dusk. I was about third from the last, so as jump after jump happened in front of me, dusk came and went, and night settled upon us.

Remember, this was when Moab was a boom town gone bust: there was no light pollution. There was no moonlight to jump by because it was very close to New Moon, but just by starlight alone I could see for miles and miles, the once-red sandstone fins now blue and black but still clearly visible, marching off into the high desert as far as the eye could see.

I figured I could maybe just not jump and hike back down. Since it was dark and all, obviously I wouldn’t be expected to jump. But still that voice told me, convincingly, of the lifetime of regret I would have if I chickened out.

Kim had been bantering with us the whole time, making jokes about how it was such a lovely night for some rappelling, that sort of thing. And suddenly it was my turn. Kim could tell I was terrified, and was about to back out. He smiled kindly, and said in his soft cowboy drawl, “David, me’n your dad used to work at Rio together. We was on the mine rescue team together, and I took him rappelling, too. We’ve jumped some pretty crazy stuff, me’n your dad. But he ain’t never done a night jump. If you tell him you walked back down the trail with me, he’ll understand.”

He could have appealed to my pride, told me how jealous my dad would be if I jumped. He could have urged me to jump, pressuring me a dozen different ways. But all he did was show me what the choice to give up looked like, and reassure me that it would be okay. And it’s taken me nearly thirty years to figure out just how wise his words were: he put the full weight of the decision and the consequences on me, and took the fear away from the decision itself. This was exactly what I needed.

“I’ll never forgive myself,” I said as I straddled the rope.

Kim grinned from ear to ear as he started the safety check. “You’re right,” he said to me quietly. “You never would have. But now… here you are instead.”

Owning Choices Is The Only Way To Own Consequences

The rappelling rig was a friction-stop rig, which meant that to stop, all you had to do was pull down on the loose end of the rope. Unfortunately, this meant that for a stick-thin, 100-pound teenage boy, just the weight of 300 feet of rope hanging down from me was enough to lock up the rig. Kim laughed. “You’re literally gonna have to haul the rope up and pull yourself down the first twenty or thirty feet. It’s okay. Just start walking backwards, and remember not to sit down, just lean back.”

I hauled up on the rope, and it started letting me inch backwards over the edge. For the first twenty feet or so the slickrock curved away, and I was unable to resist the urge to keep my torso vertical. My descent became more and more difficult as my body slowly bent into a sitting position. Above me and now out of sight atop the fin, Kim called down: “David! Lean back!”

I leaned back.

Imagine for a minute that you are not leaning against a mountain, but standing on a wide, flat sandstone floor. Behind you, hundreds of feet away, the desert floor rises like a wall. People are walking around on the wall and if you could turn around, all you would see is the tops of their heads. But you can’t turn around. You can only stand there, hanging in free space, staring at what is directly in front of you:

Infinity.

The stars went on forever. The Milky Way blazed as brightly across the sky as I’ve ever seen. Outside the band marking our galaxy, blue-white dots pierced the utter blackness. And in the gaps between those stars, the inky void of space went on and on to eternity.

There was no up or down to it, just infinite thereness, right in front of me. I stared, openmouthed, at the night sky I had looked at thousands of times already… but somehow, never, ever, actually seen. It spread out before me with a beauty that still, thirty years later, takes my breath away.

And Owning Bad Consequences Is Easier When You Owned The Choice

The sound of a titanium anchor piton snapping is very distinct. To this very day, that single, sharp Tink!, so quiet yet somehow louder than a rifle shot, followed by the gentle feeling of weightlessness as the sandstone began to fly up past my feet, will always be a thing that never actually happened because gotcha.

In reality, I rappelled down Lion’s Back in fine form, had a blast, and formed a memory that will burn bright in my mind until I die (or get Alzheimer’s as karmic retribution for the previous paragraph). That day I swore to never back away from a choice if it would leave me with a lifetime of regret.

And I’ve had to own a lot of consequences as a result. I’ve made bad decisions. I’ve made bad calls. I’ve made bad estimates, done the wrong work, shipped the wrong product at the wrong time to the wrong people. I have permanently screwed up the lives of a few people. I have deeply hurt many others. And I have offended so many people that I’ve lost count. All because I made a choice and took a risk that didn’t work out. And you know what? I don’t feel good about any of those consequences.

But I don’t feel ashamed of the choices. I made the best call I could at the time with the knowledge and abilities I had. Don’t get me wrong–sometimes it takes me a long time to forgive myself when I say or do something hurtful or ignorant or blithe or just plain dumb. But it’s so much easier than forgiving myself for not making a choice and choosing to own it.

Of course I’m only talking about the bad choices I’ve made here. I’ve made lots of good ones, too, and owning the choice is the reason I don’t feel guilty or ashamed that I get to have the nice consequences. There are lots of great things that happen to me on accident, and sometimes I even feel good about them. But sometimes I was just in the right place at the right time with the right skin color or nationality or gender. I can accept those and appreciate those and be grateful for those, but I can’t really own those. And that’s what I’m talking about here: the kinds of choices you can own, and owning them, and owning the risk of choosing–regardless of which side of the choice you took. That’s how you own the consequences.

You Never Regret Taking The Risk

I want to clarify that sometimes the risk is to take the safe path instead of the path everyone expects you to take. I’m not talking about being reckless, or risking more than you can afford, or making a decision before you need to without gathering the information that you need. That’s knowingly making the wrong decision, and there’s no prize for that. That’s stupid at best, and evil at worst. When I say “taking the risk” I mean studying out the odds, calculating the costs of failure, and deciding if the decision is important enough to get wrong.

So you know the kind of risk I mean. The kind where you have the information you need, you know what success could look like, and you know what failure could look like, and you know exactly what living another day without choosing looks like. That decision. THAT risk.

I have never regretted taking that risk, success or fail.

Of course I don’t mean I’ve never regretted a bad decision. But having the chance to make that decision, and thinking I had enough of the right data, and then making the choice–taking the risk–to the best of my ability? Never. Not once. I’ve never cared for the question “what would you do if you knew you couldn’t fail?” It doesn’t motivate me because I can’t know that I can or cannot fail. But Brené Brown rephrased that question into something so much more beautiful that I now keep it on a post-it on my monitor: “What’s worth doing even if I fail?”

That’s the kind of risk I’m talking about here.

I just tried to think of the dumbest risk I’ve ever taken and I ended up spending over an hour writing and deleting and starting over with just the things I’ve failed at this month. I could be the poster child for failure. Not just because I’ve failed so much, so hard and so often, but because I would also look hilarious on that poster.

So What’s With All This Regret And Risk Stuff?

Dumb choices are not the enemy. Big risks are not the enemy. Crazy failures are not the enemy.

Paralysis is the real enemy here.

If you have a choice in front of you, and you don’t want to make it, there’s a hundred things I could say to you. I could remind you that every day you don’t decide, you slide closer to being stuck with the default choice. I could point out that success would be just so awesome. I could say that you miss 100% of the shots you don’t take.

But I’m not going to. I want you to look at that choice, and look at that failure. Just look for a moment. Look at walking down that mountain instead of jumping off of it. And remember: We’ll understand. Stop being afraid of that walk. If you can own that side of the choice, you’re halfway to owning the decision, and owning the risk.

And if it’s a risk that makes sense–I remind you again that I jumped off with a rope–maybe you can let yourself own that, too.

You might regret the consequences. But you’ll never regret taking the risk.

What’s worth doing even if you fail?

How long will you regret it if you don’t even try?

–David

P.S. I’m still writing the Job Replacement Guide, and this post was definitely inspired by my recent research. If there was one thing I could magically place in the book, it would be something that would wave a magic wand and help you get out of your paralysis. Whether you need to network with people you’re afraid of or ask a potential employer to negotiate your salary when you’re currently unemployed, or just put “I enjoy creating abominations of nature” in the interests section of your resumé (join the mailing right now if you want to hear the true story behind that quote, by the way, because it’s a story too good to not include in the book and I’m telling it on the mailing list today or tomorrow.)

jrg_cover_small

The Job Replacement Guide

Learn how to replace your job with a better one in record time. Whether you’re unemployed, hate your job, or just wonder what you could accomplish at work if you were utterly fearless, this guide will give you the confidence that comes from being “unemployment-proof”.

Coming Soon!
Click here to sign up for the mailing list to get updates, advance content, and a discount on launch day.

The Jobhunting Mindset

Here It Is, The Big Secret

Last week I promised I’d give you the core secret from my upcoming book, The Job Replacement Guide. It absolutely cracked me up how many of you actuallybelieved me! Then I realized that the same number of you would absolutely lynch me if I didn’t make good, so I decided to go ahead and spill the beans.

I need to set this up a little bit, because it’s so simple you’re not going to believe me. After I wrote the previous post, I told four or five people what the secret was and not one of them “got it”. They either said “Huh” or they did that thing where you tilt your head and kind of scrunch your nose like you’re either squinting at something or you smell something bad. Giving a more detailed explanation didn’t help, but fortunately demonstrating the application of the idea did help several people.

So I’m gonna tell you the secret, and it’s going to sound dumb. But stay with me, okay? Because I’m going to demonstrate a completely unexpected application of it and it’s going to be awesome.

Ready? Okay. The big secret to my jobhunting success is this:

It’s not about you. It’s all about them.

Or, if you prefer,

Don’t make it about you. Make it all about them.

Pretty simple, right? And kind of stupid?

Yep. That Was Dumb.

I know, I know, but wait! Stick around. Let’s talk about this for a minute! This really will change the way you get leads and write resumes and conduct interviews.

See, the thing is, you’re thinking about persuasion, or communication, right? Or maybe you’ve had a little sales training, and you know that it is much more effective to appeal to another person’s self-interest than to their sympathy.

But you’ve got it all wrong. Well, actually you’re totally right, but you’re still missing my point. This is the “weird trick” that I figured out on accident, and have been able to jobhunt successfully ever since. It’s not about persuasion, or communication, or even another person’s self-interest. The specific application of this concept is, paradoxically, all about you.

It’s All About Being Unstoppable

It’s all about power. When you are interested in another person, you sort of become unstoppable. You can’t stop thinking about how things look from their perspective, or of reasons to talk to them, or things to do for them, or ways to help them. And they can’t stop you, either. You have all the power. When you make it about them, you control the beginning and the end of the interaction, and if you want another interaction, and another and another, as long as you are genuinely making it about them, they’ll not only let you, they’ll eagerly welcome you.

When you make it about you, they might give you some sympathy or try to find a way to help you, but either way, you have given them control over the interaction. In the absolute best case, they give you some great help–and now that they’ve helped you, they’re done. They end the interaction. It’s not intentionally harmful; in fact it’s often done with the most noble of intentions. But it’s still death to your jobsearch effort.

This really is one of the trickiest ideas I’ve tried to pull out of the warped recesses of my mind, so I hope I’m making sense here: when you make it all about them, they can’t stop you. If something doesn’t work, you find another avenue of approach. You never get shut down. You keep all the power.

Let’s talk through some examples just to make it clear. As we go through them, pay attention to who is in control of your energy and your efforts.

What A Powerless Jobsearch Looks Like

A powerless jobsearch follows all of the rules you were taught in Career Ed in high school: Dress neatly, go in and fill out an application, and hope you get picked. Format your resume to exactly two pages with an Objective, Education, and Experience section; mail off ten copies a day and hope you get picked. Arrive at the interview 5 minutes early, dressed one step nicer than the average employee; be eager–but not too eager–and make sure you follow up any negative answer with a positive statement so you don’t look bad. Then go home and hope you get picked.

I’m hammering it home with no subtlety at all here: the dominant theme of a typical jobsearch is hoping you get picked. By which I mean sitting quietly, waiting politely, for your turn. And maybe your job.

You call a friend and ask who’s hiring. He says he doesn’t know off the top of his head, but if he hears anything he’ll let you know. You walk up to the receptionist and inquire about employment, and she says they’re not hiring, but you can drop off your resume. You reach the end of the interview and the interviewer asks if you have any questions for her.

The last one is subtle, but all of these are bad situations. And you got into them because you made it all about you, and you let them have your power.

A powerless jobsearch is a numbers game. It looks like this: you do everything right, and you do it as hard as you can, and you hope you eventually get lucky. You send out 1,000 resumes and get 10 interviews. You go to 10 interviews and get 3 callbacks. You go to 3 callbacks and get 1 job offer.

I sure hope it was at the company you wanted to work at.

What An Empowered Jobsearch Looks Like

An empowered jobsearch feels very different. For one thing, it doesn’t really feel like a jobsearch. It feels more like… well, talking to people and listening to them. And then getting offered a job.

You call your friend, and instead of asking him who’s hiring, you ask him who’s working in Ruby. You ask him what companies are doing financial processing. You ask him who sponsors the local Ruby meetup. Your friend is more than happy to oblige, and disgorges a long list of companies. He even knows people at those companies that you could talk to, and he’d be happy to introduce you. “I’m not sure they’re hiring, though,” he warns. You smile. “That’s fine, I just want to find out what they’re doing.”

Your friend introduces you to a programmer doing health insurance work at InterestingCorp. You hit it off, and you joke and say “I bet you’re having fun with the new HIPPA stuff….” “I know!” he replies. “You wouldn’t believe the stuff they have us doing!” You invite him to lunch sometime to chat about financial processing. He says sure.

A week later you’re having lunch with the programmer. You ask him about what kinds of financial processing stuff, they do, and he happily launches into the cooler things they’re doing. He asks you what you’re up to, and you mention that you’re between jobs, but you used to do financial processing. You notice one of the cool things InterestingCorp does solves a very hard problem. “So how did you get around the problem with…” At the end of lunch, he says “You should apply at InterestingCorp. We just finished a round of hiring, but we could really use you.” “That sounds like fun, who should I talk to?”

Your friend gushes to the hiring manager, and then introduces you via email. You ask her some questions about team dynamics in a financial processing environment. You speak on the phone and ask some piercing questions about how the team works and the trickier bits of financial processing. She says “you know what, you should stop by and meet some of the other programmers. Do you have a resume you could email me?”

During this time you’ve met half a dozen other programmers and talked to them about their companies and their problems. None of their companies are hiring, but all of them are interested in talking to you more. And of course, InterestingCorp isn’t hiring either. But that’s just a decision some manager made, and decisions get unmade when the right reason comes along.

That’s you, by the way.

You meet with the team and hit it off. Afterwards, you have a private interview with the hiring manager. She tells you about the company benefits and the atmosphere and the dress code and why it’s awesome to work at InterestingCorp. There’s a manila envelope on her desk, and that’s when it hits you: she’s sellingyou on coming to work for them. And not only do you realize that the envelope contain your offer letter, but that the letter was on her desk before you came in to meet the team. Of course she’d have pretended it never existed if the team hadn’t liked you. But when they did… well, there’s no sense wasting time, is there?

Empowered Jobsearches Feel Totally Natural

Empowered jobsearches feel totally natural. In fact, I’d almost say they feel unconscious, or kind of accidental. You don’t really feel like you’re jobhunting. You’re just stumbling on great jobs. That’s why it took me so long to realize that I was actually doing something to cause it to happen: for years I thought I was just extraordinarily lucky. Here are some of the conditions under which I have landed jobs:

  • I called an ex-coworker and told him I was quitting my job, and he excitedly told me his brother-in-law had just called him to beg him to quit and come work for him, he didn’t want to go, but he’d be happy to introduce me.
  • I was using a piece of software, and it crashed. I called the company that made it. “I’m calling to report a bug, but I’d like to talk to the programmer because I actually know exactly which version of which compiler you’re using to write this software, and which setting you need to change to fix it.” One week later I was the other programmer working on the product.
  • I wrote a CMS for webcomics and managed the web hosting for Schlock Mercenary for several years. The cartoonist, Howard Tayler, was a manager at Novell. I asked him for leads (“who do you know that’s doing web programming work?”) and he introduced me to his friend, who told me about his brother, who was a huge fan of Howard’s comic and worked at a company that did websites. As the Executive Vice President. Getting an interview wasn’t a problem.
  • I turned the entire interview process into a foregone conclusion at one company by finding out that the CEO was an old friend of mine. I got a call from the hiring manager, who began the call by saying “So, um, the CEO of my company asked me to call you…” Mind you, I still had to make friends with the team, which included smoothing the feathers of the hiring manager that I had just pulled rank on. But once I showed them my sincerity and interest in their technical challenges, they realized I wasn’t the CEO’s crony and that they actually wanted me on board.

If I look at any one of those jobs, I could blame it on luck. I could almost say that I don’t really have a system at all… except for the fact that I know I’m going to get lucky every single time I go looking. Because I’ve learned to make it all about them, and yes, this helps me persuade them and yes, it appeals to their self-interest. But mostly it keeps me from ever letting anybody or anything stop me.

Except an offer letter, that is. When you make it all about them, they make sure you stick around.

I’m Writing A Book About This

If you want to keep your power in the jobhunting process, The Job Replacement Guide is a collection of techniques I’ve learned over the years to apply this mindset to every phase of the jobhunting process. From getting people to give you leads to calming your nerves in an interview to negotiating a better salary, knowing why–and exactly how–to apply the “make it all about them” principle is the secret to “accidentally getting lucky” every single time you jobhunt.

If you would like updates on the book’s progress, including advance content from the book and extra content that won’t be making the final cut, sign up for the mailing list. You’ll be the first to know when it’s published, and I’ll throw in a discount for those of you who were with me all the way from the beginning.

See? All about you.

jrg_cover_small

The Job Replacement Guide

Learn how to replace your job with a better one in record time. Whether you’re unemployed, hate your job, or just wonder what you could accomplish at work if you were utterly fearless, this guide will give you the confidence that comes from being “unemployment-proof”.

Coming Soon!
Click here to sign up for the mailing list to get updates, advance content, and a discount on launch day.

The Job Replacement Guide: Why I Have To Write This Book

I have to write a book. This is the story of why.

I’ve never told this story–the “before” part, anyway–except in parts here and there to my closest friends. If you don’t care about stories, but you are interested in a book with a completely unorthodox approach to jobhunting, sign up for the mailing list.

See, I’ve helped thousands of people jobhunt over the years. I tune resumes. I coach interviewees. I help people find out who’s hiring and how to get in touch with them. I’ve never charged or anything, it’s just something I do to help friends.

And I am really, really good at this.

I wasn’t born this way, though, and the way I am now is the happy, helpful, “after” part of the story.

I’ll tell you right now, the way I learned was not pleasant. Trigger words: divorce, chronic illness, depression. You’ve been warned.

For me, it’s all in the distant past, and I’m fine now. I like to fantasize that this is sort of my “Superhero Origin Story”, only with me ending up with a freakish personnel management skill instead of a superpower.

But yeah. This is a story I’ve never told all at once before, but now I need to–for the same reason I need to write this book: Some of you out there need it right now in the worst way, and most of us will need it in the next year or two. So… I guess this is for you. Here you go.

Act I: In Which The Hero Is Kind Of Whiny And Pitiful

In my early 20’s, I was… well, I was a mess. I had a positive attitude, a ton of self-entitlement, and absolutely no clue how the real world worked. I was newly married, freshly dropped out of college, and rocking a pretty severe case of undiagnosed ADHD. I wasn’t really sure how I was going to make ends meet, get back into school and graduate, or just keep things from falling apart generally. But I had unsinkable optimism and a can-do attitude, and I just knew that if I worked hard enough everything would be okay.

And then I got sick.

I got so sick I couldn’t work, and I lost my job. I went to the doctor, got a prescription, rested up, got feeling a little better, and went out and got myself a new job.

And then I got sick again.

I saw the doctor again, got another prescription, rested up, got feeling better, and went out and got a new job.

And then I got sick again. And again. And again. I had a chronic illness that wasn’t well-understood at the time.

I switched doctors. We tried antibiotics, then antivirals. I switched doctors again. We tried radical dietary changes: no artificial food colors, no additives, no gluten, no corn. The next doctor suggested it was in my head, and could I just try not being sick? When I tried just going to work and pushing through it, and became even sicker, he suggested I go the other way and take it easy. I took a month off to REALLY rest up and get better. To be fair, it helped: I lasted maybe an extra week at the next job. I tried chiropractic and megavitamins and massage therapy. I was desperate to find anything that worked. Nothing ever did. One doctor literally told me that the only thing left to try was divine intervention. He suggested that I talk to my church leader and get an ecclesiastical blessing.

I had already talked to him and gotten a blessing. Divine intervention seemed to be in agreement with medical science: No cures, no fixes. The only thing that could help me was lots and lots of rest, and then only for a little while.

It seems odd in retrospect, but the one thing that never occurred to me or my wife or any of my doctors this entire time was that I was, in fact, very sick. I secretly wondered if I was just lazy or somehow unfit to be a grownup. All we really knew was that I couldn’t hold down a job for more than 2 or 3 weeks at a time… and whenever I felt too physically ill to work, I was tormented by the guilt that I wasn’t supporting my wife like a husband should.

Over the next 18 months I worked at, and lost, 24 jobs.

My illness got worse. Our finances became unbearable. The combination of money, health problems and other stresses became too much for my wife. When she left me I was devastated. We had an amicable divorce because we couldn’t afford any other kind. There was nothing to split up but our debt.

I moved back in with my parents and spiraled into a deep, dark depression.

Act II: In Which The Hero Goes Off To A Monastery And Learns Kung-Fu

Technically this is true, if by “a monastery” you understand me to mean “my parents’ house”, and by “learns kung-fu” you understand me to mean “sits around moping and feeling sorry for himself, but at least has plenty of time on his hands to read and think and stuff”.

I did a lot of soul-searching, in every way I knew how. I read self-help books, I meditated, I saw a therapist, I took antidepressants, I sought spiritual counseling, I fasted and prayed to my God, and above all I spent a lot of time just thinking. I really felt like I was one of God’s “special screwups”, and that the only thing I was really good for was to serve as a bad example to other people. Any time I wished I could move back out on my own, I’d realize that I needed a job, and I’d remember that I’d lost more jobs than I was years old.

Transition: That Moment When The Hero Takes A Long Walk In The Rain Alone

One day I happened across a quote by Patrick Overton:

“When you walk to the edge of all the light you have and take that first step into the darkness of the unknown, you must believe that one of two things will happen. There will be something solid for you to stand upon or you will be taught to fly.”

Something about that quote resonated with me, which is why I still remember it. I felt like I had no light at all, and that any step in any direction was into the darkness. But I felt very strongly that if this quote was true then it should be true of any kind of the darkness; I should be able step in any direction and find solid ground–or a pair of wings.

I remember thinking about my job history, and laughing ruefully at myself, and saying aloud, “24 jobs in 18 months. That’s not solid ground. So how is that going to teach me how to fly?”

And that’s when it hit me:

In order to lose 24 jobs in 18 months, I had to search for, find, interview for, and get hired for 24 jobs! Even at the end, when I had to explain to interviewers why I had had dozens of jobs before them, I had no trouble convincing them to hire me. What on Earth was I doing to get these people to hire me? I had no clue. I didn’t know what I was doing; all I knew was that I could.

Act III: When The Hero Decides To Confront His Nemesis

I decided to move out of my parents’ house, and put my life back together. They say that when the student is ready the master will appear, that fortune favors the bold, and that the whole world steps aside for the man who knows where he’s going. There must be a good reason for these sayings to exist, because as soon as I started moving, miracles started happening.

Some friends from the city called me and said they felt inspired to ask if there was anything–anything–they could do to help me. I took them at their word: “Um, actually… yes. Can I come live in your basement for a year or two?” They didn’t even hesitate before saying “Yes.”

So I moved back to the city. With no rent, I was free to work when I could and not worry about eviction when I needed the rest. I got a job working the electronics counter at a big box store. I decided to take charge of my health proactively, and sought out a doctor while I was still healthy. I described my health history, and the doctor blinked in astonishment. He had just heard about my peculiar combination of symptoms. The treatment was simple and life-changing.

On the way to work one day I heard about some symptoms affecting millions of people called Attention Deficit Disorder. It described me to a T. Two weeks later I had an official diagnosis and a prescription that I still take today. I love to joke around about it, but honestly the best way to describe it is like my brain is now able to put on glasses when it needs to see more clearly. More importantly, I learned that I was not learning disabled, but rather had some specific constraints to my learning style. I stopped trying to get back into school and started buying textbooks to read on my own for fun. You know, as one does.

I began programming again in my spare time. Three months after I’d started working again, I heard about a company hiring not-quite-entry-level tech support people. Turns out that just dropping out of a top-ranked CS program was enough of a qualification to land the job.

I worked continuously for a straight year. I started dating again, and got engaged. The day the company announced they were closing their Utah offices in a month, I felt the strangest thing: absolutely nothing. My coworkers began scrambling frantically to find new jobs, but I didn’t. They thought I was crazy, and I thanked them for their concern, but I just shrugged and said I wanted to stay focused on my current job until they locked the doors. Later, my manager would give me a glowing review for my professional behavior in the last days of our team. On our last day I walked out into the bright afternoon sun.

I was getting married in three months. I had to find an apartment and pay first and last months’ rent. I had furniture to buy. I still had debt to pay off from my previous marriage. But above all, I had to show my fiancee (now my sweet wife of 17 years and counting) that I could support her financially without the slightest trace of worry.

I inhaled the warm summer air, and smiled. I had no job, no leads, and no idea where my next paycheck would come from.

And I knew exactly what to do.

Epilogue: In Which The Hero Realizes He Should Write This Stuff Down

It’s been eighteen years, now. I’ve always had work whenever I wanted it. I’ve been laid off, I’ve quit, I’ve been outright fired. Through it all, I’ve never missed a mortgage payment and I’ve never missed a meal. I’ve also never missed a wink of sleep wondering if I should quit my job.

All those years ago, back when I was a complete mess, I stumbled on an approach to jobhunting that makes the whole process simple, obvious, and easy. Maybe it’s the sort of thing I should save for the book, but I feel like I need to get it out there. I can’t explain it in one or two paragraphs, though, so you’ll have to wait for my next blog post on Monday.

There are three reasons I’m going to explain the whole thing on my blog. The first is that, even though it’s a simple idea, almost everyone looks right at it and doesn’t see it. (It took me several years to figure out what the actual idea itself was, even though I was acting it out unconsciously.) The second is that the reason people look right at it and don’t see it is because they’re afraid. And I can’t stand that anymore.

They’re afraid because they’ve just been fired or caught in a layoff. Or they’ve got a job but they’re afraid of losing it. Sometimes I even see people hate their jobs so much they wish they’d get fired, but they don’t quit… because they’re afraid.

Last year, a weird coincidence happened to me that made me sick to my very soul. I saw hundreds of people change jobs, no different than any other year, really. But just out of coincidence, four different people said the exact same sentence to me, and it’s a sentence that stabs my heart with ice:

“I just don’t know what I’m gonna do.”

I can’t stand leaving that question lying around unanswered, and I’m writing a whole book to answer it: Here’s what you’re gonna do. What I’m going to explain in the next post is the core principle, the why of what you’re gonna do. That’ll be here waiting for you on Monday.

The third reason I’m willing to explain the whole thing is that it’s taken me 18 years of applying that core principle to learn all the tricks I’m putting in the book. A few of them are original, but most of them are tips and tricks I’ve picked up from others along the way. Things that I’ve read or seen and thought, “Yes, that matches my core principle of how to do this.” But you don’t need the book if you’re willing to read my next post and then be me for twenty-odd years.

So… I’m writing all those tricks down. I love helping people with their careers, to take risks at work and learn and grow. But that’s hard to do if you are terrified of being let go.

That fear, that terror. That’s why I have to write this book. Not just the despair you feel when you’re out of work and laying awake worrying about feeding your family. I’m talking when you’re at work and that brief flutter in your stomach stops you from telling your boss that bad news she really needs to know about. Or that qualm that keeps you from speaking up in a meeting because the CEO might not like your suggestion. Or that seeping dread that makes you say, no matter how bad your boss is, you should be grateful to have work.

That fear. That terror. THAT is why I have to write this book. I hope you love it when it’s done and that you and a million friends all buy it. But even if it only sells one copy (thanks, Mom!), I can’t let this book live silently in my head any longer.

So, yeah. Coming Soon:

jrg_cover_small

The Job Replacement Guide

Learn how to replace your job with a better one in record time. Whether you’re unemployed, hate your job, or just wonder what you could accomplish at work if you were utterly fearless, this guide will give you the confidence that comes from being “unemployment-proof”.

Coming Soon!
Click here to sign up for the mailing list to get updates, advance content, and a discount on launch day.

New Candidate For Most Surreal Email I Have Ever Written

Before you read this, some necessary background.

First, This may come as a surprise to some of you who read my blog, especially those of you with particularly low reading comprehension, but I like to joke around, and tease people in a good-natured way and generally have a good time.

Second, lately I’ve been having a series of Very Serious conversations with a good friend, and one of the things that came up is that I use self-hypnosis to explore my subconscious and understand myself better. She replied that she had tried hypnosis but it just didn’t work for her; she felt like she was imagining everything instead of letting go and letting things happen.

Third, this is a perfectly normal place for many people to start with hypnosis, and all it takes to get through it is the ability to listen to your body’s physical sensations.

Fourth, because our conversations were Very Serious I have changed her real name. Let’s call her Jen instead.

Fifth, as I wrote this, I started to make a silly joke… and it sort of spiraled out of control. However, in comedy there is such a thing as commitment to the joke, so I stayed with it, all the way down into the ground. In flames. On an orphanage.

And Sixth, FOR THE RECORD, AGAIN FOR YOU FOLKS WITH POOR READING COMPREHENSION, Jen is a wonderful friend and I would never say anything to hurt her. This email was a joke, and she took it the right way, and she laughed.

Oh, and Seventh: Trigger Warning: This post contains ascii-art drawings of penises and making fun of quadriplegics. And ninjas. I mean it has ninjas in it, not that I’m making fun of them. Just the quadriplegics. They don’t fight back as much.

On 11/14/2013 05:23 PM, Jen wrote:
OK, we totally need to find some time to hang out so I can pick your
brain about how you discover these things.

This sounds really interesting.

Absolutely! You’ll be happy to hear that it all started where you’re at now: with me being unable to make hypnosis work, and when I did, it felt like I was just making everything up.

The bad news is that I’ve been working at it for over 20 years.

The good news is that I didn’t know how to really practice at things until this year, and I STILL don’t know how to practice at THIS.

The first time you do it, it will either shock you or completely underwhelm you, because there’s nothing to it–you’re already doing it, all the time. And I mean ALL the time. It’s like breathing, or nervously bouncing your foot. If you have a functioning Peripheral Nervous System, you can do this. It’s either happening to you right this second or you’ve had a sudden attack of quadriplegia.

JEN! IF YOU HAVE HAD A SUDDEN ATTACK OF QUADRIPLEGIA, TRY TO ROLL YOUR FACE OVER TO THE REPLY BUTTON! IT WILL SEND ME A BLANK EMAIL BUT I’LL KNOW YOU ARE SIGNALING ME TO oh what am I doing, you’re face down in the keyboard you can’t see the screen it’s not like typing at you in caps is going to help. I mean how stupid am I feeling right now, right? I’m all “TRY TO ROLL YOUR FACE” and you’re just lying there with one eyeball on the P key and your nose mashing the space bar. Geez I feel so dumb.

So… now what. Um.

Huh. This is suddenly kind of awkward.

Okay, so. I am wracking my brain right now trying to think what combination of pixels I could type up that would shine on the top of your head and help you with whatever is going on, but to be honest I don’t even really know what’s going on. I don’t know if you’re having a stroke, or an extremely rapid onset of Friedrich’s ataxia, if you’re just having the world’s calmest epileptic fit. I’m going to level with you, some of this is speculation, I don’t have a lot of information to work with here.

OOH! It could be ninjas! One shuto-uchi (“knife hand”) strike to the C2 vertebra and down you’d go, plus you’d never have seen it coming, because ninjas. This would also explain why you were just sitting there reading this email before it happened, instead of preparing for–I know, I know, “don’t blame the victim” and all that, but there’s a reason I try to teach people to maintain a minimum level of situational awareness. Oh man, I shouldn’t have said that, you’re probably already blaming yourself anyway. It’s probably hard for you to accept this right now, but, if it WAS ninjas, there’s nothing you could have done. I know you’re probably kicking yourself right now. Well, I mean you WOULD be if you could move your legs–aw geez that was probably insensitive of me. Wait, can I say “insensitive” or is that too close to “insensate”? GAH it’s like a spiderweb of tripwires with you and your political correctness! I don’t even know how to talk to you anymore, Jen–again presuming, falsely, that we’re talking and you’re not just lying there blowing snot bubbles into that little groove at the bottom of the space bar–it’s like you’re a complete stranger now, and ALL I AM TRYING TO DO HERE IS HELP YOU, WHY CAN’T YOU SEE THIS aside from the fact that you cannot, in fact, see any of this, as previously stated in an earlier interjective clause in this very sentence. I don’t even remember where I was going with this.

OH! Ninjas! That was it. Here’s the thing: it’s probably just ONE ninja. They don’t actually travel in packs or anything, except at like anime conventions, and even then they’re not actual real ninjas, they’re just dorky teenagers dressing up like, I don’t know, Scorpion or Sub-Zero from Mortal Kombat and stuff. Actually, now that I think about it, the chances of your ninja being a REAL ninja are statistically pretty minimal–except wait, C2 vertebra fracture.

Crap.

Okay. Jen, I know you can’t see this, but try to be brave. I don’t want to alarm you any more than you already are, but… it’s probably a real ninja.

All right, look–crap, I did it again, sorry. You’re getting a big ol’ eyeful of that P key and I’m telling you to “look”. Geesh. I don’t–wait, don’t you wear contacts? Oh MAN that has gotta suck! I mean, you suddenly lose sensation to 95% of your entire body all at once and the part that can still feel has to start hurting? Ha! Sorry, sorry, I shouldn’t laugh. It’s just that I’ve never really been sure what the actual definition of irony was, and I was just thinking that this is probably pretty close, and–

Sorry, I’m sorry. Appropriate conversation, I get it. I’m pontificating about wordplay and you’re lying there, terrified, with a probably-real ninja assassin in your apartment and spit puddling around your cheek. It’s not like you’re wondering if AppleCare covers the damage if the trackpad shorts out from your saliva. It doesn’t, by the way. Cover the damage, I mean. Just in case you WERE wondering. Which would be pretty odd, actually. And not just a little hypocritical, given the whole “appropriateness” discussion, if you ask me. Which you didn’t, given the whole “keyboard face” thing–sorry to keep bringing that up but it’s really sort of the elephant in the room here–and anyway now I’m starting to wonder why I can’t seem to go more than two paragraphs without it feeling like we’re having an argument. Am I projecting? I feel like I could be projecting. It’s possible. I am going through some issues right now. Okay, tell you what: let’s assume that yes, I *AM* projecting. Let’s just go on that, from here, clean slate, start over. Okay? Okay. Starting over. I’ll go first.

I forgive you.

Well what else am I going to start with, it’s not like we can pretend that words haven’t been said here! I’m just trying to make you see–and YES I realize that was an inappropriate word, but that’s starting to become just a bit too convenient a deflection, young lady, we ALL KNOW that you’re face down in your laptop, we GET IT, the whole paralysis thing, it was big news when we first heard about it but at some point you are just going to have to pick yourself up, sorry, haul yourself up by your bootstraps, again sorry, though maybe you’ve got a friend who would go boot shopping for you and put them on your feet for you so you would have actual, literal bootstraps, and then I guess maybe your friend could sort of tug on them for you, because maybe you gave her a head-nod or an eye-blink or whatever, I don’t know how this stuff works, she’s your friend so I’m sure you could work out some kind of signal given time, but my point is that sooner or later you are going to have to stand on your own two feet. Sorry.

Look (sorry) these are just figures of speech, it’s not like I’m standing (sorry) around trying to think up inappropriate knee-slappers (sorry) to say to my suddenly-and-inexplicably quadriplegic friend to be hurtful! It’s not like I am TRYING to cut you down (sorry) or kick (sorry) you in the teeth (sorr–wait, that one would actually work), if you could just meet me halfway on this, I would try to do better, I really would, Jen, I would try so hard.

But nothing is ever good enough for you, is it? Is it? You don’t have to say anything. We both know I’m right. Well here’s something you DON’T know: I have HAD IT. I am DONE. I tried to give you my friendship and you sure took it, but you couldn’t give back, could you. You just had to go and make everything about you, you, YOU. Well HERE’S something that’s about me, me, ME: ALL MY FINGERS STILL WORK YOU AWFUL HARPY! I HOPE YOU ENJOY STARING AT YOUR KEYBOARD AND I HOPE YOUR TRACKPAD TASTES LIKE GROSS SWEATY PALMS! Look at me! My legs both work! I’m not the one drooling into my keyboard! I’m not the one who is going to be discovered by EMTs tomorrow morning with my laptop open, AND I’M NOT THE ONE WHO’S GOING TO HAVE TO EXPLAIN TO THEM WHY I’M LOOKING AT AN EMAIL FULL OF ASCII-ART PENISES!!!

8=D
8=========D
8=========D
8===D
8==========D
8======D
8=========D
8======D
8==========D
8====D
8======D
8=======D
8==========D
8=========D
8=====D
8===D
8=====D
8====D
8=======D
8====D
8========D
8=D
8=======D
8=D
8====D
8==========D
8========D
8=D
8===D
8===D

HAH! ENJOY YOUR FEEDING TUBE YOU FOUL HARRIDAN

David

P.S. If you are not in fact paralyzed from the neck down please stop reading 17 paragraphs ago

P.P.S. The penises count as one paragraph

Final note for you blog readers: If you use Ruby, you can generate your own page full of ascii-art penises with the ‘dicks’ gem. Just type ‘gem install dicks’ and then ‘dicks -n 30’ and bam, your face will be full of cocks. As it were.

Loyalty and Daring

On November 7, 2013, user “Stromm sarnac” replied to Loyalty and Layoffs with a pretty strong comment about keeping my head down and my mouth shut. I started to reply, but it got so long that I’ve decided to post this as an open letter. Because I’m doing this, and because Stromm’s stance is pretty strong, I want to emphasize that I am grateful for his comment and I am not posting this as a reply troll, but rather I am replying with total transparency and sincerity. More importantly, since my message is that “no, I absolutely should not keep my mouth shut, and neither should you or anyone else”, I’m publishing it here for general consumption. Part of daring to open your mouth is owning the consequences, and sometimes that means owning “getting yelled at”. While we are certainly within our rights to retaliate if the scolding is harsh–and this is a very human thing to do–we may also have a brief window of engagement if the person doing the yelling is also coming from a place of sincerity.

I feel like I’m setting you up for a scathing swearfest here, but to be honest, Stromm’s reply isn’t really that harsh. If it had been, I’d just have deleted it and moved on. No need to engage when there’s no chance of connection. I found his reply pointed, but at the end of it I found myself realizing that he is exactly the kind of audience I am trying to reach right now. I’m adding all this preamble so that nobody reads this open letter and thinks I’m trying use my forum to publicly shame this user.

Stromm, if you’re still out there, this one’s for you.

“It didn’t really hit me for about a week that I’d just been screwed out of the best job I’d ever”

You weren’t screwed out of a job. You had no right to that job or any other, same as the rest of us.

You were let to because the numbers didn’t work. Same as almost all of us who have been let go like that.

Instead of burning bridges and showing future employers that they shouldn’t trust you either, you should have kept your mouth (fingers really) shut.

Thank you for this comment. I mean that sincerely. I found your post challenging at first–as I’m sure you intended–but then I found it interesting, so sure, I’ll take a moment to reply. First, let me say that this post was absolutely intended for you. You were–you are–my target audience. Secondly, yes, I wrote that post in anger, and though I don’t regret it I do recognize that I made a key error: I failed to clarify the difference between loyalty and trust, and this has led to a lot of reactions similar to yours. If I haven’t permanently lost you as a reader I hope you’ll take a moment to read Loyalty and Trust, but if you’re done with me and my last communication to you will be the email notification of this reply, let me say that I agree with you completely, and that we should show loyalty to our employers, but we should not trust them with our careers, because–as you say–nobody has a right to a job or any other.

I appreciate that you want to look out for me and my career, but you’ve missed some key points along the way. What you have taken away from my post tells me that you are conflating loyalty and trust, which is my fault. But your fear of burning bridges also tells me that you, sir, are not curating your own career properly. You think I should be afraid of something I have faced and whipped so many times that I almost don’t remember it even exists. And the reason you have this fear, and I don’t, all comes down to owning your own career.

But you wanted to make this about me. Maybe you’re a jerk–nothing personal; the internet’s full of them and I’m just saying it’s a possibility. But then again, maybe you deflected the issue back to me because it feels safer for you, and I’m fine with that–and again, I mean that. I’m not challenging you, and I’m not trolling you. I am trying to meet you with openness and sincerity here. We feel angry when somebody breaks a rule that we think should be in place, and many of our rules come from decisions we make about our fears. You missed the point I was trying to make, and that’s okay. The fact that you felt engaged by it enough to comment means maybe I still have a chance. You are rejecting your interpretation of my message, and I want you to hear my true message, or at least understand it enough to agree that it’s not for you. I’d rather you reject my actual point rather than your misunderstanding of it. So let’s talk about your reply for a minute.

Let me start by saying that you are right about every single thing you said, right up until the last sentence, where you tried to slip in a whole lot of implicit assumptions under the radar in order to arrive at the exact opposite conclusion that my logic–based on different assumptions–should have dictated. Let’s start with where you’re right.

Did anyone owe me a job? Certainly not. I agree with you. Life doesn’t owe me anything. Life is totally unfair. It has to be; otherwise winning wouldn’t be any fun.

You’re also right that I lost my job because the numbers didn’t work. You’re not wrong, but I want to point out a subtle nuance that you may have overlooked: the numbers didn’t work because somebody else was incompetent. I did everything right–better than right, really. And somebody else screwed up, and kept their job, and I lost mine. Is that fair? No! Did I have a right to that job? No! Do I have the right to feel betrayed about it? N–well, actually yes! My feelings are my own and I have the right to feel whatever the hell I want. You not only don’t have the right to vote on my feelings, you don’t even have the right to have an opinion out loud about them. Well, actually you do, because free country and stuff, but the point is I don’t have to listen or care. But since I also opened my blog for comments, I did give you a place to sound off about my feelings, so I’m not scolding you. Right now I choose to be transparent about my feeling process, but I wanted to point out that this is my whim, and not your right. Anyway, the process is this: I have a rule in my head that says my actions affect other people, and another rule that says I am responsible for my actions. Now I don’t have a rule that says I am responsible for other people, but I definitely do feel that I have a responsibility to other people. As it happened, some people very high up in that organization were consistently making bad choices, choices not based on reality or understanding of the market, but choices based on ego and shame and fear of looking bad to the board of investors. Rather than choose to examine their profits and losses and invest where costs were low and potential was high, they chose to sink vast sums of money into projects whose glory days had faded in the hopes of making the world somehow go back in time. In order to pay for that folly, staggering amounts of intellectual property was abandoned and projects with genuine promise were first bled dry and then discarded. In order to make the numbers work on those doomed projects, those men and women, who had responsibility for the company, and to me–because their actions had an effect on me–made choices that caused the numbers to not work where I was concerned.

They screwed up, but I had to pay for it. Did I feel wronged? You bet! Was I angry? Yep! Did I stay angry? Nah. It wasn’t really a useful emotion. I had no ability to take any action that would have any effect on them, and besides, I don’t know that I could have run the company any better. Even if I could have forced them to make a different decision, the company was spread too far at that time, and had to contract to stay alive. All I would have done differently is choose to unemploy the engineers on that big, fat, doomed project instead of mine. How is that any better?

But even still, at the end of all that, you are right: in order to arrive at that feeling of betrayal, I had to have some assumptions about my career that were out of whack. No employee should ever feel betrayed by an employer upon being let go. Especially when it’s an impersonal mass-layoff like I went through. You’re absolutely right.

But here’s the thing: I did feel betrayed, and I know countless other people who also have felt this sense of betrayal. I shouldn’t have, but the fact that I did isn’t going to stop being a true thing anytime soon.

Some people, like yourself, have observed this feeling and responded with a sort of self-oriented “tough love”. You tell yourselves “nobody owes you anything, sweetheart” when life gets crappy. That’s okay. I’m fine with that; it’s actually a rather useful attitude.

But there’s two ways to take this attitude: with hope, or with hopelessness.

Hope says “nobody else owes you anything, so if you want something you gotta haul yourself up by the bootstraps and go get it.”

Hopelessness says “nobody owes you anything… and there’s nothing you can do about it. So you’d better keep your head down and keep quiet, because if you complain you might never get anything again, or if you do have something they might hear you and come take it away.”

This is exactly the recipe for learned helplessness. It is a message you can send your brain and, if repeated often enough, will actually change your brain chemistry from healthy resilience to clinical depression. Ask me how I know. No wait, I’ll just tell you: I’ve been there, and I’ve done that. And then I learned a whole lot of stuff about it from some very smart doctors who happened to be experts in that particular field, and I learned to stop doing that, and that’s why I can say been there instead of am still there.

So that’s where you’re right.

I wrote that post because ten years ago, I felt betrayed, and even though it felt absolutely horrible, that turned out to be a useless attitude. So I decided to haul myself up by my bootstraps. I turned the betrayal into anger and the anger into action and the action into a resolution to never let it happen again. I learned that in order to do that, I had to learn to stick my head up. I had to learn to open my mouth. Sure, I’ve spent the last ten years getting smacked on the head and punched in the mouth (figuratively speaking). But I’ve also spent the past ten years watching other people try to get by by keeping their heads down and their mouths shut. And I’ve watched them toil away miserably, choose to stay in bad places because they fear losing their job, and then get laid off with no warning (which is, as you say, a fact of life) and no preparation (which is, as I say, inexcusable).

You and I are, in fact, in violent agreement. I said loyalty in that post, but as I clarified in my followup, what I really meant was trust: Trusting a corporation to take care of you is sick. Why? Because you have no right to your job. Forgoing improving yourself today, in order to help the company succeed today, because you believe the company will reward you for it–or even just be there at all–tomorrow, is foolish.

And the most interesting thing about that foolishness is this: if you forsake that foolishness, and build yourself, suddenly you realize that the job market is absolutely heaving with abundance. At least it is for people who build themselves and invest in themselves and stay at the top of their game. 14% unemployment is only terrifying if you’re at the 15th percentile. If you’re at the 90% percentile, the only way unemployment will catch you is by anonymous actions such as “the numbers didn’t work”. When unemployment is high, employers can afford to pick and choose the very best. And you know what that means? It means if you are on top of your game, you can switch jobs in the middle of a recession just by parking in a different lot.

I’m not trying to brag. I’m not the best developer in the world; some days I wonder if I’m even a good one. My head is full of outdated ideas that have worked in the past and never been reexamined. But I’ve learned how to get things done well enough that I feel confident in my skills, and I’ve learned I can back up my promises–if only because I know what promises I shouldn’t make. I have utterly no fear of unexpected employment. Not because I think it won’t happen to me, but because after I became a freelancer, I had to go through it so many times that I just don’t even think it’s special anymore.

Thank you again for this comment. I really do appreciate it and I hope that, if you don’t think I’m right, you at least think I care enough to reach out to you in good faith.

I’ll close with this thought: there are countless thousands of employers who want–who need–people who dare. People who speak up. People who not only poke their head up, but stick their neck out. Those are my peeps. I seek them out, and they’re everywhere. And they are desperate not just for me, but for hundreds more just like me. There are also countless employers out there who are afraid of people who dare. People who rock the boat. People who upset the balance. Those might be your peeps; I don’t know. There are people who are happy working at organizations like that. I still think they should still be curating their careers, in case someday the “numbers don’t work out”, but I certainly recognize that people can choose to be happy in those places.

I am not one of them.

Between me and that type of employer lies a vast chasm, spanned by a rickety wooden bridge, tinder dry, covered in pitch. Burning it will cut me off from many opportunities, it is true. But when that bridge goes up, it will send up a flare to all the other employers: startups, small companies, innovators–the ones looking for good people who understand and accept the risks and dangers and are willing to take a stand, even if it means cutting themselves off from some people.

I’m not burning a bridge. I’m advertising a self-selection process.

Tell me honestly: If you were me, would you really not light the match?

Parentheses in Ruby

I’ve been doing a lot of “heart” and “mind” posts lately, and “code” is starting to feel neglected. If you’re not a programmer, feel free to give this one a miss.

I put off writing this post til the last minute because I want to talk about parentheses in Ruby, and I’d like to give you a definitive “do this” answer, but the reality is I just don’t know, so I’m gonna throw out some thoughts and let you guys tell me what you think.

Ruby Makes Parentheses Optional

Okay, that’s not news. But a lot of people come to Ruby from languages where parens are required, and they see that they’re optional in Ruby, and so they keep them in out of habit. And then they complain that Ruby is dumb for not having first-class functions.

What is often overlooked here is that optional parens are important. Matz chose to sacrifice first-class functions just so he could make parentheses optional. So when I started programming in Ruby, I made an effort to eschew them when possible. Now, “optional” means optional–it doesn’t mean banned and it doesn’t mean required. So there’s room for wiggle here.

Some Strong Styles Have Emerged

There are some very strong idioms that have emerged, however. Well, mainly just one: Never use empty parens. This is actually two rules: never put parens at the end of a method definition if the method takes no arguments, and never use parens when sending a message that takes no arguments. There’s a lot of really good reasons for doing this, and I won’t go into them here.

Generally Favoring Parens

I know some smart programmers who favor parens in ruby. Their general argument is simply “it makes the code more readable”.

My experience has been that this argument is indistinguishable from “it makes the code look like the other languages I’ve spent years learning to read”. This is not necessarily wrong. I think both styles have tradeoffs, and there’s a mental cost to be paid to learn to read a new style. Since this cost has to be paid up front, the tradeoff is really imbalanced in the short-term. But is this a false economy in the long run? I’m asking because I don’t know.

Generally Eschewing Parens

On the far other side of the spectrum lies “Seattle.rb style”. Josh Susser originally coined the term “Seatttle style” to mean “not using parens in method definitions”, but Ryan Davis and Seattle.rb have taken it and run with it to mean “never use parentheses unless the compiler requires it”.

I spent a couple weeks experimenting with this style. It definitely had an effect on my code. I never did get to where I like omitting parens from method definitions, and maybe I am subject to my own argument above about embracing the tradeoff. One thing I did find, however, was that trying to avoid parens everywhere else had a profoundly rewarding effect on how I felt about my code. The original argument from Matz about making parens optional was that parens are often just noise, and getting rid of this noise is important.

Parens and Readability

When I talked about this with the rest of the Ruby Rogues, I quickly found myself in a 3-against-1 battle (Katrina wasn’t available). Josh made the argument that omitting parens decreases readability. You have to read this entire line of code to know when the first method call is actually done:

puts array.delete hash.fetch :foo

And I have to agree. That line of code is horrible.

But… it’s not the lack of parens that make it horrible. That line of code is horrible all by itself. I don’t think this is really any better:

puts array.delete(hash.fetch(:foo))

(Another strong convention in Ruby is to never use parens with calls to puts; otherwise another layer of parens could be added, but they would be gratuitous.)

Now, some programmers will find that line of code more readable. My point is that this is a problem. The line looks a bit more comforting, but you still actually have to read the whole line to know what’s happening. This line is doing two manipulations on unrelated primitives followed by a side effect call to puts. This line desperately needs some intention-revealing variable, methods, and selectors.

I see code like this all the time in parenful code. It sort of gets a pass with the parens stuck on. We say “yeah, this could be refactored, but it’s readable enough for now.”

But scroll back up to the version without parens. That line is unforgiveable. It has to go.

How valuable is that? I’m asking; I feel like it’s a lot, but I had to spend a few weeks learning to read a whole new style before I got that value. So I don’t know the answer. I don’t if it’s worth it. What I do know is that by eschewing parens, I never ever write lines like the above. The code just won’t let me. It bugs me, and I refactor it, and then my code feels better to look at, and the whole program becomes much more readable. That’s immensely valuable to me. But I don’t know how to communicate that it’s worth the trouble–or even if it’s worth it at the end of the day.

Readability For Other Developers

Another good question is if one developer hasn’t learned this style, and another one has, should parens be the default to maximize readability? I grind my teeth whenever people start making “lowest common denominator” arguments because it’s really hard sometimes to see the line between “this is overcomplicated” and “let’s do something more stupid because it’s easier”.

So part of the experiment this week has been paying attention to how my coworkers react to my code. It’s hardly been a scientifically rigorous study, but given a sample size of one week and two code reviews, I have one data point. It comes from a coworker who strongly favors parentheses, but has been tolerant of my style. His exact words were:

“Your code is a pleasure to read.”

I am confident that he was not talking about my parenthesis usage, but rather about the clean, refactored, expressive code that resulted from me not liking the way some lines of code looked without parens stuck on.

It’s hardly a conclusive argument, but it’s one that encourages me to continue researching. I’m not ready to stand up and proclaim that parentheses are nothing but noise that covers up code smells, but I am giving serious thought to secretly believing it. 🙂

Weirich-Style Kung Fu

A hybrid style is emerging from these discussions, and it’s structurally based on “The Weirich Rule”, which is about blocks rather than parentheses, but the similarities are definitely there and I find the analogy appealing. In Ruby you can write blocks with braces or with do…end; the Weirich Rule states that if the block returns a value, using braces signals that intent to the reader. If the block exists for its side effects, using do…end signals this intent.

A Weirich-inspired rule for parentheses, then, look like this:

If you care about the return value, send the message using parens.

The people who have I have talked to–well, listened to–about this rule are passionate about it and convinced that it increases readability and communicates intent. I want to get behind this rule, I really do. it’s a clear, bright-line rule for when to use parentheses or not. It’s the sort of rule that might get included in a book about ruby, for example.

But…

But I still have a problem with this style: when I went full-on no-parens mode, I was forced by the ugliness of my code to refactor it to be simpler and cleaner. When I use this paren style, I can feel that pressure evaporate. I’ve tried this rule for a week, and and I can feel my code quality suffering. I’m not convinced it’s a good rule.

Maybe I just need more engineering discipline. On the other hand, however, I have found that coding styles that require more discipline tend to embarrass me when I don’t step up. I gravitate much more strongly to coding styles that encourage and support me in having more engineering discipline, because they result in me writing better code.

But that brings me back to square one, which is trying to convince everyone to try giving up parentheses all over the place, and I don’t know if I have enough tin foil hats.

So that’s where I’m at. Thoughts?

Loyalty and Trust

This post is part two of a three-part followup to Loyalty and Layoffs. Part one, Loyalty And Your Professional Network was posted Monday. I’ll post Part Three on Friday.

Betrayal is a recurring theme of my loyalty posts. I’ve talked about work like it’s a sinking ship, a burning theater, or a hike through tiger-infested grass. It’s pretty depressing stuff, isn’t it? Don’t you wish you could just do fulfilling work and not have to worry about all this treachery? Wouldn’t it be great if you could just be happy at your job without being paranoid? How would it feel to like your company and not have all this mistrust floating around?

Would it surprise you to find out that I am happy at my job, that I do fulfilling work, and actually like my employer? And that I am not, in point of fact, certifiably insane?

I said I was going to wait to talk about “good loyalty” versus “bad loyalty” until after I finished this series, but I realize now that I can’t put it off any longer. All this treachery and mistrust business is coming from getting our terms mixed up. We need to talk about what loyalty actually means. And then we need to see how it fits into a larger cycle of vulnerability and trust.

Loyalty

Let’s start with loyalty:

Loyal
Giving or showing firm and constant support or allegiance to a person or institution.

I want to make this clear: Yes, you should be this kind of loyal to your company. I’m not happy with everything every employer or client of mine has done, but I don’t badmouth them during or after my engagements with them. Once I’m hired, I am hired. If I’m cashing a client’s paycheck, then I am very focused on helping them succeed. I don’t care about office drama. I want to get the product built and shipped and into the customer’s hands. I’ve worked W-2 jobs and 1099 jobs over the years, and my definition of loyalty doesn’t have to change. Firm and constant support.

I try to give that to the company, and I also try to give it to my coworkers. But when I do that, something very different happens.

Vulnerability and Trust

When two humans share loyalty, an interesting cycle begins.

  1. I open up a little bit and share a little bit of vulnerability with you.
  2. You respect that vulnerability by showing support and respect–loyalty.
  3. I feel I can trust you more, and open up a little bit more.

While I’m doing this, you are doing the same in return. It is in our shared moments of vulnerability and compassion that we find our truest happiness. This is part of being human. We need this. I show you vulnerability, loyalty and trust; you show me the same in return. All three emotions go in both directions.

Of course, sometimes we share too much, before trust has been earned, or the other person doesn’t honor the vulnerability that we’ve entrusted them with. When that happens, we feel shame and betrayal. I’m not telling you anything new here… at least not yet. But now try this: run that sequence backwards. If you’re feeling betrayed, it is because you were not given loyalty after you showed vulnerability. Make sense? Hold on to that thought, we’re going to come back to it.

This full cycle of vulnerability, loyaty and trust is what I’m talking about when I say that loyalty to a corporation doesn’t make sense. Allegiance and support is fine, but vulnerability and trust? We can’t have the cycle of vulnerability, loyalty, and trust with a corporation, because the corporation is incapable of reciprocating. But sometimes we want to feel that trust so much that we pretend that the company is participating. We cross a boundary we shouldn’t, and we pretend that the company is honoring it… and that’s where it all goes wrong.

Have you ever been laid off and felt a mild sense of professional annoyance, but mostly you were just sad to no longer be working with great teammates on a worthy project? That means you’ve got a good sense of boundaries.

But the Loyalty and Layoffs post is full of comments from people who have been laid off and feel betrayed. When Evans & Sutherland let me go out of the blue, even with all that severance, betrayed is exactly how I felt.

Huh. Feeling betrayed… how does that happen, again?

Loyalty Only Goes In One Direction

One of the things my friend Rodney taught me is that, in a corporation, loyalty only goes one way: up. You show your allegiance and support to your manager, she shows her allegiance and support to her boss, and so on, up the chain to the CEO.

Now, most of us have worked with great managers and leaders. People who go to the mat for us. These are fantastic people, and I highly recommend seeking them out and working for them whenever possible. But do they prove that loyalty also goes down? Think about this: what happens when their boss tells them they have to fire you?

They do their job.

To be sure, they absolutely hate their job that day. But they do it. Why? Because they’re loyal. And that loyalty, ultimately, only goes in one direction.

Trust Only Goes Goes In One Direction

When we show loyalty, we earn trust. So the corollary to loyalty only going up is simple: trust only goes down. Your CEO trusts your manager to be loyal, your manager trusts you to be loyal, and you… you trust the plant on your desk to keep on doing that photosynthesis thing.

Trust
Firm belief in the reliability, truth, ability, or strength of someone or something.

I’m not saying you shouldn’t trust anyone with anything. That’s a little bit crazy, and a whole lot of no fun. I’m just talking about the trust that loyalty earns. You can trust a good company to pay you, because it’s against the law if they don’t. You can trust a good manager to keep office politics away from you. But if you know loyalty does not come down, and that a company will act in its best interest even if it’s at your expense, then that trust, the specific “firm belief in the reliability” of your company, should not go up.

Vulnerability Doesn’t Go In Any Direction

In theory, vulnerability could go down. You show loyalty, the company shows trust; in theory your CEO could share vulnerability with your manager, and your manager could share vulnerability with you.

But they don’t, do they?

I’m not talking about friendships, here. I’ve shared plenty of vulnerability, trust and loyalty with managers as friends. But I can’t think of the last time a manager told me he was worried about getting laid off, or thinking about leaving to work for a competitor, or afraid the company might not make payroll next month.

I think they actually teach in MBA school that “complaints go up, never down.” No, wait, that’s a quote from Saving Private Ryan. But my point is, vulnerability could go down the chain… but it never ever does.

So what about up the chain?

Because the company does not show you loyalty, it cannot earn your trust. So the big question is: in spite of this, are you sharing vulnerability up the chain?

Vulnerable
Susceptible to emotional or physical attack or harm.

If you’re afraid of losing your job because you have no idea where you’ll go or what you’ll do… maybe you’re letting yourself be “susceptible to harm”. There are two things you can do about it. The first is to continue to offer this vulnerability to your company, and pretend the company has reciprocated with loyalty, and feel the warm glow of trust that all will be well. You’ve crossed a boundary inappropriately, and the company probably doesn’t care. The only cost of this is that if the company lays you off, you will feel betrayed… and it’s not the company that will be paying that cost.

The other thing you can do is own your own career. You take back that vulnerability. Interestingly, when you do you, you suddenly realize that the company could fire you if it was in the company’s best interest. I mean, it always could, but once you take vulnerability off the table, it stops being a disaster and becomes just another thing that could maybe happen.

Take Vulnerability Off The Table

Once you accept the truth that your company can, and will, and should act in its own best interest, it’s easy to take vulnerability off the table. And then an interesting thing happens: you don’t have to take trust off the table. It evaporates on its own. You sort of realize that it was never there to begin with.

Loyalty goes up. Trust goes down. Vulnerability is something you save for those coworkers and friends who are willing to reciprocate.

Finding Happiness

You can not only be happy at a job with this arrangement, but happier than you would be otherwise. Owning your career means you have alternatives, and that means you have a choice. Suddenly there is more fulfilment in your work, because it’s work you choose. You get to feel the joy of personal growth. You have the confidence of knowing that, if you really had to, you could quit instead of putting up with an abusive boss.

And you have the peace of mind that, should you arrive at work to find a pink slip waiting for you, you’re going to feel a lot of things, but not betrayal. Not again, not ever.

Loyalty and Your Professional Network

I still want to talk about what “good” loyalty looks like, but we need to get the medicine part out of the way first. This post is the first in a three-part series about that medicine.

Emergency Action To Take Immediately If You Are Comfortable At Your Job

Perhaps complacent might be a better word here. I’m not going to talk about jobhunting or boundaries or even loyalty today–well, that’s not true. I’m going to touch on all of them a bit. And all of this will be advice to invest loyalty in your own self first, and to be honest, I think this will make you more valuable to your employer.

So let’s start by talking about you quitting your job.

Know Where The Emergency Exits Are

How on earth does talking about quitting make you more valuable to your employer?

There are two kinds of people who don’t worry about burning to death inside a movie theater: People who don’t believe theaters can burn, and people who know where the emergency exits are.

If you know where the emergency exit is for your current employment, you no longer have to worry about losing your job. You can focus on the task at hand and be productive, even if the company is facing tough times. Managers don’t like me much when they try to “sell the dream” because I don’t buy it. But on the day when the main investor pulls out or the biggest customer switches to a competitor and all the employees are milling about in a blind panic, managers love me. Why? Because I don’t buy the nightmare, either. I can smell smoke in a theater and remain calm, because I know where the exits are.

Important loyalty note: This is not the same thing as watching the exits. I’m not saying you should try to always have an alternate job offer waiting. I’m just saying you should know what you’re going to do if you lose your job.

And let me be a bit more specific: the thing you are going to do if you lose your job is this: draw on your professional network.

And yeah, that means you’re going to need to have one first.

Build Your Professional Network

I think this might be the single most important piece of career advice I can ever give anyone: Have a professional network. When Evans & Sutherland laid me off, I didn’t even know what a professional network was. But once I started building mine, my fear of ever being unemployed vanished. Why? Well, because being unemployed vanished. I think I spent about six weeks jobhunting once in 2005, but not counting that fluke, the longest I’ve ever been unemployed since 2001 is ten days. The shortest? Four hours. And that’s only counting the gigs I’ve left cold, without anything else already lined up. I mean I walked into work, found out I was unemployed, and by lunchtime I had a job offer to start the next day.

As a result, one of the weird things that loyalty means to me is that I never jobhunt when I’m working for a client, even when I know my contract is almost up. It’s just not worth the headache to me, and I have absolutely no fear of walking out of work with no idea where my next paycheck will come from. Because I know it is coming.

I credit this attitude entirely to my professional network.

What Exactly IS A Professional Network?

A professional network is simply this: a list of people who know you that you can call when your chips are down. To build it, you make friends with people outside your company. You help people. You tweet funny things. You join organizations. You take old coworkers to lunch. You contribute time and effort to your professional community. Then, when you need a safety net, you let those people know you’re available. Since they know who you are, and what jobs you’d be a good fit for, you suddenly have 50 or 100 or 1000 pairs of eyes looking for your next job for you. All you have to do is get the word out.

A professional network is NOT a linkedin profile. That can certainly be part of it, mind you; linkedin is pretty popular right now and I recommend keeping your profile current. Just make sure that whenever you’re using the site, that you’re not thinking about “your profile”, but instead about the people in it. They are your safety net. LinkedIn is just a tool to reach them.

Build It BEFORE You Need It (This Means RIGHT NOW)

You cannot tie a net and fish with it at the same time. Your network is a group of people who know you well enough that you can ask small favors of them. You earn the right to those favors by investing time in those people–by sharing time with them as mentioned above. If you meet a stranger and ask them if they know who’s hiring, you’re just a stranger who needs something. But if you’ve met them before or had lunch or contributed code to their project, you’re not a stranger anymore. You’re a member of their “loose acquantances” tribe. And people love helping each other out in that tribe.

I cannot stress this enough: If you are employed, you need to be investing time outside of work in other people.

The time to build your professional network is before you need it. There is only “right now” and “too late”.

But What If I Need It Now? (I’m Asking For A Friend…)

Okay, so… let’s say you didn’t take this advice or, like me in 2002, didn’t hear the advice until it was too late. First, you need to embrace the bad news: You cannot tie a net and fish with it at the same time. This will not stop being a thing that is true, no matter how bad you want it to. You have to embrace it. You’re going to have to fish without a net, which means jobhunting the old ways you’ve used before, without a professional network. But more importantly, it also means you have to spend time tying your nets while you’re starving.

Do lunches with people. Contribute to projects. Attend professional meetups. Make friends. Here are three rules of thumb I use, but they all boil down to the same thing: when you’re meeting people, decide whether you are fishing or tying nets, and do only that and not the other.

  • In a professional social setting, I tie nets. I focus on contributing rather than jobhunting. It’s actually relaxing and more fun to stop worrying about the jobhunt for a little while, which in turn makes me more fun to be around. So if I’m in a user group, I’ll speak up if I can help someone. Sometimes I know a clever answer, but people appreciate it even more when I offer to pitch in on their project and help. In a 1-on-1 lunch, I ask about the other person and what they’re working on. Even if I don’t have great insights into their situation, just listening to another human being is a great way to connect with them–and letting them talk it out often provides them with their own answer. If someone has come to lunch with me, and they’re worried about a tricky problem at work, and I blather on about myself and how I need a job for an hour, at best I may give them a distraction but at worst I will annoy them with my problems when they have their own. If I want to tie nets, I have to tie nets. I cannot try to fish.
  • The exception: when you’re tying nets with someone, you should mention that you know how to fish! I DO tell people whenever I’m looking for work, but I try to be casual about it. In a big meetup I’ll introduce myself to the group and mention that I’m available, and that’s it. In a first-time 1-on-1 lunch, I don’t worry about it, because one of the first questions we’re going to ask each other is “So, where do you work?” No need to bring it up special. When I tell them I’m between clients, they’ll often ask followup questions about what I’m good at, and I’m happy to talk about that, but I try not to let it turn into an interview. Even if they say “Oh? We’re hiring, you should apply!” I will respond with “Really? Cool! What’s your company like? What are you working on? What do you like about it?” and turn the conversation back to finding ways to be helpful to them. I have to remind myself: “I am not fishing, I am tying nets”. Oh, don’t worry–I won’t let them leave without asking them who I should talk to at their company for more information! But I always try to remember that my goal for the lunch is not to get a job. My goal is to have this person want to have lunch with me again sometime. I am not fishing. I am tying nets.
  • Lastly, if you are fishing, fish! Don’t do this instead of jobhunting. Building your network will pay off huge in the long run, but there’s no guarantee of any payoff in the short term. When you’re unemployed, your full-time job is to get a job. And just like you should continue to build your network by doing things outside of work when you’re working, you should build your network by doing things outside of jobhunting when you’re unemployed. Time spent building your professional network doesn’t count towards the time you need to spend jobhunting.

I have spent a decade building and maintaining a professional network that I feel very comfortable with, so now my jobhunting looks a LOT like networking. But it’s fishing, not tying nets. I call people and say “Hey, my contract just ran out, wanna grab lunch?” They know I’m gonna chat and be friendly and ask about their kids, but they also know I’m gonna hit them with fishing questions, asking them about who’s managing who and what teams are working on what. But they’re okay with that, because we’re friends, and they want to see me get back on my feet.

How To Use Your Network

A lot of people talk about building a professional network, but I very rarely hear people talk about how to USE that network when you need it. Probably because it’s rare to find a jobhunter that HAS a network to begin with, but I think it’s also true that once you know a bunch of people, you stop thinking of them as “your network” like it’s some foreign thing. Once you figure that out, you realize that you don’t “use” them. You don’t need an instruction manual to know how to talk to your acquaintances.

Actually, wait. There is a mistake I made early on that made it harder on myself than it needed to be. I would call or email people and ask them if their company was hiring. The tech recession was hitting Utah in the early 00’s, so the answer was always no, and that was the end of the conversation. I had to learn the hard way to stop asking yes-or-no questions. But then I made another mistake: I would ask them who was hiring, and they would always say they didn’t know anyone.

I had to learn to ask questions that would get people talking.

Here’s my secret weapon: I just ask people who they know that’s working with a technology that interests me. “Who do you know that’s working with HIPPA?” “Who do you know that’s doing credit card payments?” “Who do you know that programs in ruby?”

That may seem silly and a bit stupid, but I kid you not: I literally turned an exit interview into a job referral with that last question. I was subcontracting for a software-for-hire shop, and the client I was assigned to pulled the plug unexpectedly. It was a tight economy, and the shop didn’t have anything else for me to work on, so they had to cut me loose. My manager was a good man, and he felt bad that he had to let me go with no advance warning. At the end of the conversation, he glumly said, “I know there’s probably nothing I can do to make this easier, but I have to ask, is there anything I can do to help?”

“Actually, yes,” I said immediately. “Who do you know in town that’s programming in ruby?”

He thought for a moment, and then started listing names of companies. I already had a pen in hand, and I started writing. After each one I’d ask “what do they do?” and “who do you know there?” I never asked if they were hiring. I would occasionally ask “do you think I could talk with that person about who else in town is working in ruby?” He listed maybe a dozen companies. But even better, halfway through the list he said “You know, I’m friends with the CTO at that company. I’ll introduce you.”

The introduction included a heartfelt recommendation, which got me a lunch meeting with the CTO, which got me an interview with the team, which got me a place to report for work the following Monday. Even though they weren’t hiring.

The trick to drawing on your network is don’t haul on it. You’ve made friends with these people. Just be human, and get them talking. (And it doesn’t hurt to work for good managers who try to look out for their people.)

That’s It, Really

No, seriously. I’ve got two more posts to talk about “the medicine”, but if you only read one, this is it.

Go tie some nets. 🙂

Teach Yourself a New Programming Language in 21 Minutes (Or 2-3 Years, It Depends)

You’re sitting at work, grinding out a bug in the legacy system, when your boss comes in and tells the team that you finally get the chance to rewrite the whole system–and even better, you get to do it in Clojure! (Or Scala or Erlang or Rust or Dart or some other Language You Only Know A Little About But Have Secretly Wanted To Learn For A While Now.)

Or maybe you’re happy with the language you’re using, but your VP of Software Architecture just spent $150,000 on a suite of Enterprise Tools which includes a module that will let your project scale infinitely into the cloud… all you have to do is learn Clojure. (Or Scala or Erlang or Rust or Dart or some other Language You’ve Only Heard a Few Mutterings About But Desperately Want To Avoid Learning.)

Either way, you’ve got a problem: you need to ramp up in this new language. And whether you want to become a super expert guru ninja rockstar in the language, or just learn enough of it to make it go away, you want to do it fast–and that means you want to avoid making the same mistakes I made learning Ruby and JavaScript over the years. Mistakes which I have learned to fix, mind you, and so without further ado I present:

Teach Yourself A New Programming Language In 21 Minutes (Or 2-3 Years, It Depends)

All you need to do to learn a new language is learn:

  • How the language encapsulates data
  • When the language invokes execution of code
  • Where do the semicolons and braces go

I’m not entirely kidding. This was my strategy for a decade and to this day if I need to get something bashed out quickly in a new language I’ll skim a language reference and let the compiler tell me when I make syntax errors.

In general, as long as you’re staying largely inside the world of what I call “BOLS” (Block-Oriented, Lexically-Scoped) Languages, such as C, C++, VB, Java, C#, PHP, Lua, Python, Ruby or perl, you can in fact learn enough pidgin to get by very very quickly with this method. Granted, in those last three languages it will be obvious to experienced programmers that you’re writing inelegant code. But you can get by, is what I’m saying.

If you’re the second kind of programmer I mentioned, you might be done. Just read this next section for a caveat and then you can hopefully stop there.

Don’t Stop There If You Can’t Stop There

As you’re learning the new programming language, ask yourself the two vital tradeoff questions:

  • Do I really want to learn this language bad enough to actually learn this language?
  • Can I afford the time and energy needed to fumble around being bad at this language?

See, this strategy is especially useful if you know you don’t plan to ever actually learn the language. I have written some pretty arcane bash scripts in my day, but to be honest I wrote my first bash script 10 years ago and in that time I’ve written less than 10,000 lines of bash scripting code. It’s just not worth learning to me, so I keep some files around with examples of the most obvious kinds of things I want to do, and when I need a new bash script–usually about twice a year–I have all the pieces I need right there. BAM. Ignorance is bliss, and laziness is, occasionally, brilliant time management.

But this strategy is especially awful if you know you don’t plan to ever actually learn the language, but you turn out to be wrong. It ends up that you find yourself using it on a regular basis, and hilariously, you don’t even notice this for years and years. This is true for me of elisp, the flavor of lisp used to program emacs. I’ve written elisp for years longer than I have bash, but maybe only twice as many lines of code. I find myself needing an elisp tweak on a weekly basis, and end up spending an hour researching how to do it. And two or three times a year I find a problem that I could solve elegantly in elisp, if only I knew how to express what I was thinking as lisp code. But I don’t solve the problem. I merely sigh, and learn to live without whatever cool new feature I was thinking of.

I wrote that paragraph in present tense because I still haven’t figured out that I really do need to actually learn that language. Shut up.

Sometimes work and politics can affect your decision as well. If you and your boss agree that the Next Big Thing will be written in Language Y, then you have the need and your manager has the afford.

(And sometimes these two forces are in conflict. I could write an entire blog post on the political machinations involved when you and your boss disagree on the do/don’t want or can/can’t afford questions. Skunkworking a cool language or shirking a lame one is a topic for another post, one I’ll probably never write, but basically it would be all about office politics. I’ve seen people get fired for a successful skunkworks project and others get promoted for sandbagging a project. People sure are complicated!)

Okay, NOW if you’re the second type of programmer, you can safely stop reading. If not, you’re pretty much out of luck for the “21 Minutes” part of learning a new language. But keep reading, because the 2-3 years bit isn’t until the very end. Most of the mistakes I’ve made learning a new language I have made in the first few days.

Truly Embracing A Language Takes Time, But You’re In A Hurry, So…

If you want to embrace a language, it’s going to take time. You’re going to have to internalize the language’s entire approach to solving problems. You’re going to have to learn its idiosyncracies and its warts, and you’re going to have to learn its power moves and elegant applications. That all takes time, but if you’ll permit me to point out my favorite pitfalls and some less-traveled paths around them, I can maybe show you a trick or two for leveraging your learning.

But first, good news/bad news. I’m writing this assuming you already know a programming language or three or seven. The good news is, the more languages you know, the faster you can recognize the basic syntax patterns and logic structures of a new language. But the bad news is: the more languages you know, the more they tend to blur into a common model of computation in your head. This can make you blind to the elegant weirdnesses of your new language. Resist the urge to judge weird things quickly; they often turn out to be the most powerful features of the language once you “go native”. If you see something you can’t stand, remind yourself that you haven’t seen everything there is to see, and give the new idiom a chance. Try it out and learn its tradeoffs. It’s okay to discard a bad idea in JavaScript once you understand why it’s a bad idea in JavaScript… but it’s never a good idea to discard a feature of a new language based on your instincts–because your instincts come from other languages, not this one. (Read up on The Blub Paradox if you haven’t heard of it before.)

TL;DR This Is Mostly About Your Blind Spots

I should have put that TL;DR up at the top, but if you don’t know by now that I’m that kind of jerk, you must be new. Welcome to my blog! Anyway, here’s the list. I’ve included illustrations about Ruby, Python and JavaScript, because those are the three languages where I stunted my own growth unnecessarily the longest.

  • As you start learning the core principles of the language, listen hard for hints and clues from its culture. Ruby has block syntax, but a rubyist often cares more about naming than blocks vs. Procs. Python has list comprehensions, but a pythonista often cares more about being able to quickly uncover all the working parts than to have a slick but magical-looking API. JavaScript has objects and polymorphism, but listen to a good JavaScript programmer and you’ll find them more interested in the functions themselves–and their prototypes.
  • Be ready to try totally new ways of thinking. Be ready to abandon bottom-up provability for Ruby’s top-down “programming by wishful thinking” approach. Be ready to trade off a more efficient algorithm in Python for one that is more readable and maintainable. Be alert to the pains you’ll feel trying to write object-oriented code in JavaScript–that’s JavaScript’s prototype system refusing to be hammered completely into an OOP-based inheritance model.
  • Learn where the minefields are. Ruby is a memory hog. Python’s primitives aren’t actually objects. All numbers in JavaScript are floating-point numbers–there are no integers.
  • Learn which minefields you can ignore or work around. Entire models of webservice design have been rethought and reinvented to compensate for Ruby’s apache-unfriendly execution model. Python isn’t THAT slow to begin with, but if you really need bare-metal speed it’s easy to write a C extension. Many JavaScript libraries provide “polyfills”–bits of code for old versions of JavaScript that implement features added to newer versions of the language so that you can write code against a stable JavaScript version and still have a prayer of it working in most browsers.
  • Most importantly, learn which minefields you CAN’T ignore. Treat them like minefields that you must commute through daily. Stop and pay close attention. Map them out carefully. For example, metaprogramming in Ruby is a very dangerous feature, but it’s not a defect; it can be used responsibly. Python’s whitespace enforcement makes it difficult to express certain ideas succinctly, but that whitespace enforcement produces a predictable rhythm to the trained pythonista’s eye, and it is most definitely a feature–don’t let your code fight it; learn to restructure your thinking. And while almost everybody considers JavaScript’s semicolon insertion rules to be eccentric bordering on insane, you MUST learn them if you want to avoid having your program suddenly stop working just because you deleted a comment or swapped the load order of two completely unrelated files.

You can make good inroads to these blind spots in a few days or weeks if you’re just aware of them. So here’s the hard part: Last of all, learn the idioms. From here on out it’s all about learning to think in the language. That’s going to take you a bit longer, and there’s nothing for it but to talk to other programmers, find some online references, maybe buy a cookbook… but mostly, it’s going to take writing code. Lots and lots of code. In my experience (both personal and observing coworkers and clients) this last part’s a doozy–plan on it taking a couple years or more.

Whaaat. You did say you really wanted to learn this language, didn’t you?

Private Accessors in Ruby

This is a post about writing private method accessors in Ruby, but it takes me a while to get around to saying that because there’s a ton of backstory, which is of course my favorite part. If you want to skip ahead to the code, I have provided a means of conveyance compatible with your hypermedia information consumption device. (Be warned: you’ll miss the part about the monkey.)

The Principle of Least Access

So there’s this great idea called the Principle of Least Access. It is found in computer science, information security, and other fields. It’s more frequently called the Principle of Least Privilege, but the names are interchangeable and when I learned it POLA was an acronym you could pronounce.

Yeah, that’s exactly the kind of motivation that I would choose to make a design decision over. There’s a reason POODR is my favorite book of all time, and “pronounceable acronym” is reason number two. You can guess what reason number one is. (Hint: It’s also number two).

Anyway, POLA can be summed up nicely as

A thing must be able to access only the information and resources that are necessary for its legitimate purpose.

In programming, this rule is often misquoted as simply “make everything private until something else needs it”. This isn’t a bad rule of thumb, but it’s not a great one, and at first blush it really puts private methods at odds with testing code.

But Testing Private Methods is Haaaaaard!

My relationship with POLA has been rocky. I used to think it was scripture. Then I thought it was idiotic. Then I came to ruby where everything is either public or can be accessed anyway. We even had a splendid bout of drama in the ruby community over whether or not you should test private methods. I fought bravely on the side of “yes you should”, even going so far as to write some code with a humorous name to make it easier to test those private methods.

The two tenets of my argument were that

  1. You should test things that can break. If you’re going to put really complicated logic in private methods in your code, then they can break and you should test them, and
  2. Testing private methods through the public interface adds impedance to the testing process, and results in low-value tests that are very hard to construct.

But you know what’s really funny? When I really got into it with a bunch of people, even the people furiously certain that their stance on testing private methods was correct, I found out something crying out loud funny:

Ruby programmers don’t write private methods.

Test ‘Em? Let’s Not Even Write ‘Em

For the most part, we just… don’t. We know that a determined user can get at our guts, so we make no pretense of security or safety in marking something protected or private. If we’re having a good design day, we extract the private functionality to a class. If we’re having a bad design day, we shrug and say “Eh” and just leave everything public. The important thing is, when we came in from C++ or Java, we had to check at the door this notion that our encapsulation would protect us, and for most of us that was the whole point of private methods to begin with.

I watched Sandi Metz talk about creating high-value tests a while ago, and she talks about private methods–and about testing them. Her take was that private methods are a good place to put code that is uncertain or subject to change on a whim; that way no external code would be affected. Since the code is so volatile, any tests that touch it will break often, so if the purpose of a test is to provide lasting reassurance, it doesn’t make sense to test them.

One of the reason I love Sandi so much is that she gets the concept that everything is a tradeoff. When she was on Ruby Rogues I asked her about the case where I sometimes will use tests to figure out complicated code. I’ll inch forward bit by bit, and lock each bit down with a short-term test. She considered this for a long moment, and then announced her new rule for testing private methods:

“Don’t test private methods unless you really need to. In which case, test them as much as you want.” –Sandi Metz

And THAT, dear readers, is how I found myself poring through POODR and pondering the fact that keeping everything public is a very, very bad idea.

Making Everything Public Is Killing Us

Every public method, variable and accessor on a class is a message that can be fired at that object from anywhere in the system. I know this will seem strange to some rubyists, but we really have to get away from this notion of making everything public–or, at least, making things public that other objects have no business knowing about. Let’s quote Sandi again:

Each [object in a hard-to-maintain system] exposes too much of itself and knows too much about its neighbors. This excess knowledge results in objects that are finely, explicitly, and disastrously tuned to do only the things that they do right now…

The roots of this new problem lie not in what each class does but in what it reveals. –Sandi Metz (emphasis hers)

The more I read the more I realize that each object has a sort of “surface area”, which is its public interface, where it can be interacted with. I’m used to referring to applications with too many dependencies as “monolithic”, literally meaning “one piece of stone”. This word makes me think of how all the dependencies in the system are interlocked and hard (as stone) to break apart. But Sandi has an even better metaphor: She draws this little picture of all these objects, and then she connects them with a kitten’s ball of yarn. Instead of talking about interlocking dependencies, she starts talking about the messages going back and forth, shooting all around the system. Viewing the system as an uncontrolled net of messages, Sandi pulls out an even better word: a woven mat.

So… okay. I’m convinced. It’s time to reduce the surface area of my classes. It’s time to start writing private and protected methods. More importantly, it’s time to start writing private accessors.

Okay, But There’s a Secret Reason I’ve Hated POLA All These Years

There’s a cost to the Principle of Least Access, however. It is simply this: if you start out making everything private, and then find out you need to make something public, there’s a refactoring cost. It’s not big, but it’s there, and it’s one of the kinds of hassle that I am very finely tuned to sniff out. I have literally spent 5 years learning how to design applications to not need private methods rather than writing them.

It’s not that you can’t do it. Here’s what it looks like in ruby:

class Monkey
  private
  attr_accessor :poo_count
  public

  def need_to_reload?
    poo_count < 1
  end

  def throw! victim
    self.poo_count -= 1
    victim.horrify
    onlookers.each {|onlooker| onlooker.amuse! }
    reload! if need_to_reload?
  end
end

Look at those first three lines inside Monkey. YUCK! Either we need to change ruby itself, or Sandi’s book needs to stop being so awesome.

(Admit it, I had you at “change ruby itself”, didn’t I.)

Adding Private Accessors to Ruby

As I write this blog post, I am dumbfounded that nobody else has done this already. What I’m about to show you is so obvious that I am convinced that it is proof that we as rubyists just don’t care much for private methods and accessors. Because this turns out to not be so hard at all:

module PrivateAttrAccessor
  def private_attr_accessor(*names)
    private
    attr_accessor *names
  end
end

class Monkey
  extend PrivateAttrAccessor
  private_attr_accessor :poo_count

  # ... rest of code unchanged
end

Also, if we’re willing to commit to using private and protected accessors, then we can move that call to extend PrivateAttrAccessor up into the Object class and now Monkey just looks like this:

class Monkey
  private_attr_accessor :poo_count

  # ... rest of code still hilarious
end

BAM. There you go. No, wait… HERE you go. That’s the full set of scoped accessors (protected_attr_reader, private_attr_writer, etc) ready to go. The file is 20 lines of documentation, 38 lines of code, and about 290 lines of test code. This feels like about the right ratio of code to test for code that is designed to be stabbed right into the very heart of ruby’s object system. If you are running ruby 2 (and if not, what is wrong with you?) you can just run the file and MiniTest will autorun and test the module. If you are running an out-of-date Ruby, such as 1.9.3, you can still run the file, just make sure you gem install minitest first.

I only had one real concern as I wrote that module: Inside the class, I am declaring everything in public scope, but inside the private accessor method, I tell ruby to use private scope. Would ruby stay stuck in private scope when it returned, or would the scope reset back to public?

Answer: It resets!

Sorry, sorry, that was pretty anticlimactic. I should have said something super profound about ruby’s access scoping and how it interacts with ruby’s lexical scope handling, but the short answer is I have no clue and the even better answer is I don’t need to have one. Rather than pick the ruby source code apart, I just wrote some unit tests specifically to ensure that the scope remains unchanged, and it does.

Give those scoped accessors a whirl and let me know what you think. If you just type ruby scoped_attr_accessor.rb minitest will execute its test suite. Or you can require the file in your project and it will quietly patch Object and you’re all set.

I haven’t touched the deep-downs of ruby with a monkeypatch in literally hours, so I’m unsure if this idea is awesome or just terrible. What do you think? Should I publish this as a gem or should I delete it, burn my laptop, and exile myself to Tibet? Update: I chose the non-Tibetan-exile option. Type gem install scoped_attr_accessor or get the source code here.