Uncategorized

Out/Alive

Which is it? Out, or alive? What is it all for?

It doesn’t matter what your “it” is.

One of the most frequently asked questions at DBC is “wait, should I bias toward completion of challenges, or deep understanding of the stuff I complete?”

And the teacher’s answer is always the same,  and always kinda frustrating: “Both. You should get it all done and know what was happening while you were doing it.”

That’s the most important lesson DBC taught me: that it’s not enough to stack dusty artifacts of Done Things in the corner, and it’s also not enough to avoid letting Things get Done by languishing in ego-boosting rabbit holes.

Sometimes, when a Thing is exhausting and you know it’ll be over at some point anyway, you just want to shut off and let the thing end and take what comes, because it’s easier than trying anymore.

And sometimes, you enjoy a Thing-In-Progress so much you don’t want the fun to end and laser in on the process of the work, ignoring the scary truth that someday there will be another Thing and it will need to replace this one, no matter how much you’d put into it.

Balancing between those extremes is hard even with the little stuff, and the big panicky stuff is almost guaranteed to throw it off.

And as I careen between my intrinsic desires to Do Things and my externally imposed needs to get Done with Things, I am soothed by the realization that I am alive right now, and this life is happening whether I’m here with it or not, and I can choose to dig in and engage in this moment, even if I’m scared or self-conscious.

And I need that soothe sometimes, because the proud and cowardly parts of my brain have a permanent death impulse, a nasty little internal desire to get Done with Things, no matter how momentous or trivial, so the rest of my brain doesn’t need to engage with the raw emotion that Doing often requires.

You know what? The song says it better. Lyrics below the folk.

Out/Alive

You can open your mind
And carry hope for a time

But the shiver inside
It says just survive, just get out alive

You focus your eyes
And hold your head high

But nothing is fine
Til you get out alive, so get out alive

What if you saw through the pain

What if you thought it could change

What if you meant to be strong
Meant to stay calm
Meant to hold on
And then it was gone

You ain’t got the time
To wait out the fight

So maybe it’s fine
If you wither and hide, til you get out alive

Your shivering side
Your prison of pride

It might treat you kind
If you get out alive, so get out alive

Cause what if you saw through the pain

And what if you thought you could change

What if you meant to be strong
Meant to stay calm
Meant to hold on
Went for so long
And then it was gone

You could dig out of your dig down if you hit ground and you give up

Oh but what if you miss digging down

Cuz maybe living’s when you dig in to your digging til you dig up

What your digging was all about

Open your mind
To the end of the line

There’s no better time
To dig-deep and try, to live out a life

Cause no one survives
We live til we die

And the living provides
What you get out of life, so live out a life

Just live out your life
And live while alive
You can’t get out alive

Advertisements

So You Just Graduated From Dev Bootcamp…

Welcome to the final, longest, and most difficult phase of the DBC curriculum: the rest of your life.

IMG_6982

“Life Up Until Graduation” by Reddit user milksperfect

I saw that picture online and thought of how scary it felt after I got my dog tags, knowing I no longer had “stairs” pre-built by curriculum writers and explained with verbose READMES; the “ladders” of the less explicit, more open-ended challenges of P3 (faced alongside peers who could boost me up when my arms got tired); or “ramps” in the form of mentor advice and face-to-face sessions with instructors devoted to helping me succeed.

I felt excitedly lost. Terrifyingly open to all possibilities ahead. Exhausted. Thrilled. Grown up. Self-responsible. Unbound. Unsupported.

And I also felt kind of…alone.

Maybe you feel that way too right now. I think that’s about as normal as any DBC-adjacent feeling can be.

What got me feeling less alone was the realization that I didn’t have to uncouple from the relationships that sustained me as a boot. What got me feeling less unsupported was the knowledge that I had careers folks I could reach out to, commiserate with, and get feedback from.

What got me feeling less terrifyingly lost was a return to a realization I’d had back in my week one, when I had to implement Array#map.

“Everything that exists as code was created by a human being trying to solve a specific problem. If I can empathize with how that creator felt, then I, too, can create new things to solve my problems.”

I hope you have also learned that the path ahead is only as barren as you decide to make it.

Need a ramp? Hit up a meetup or two and ask your nagging questions. Maybe you’ll find a simpler answer than the one you were afraid you’d have to search for. Maybe you’ll find a new community of peers with different lessons to impart. Maybe you’ll find a mentor.

Need a ladder? Decide on a cool thing to build and work on it every day until it’s a real thing on the real web. A sloppy thing, an incomplete thing, a poorly-tested thing, but a real thing. A thing you built without an explicit README guiding you toward each next shaky step.

Need stairs? Google “<thing_i_want_to_learn> tutorial” and discover a brand new set of curricula shimmering beneath the surface of a sea of blue links.

Not having structure after structure helped you get where you are is a scary thing. But always remember that, within that structure, you’ve learned more than stuff.

You’ve learned about yourself.

You’ve learned what coding environments feels good for you. You’ve learned which of your debugging strategies tend to yawn open into cavernous rabbit holes that aren’t worth the time it takes to detour into them. You’ve learned how to collaborate and sustain positive energy through difficult work, teaching and learning from your teammates.

You’ve learned how to learn.

Probably you don’t yet know how you learn best, but probably you do know a few approaches that don’t work, hazards and sticking points to avoid when you want to keep your chin up and press forward at a steady pace.

So go do that. Go get to learning, and never stop.

And when you feel that dizzying, freezing, liberated terrorfeel of so much I could do do but how should I begin start to creep up from your gut through your heart and toward your brain stem, take a deep breath and repeat after me:

“Everything that exists as curriculum was created by a human being trying to teach a specific skill. If I can empathize with how that creator felt, then I, too, can create new curriculum to learn whatever skill I need.”

Or, as a friend of mine from Michigan once rapped,

“If you don’t like the road you’re on, then build a new one.”

And don’t forget that the most beautiful and meaningful thing you’ll be building is yourself.

Welcome to the community.

Embrace it.

Welcome to uncertainty.

Embrace it.

May you find your next error very soon.

With all of the love,
Duke

Bugs and the Brown Line

cta-no-change

The machine won’t. But maybe I can.

It’s February 2016 and I’m running like two minutes late. The train’s scheduled to arrive in two minutes. I hustle into the station. I tap my card at the turnstile.

Red. Insufficient. Shit.

I dart to the machine, tap card to reader, agonize for 1.5 seconds. The machine is so fucking slow.

Finally, the menu screen. Balance negative $1.75, thanks, I’d figured.

Ok, scan the screen, find the button. I was hurrying the last three times I had to do this, so it takes another precious second to spot it. Add value. Five bucks – crap, no, that’s too low, and it’s too late to go back now.

So I mash the up arrow a bunch of times until it’s $20ish, then watch in horror as the machine – so fucking slow – continues to tally the output of my queued button presses in fits and starts.

$34. Fuck it. Close enough. I glance at the sign, at some point it’s switched from 2 min to Due.

But I’ve got it from here. I’ve memorized this part. I can do it really fast. The letter I is debit. Press as you stage the card for a quick insert in a half second. Boom, screen changes right on time. Card in at that exact moment, card out at the exact moment the prompt switches, bang bang bang bang hit ENTER on the PIN pad, and holy shit the transaction could not be processed.

I was too quick on the card removal. Or maybe one of the pad presses didn’t register and I submitted a three-digit pin, I wouldn’t know, I’d been moving too fast to look up and count asterisks on the screen. No time to reflect, though, the train’s headlights are peeking over the horizon and I have to do this all over again.

Add transit value. This time, I just hit the $20. No need to button mash the number upwards, and anyway I’ll just get a pass next week when the money runs out.

Dimly, grimly, I become aware that I should have just picked a pass from the start.

But it’s too late to go back now. The train is slowing into the station. Debit, wait, card in, wait, card out.

One of the buttons for my PIN is sticky. It takes about a second to notice this, plus one to jam on it hard enough to get output, plus five to clear the accidental extra presses, get it right, hit ENTER.

During the next two seconds, while the order finishes processing, the *DOORS CLOSING** bells sound and I realize I’m now going to be fifteen minutes late.

Receipt Desired? Oh, who gives a shit. No, I guess. I’d prefer not to remember this.

jim-welp

Bears. Beets. Banes of my existence.

My debugging process is like this sometimes.

I start out feeling like I’m already running late. I convince myself that I should have started this task as a smarter person, or a better-prepared person, or a more emotionally resilient person.

And then I project my inadequacies onto two ever-present and crystal-clear mental images.

There’s Best Possible Me, who exercised and meditated this morning before reading 200 lines of production code over a balanced breakfast, and who has likely already finished whatever thing I’ve yet to start.

And then there’s Shittiest Possible Me, who never does anything right and is going to fuck this whole thing up and get called out for it and spiral into a deep depression and probably, I don’t know, cause some dozen faceless strangers to fail at life through some act of criminally negligent remissness that will absolutely happen in the future, all because Real Life Me can’t get his shit together and code this code.

There are several things wrong with this line of thinking, like the fact that neither Best Possible Me or Shittiest Possible Me are real people.

But the fatal glitch in my code happens one step earlier, right before I conjure my angel/devil duo, at the moment I start my work anxious about and fixated on this idea of whom I should be by now.

That’s an expectation. “Expectation” is a hilarious word, and I’m using “hilarious” in the literal, eponymous-Louis-CK-standup-bit sense: so funny it causes you to lose your sanity.

“Expectation” is a hilarious word, and it’s so funny because, in real life as we live it, it means the same thing as “assumption”. Or “dream”.

An expectation is an idea your mind has about how things ought to be at some moment in time. That’s it.

Not all ideas are realistic. Not all expectations can become real.

But our typical usage of the word carries this implicit notion that an expectation must become reality; if it couldn’t, why would we expect it?

And when a given expectation – “I should have started this task as a better-prepared human being” – could only ever become reality if I happen to own a time machine, and I don’t immediately recognize this and adjust my expectations accordingly, then whatever I do to serve that expectation from this point forward is going to chip away at my sanity.

Hilarious, right?

If I’m running late, I’m running late. If I’m underprepared, I’m underprepared. And if I’m wasting brain cycles trying to impose some expectation – some dream – on that unflinching reality, it’s that much harder for me to interface with my waking world in a way that will turn me into a quicker or more prepared person the next time around.

In fact, all that frustrated anxiety is more likely to push me deeper into the habit energy that got me here in the first place.

Shittiest Possible Me will never be real, but I will definitely slide toward a pretty reasonable facsimile by sitting still and thinking myself ragged instead of making my best effort in this moment.

And I’ll slide even faster if I use my angry flailing as a defense against admitting mistakes I’ve made, separating them from who I am, and accepting reality on its own terms.

slide-cat

“I JUST. NEED. TO TRY. HARDER.”

It’s August 2014 and my pair and I are running like half a core challenge late. Everyone around us seems to have finished the first core an hour ago. We’re just now starting on the second one, which involves importing a huge collection of strings into a database, inflating them into ActiveRecord model objects, and running some methods on them in Sinatra controllers.

We repurpose a well-tested method we’d written a few weeks ago, and call it on a sample string to populate a collection called @results within our post route. We know how the method should work: the view needs to render the three results that we expect(!) to be there, assuming(!) everything’s running ok.

Error message. Undefined method `text' for nilClass.

Shit.

We dart to the controller, tap fingers to keys, add a couple puts statements to the top of the post route, which is hard to spot at first, because we were hurrying the last couple of times we edited the controller file.

We hop back into the browser, go back a page, refresh the page, fill out the form, hit “Submit”. Check the terminal output.

Ok, so @results is empty. Did we forget to even populate the database? We’d been running behind and feeling too much internal catch-up pressure to pay close attention to our process, so yeah, you bet your ass we forgot to populate the database. Figures.

This human embodiment of all my unspoken feelings of inadequacy disguised as a well-meaning cohort mate strolls by, says “yeah, might as well get coffee or whatever, it takes like 10 minutes to seed the db” and so that’s what we do.

We get back, the terminal screen is full of rake task spaghetti that neither of us stop to read because some people in the kitchen had been strategizing their way around the challenge two after the one we’re stuck on. There’s no time to read. I mash CMD+K until the words go away. The blank screen helps me clear my head a little.

Looking back, reading the terminal output in horror would have been the smart move right here.

The database is seeded, but the method call still isn’t populating the collection. Every time we try something new in the view or controller and agonize through another back-refresh-reenter-pray-submit cycle – the feedback loop is so fucking slow – nothing changes.

Somewhere in all this, lunch happens.

I eat too much. Emotions are goddamn delicious.

And now, after changing every instance variable and route name in our app, switching the method attribute back and forth in our form tag, and reading our migration fields out loud, character by character, we have come to this: reexamining a method that works, trying to convince ourselves we’d written it wrong.

We refactor it over and over, and each thing we try works on our test strings but not in the app itself. We are stumped and exhausted and a little pissed off. Most pairs are two challenges ahead of us by now.

It finally occurs to us, two grown adult humans who each paid a small boatload (a kayakload?) of money to be here and learn from people who had done this stuff before, to ask for help from someone who had done this stuff before.

The instructor is patient and kind. He speaks softly and slowly. Cons: My belly is too full and I am burnt out and now I kinda feel like I need a nap. Pros: It is impossible for my thoughts to race as fast as they’ve been racing when the person I’m speaking to refuses to be in a rush about anything.

Another pro: he’s encouraging as hell. As we talk through our understanding of how the pieces of this CRUD app are communicating with one another – an understanding that we’d spent the last 2.5 hours solidifying with our repeated renaming and rewriting – he is constantly affirming our shaky knowledge with earnest positivity. He shows us that we already know how the thing should work in a general sense, and then turns the focus to a detail that he’s probably been considering since we called him over.

“So, have you two checked how your method runs in the console yet?”

We had, and it hadn’t worked when we applied it directly to our ActiveRecord objects. And instead of figuring out why, we had back to adding Sinatra’s abstraction layers to our problem space. It’s a lot of extra noise to debug through. But we – okay, back that up, I’ll only speak for myself here – I already had so much other noise in my head at that point, so many expectations, so much shitty self-talk, that I never thought to dig deeper at the console level.

Ok, so now we’re back in the console. We run the method on our sample string, no results. We search the database for the first word that should have come back. No results.

We run a query to return the last 20 words in the database, come up with a new and nonsensical sample string that should bring one of them back, run our original, weeks-old, well-tested method, and holy shit there it is.

Then we try something so crazy it’s almost sane: we search the db for the first of the three words we’d started out looking for. Not as a method return, just finding by the attribute name that held the string.

And nothing comes back. The word hadn’t made it into the database. Neither had the other two.

Dimly, grimly, I become aware that we should have just read the fucking terminal output after we got our coffee. Or we could have used create! instead of create. Or we could have hopped into the console to search for words as soon as the seed file had finished running.

But we hadn’t, because we were feeling rushed and insecure. And people who feel rushed and insecure make silly decisions.

Re-seeding the database takes 10 minutes. Three minutes after that, we have a fully functioning app.

Usually, pairs at DBC high five at this point. We don’t. There’s nothing that feels celebration-worthy about this. Because celebrating means reflecting on what just happened.

Reflection desired? After wasting half a day on a stupid rookie mistake?

Oh, who gives a shit…

jim-computer.gif

Bears. Beets. Back-breaking self doubt.

Here are a few things I’ve learned about myself.

I don’t do my best singing while I’m planning how I’ll spend the tips after my set.

I don’t do my best blogging while I’m daydreaming about how big the traffic spike will be on tomorrow’s stats page.

I don’t do my best parenting while I’m worrying about what my daughter’s adulthood will be like.

I don’t do my best debugging when I’m thinking about my timebox for this commit.

I don’t do my best anything while I’m thinking about being done instead of focusing on what I’m doing.

too-soon-oops

Don’t count your touchdowns before they hatch.

I can only find the joy in my work if I’m present while I’m working. Once I start to obsess over the results I want, I lose focus on the process that can get those results, and my work suffers.

I learned how to be an adult from a culture that labels people – smart, dumb, emotional, cold, disobedient, flighty, funny, lazy, gifted, good, evil – and subtly reinforces those labels from early childhood until death. “She’s totally a type A.” “People never really change.” “I yam what I yam!”

We grow up with stories, and those stories all have heroes, and most of the time, the heroes are heroes because they’re special. Katniss has special aim. Mario has special glutes and quads. Ender has special tactical awareness. Pocahontas has special empathy. Rey has a special sensitivity to the Force. Superheroes have special everything.

Neo has special debugging skills. I don’t. No one I know does. The best debuggers I’ve met have some combination of a few things:

  1. a habit of reading error messages slowly and carefully
  2. a willingness to accept that the first two or ten Google searches might be fruitless
  3. enough mindfulness to stay calm, humble, and attentive in the face of stress, uncertainty, and deadlines
  4. snacks on hand
  5. the memories of hundreds of hours lost to silly mistakes, and the lessons learned
  6. gentleness with themselves

My go-tos are 2, 4, and 6. I’m working on 5, which seems like the only permanent one, but I haven’t yet put in enough hours to have wasted hundreds of them.

This one time, I was leading a breakout for Phase 1, and a student asked a question that no one asks in their first week unless they’ve had some prior programming experience. It was a clever, insightful question that anticipated the edgiest of edge cases.

The moment they asked the question, I could sense the collective tensing up of 80% of the cohort. I could almost hear them beating themselves up – “Jeez, if that person can ask a question on that level, does that mean I missed out on something in Phase 0? Should I have walked into this breakout as a better-prepared human being?”

So I answered the question, gave the student kudos for thinking on that level, and then I added this: “That one must have stung you a few times before, huh?”

As he laughed and nodded, I could almost hear the sighs of relief. “Oh, so this isn’t magic at all, then. If this work hurts today, maybe that’s just the discomfort that will lead me to mastery tomorrow.”

 

155258-finding-Nemo-dory-just-keep-sw-hw3F.gif

Pictured above (left to right): Me coding in 2016, me coding in 2014.

There’s so much content now. We spend tons of time consuming the finished products of hard work, and eventually we end up assuming that the finished products are the rule and not miraculous exceptions: the few poems that weren’t crumpled up and thrown into the bin, the few thinkpiece ideas that weren’t iced by the editor, the few apps that didn’t die before the index page was styled.

We celebrate others, and judge ourselves, based on how easily the most excellent outcomes seem to arrive. We rarely take the time to consider the processes that helped make those outcomes so excellent, hard work done behind closed doors, incrementally, often painfully.

But when we do take the time, it’s obvious that arrival is just the result of the last steps we take. Before we can arrive, we have to walk. And if we lose sight of the path by fixating on the finish line, we not only trip over our feet, but we refuse to look back at the things that tripped us up, and we end up making the same mistakes all over again.

When I left home to start DBC’s Phase 1, I left my wife and daughter behind, and I promised them I’d be done in nine weeks. I knew repeating phases was a thing, but I refused to plan for that eventuality because I thought it would give me an excuse to slow down.

I was in a hurry.

So while other boots seemed fully engaged with the material and one another, I was constantly looking ahead to the next assessment, wondering whether I was moving fast enough to crush it in one shot, obsessed with my impending arrival.

With that attitude, what ended up happening was that every error I encountered, every mistake I made, every hour I wasted spinning my wheels without asking for help, felt like a threat to my expected(!!!) nine-week timeline. I couldn’t learn at my best pace because I was never fully in the moment, always wasting brain cycles on comparing myself to the fastest students in the room, those human embodiments of my inadequacies disguised as well-meaning cohort mates.

Those humans, real people I could have spent more time connecting with, working with, and learning from, became projections of my own hurry worry and negative self-talk. I started to see them as avatars of my own Best Possible Me, fixed quantities of awesomeness that I felt I could never leap high enough to touch.

My inner critic is an asshole.

The-critic-it-stinks

I couldn’t resist the pun. I’m so sorry.

Recovering addicts know that living beyond the present moment is an exercise in futility. Any fixation on a long-term goal becomes a trap.

Each day of sobriety you get under your belt adds pressure: what if you throw away three whole months with one bad decision? And each day you continue the journey toward your self-defined goal – your expectation – applies pressure from the other end: “I’m so, so, so close to putting a year together, and only a fucking failure would stumble with the finish line in sight.”

Also, there is no finish line for a recovering addict. There is no point on a timeline that represents the result an addict really wants – total freedom from the compulsion to relapse, forever and ever.

All you get is this moment, and the next moment always depends on how well you manage to take good care of the moment you’re in now.

But it’s really hard to be mindful in every moment, so by convention, recovery groups offer advice that pads the timeframe a bit: “Take it one day at a time.”

If you can forget about how far you’ve come and how far you would like to go, you have a better shot at listening to your body and mind today, and finding alternatives to relapse whenever a craving comes roaring back into your soul, uninvited and unannounced.

not-today-satan-not-today2

And if I see you tomorrow…well, that’s a tomorrow problem.

An addiction is a thing you can’t stop clinging to, even as your life falls apart. We tend to tie the term to drugs, but ideas can be just as dangerous.

So can priorities.

And if that’s the case, I believe American culture is both a masterful drug dealer and a tireless enabler.

Compulsory education gets us addicted to results and shortcuts; if I can figure out how to ace the test, by cramming or cheating or sucking up to the teacher, I’ll “succeed”, and if I never really learn anything in the process, who cares? I’m not here to learn – I’m here for a GPA and a piece of paper.

Rugged individualism gets us addicted to seeking self-worth through comparison and disconnection; if I can figure out how to live as a lone wolf, by separating myself from the sheeple and arriving(!) at good ideas first and fastest, I’ll be “unique”, and if I can only feel worthy by comparing myself to people I see as less worthy, who cares? I’m not here to make friends – I’m here to win.

The 24-hour news/social media/advertising cerberus gets us addicted to wanting things. If I can come to notice every imperfection in myself and the world around me, and the flaws keep me neck-deep in a feeling of not-enough, I’ll be “motivated”, and if all I can do with my restless energy is explode in the direction of the next consumable item placed in front of me, who cares? I’m not here for fulfillment – I’m here to chase my desires.

If I’m addicted to results, comparisons, and desiring things, how can I ever be ok with myself in this moment? Result addiction takes me out of the moment. Comparison addiction takes me out of myself. And desire addiction takes me out of being ok with where I am and what I have right now.

If I’m trying to quit smoking, my Best Possible Me seems like the imaginary version of myself who never picked up a pack in the first place. Or maybe he’s the version who goes cold turkey and swats down every craving for a decade straight, through sheer force of will. It’s an expectation, a dream, a figment. Best Possible Me will never exist.

But I’m finally starting to realize that I might be wrong about that.

Maybe Best Possible Me is a real person, but I’ve been looking for him in the wrong place. Maybe Best Possible Me is not something I can aim for, or compare myself to, or desire, because maybe he’s been here all along.

Maybe Best Possible Me is Real Life Me, but only when he’s actually living in real life. When he’s awake and attending to this moment, focused and flexible and willing to see things as they are, even if they violate some unspoken expectation.

Maybe Best Possible Me isn’t a person, but a pattern – a habit of staying mindful enough to discern the next thing I need to do.

Addicts say that all the time, too: “Do the next right thing.”

And then the next one. And then the next one. There are no sunk costs. There is no long term. The only way to honor the past is to take care of the present. The only way to make tomorrow awesome is to take good care of today. This, right here, right now, this is all we get.

Everything else is just so much dreaming, and your dreams are useless unless you wake up and do something about them.

tumblr_mwbmd2xo8m1s89mq8o1_500.gif

“But I’m still asleep right now, Roto-Richard.”

Sometimes, when I’m coding, my next right thing is to read an error message.

Sometimes my next right thing is to make my best guess, change one thing, and see what happens.

Sometimes my next right thing is to read the docs.

Sometimes my next right thing is to ask for help.

Sometimes my next right thing is to take a break, like when I catch myself losing sight of what the next right thing is.

Sometimes my next right thing is to reflect on what I’ve just learned.

A lot of times, my next right thing is to figure out what my next right thing is.

babysteps_book_cover.jpg

Next right thing, don’t go berserk after handing down your life lessons.

I’m 18 months removed from that Phase 2 challenge, and I have never forgotten to use create! in my seed file since. I’ve also developed a habit of proving concepts in the console before I try to get them online. And I’ve gotten way better at actually reading terminal outputs instead of simply glancing at them to see if they look similar to things I’ve seen before.

I still fall into the pattern of banging my head against a problem for way too long before admitting defeat and asking for help, but it doesn’t happen as often anymore, and I don’t bang my head quite as long as I used to.

That hurried, harried, awful debugging session was formative for me in a way I couldn’t have anticipated in the moment. I thought I had lost half a day to a stupid mistake. But I’ve probably saved myself from facing at least a dozen half days since.

That afternoon, I had no desire to reflect on what I’d learned – I’d have preferred not to remember the day at all – but I had been blogging regularly for the previous four months, nightly for the previous three weeks, and so evening reflection had become a habit by that point.

So I did: As it turns out, my pair and I actually stumbled into a pretty solid understanding of how instance vars and params are getting passed back and forth, and damned if we didn’t solidify the shit out of that understanding today. Not bad, on balance. I still kinda feel like a failure, but I guess I got some good work done.

And it helped a little.

But what helped a little more was waking up the next day to find…that I had woken up. The world hadn’t ended. I wasn’t cosmically branded as Shittiest Possible Duke until the end of time. It was a new day, and yesterday had died, and looking ahead, I wasn’t sure where I’d stack up compared to my cohort on the upcoming challenges, but I didn’t care as much anymore.

Because there was new stuff to work on that day, and I knew I needed to stay present and ask for help if I wanted to make the most of my work.

My next right thing was to dust myself off and start again fresh.

bdd-with-behat-and-symfony-24-36-638

The next step? Refactor.

It’s March 2016, and I’m not running late, because I listened to my alarm this morning instead of trying to clutch my dissipating dreams, and then I took a shower before aimlessly browsing Twitter as my family slept. The next train is scheduled to arrive in 2 minutes.

I hustle into the station. I tap my card at the turnstile.

Red. Insufficient.

Shi-

Wait. Breathe.

This is where I am, right now, and I’ve been here before.

I walk to the machine, tap card to reader, give it the time it needs. I can’t will the machine to change how it does its work.

Menu screen. Read every option carefully. Find the next right button.

Add pass this time.

I select my duration, read the output. Select debit, wait, card in, wait, card out. I let myself glance left. In the distance, I see headlights peeking over the horizon.

Maybe I’ll make this one, maybe not. That’s a future concern.

I decide to return to the present. I do better work here.

I take my sweet time with the PIN pad. It’s strange, how when you look up at the screen to check your inputs, the buttons don’t seem to stick at all.

Receipt desired? Nah. No need to waste paper.

Besides, machines don’t make mistakes nearly as often as their users do.

I amble through the turnstile, through the door, onto the platform. The doors open just as I reach the end of the first rain shelter, which is exactly where I need to be. Without breaking my stride, I pivot left, step into the second car of the train, snag a solo seat – when you get on at Rockwell before oh-shit-I’m-almost-late-o-clock, there’s always an open solo seat in the second car – and I take my phone out of my pocket.

Normally, this is where I find a lot of stuff on social media to be angry at (why isn’t the world the way I expect it to be?!), but today I’m reflecting. Thinking about why this morning went so much smoother than that last time.

Thinking about lots of things.

I close Twitter, open Music, press play on Young Mountain, return to the home screen, open Notes, and start thinking out loud.

Who Wants To Rule The World? (How I Got Over Not Writing Love Songs For Donald Trump)

A mashup of Sara Bareilles’ “Love Song”, The Roots’ “How I Got Over”, Tears for Fears’ “Everybody Wants to Rule the World”, and Mac Miller’s “Donald Trump”.

Lyrics:

(((Shoot! — Garden apartment 😛

So, I put together some thoughts…)))

La la la…

Head under water
And you tell me to breathe easy for awhile
But breathing gets harder
Even I know that
Made room for me
But it’s too soon to see
If I’m happy in your hands
I’m unusually hard to hold on to

Blank stares at
Blank faces
No easy way to say this
You mean well
But you make this hard on me…

Out in the streets
Where I grew up
First thing they teach is how to hide your love
That thinking can’t get you nowhere
Someone has to care
In these streets
Where I grew up
First thing they teach is how to hide our love
That thinking can’t get us nowhere

Someone wants you to write them a love song
They won’t ask for it
But they need one
And you’ll see if you write them a love song
You can help them with the pain of living another day
You can write them to stay
There’s no need for leaving when life has a meaning
So write them
A song about

Love, love, love…
The world could use your
Love.
Love…

But everybody wants to rule the word-

And I learned the hard way
See they all say
Things we wanna hear
And our heavy hearts sink deep down from the truth
That their twisted words
Their help just hurts
They are just who they thought we were
Goodbye
I’m high and I don’t care

Cause I swear it isn’t fair
Tryna rule the population
Can’t nobody go nowhere
In these streets
Everybody’s for themselves
They ain’t helpin’ no one else
It’s a hazard to our health in these streets, hey-
Who would worry about you babe
If you cried out
From these cold streets
Yeah, who’s worrying…

Someone wants you to give them a love song
They won’t ask for it
But they need one
And you’ll see if you live out your love song
You can help them through the pain of living another day
You can help them to stay
There’s no need for leaving when love has a meaning but

Nothing ever lasts forever
We trade freedom for quick pleasure
Everybody wants to

Take over the world
Cause look at all that money!
It pays to take over the world
When the crooks get all the money
But love can take over the world
Cause it’s bigger than the money
Our love can take over the world
We don’t need the money

All we need is
Love, love, love…
Daddy! daddy!
Love, love, love…
Daddy? DAD?
Love, love lov-

(((yeah?

Why aren’t you listening to the words I say?

I didn’t hear you, I was singing a song. What are you doing?

Well, the TV turned off, and could you get me some win… and could you get me my wings, and where’s my stuffed Pikachu?

I don’t know where your stuffed Pikachu is! Should we go find him?

Yeah!

Ok, I’ll be right there.)))

Someone has to care…

(((Alright I gotta go find this Pikachu))).

—-

We found it. It was under my nightstand.

“Is Five Hours A Day in Phase 0 Enough To Get Me Ready For Phase 1?”

This question, or some variant of it, comes up often, as students in Dev Bootcamp’s Phase 0 work mostly solo through a curriculum covering everything from HTML/CSS to JS to Ruby to SQL. It’s daunting, especially if you’re so new to code that you don’t even know if you don’t know what you don’t know!

So naturally, there’s this desire to put a timer on the work and hope that you’ll be all set when the bell rings, as long as you took enough time.

Most traditional education plays to this desire really nicely. X amount of credits. Y amount of years. Z number of certifications. And then, voila, you’re Educated, and it’s time to go do one thing on autopilot, for 50 years, until you die!

Yaaaaaay. 

Let’s refactor that expectation a bit. This isn’t college, for better and for worse. A typical boot can lock in some concepts way faster here than there, but they’ll have to own more responsibility in order to make that happen.

Phase 0 is all about getting a solid grasp on the bare-bones fundamentals of a couple languages. It’s also necessarily an intro to some of the workflow patterns you’ll encounter over and over again while submitting code onsite at DBC and beyond. Understanding all the curriculum in those offsite weeks will leave you well-prepared for Phase 1.

Here’s the scary part, if years of traditional schooling did the same number on you that they did on me:

In the world of code, “understanding” is not the same thing as memorization.

It’s not the same thing as being able to talk your way through it.

It’s not the same thing as “oh, I get it now,” right after your pair codes it on their own.

It’s not the same thing as having read lots of books or attended lots of classes.

It’s not even the same thing as reviewing the last solution you personally coded and understanding all of it. Can you code it again? Right now? Without the cheat sheet you just created?

Maybe Alonzo from Training Day was in the wrong business! As someone who trades in the craft of code, understanding is not about what you “know,” it’s what you can prove.

Denzel as Alonzo, looking iconic and menacing in the film Training Day.

“To be truly effective, a good coder must know and love code. In fact, a good coder should have code in their blood. (Or, at minimum, their muscle memory.)”

Is 4 hours a day enough to bring you to that level of understanding? It might be, as long as time worked isn’t your only end goal. Some people need less time to understand concepts than others. Some need more.

Either way, what tends to eat up an unfair chunk of most novices’ time is simply the act of sitting there, befuddled by how something works, but too proud or scared or embarrassed to reach out and ask for help. The strategy I used to combat this was twofold: figure out how the thing works, and/or figure out how to ask for help.

1.

When you write code, can you understand what it’s doing? Could you predict what lines of code a given program will run, in which order? Can you pseudocode every single step of your app? When you get something working, if you were to delete your code and go eat a snack, could you come back and do it all again from scratch? Even if all the variable names had changed in the tests/driver code?

You may not be there just yet, but you can definitely strive to get there in due time, as long as you realize that the above approach is the place where real learning happens, and chase that feeling every day you sit down to code.

And it’ll feel way less comfortable than “yay, 120 minutes until my learning is guaranteed to be locked in.”

And it should.

But it’s better to fight tooth and nail for that solid understanding right now, because your bias will need to shift away from understanding and closer to completion during a faster-paced P1 and ludicrous-speed P2.

2.

I think I hear a deeper need in this question, and I’ve heard it before, and I’ve held it before, and it is a need that is screaming “HELP! I am not at all sure if I’m doing ok right now, and I don’t know how to find out , and I’m really scared that asking will somehow make everything worse.”

If that feels like your need at all, don’t stuff it beneath hours of work, as if time alone will lead you to mastery.

Drag that need out into the light of day, by getting outside info about your understanding as often as possible. Pair more than you’re required to. Ask for frank and honest feedback on how strong you seemed during your pairing session and what areas you could still use work on. If they aren’t comfortable giving feedback face-to-face, encourage and remind them to use the anonymous feedback app, and then make a habit of pairing with so many people that their feedback is truly anonymous.

The world-class beginner’s goal is not to set the right timer for themselves. The world-class beginner’s goal is to spend the right time with others. 

Don’t lone wolf it! Your peers’ camaraderie and feedback will help keep you out of your head and in your fingertips, where the only real learning ever happens.

There is nothing I have come to understand on my own in 5 hours that I couldn’t have picked up in 1.5 hours with a communicative pair.

If your plan is to practice 5 hours a day, my recommendation is to see if you can make at least one of those hours a paired one. Don’t make the pairing minimum your personal maximum. Why not pair every day if you already have the time?

Be greedy for human contact! It’s all the people around us who can help us see where we really stand, here and everywhere else in life. Besides, you signed on to a program like this because at least a part of you didn’t want to learn alone. Don’t start now!

So yes, to answer your original question, it sounds like you’re definitely putting in good time.

But make sure the time you’re putting in is good.

Happy coding! May you find your next error very soon.

How To Game Any System (And Why It Will Kill Your Soul)

He’d figured out the Rules all the way back in grade school. The Rules never changed.

Rule One: Make a perfect first impression, even if it’s not an honest one. Front-load a compelling performance of your best possible self, and polish that façade for at least three weeks. Then, if you start screwing up later on, they might assume it’s not “the real you” and give you some extra slack.

Rule Two: Present yourself as competent, even when you’re not. Never admit you don’t know something, and avoid situations where you might have to. This includes any situation where you feel tempted to ask for help. If the higher-ups never catch you looking overwhelmed or scared, they might assume you’re so good at what you’re doing that it never fazes you.

Rule Three: Wherever any work you do will be assessed, master the assessment process. Study it early and often, so you can exploit it if you ever start failing in your work. Maybe the test writer always uses better grammar on the correct multiple choice option. Maybe the boss tends to give softer performance reviews toward the end of the afternoon. Maybe someone put together a clear enough rubric for you to reverse-engineer a practice solution in advance, so you can run a rehearsed script even as the proctor assumes you’re improvising. Don’t worry about actually achieving things. Just do what it takes to obtain proof that you’ve achieved them, and people will assume you’re just as strong as a real achiever.

He followed the Rules to the letter, each and every day.

He did this for decades.

He became a master of charming the pants off people. He became a master of pattern recognition. He became a master of making and keeping himself comfortable.

He became a master of bullshit.

He never quite mastered the art of shoving into the deepest pit of his subconscious this little nagging feeling that everything about his life was implacably wrong and somehow getting worse, the wrenching jealousy toward his childhood friends who had managed to learn and grow while he was busy protecting his image, the eternal searing terror at the thought of being unmasked…but he’d always figured that mastery would come in time.

Or hey, maybe he could fake his way out of dealing with that work too.

And then, out of nowhere, a Horrible Thing happened: He obtained proof of an achievement that he genuinely wanted to earn, and then he realized he had no clue whether he had actually earned it.

And he had always followed the Impostor’s Rulebook to the letter, in front of everyone he’d ever met, so who was left for him to ask?

Whose feedback could he possibly trust now?

The problem with trying to game a system is that any “system” you’re in is actually just you and some other people, making choices. You need at least a few of those other people if you want to prove to yourself that who you think are is who you really are.

You’re a social animal, wired to build and constantly update a self-concept based on how you see others react to your choices. You rely on honest, kind (not necessarily nice!) feedback to maintain your self-concept.

So when you fail to practice rigorous honesty with the people in the system whose feedback you’ll need in order to figure out where you really stand, what you’re doing is like putting up a mirror where that other person thinks they’re looking at a window, redirecting an uncomfortably bright light that could illuminate your best next step.

You were afraid of sunburn, so it felt safe at the time. But if the mirrors stay up for too long, your self-concept will wither in the shade, along with any confidence you’d been able to fake up to that point.

The Horrible Thing to worry about is not that the Rulebook will fail you. The Horrible Thing is that it might *not*, and you’ll end up more lost than if you’d never picked up the book in the first place.

The easy way out is never a way out. It’s a cul-de-sac, 1000 miles long and winding, and by the time you finally realize you must turn back around, you may not be walking in daylight anymore.

You can learn all these things on your own time, if you really really want to. Or you could listen hard to someone who’s been trudging his way back for over a year now…

Usually, the fastest way to cure Impostor Syndrome is to stop doing the things Impostors do.

Jazz, Refactoring, and the Clean Slate

Here’s an email I wrote to the cohort I’m leading right now. We’re in week 3 of Phase 1, past algorithms and OO design basics and into SQL and ORMs. It’s also the week of the phase assessment. So there’s some stress. On Day 1, we made a covenant as a cohort, and keeping a clean slate every day was part of that covenant. After a lot of test anxiety bubbled to the surface yesterday, I had an urge to share a song that has always helped me “snap out of it” when I got caught in a worry spiral.

And then I thought about how the song came to be, and I realized the process itself was another object lesson for beginning programmers…

Good morning!

Today’s work will build on what we did with SQL yesterday, and add Ruby and the sqlite gem to the mix. Basically, you’ll be writing your own Ruby methods to execute raw SQL queries and build Ruby objects from the data that comes back. You’ll also end up creating, modifying, and deleting data in the database.

The difference between a site and an app is that a site is static, while an app lets a user create, read, update, and delete data interactively. By writing methods like the ones you’ll write today, you’re taking a big step into the mindset of a web developer.

And finding the right mindset is always important. If you want more control over your mindset, being mindful and in the present moment is always a good place to start. As a reminder to keep your slate clean today, I’ll offer an optional ten-minute thought experiment. If you like music stuff, you’ll probably get a kick out of this.

Here’s What Am I Here For, by Duke Ellington (Not the Duke I’m named after, btw; Ask me later.). Try to listen closely to how the instruments pass melodies back and forth to play off the chord progression, almost as if they’re conversing.

After you’ve given that an attentive listen, reflect on the song’s title for a moment. What were you expecting to hear when you first saw it? How closely did the music match that expectation? Did hearing the song help you answer the question posed?

Cool. Now, check out your clean slate meditation for the morning: What Am I Here For, by Lambert, Hendricks, and Ross. Listen to the melodies again. And the words. Oh, the words…

Holy crap, right? Jon Hendricks and his group were among the first to put something called vocalese on the map. They became world-renowned for this and many other songs, wherein they translated entire performances of jazz standards, note for note, into versions with lyrics befitting the song’s original title.

It’s monstrous work, if you ever get the chance to try it. So much attention to detail, meticulous reworking of tiny elements to get the flow just right in each part, without sacrificing content or craft or enjoyability. All to end up with something that is only a little different from what you started with!

Yep…it’s a LOT like refactoring.

It’s also like refactoring in that the LHaR version would have been impossible to create without Ellington’s original. Not “impossible to create as fast or as well,” literally IMPOSSIBLE to create without a first draft, according to the rules of vocalese. How can you match lyrics to melodies when there are no melodies? How can you write to a theme when no title has established one?

Like Good Vocalese, Good Code also relies on a solid-but-incomplete foundation to tower sky high. If you think you’re done in one draft, you’ve missed out on all the magic. Duke Ellington and his band did fantastic work…and yet I only ever play that version as a prelude to the one I just shared with you.

Because the vocalese version is just better. At least it is to this end user. It’s like someone got into my head, peeked at all my hidden needs and worries and insecurities, anticipated the happiest path from confusion to satisfaction, and wrote something that lets me meet the finished product where I’m at and get something out of it that feels deeply personal.

You see it, don’t you?

That’s exactly what users ask web developers to do every single day.

In the mindset of a world-class beginner, there is no such thing as Bad, only Incomplete. It’s true for code. It’s true for developers.

Today, be willing to accept something about your learning that is incomplete, and do whatever it takes to refactor it into something better.

That’s what we’re here for.

That’s what we’re here for.