CareersWeb Development

Never Too Late: From The Internal Revenue Code to Computer Code

It was the spring of 2014 and things were not looking so bright. After twenty years as an attorney, I had reached the point where I dreaded going into the office each day. I had pretty much accepted the fact that I was going to be miserable for the remainder of my working life, and with two children soon to enter college, my “working life” might well be however long I was able to rise from the bed in the morning.

Such was my frame of mind when I came across the concept of “coding boot camps.” Articles in the general press were telling stories of bankers, truckers, even attorneys like me who were going from little or no previous experience with computers to gainful employment as developers, designers, or similar positions in only a few months. Although skeptical it could be that easy, it did seem worth looking into; at the least, there appeared to be a viable path to a development/programming career that didn’t include another college degree.

Now, almost six years later, I am working at the job I was dreaming about when I decided to take the leap, and can honestly say that my worst days at work now are better than my best days were in my two decades as an attorney. Looking back on my experience, I can’t say that it is for everybody, nor can I deny that it had its share of stressful moments along the way, but I am unreservedly happy that I took the chance and made the career change. In this post I will describe the path that I took in my transition from attorney to developer; if nothing else, I know that these steps can work, because they worked for me!

In 2014 I was 53 years old and had been working as an attorney for about twenty years. I had little to no formal experience with computing or web development although it was something in which I always had some interest as something I would like to look into if I had the time.

So, without the burden of any actual knowledge of what I was getting myself into, I began looking into the possibility of learning computer programming and quickly arrived at what seemed to be a momentous decision – which programming language should I begin learning? What if I put all my time and effort into learning a language that currently seemed to be the future but turned out to be a passing fad, one that had passed on by the time I had mastered it? After a bit of research that left me more confused than enlightened, I chose to start with JavaScript. If nothing else, I knew that I could write it in a plain text editor and make it run in a web browser. Best of all, it wouldn’t cost me anything!

Looking back, however, I no longer view this as a decision worth the stress it had inflicted upon me. The points of syntax of a particular language are trivial compared to the more general concerns of learning how to approach coding problems and how to efficiently handle tasks. Learning these skills in any language would allow me to switch from one language to another with a relatively small amount of discomfort; in fact, my experience has been that one cannot fully appreciate the strengths and weaknesses of any one computer language without exposure to how things are done in a few other languages.

Having decided upon JavaScript (which could as well have been Java, or Ruby, or Python), I began trying to learn it! What I found was an abundance, perhaps even an overabundance, of introductory material, little of which was organized in a coherent way. Frequently, explanations assumed exposure to concepts or terminology not previously covered or lessons described individual points without providing any understanding of the context in which they operated. After a couple of weeks, I felt completely overwhelmed by a thicket of keywords, functions, and jargon, and most of the explanations made little sense except, as I realize looking back upon it, to those already in the know. In particular, during those early days I felt like I was simply rote copying and the “big picture”, if one existed, was simply that of a mountain covered in an impenetrable fog. Then, a friend suggested I look into an online course for an introduction to computer science. CS50 is Harvard University’s gateway CS course and it does an incredible job of guiding novice students through the “big concepts” of computer science while introducing actual coding. It begins in the C computer language (the root from which many modern coding languages have sprung) before moving to projects involving JavaScript, Python, HTML, etc.

With several months of novice coding and about half of the CS50 course under my belt I decided to take the plunge and enroll in a “boot-camp” style coding program. Coding boot-camps are programs built upon a common perception that the traditional educational system, i.e., university computer science programs, are simply not producing sufficient numbers of graduates with the skills needed by employers of all kinds in computer related fields. I hope to revisit coding bootcamps in more detail in a future post but for now will simply summarize by saying that my experience was very good. The chief advantages were being able to focus exclusively learning to code and being part of a group presenting a wide variety of backgrounds but a common desire to learn. To be honest, everything in the actual curriculum could be found elsewhere on one’s own; the real value of such a course lies in knowing what material to leave out and what material will deliver the most benefit from the students’ attention. But learning it on my own would not have replicated the experience of working with the other students, comparing approaches, or seeing what tools they use.

Finally, about a year after the journey began, I was out looking for my first employment as a developer. My experience has been simply that there is a need for people with coding and problem-solving skills and that if one can show they possess those skills, as well as an attitude that is open to continually learning new things, then there is plenty of opportunity to get a foot in the door, even for older candidates. This is not to say that I did not come across any of the well-documented ageism that permeates much of the tech sector; there are plenty of bad experiences to be had but the market is large enough to find what one wants with some patience. But the key is showing a passion for software development and by far the best way to show that is by writing lots of code! Fortunately, it is easy for a developer to make his or her work easy to see by recruiters or potential employers at little or no cost with code sharing services such as GitHub, or web-hosting services that have no-cost options for small-scale projects. One option that appealed to me was visiting coding challenge websites that allowed me to work on problems of various degrees of difficulty, so one can get started working on problems essentially from day one. In fact, I enjoyed doing those challenges so much that I eventually became the top-ranked out of more than 100,000 participants on one such site. The primary lesson I learned, however, is the importance of actually coding and putting the techniques one learns into practice. Even tiny projects as simple as making a Fahrenheit to Celsius temperature converter not only provide excellent practice but also evidence a genuine interest in coding to a prospective employer.

And so, five years later, I am doing exactly what I set out to do and having a great time doing it! Again, I cannot claim that my experience will be relevant to everyone, but I can say unequivocally, from personal experience, that the career switch can be made. If you are thinking about making such a leap, here are some actions to take or things to keep in mind that might make your journey a bit easier:

  1. Do not be overly optimistic in planning your timeline. Claims that someone with no programming knowledge can be a working developer in eight to twelve weeks are likely wildly optimistic. Predicting the time necessary is highly speculative, but I can say that in my case, with almost no prior coding experience but a documented proficiency in logic and math and a strong commitment to the task, a year was about what I required to get to a reasonable level.
  2. In the long run it is not going to matter what programming language you begin with. Where you start is not nearly as important as when you start (the correct answer being, “now”). If you are not sure, I suggest JavaScript; it will be as likely as any language to start you on a good path. It is the language that is behind almost every web page you will ever see on the internet; in addition, it is used in an ever-growing array of contexts these days, from back-end servers to mobile devices, to the internet of things.
  3. In addition to learning the mechanics of coding, take some time to learn some basic computer science. There are two reasons for this: first, it will greatly improve your abilities as a programmer if you know some of the “big picture” and second, it will help you “talk the talk” in job interviews which will likely be given by someone who has a CS degree and would like to show it off. For a challenging but doable experience, I cannot recommend Harvard’s CS50 Introduction to Computer Science (https://online-learning.harvard.edu/course/cs50-introduction-computer-science) highly enough.
  4. Absolutely as soon as possible, learn how to use Git and Github, and start creating projects that others can access. Do not wait until you are able to create large-scale, production-ready applications. If all you know how to do so far is create an array and reverse the order of its elements, then create an “array-reverser” app. Put what you learn into practice, and you will learn it much better.
  5. Find others who are learning programming as well. Not only might they be sources of support and encouragement when things are difficult, but there are almost always multiple ways of approaching any programming problem, and seeing how others do something can be great experience.
  6. Finally, keep a positive attitude! A complete beginner will often start out making lots of quick progress and then, perhaps a couple of weeks or months into the journey, start to realize the size of the undertaking, and notice that everybody else seems to know much, much more than they. At that point, a large number will decide perhaps it just isn’t for them. At that point, take a deep breath and remember two things: first, the important word in the phrase “beginner programmer” is “programmer” and second, due to the rate of change in the the tech world, everybody is a beginner!

Join our team to work with Fortune 500 companies in solving real-world product strategy, design, and technical problems.

Find Your Role

Tree of the Month: An Interview with Jenny Bramble, Senior Software Test Engineer at WillowTree’s Durham Office

This is the first installment in our monthly blog series Tree of the Month, which...

Read the article