What would Mr. Rogers do?

There’s a quote I’ve seen from Mr. Rogers quoting his mother about what to do during times of distress: “Look for the helpers.  You will always find people who are helping.”  This is a good thing to do right now, of course. I’m sure Mr. Rogers would quickly see what the rest of us are seeing: medical professionals risking their lives to protect ours, essential workers still going to their jobs so we can be fed and well supplied and so on.  

But what would Mr. Rogers actually be doing?

He’d be doing what he does best: he would produce special shows to address this crisis.  He would be furiously writing scripts, editing them, creating the music, all the while keeping his purpose in mind: reassuring his core audience, children.

In other words, he’d be using his God given talents to help in the best way he could help.  He wasn’t a doctor so couldn’t care directly for the sick.  He wasn’t a paramedic so he couldn’t go in and rescue the most afflicted.  He was an educator and his medium was television.  He would have shared his heart and told us all that it was all right to be afraid.  And he would also tell us to show each other just a bit more love and kindness.  And he would be showing just a bit more love and kindness, himself.

I’m not a doctor nor any kind of medical professional.  But I can do what I do.  I can try and bring you a bit of delight, share some thoughts, bring you a smile.  I can show you that I care.

You see, this is what you do for me.  When you post on Facebook or Instagram, I can see you are alive, you are healthy and maybe even happy.  I can see that you still care.  I can see that life still has meaning and can be enjoyed.  I can see that life, glorious life, is still beautiful.

So, thank you.  And now, I will return the favor.  I will try and bring smiles to you, as well, using whatever God given talents I have.

The Universal Laws of Success

In The Formula: The Universal Laws of Success, former physicist and current network scientist Albert-László Barabási describes these universal laws of success:  

THE FIRST LAW
Performance drives success, but when performance can’t be measured, networks drive success.

THE SECOND LAW
Performance is bounded, but success is unbounded.

THE THIRD LAW
Previous success × fitness = future success.

THE FOURTH LAW
While team success requires diversity and balance, a single individual will receive credit for the group’s achievements.

THE FIFTH LAW
With persistence success can come at any time.

He applied rigorous mathematics to the question of what it takes to be considered “successful”, but is he right?  Let’s consider his assertions against one of most indisputably successful people of the last fifty years: Michael Jordan.

Perhaps we should begin by asking what it means to be successful in the first place.

I dream things that never were and say, “Why not?”

George Bernard Shaw wrote : “You see things; and you say ‘Why?’ But I dream things that never were; and I say ‘Why not?’.  When Robert F. Kennedy ran for president, the theme of his campaign was a paraphrase of Shaw’s line: “Some men see things as they are and say, why; I dream things that never were and say, why not.”

At the dawn of a new decade, I dream of wondrous, ridiculous and impossible things.  I have no idea if any of it will happen.  I am not certain of what I can do to make any of it happen.  But why not?  What was incredible yesterday I take for granted today.

So I’ll work, I’ll hope and I’ll dream.  May the world we build together be better than the world that we were given.

Why not?

The Timeline of Grief

Someone who lost her father told me that when it happened, her world shifted.  I understand what she meant.  There is no pain like losing someone you deeply love, whether it’s a parent, a partner or a child.  It’s indescribable.  If you’ve experienced it, you know what I mean.  If you haven’t, you certainly will.  No one gets out of this life alive.  Not even those we deeply love.

As fragile human beings, however, our strong preference is to avoid pain.  This is sensible.  Evolution gave us sensitivity to pain, whether physical or emotional, in order to help us survive.  Physical pain helps us avoid mortal danger.  Emotional pain helps us prevent social threat.  And though we have no choice but to experience pain at times, it is natural to want to know when the pain will subside and end.  No one wants to continue experiencing pain.

Grief is pain.  When anyone of us experiences the loss of an important presence in our lives, “grief” is the name we give to that almost unbearable instance of emotional pain, a pain that makes us imagine that not only is our identity under threat but our also entire world.  The world shifts.  And it is fair and reasonable and even hopeful to wonder when the grief will pass.  We wonder what the timeline of grief is.

Hearts do hollow out.  They shatter.  But with time, hearts heal and recover.

But even as pain subsides grief never fully goes away.  Something will bring it back from the depths of the heart to the very surface.  A memory will be evoked by a song, an action you learned at the feet of the one who taught you, a primary trait you share with the one you lost—or a show you used to watch with the one you love.  When that happens, what had lain dormant returns, reminding you that it had always been there.

So what is the timeline of grief?  It is for the rest of your life.  That ache will always be there.

And that is as it should be.  That’s the way you would want it to be.  Because the timeline of grief is exactly the timeline of love.  And when you love someone deeply enough, your love for them—and their love for you—will also last for the rest of your life.

And love is forever.

May you remember and savor well on this day, All Souls’ Day.

Advice to Young Engineers: Even Bill Gates and Steve Jobs Had to Start Somewhere

Recently I gave a talk to a group of young and aspiring engineers at Pursuit about getting their first job in technology. One of the questions they asked me was: “If someone for whom you cared deeply was one of the students and you could advise him or her only once, what would that key advice be?” Here is my answer.

If someone I cared about deeply were in the program and was aspiring to a career as a software engineer, I wouldn’t give him or her just one piece of advice.  What my loved one would need to know and learn is far too complex to be reduced to just one pithy sentence.  It would be a disservice to that person and a serious display of apathy if all I did was say one thing. No one thing anyone can say is so profound that it will change everything.

That said, let me try and reduce what I think would help you in your question to a few items.  

Write a lot of code.  And I mean a lot.  You are in this program for just under a year or so.  Write thousands of lines in the year you are part of the program and thousands more when you get out, whether professionally or for yourself.  The code you write for the program counts, of course, but write more than that.  Solve problems on HackerRank or LeetCode.  Find an open source project.  Come up with your own project.  It doesn’t really matter why you write it, it just matters that you do.  

The foundation of the ability I have today was the thousands upon thousands of lines of C and C++ I wrote when I was an undergraduate, either as part of my coursework (hundreds of lines) or a job (thousands) or just pursuing my own curiosity (thousands more).  

There are no short cuts around this and there is no book, no web page, nor YouTube video that will absolve you of the need to churn out lines and lines of code.  You just have to do it.

Production is what the marketplace rewards.  Nothing less, nothing more.  Never forget that someone is paying you to produce software.  If someone is going to pay you, it’s because they want a product in return.  Your success in any career will be always be a function of how much product you can deliver and at what quality.  In your case, your product is software since you are aspiring to be software engineers.  You have to deliver as much software as possible and at as high a quality as possible. This is why you need to start writing a lot of code.  Now.

Your ability to produce is a function of your skill.  “Skill” here means how well you know the programming language you were asked to use, how quickly you understand the problem you have been asked to solve, and how well you apply the language you know to the problem at hand.  When you advance, “skill” will mean how well you design the solution in anticipation of problems because problems will become more general and vague and you will have to solve problems you have yet to experience.  Later on, “skill” will mean choosing which language to use in the first place, which technologies to use and how to put them all together to build systems.  As you advance in your career, you will produce larger and larger pieces of software.

Learn how to learn.  The volume of information in the field of computer science is massive and continually growing.  In my own career I’ve learned and used Python, Scala, Java, C++, C, Perl, Pascal, FORTRAN, BASIC.  There’s Object-Oriented Design and Programming, Procedural Programming.  Now with the popularity of massively parallel systems, there’s Functional Programming.  Processes gave way to threads, single cores to multiple cores.  Unix bred Linux, Windows actually became viable, NeXT became iOS.  Waterfall moved on to Agile (supposedly).

You are going to have to learn a lot and in a very short period of time.  This means you shouldn’t just be memorizing things.  You need to get to the underlying principles beneath all that you are leaning—you need to get to first principles.  

By the way, there is no such thing as a “preferred learning style”—the idea that some people are visual learners, some are auditory, some learn best by doing, some learn best listening.  There is no scientific evidence for this.

There is the best way to learn given the domain, i.e., sometimes it’s best to read, sometimes it’s best to do, sometimes it’s best to watch and sometimes it’s best to listen.  It depends on the subject, not the learner.

Embrace the frustration.  The best sign that you are learning is that you are frustrated.  If anything you are learning is too easy, you are not learning enough and you are not trying hard enough.  If you find writing code easy, you are not challenging yourself enough.  Embrace the suck.

Protect your most valuable asset for your career.  Your most valuable asset an engineer is your brain.  Take care of it.  Train it to focus.  Push it then let it get rest.  Feed its hunger for knowledge through reading and other forms of intellectual exploration.  Don’t let it get distracted by trifles. Sleep.

Learn how to build relationships!  Engineers are notoriously bad at this but relationships are one of the foundations of your success—not to mention your overall happiness.  This is nothing less and and nothing more than learning how to develop friendships with the people you will encounter in your career.  

The quality of your relationships in your career as an engineer will dictate how much you learn, what opportunities you will see and what path you will take.  Bill Gates needed Paul Allen.  Steve Jobs needed Steve Wozniak.  Larry Page needed Sergey Brin.  All of them needed networks of people who believed in them and trusted them.  

Building relationships is not the same as “networking”.  I despise that word. It is utilitarian, insincere and not only is it useless, it is actually destructive.

You will need help from someone who has something you don’t in order to succeed—whether it is knowledge or access to opportunity—and if that person senses that you are “networking” with them, i.e., you are only trying to connect with them because they have something you need, it’s over—that person who has something you need will shut you down.
Networking is transactional—taking.  Relationships are built on trust and generosity—sharing.

Have fun.  There are few actions in life that bring as much joy to human beings as the act of creation.  Ask any artist or author, movie director or screenwriter, mother or father.  When you bring something new into this world it is deeply pleasurable.  Writing code is an act of creation.  A software engineer at his or her best is an artist, no less so than Picasso or Da Vinci.  Yes, you must follow mathematically constrained rules, but that shouldn’t limit you, it should free you.  The rules are the rules of logic and they are simply the canvas of your creation.

You’ll be frustrated and you’ll be infuriated but, in the end, if you are doing it right, you should be having fun.

Sacrifice for the Sake of Understanding

On this first Friday of Lent, when I have to abstain from eating meat–as a billion other Catholics do–not only am I pondering the meaning of this (very) minor sacrifice but also the slightly less minor sacrifice we have to choose for this forty day period.

First of all, I am hungry and I love meat.  And now I have to wait at least twelve hours or so before I can take in food products derived from land animals.  Second of all, I have chosen two actions for this Lenten period that make me want ponder the point of sacrificing at all.

The first action I’ve chosen for this season is to pray The Examen every night during this season.  St. Ignatius, founder of the Jesuit order, created the Examen as a method of reflecting and reviewing the day.  Jesuits end their days with this prayer.  For you more secular minded folks, think of The Examen as a way of doing a review with your boss, except that your boss just happens to be The Boss of the Entire Universe–and He just happens to be very wise and forgiving.

The second action I’ve chosen is to continue the project I began two years ago for Lent.  Back then, I interviewed homeless people in order to understand.  Two years later, I have thought about the general principles of problem solving in order to be able to teach my students how to approach an problem.  Given the amount of thought I’ve given to problem solving and given the unfinished project from two years ago, my second action for this season is to apply the problem solving rubric I’ve written about for the last two months to a seemingly intractable challenge: the problem of poverty. That’s right, I said that.  I want to see how the problem of poverty can be solved.

I know.  Good luck with that and so on.

It occurs to me today that the whole point of these minor sacrifices Catholics are enjoined to undertake are really meant to educate us.  We are asked to sacrifice for the sake of understanding.  And what we ultimately need to understand is why we need to care, what we need to care about and what we need to do about it.

My sacrifices–such as they are–are less than minor.  In the end, I’m just sacrificing time.  And, frankly, I expect to come away with something greater, so it’s not even going to end up being a sacrifice at all.  I expect to understand at the end of 40 days.  Certainly not everything, but just a bit more of what I need to do in this life.  

So given that I have this primitive problem solving rubric, it’s time for the first step, getting my mind right.  Why care about poverty and why solve it? I’ll start there.  We can discuss the impossibility of the problem later.  First, let’s consider why we even need to care.  And–surprise–I am asserting that we do. 

How to Solve Any Problem, Step 6: Test Your Solution

The last step in problem solving is not necessarily the most important—they’re all important—it’s the one that I think is the most overlooked: you need to test your solution.  Another way to put this is to “check your work.”

Solving a problem, especially a challenging one, is exhilarating.  It’s a sense of accomplishment and we naturally want to pat ourselves on the back.  But the rude but necessary question is this: how do you know you’re right?

Sometimes my students get so excited that they were able to apply some newly acquired knowledge to a lengthy problem that they skip this step, missing a critical element of the question or forgetting a minus sign, ultimately getting the question wrong.  On a more serious level, imagine what would happen if a new medicine arrived on the market with claims of treating a grave illness–cancer, say–but without any evidence of testing for its efficacy.  Not only would that medication likely be useless, it may actually be dangerous.

When you think you’ve solved a problem, don’t be too certain.  Check your work.  Test your solution.

How to Solve Any Problem:
Step 1: Get Your Mind Right 
Step 2: Identify and Clarify the Problem 
Step 3: Break It Down    
Step 4: Identify and Gather Your Resources
Step 5: Send in the Wolf
Step 6: Test Your Solution



How to Solve Any Problem, Step 5: Send in the Wolf

You’ve put yourself in the correct mental and emotional state.   You’ve identified and clarified the actual problem.  You’ve broken it down into smaller and easier to handle pieces.  You’ve gathered the necessary tools and resources and you’ve consulted your storehouse of previous solutions.  The next (and almost final) step is to send in the Wolf, just as Marsellus Wallace (Ving Rhames) did in Pulp Fiction in order to help Jules (Samuel L. Jackson). In other words, it’s to find the solution to the problem.  You have enough information at this point, it’s time to act.  That’s all I’ll have to say–for now. 

How to Solve Any Problem:
Step 1: Get Your Mind Right 
Step 2: Identify and Clarify the Problem 
Step 3: Break It Down    
Step 4: Identify and Gather Your Resources
Step 5: Send in the Wolf

How to Solve Any Problem, Step 4: Identify and Gather Your Resources

It is President’s Day in the United States, the day that Americans celebrate the birthdays of two of the greatest presidents in American history: George Washington, born February 22, 1732, the father of the nation and Abraham Lincoln, born February 12, 1809, the Great Emancipator and Rail Splitter.

There are many reasons each one has been deemed by history to be the two greatest (depending on the list, they often trade first and second place) but surely the scale of the problem each one faced contributed to these assessments.  Washington had to bring forth a nation and a type of government that hadn’t existed on earth for nearly two thousand years. Lincoln had to keep that nation intact in the face of massive armed opposition.  In other words, each President faced existential level threats.  

Given the massive scale of he problems each one faced, what is of interest to me is how each man solved it.  Entire volumes have been written about their respective solutions, of course (see The Glorious Cause and Battle Cry of Freedom).   But for the sake of my study of problem solving a key step each man engaged is what interests me today on President’s Day: identifying and gathering your resources.

It should go without saying that neither man solved their respective existential level problems by themselves.  Washington had to raise an army, train it, arm it and clothe it.  Lincoln had so supply his army, identify how much of his army even remained after his inauguration, unify his allies, and gain support for the fundamental changes to the country and government his predecessor, Washington, had birthed.  In other words, each man had to identify what resources he had available, gather them together, and bring them to bear.

On a much smaller scale, this is often the step we all tend to forget when we are faced with a crisis or a problem.  In a moment of panic we might actually forget what we know.  We might not remember what we actually have or who is actually on our side because we are so wrapped up in the scale of the problem instead in the promise of the opportunity.  Hell, that just happened to me today.  And it tends to happen to my students when faced when a seemingly inscrutable problem on a test.  They forget how much they know.  They forget just how smart and how talented they actually are, just as you (and I) often do when under pressure and confronted with a threat.

So that’s the next step in problem solving: Identify and Gather Your Resources.

How to Solve Any Problem:
Step 1: Get Your Mind Right
Step 2: Identify and Clarify the Problem
Step 3: Break It Down   
Step 4: Identify and Gather Your Resources

How to Solve Any Problem, Step 3: Break It Down

Barely four months into his presidency, the youngest elected president in American history gave a speech to a special joint session of congress exhorting the United States to send a man safely to the moon and bring him home, all before the end of the decade of the sixties.  The audacity of this challenge needs to be put into perspective.  At that point in history, May 25, 1961, the United States hadn’t even put a man in orbit—though the Soviets had.  American Alan Shepherd had only reached a mere 116 miles from the surface of the earth.  Now John F. Kennedy was challenging the country to send a man on a trip of over 450,000 miles.  This was an enormous problem to solve.  How did they do it?

They didn’t.  In 1961 it was an impossible task to send a man to the moon. Instead, James Webb and the rest of NASA broke down the problem into a series of steps.  Build a powerful rocket.  Get a man into orbit (John Glenn). Build a more powerful rocket.  Put two men into orbit.  Get a man to walk in space (Ed White).  Execute a rendezvous of two different spacecraft (Gemini VI and Gemini VII ).  Build a command craft and a landing craft.  Put three men into space.  Build the most powerful rocket ever known to humanity (Saturn V).  Orbit the moon (Apollo 8). Land on July 20, 1969, before the decade ends, fulfilling the promise of the young president.

Once my students encounter the sixty or so words in a math problem, they have fifty seconds to find the correct answer.  After getting their minds right and clarifying the problem, they will to need break down the big problem into its constituent parts, solve each of those parts and then put it all back together to find the answer.

How to Solve Any Problem
Step 1:
Get Your Mind Right
Step 2: Identify and Clarify the Problem
Step 3: Break It Down