I often fall into the bad habit of getting nostalgic. Recently I’ve been
reflecting on a particular event five years ago. At the time I was working as a
data analyst, performing various automation tasks for data collection.
Although I had been coding for a couple years, programming wasn’t a major part of my job
or expected duties. Despite this, an urge to improve my skills grew in me.
The whole world of software was intriguing and interesting, and I wanted
to be a part of it.
In particular I remember reading Bob Martins, “Clean Code”. The book only
fanned the flames in my heart to become a professional developer, working on a
“real” development team. I distinctly recall a conversation with my wife,
explaining my desire, and dissatisfaction with my work as a data analyst. I’m more
than grateful for her understanding and support as I made the uncertain
switch in careers.
Fast forward five years and I can proudly say I have achieved and surpassed that goal. This
month, I decided to take this nostalgia and try to turn it into something
productive. I’m writing a letter to my past self, as advice and encouragement.
My hope is that, although I can’t actually send the letter to the past, it
might be of some benefit to a reader who is in a similar position now. At the
very least, perhaps it will help me as I move forward with new goals. While them
letter is specific to my situation, I hope that with some reading between the lines
it can be useful beyond the particulars.
So you want to become a software developer. Having traversed that path before,
I thought I could give you a few bits of advice to help and encourage you on your way.
Some of these were passed on to me from others, and some I had to learn the hard way.
Focus on Core skills
The first bit of advice is to focus on core skills. In your excitement and
impatience to make a transition you have probably looked at a few job postings
and compiled a list of skills that you would need to develop to be able to meet
those requirements. Most likely you saw that you will need to learn Java, or C#, and
probably some framework, like Spring, or .Net. You also probably noted some
technologies you needed to get to know. Perhaps Apache, or Nginx servers.
The problem is that job listings are probably the worst place to discover
what you need to know to get hired for a job as a programmer. Okay, that might
be overstated, they certainly have the requirements in there, you just have to
sift them out from the multitude of additional “requirements”. Listings are
almost always a “Wish List”, compiled by managers that more reflect the
technology in use at the company, rather than hard requirements for getting a
job. A few of the items are deal-breakers, but most are “nice-to-haves”, which
you can comfortably learn on the job.
So then what are the core skills you should master? They are mastering the core
concepts of programming. It is becoming talented in the craft.
For example: Rather than trying to learn a new or, heaven forbid, multiple
languages, focus on getting really good a one language. If you already know
Python, don’t fret about learning Java, or C# or some other language. That
might sound counter-intuitive. Right now you want to maximize the number of
jobs you can work for, and that means learning a high demand language. I can
assure you, that there are plenty of places that will hire a Python programmer to
program in Python. What businesses want is someone who can do that well, not
someone who is mediocre in five different languages.
This isn’t to say that you should avoid learning any frameworks. But everything
must be put in it’s proper place. The danger with frameworks at this stage is
that they can overshadow the core skills. They also will cause consternation
about which one is the best to learn. You might be fretting about weather to learn
Flask or Django or some other web framework, and which one will be the most
employable in the future. This is a distraction. Don’t worry about how employable
the skill will make you, worry about developing the skill. The skills and intuitions you develop
will transfer from one framework to another, making the initial choice irrelevant.
In short: The less you focus on employability, and the more you focus on raw
ability, the more employable you will become.
Don’t Get distracted
This next piece of advice is a cautionary one. While I would like to tell
you that you can immediately jump into a software job, it may be that your route to
becoming a software engineer isn’t direct. In fact, it most likely will not
be. Perhaps you will need to start out on a help desk, or as a Q.A tester
before you can work your way onto an engineering team.
What I want to warn you against is getting distracted from your goals. As an
example, let’s say that you are given the opportunity to start working on a
track that will lead you to becoming a DBA. There is nothing wrong with being a
DBA, but if that isn’t your goal, do not let the comfort of an currently available
opportunity get you to lie to yourself about what you want.
Avoid making choices that lead away from your goals, simply because they are
the first opportunity to come that get you to progress in any direction. Not
all progress is forward progress, and abandoning your desires out of the fear
of missing out on progress of any kind, will lead you to only becoming what
others want. Employers can worry about getting the right fit for the job, make
sure the job is the right fit for you.
Not every step will be direct, but make sure each one is deliberate.
Don’t be too busy
This last bit of advice isn’t about programming or professional development. It’s
about personal growth. Being a “self-taught” developer, and trying to break into the field often means
holding down a day job, and putting in hours of practice and self education in the off hours.
This can be really enjoyable when you are excited, and passionate about learning.
It is important to make sure that in your quest for further knowledge
and skill, you don’t become too busy to be kind. Make time to serve others
when the opportunity affords it. You will be surprised about far it takes
you. Making sure to take care of others, including your family, will
help ground you where you need to be to remember your goals. The limits on time that they
may incur will only serve to help you focus on the most important skills and not get
distracted with the immediate and fleeting.
Being preoccupied with your own self-importance, is a quick way to become occupied with things
of little importance.
I must now bid a fond farewell. I know you will make it, so you are free to take
or leave this advice. I already know what your choices will be.