good Monday morning today I would like
to talk about the importance of
perseverance as a software developer in
this video I’m going to define what I’m
talking about when I say perseverance
why perseverance is specifically
important when you’re a developer I’m
going to talk about how talent is a bit
overvalued and finally I’m going to talk
about habits and processes because I
think that those are a great way to
improving your perseverance closing the
window because it’s making a lot of
noise let’s get into it
IMM PJ and you are watching fun form
function what is perseverance what I’m
talking about in this video is demeanor
sort of like persistence maybe one way
of putting it is the ability to
withstand frustration kind of like how
you can train your muscles to hold an
object for an extended period of time
you can also train your mind to with
certain withstand frustrations for
longer periods of time and different
people have very different tolerance
levels for frustration I think it’s
important to recognize that frustration
is not an entirely negative feeling
frustration is there to protect us to
make sure that we are not spending our
limited energy and time on dumb things
if we as mammals I guess didn’t feel
frustration we would just keep chasing
animals that that were too hard to catch
and just expend more energy on catching
these animals than we extracted from
eating them it’s kind of nature’s way of
measuring return of investment when
you’re feeling frustration is your
brains way of like giving you a little
bit of an indication that is this really
worth it and the more time you’re
spending on this thing that you’re
trying to achieve the more insistent
your brain is going to be like
now you spent a lot of time doing this
I’m gonna crank up your frustration a
bit so frustration it’s there to help
but it’s like all the motions then our
brain has the evolution of our brain has
of course not
kept up with the rapid change in society
of industrialization digitization and
our frustration thing in the brain is
built or evolved for a problems that we
had thousands of years ago and it’s
absolutely still useful but it’s it’s a
bit predisposed toward short-term
benefits and because of that we need to
build up our tolerance for frustration
in order to have it like in order to
come to compensate for it so that it
also works in modern society especially
when it comes to highly technical and
problematic crafts like programming this
episode is part of a series the idea for
this series came from somebody asked me
on Twitter what I thought was important
things to learn as a as a new software
developer I could answer this personally
because I have some ideas but that
answer would be very specific to to me
and my realities and my experience and I
feel like this question needs a much
broader perspective so I went to the
Twitter and the mastodons and I act this
what do you think are critical traits in
a programmer not to be super 10x or
anything just to feel good and function
well professionally and I gathered all
the tweets that I got about a hundred of
them and I categorize them into eight
buckets and those are going to be the
basis for this this series the habits
are eight perseverance seven get
done six teaching five understanding
context for check your ego three empathy
to being humble and one
being curious and this first one is
about perseverance it’s important to
recognize that this list is not like a
checklist of things that you have to be
you have to remember that this is a data
aggregate it’s like we ask a hundred
people what do you think it’s most
important and a lot of people that they
they send a lot of different things and
then we made a list that it’s ranked of
what was at the top of what was at the
second there is not an actual person
that thinks that you have to do all of
these that we’re gonna list in this
video series because that would be
insane why is perseverance important to
being a developer a lot of the traits
that we’re going to talk about in this
series are very general traits like that
or useful as a human being and
particularly useful as a person working
in a professional and creative
environment oh so they are useful in
general but I still think that
perseverance is particularly important
to a to a developer and it’s also
important in very specific ways one
thing that you deal with as a developer
to a bigger degree than most professions
I would argue is being constantly faced
with problems that you don’t know how to
solve and as a result you don’t know how
long they’re going to take if you are
able to do them often not you have to
learn something new or if they can be
done at all
this is pretty particular to the role of
a software engineer to have this to such
a large degree in their profession I
think a lot of professions have it but I
think that few professions have this on
a daily basis you need this kind
of weird naivete that when you are faced
with the problem and you lean into it
eventually the problem will buckle even
though you don’t know what to do you
still take a deep breath start reading
we start thinking we start drawing and
like slowly
but surely we have this path that
emerges this often happens with bunks
it’s you you you are tasked with the bug
there’s a bug in your system do you
sometimes you don’t you haven’t seen the
bug you have just a user that has said
that the bug exists and you have to
first find a way of over at producing it
and you just have no idea how to do it
you don’t know what the user did so you
just have to okay get hints from the
user and then when you finally are able
to reproduce the dog you have to figure
out what part of the system is this is
happening in what might be causing this
you have to like bring some oh maybe
it’s this part maybe it’s this part
maybe this is happening and then you
have to start drilling down drilling
down drilling down drilling with Buzz
it’s very rare that you can say lowing
somebody okay we have this bug yeah it’s
wrong how long do you think it’s going
to take to fix it very very rarely that
you as a software developer can can make
a like a confident claim like oh it’s
going to take this long you have no idea
because you don’t know the intricacies
of the thing even if you’re familiar
with the code base so you think it’s one
of the things where you sit down and you
just this task you might take ten
minutes what might take four days or it
might not be so little at all because
some in another system or it
might even be like that there is some
in another system so we need to
either like replace that system we’ll
rewrite that system and that would take
like two years and when you hit that
situation you should that’s a situation
when you should be listening to your
frustration and give up and go away from
that box but the point is that you need
to have this mentality of leaning very
firmly into a problem and not like
having this I’m going to fix this
problem because if you don’t you will
have this horrible voice inside your
head
you’re a failure like if you think if
you I’m going to fix this in an hour
I’ve got a push and it takes like four
hours for every hour you pass past your
imaginary deadline that you just made up
you you’re just going to have this voice
saying that you’re a failure you’re a
failure you’re a failure like you need
to have this lean in mentality and be
very like slow and methodical about
solving problems be consistent
perseverance is also related to treating
programming like a long game this
attitude is also very important like not
just to solve problems but also to
function long term as a programmer
because programming is a marathon not a
sprint this is true for both learning
and for projects in the learning context
I’ve had people ask me like I’ve so I’ve
been doing this for months now I’ve been
programming for months and I’ve only
learned a little bit I often hear this
from people going into boot camps
because some boot camps they agreed a
bit of an unhealthy expectation about
like you can become a programmer in the
course of a few months I mean you can
learn basic programming in that time
short but learning programming it’s kind
of like when you when you finish your
boot camp or you finish your education
that is when the real learning starts
it’s learning programming is a lifelong
lesson and the more you learn the more
you realize so you have your learning
here right and this is what you know and
you think that oh then you see that this
corpus around it with stuff that you
don’t know and as you learn as you’re
learning grows more and more you realize
that you were wrong this thing isn’t
this size it’s it’s this size so you
learn more and more and then you realize
that this thing that you don’t this area
of stuff that you don’t know it’s almost
infinite so you realize that learning
and programming it cannot be completed
not even close you just have to pick
like a
inside of it and go slowly and just grow
and compare yourself to the person that
you were yesterday that feeling of oh my
god there is so much that I don’t know
that feeling will not go away by
learning more it will grow at to a point
where it just just realized that oh okay
and the marathon not a sprint also
relates to software projects themselves
like you we do have this these ship
dates where we get a new version of the
software out the door but software today
tends to not exist in a vacuum it’s not
like a game that you release and then
it’s released it’s on some CD ROMs and
we never updated some software today it
lives and breathes it it works on top of
other system on top of operating systems
on top of libraries on top of internet
connections and servers they are living
beings that constantly needs fixing and
and evolving I’ve seen so many software
projects fail because people treat them
as projects instead of processes so in
the same way that you can’t treat
software development as a project you
need to spend it treat it like a process
you also need to treat learning not as a
tuition or like something that you stuff
into your head this curriculum you need
to treat is it as a growth process you
need to cultivate this growth mindset
the number one skill in this list is
learning and we’re going to get to that
later but perseverance is one of the
basis for the learning habit in general
talent is greatly overvalued I often
find myself not as much nowadays but in
recent years like feeling that ah I
don’t have enough talent for this there
are so many more people that just poor
software development of so naturally
they are smart and I am not particularly
smart at least I
feel smart at least not smart like that
I don’t think a lot of people think that
the this way that I am I am NOT I am NOT
X therefore I cannot do Y and I think
that this it’s natural that this
attitude exists because it it puts the
blame elsewhere I am not good at math
therefore I cannot be an engineer then
it’s not my fault anymore engineering
that for other people I would like to
but I am not good at math I am but it
turns out that science has proved this
largely wrong there is a fantastic book
called grit that is written by Angela
Duckworth you can check out her TED talk
here clicking there I’ve also linked it
in the episode description along with a
link to buy her book if you want to
support me and the show the book is
about a lot of things not just
persistent but this more
all-encompassing concept called grit but
one very very interesting thing that I
gathered from the book was that they did
Studies on on these kids and they found
that grit and persistence was way more
indicated or as a correlator than any
other characteristic having talent for
things it definitely did help but the
absolutely biggest correlator for
success was just going at it and working
on it statistically that is what matters
when I saw the study I initially got a
little bit suspicious that okay but
maybe the talented kids arias more
persistence and persistent and greedy
because they are talented but they
actually disprove that they actually
showed in the the extra figured out that
talent does not cause persistence and
they even found a slight negative
correlator so if you’re talented it
might actually cause you to
we ought to be a little bit less
persistent which is interesting but it
might be related to like the fact that
you feel like since you have talent you
feel like that you are entitled to
success and when you hit a wall over
your first wall you you’re not capable
to deal with that because you feel like
it’s due to your identity who you who
you are I am that you should succeed
anyway great book Angela Duckworth grit
finally I would like to talk about
processes and habit because I don’t
think that persistent is some magical
emotion that just arises in you I think
it’s a to a large degree habits and
process I did a Q&A with my friend David
and this is one of the questions that
came up but I want to talk a little bit
more about it it’s very important to
develop your professional habits and
processes for instance when you
encounter a problem that you don’t know
how to solve like oh we’re gonna do this
thing with the database we’re going to
request this thing and we don’t or maybe
even don’t know what database to use or
we may be used maybe we even don’t
clearly know what the problem is when
you’re faced with a challenge where
there’s no clear path forward you need
to know what to do whenever I encounter
a bug I kind of have these motions that
I run through at least these thought
processes that I’ve developed over the
years I often try to you know it’s going
to the code and find the issue and
sometimes that works but mostly doesn’t
and I feel that familiar sense of
frustration creeping in and at that
point it’s so if it’s easy to just go
hit the coffee machine or usually the
the more common response that is kind of
sort of ok it’s too just like unassign
yourself from that bug and then start
working on another bug somebody else can
deal with that bug but then I think that
if I’m on a good day I
yeah I think that this is okay this is
this is your use to this this is or it’s
always like this let’s just read and
start thinking about the problem like we
usually do in the case of a bug I
usually try to just list a lot of places
where the bug might reside I guess
brainstorm a little bit and then I jump
into these parts of the system and I
start adding breakpoints or console logs
and I try to like narrow down the field
where where I think that things might be
going wrong I add checks here that seems
like okay the data is correct here the
data is correct here the data is correct
here okay but what about at the end like
the data is correct here the data is
still correct here the data is correct
here okay here here is this is the area
where things things are failing mix
let’s try to narrow that down until you
find the bug sometimes the problem is
just big maybe you’ve got a big project
description from from the organization
maybe like it just has kind of like it’s
been like a game of telephone through
the organization and the the assignment
that you’re given it’s just not really
clear it just passed forward is not
obvious you don’t know why you’re doing
it and in that situation you just need
to take a step back think about this
problem what are we doing why are we
doing it and try to write that down and
talk to the people involved is this what
you want me to do it’s kind of different
for every situation but the important
thing is that you develop these habits
and these processes to protect you from
frustration so that you have something
to cling on to once the frustration
train hits you in order to have
perseverance you also need to manage
your mood and energy in movies and to
degree in professional life we tend to
glorify these crunches a bit you know we
we just okay we need to get this out a
door on Friday yes we are doing coffee
and
eat pizza and stay and work all night
until it’s done BAM it’s out the door
let’s have cake and you can do that
that works you can you can do that for
quite a number of times because before
that starts wearing down on you but
eventually it will you will break and it
will a morning will come when you
suddenly just don’t feel like getting
out of bed and then you force yourself
to anyway you do that for a couple of
weeks and then you suddenly can’t get
out of bed
development is a marathon not a sprint
it’s important that you have like this
sustainable productivity you need to be
like you can’t be this person that is as
low productivity for a long time and
then like a burst of productivity at the
end or project because of panic you need
to be this person that has a medium
level of productivity all the time don’t
skip lunch get a standing desk don’t sit
around too much take a walk around
lunchtime so that you get your energy
levels up drink plenty of water and if
you’re you’re feeling down or sick make
sure you that that you deal with that
and don’t try to just push through it
have a time when you get into the office
every morning know what you are doing
make sure that you know how to get
started quickly don’t start by checking
email because you will be distracted
it’s good if you have decided the day
before what it is that you do like at
the start find a system that works for
you that makes you persevere for a long
time oh by the way there is this book
about solving complex problems that is
called how to solve it it’s great I’ve
linked it in the episode description
that’s it that’s what I have to say
about perseverance it’s the first
episode in this series of eight
important habits for a software
developer
you have us watched an episode of fun
fun function I release this every Monday
morning Oh 800 GMT but if you don’t want
to wait that long you can watch this
episode that the machine learning
cyborgs of google’s have determined is
optimal for you
I am mpj until next Monday morning stay curious