A Letter to Myself
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.