What I’ve learned, and am still learning, from my journey into web development so far
Last June, I came up with this crazy idea to learn to code and start a career in tech. I had just finished a one-year post-doc teaching history to college students, and I really had no idea what I wanted to do with my life. I felt burned out searching for jobs in a field that is offering fewer jobs than it had during the 2008 crash, and even fewer jobs that don't require candidates to uproot in return for no more than a one-year contract. I wasn't sure what I wanted to do next, but was curious about coding.
As a teacher, I had already started to wade into the shallows of the digital pool. I had incorporated GIS StoryMaps into my classes, and I was starting to play around with Esri software, in the hopes of starting a career as a GIS Analyst. I had learned that an ability to program was useful for a career in GIS, and I figured that I would probably be learning a little bit of Python at some point. A family friend also suggested I consider a career in software, given my background with learning languages. I had spent most of my life thinking that coding was only for super-smart math nerds with CS degrees and/or their own software companies, but the more I thought about the work that coding requires, the more it seemed to align with the strengths and passions I had cultivated in my humanities background: creativity, research, critical thinking, problem-solving, and persistence. Soon, I was drawn in to the world of code. Instead of being a GIS professional who could do some programming, I realized that I wanted to be a programmer who could do some GIS.
I started to look for a way to learn the skills necessary to make this into a viable career. I glanced at coding bootcamps, most of which offered grandiose promises of instant employment upon finishing, but also found FreeCodeCamp (FCC) which offered (as I saw it) similar prospects for someone with enough self-motivation. Through FCC, I also happened upon an article about landing a developer job in four months. Having recently earned a Ph.D., I figured I had enough ability and drive to achieve this goal easily. I told myself that I'd plow through the FCC curriculum, and by early 2019 I'd be living the sweet, sweet life as a junior-level web developer! Maybe I'd even be writing my own article about how I managed to get my first developer job!
It's been six months since I made that decision. As you may have guessed, "the job" hasn't come yet. The truth is, teaching myself to code is the hardest thing I've ever had to do. Yes, including earning my Ph.D. Graduate school was no picnic, but I benefited from the structure of the school year, knowing what I had to do, when I had to do it, and what I was working toward in the long run. Plus, I was funded, so even if I wasn't making the big bucks, I had a regular source of income. Conversely, over the past six months, I have had to provide myself with the structure that was automatically there for me in graduate school. At the same time, I haven't had the regular (if modest) revenue that my graduate stipend (or later, my one-year post-doc salary) offered. I've often felt like I've been finding my way in the dark.
Yet even though my self-taught developer plan has turned out to be longer than I had intended, I am still loving coding, and I'm still keeping on the journey. I've already learned lots, not just coding skills, but also more about my own motivations, challenges, and aspirations. I thought this would be a great time to share some of my insights.
These are the pieces of advice I would have given myself from six months ago. Perhaps they'll be the same pieces of advice I'll need to remember six months from now. If you're thinking of taking up coding, perhaps these will be of use to you, but I think a lot of this applies to any sort of major career transition. Everyone's experience is unique, though, so only take what helps you! 😉
1: It will take as long as it will take.
It's easy to read bootcamp ads that say things like "Go from [insert crappy job] to Software Engineer for Google in 8 weeks!" and think that, with enough self-motivation and determination, you can achieve similar results in the same amount of time (give or take a few weeks). And if you can, hey, that's awesome! But there's no set time to "learn code," particularly since most every developer I've ever talked to, regardless of seniority, has remarked that they are still learning. Now I already knew that pursuing work in tech meant that I'd always be learning, but it's more than that: you can't even put a time-frame on learning enough code to land a bottom-of-the-ladder entry-level developer job. If you keep working at it, it's probably more likely to work out than not. But you can't say whether this will happen in eight weeks, eight months, or eight years. (Let's hope it won't be eight years, though!)
2: Take care of your life, then take care of your code.
At the moment, I'm in a relatively fortunate position, since my wife has a full-time job with benefits. So while I'm trying to build a new career, I don't have to worry about all those pesky concerns like healthcare, food, rent, bills, etc. I'm willing to acknowledge that I'm in a very privileged position, and I'm grateful for it.
Here's the thing, though: even in my relatively comfortable situation, I've found that I still constantly worry about money. Yes, we have enough for now, but my wife's salary isn't enough for us to last forever on just her income, particularly if we want to think about long-term things like a family and retirement accounts (which seem to be getting more expensive by the minute). On top of all this, I've been spending a good deal of time, money, and energy managing chronic pain (a relic of my constant reading and typing in graduate school) and caring for an aging cat.
If you want to learn to code, especially if you're going the self-taught route, you'll have to deal with the Catch-22 of job hunting in today's market: you need experience to get money, but you need money (and time) to get experience. The quickest path to a job may be moving to a tech-heavy metro area and immersing yourself in an intensive 8-week bootcamp where you code for 12 hours a day. If you want to do this, go for it. But first and foremost, you need to be honest with yourself about what you need in life and what the best plan of attack is to get it. If your finances, your family life, and your health can't afford such an intensive program, you need to do the best with what you have. This may involve taking on a part-time job somewhere to help bring in money and to give you structure while you learn. It may even involve committing to work full-time and devoting evenings to learning code.
Everyone will have a different balance, and I'm still working on mine. But for me, it's been essential to remember that coding is just one element of a whole variety of factors that bring my life satisfaction. Work hard, code lots, and be persistent, but don't forget that you're more than your code.
3: Listen to yourself before anyone else.
If you're going to learn to code, it's essential to remember why you're doing it. This is a fun path, but it is also a very difficult one. Constantly learning means constantly feeling like I don't know what I'm doing, and it's incredibly easy to freak out and/or burn out. To keep moving forward, it helps to remember why I like coding: the creativity of building things, the mental challenge of puzzle-solving, and the opportunity to make more money.
I've also found it important to acknowledge that my interests develop as I learn more. I didn't start graduate school knowing exactly what I wanted to write for my Ph.D. dissertation, and I shouldn't expect myself to know exactly what I want to code for the next 3-5 years of my life. When I started on this path, I wanted to learn Python and get into data science, in order to follow my GIS interests. Over time, I've found myself more and more drawn to front-end web development, because I enjoy the process of web pages and apps. I also enjoy thinking about aesthetics, so I'm increasingly curious about UX/UI design.
There are a lot of different skills to hone, and a lot of different projects to work on. Thinking honestly about what you want, and listening to that little voice inside your head, will help you figure out how to follow your passions in code.
4: Get organized!
For me, the last year has been filled with harsh truths. Perhaps one of the most shocking truth for me has been that I'm not nearly as well-organized as I'd like to be. As a teacher, I was always able to keep track of records on excel spreadsheets, and I've managed to stay on top of deadlines well enough through most of my life. In code, however, there are so many different things to look at, so many shiny objects to capture my attention, that it's been incredibly difficult to determine how best to manage my time and energy in order to achieve short-term and long-term goals.
There are a few apps that I've found to be particularly helpful in organizing my tasks and projects. I track how I'm spending my time with Hours, and I've recently signed up for Trello in order to create boards for various projects, learning goals, people to contact, etc. Pocket has been a great resource for the hundreds of websites, apps, and articles that I find: instead of keeping 20 browser windows open at once, I can save pages with specific tags, so I can look at them later.
I imagine organization will always be a place for me to improve. With so much to do, and so much to learn, and so many sources to go, it's particularly essential for learning to code.
5: Get Out There!
Every piece of advice I've read about finding a job, regardless of field, talks about the importance of networking. I used to always groan at this kind of advice. As an introvert, I'm most comfortable on my own, or with people I know, and going out and meeting new people has never been my strong suit. I think that is part of what appeals to me about coding: the work allows you to spend a lot of time in your own head, trying to figure out the best way to design, build, and debug for a project.
Over the past six months, though, my biggest motivator has been interacting with other people. I love being in my own head, but if I had spent the last half-year sitting at my desk working on algorithms all day, I probably would have burned myself out.
If you want to learn to code, particularly if you're not doing it through a formal degree program or bootcamp, I can't tell you how essential it is to find people to help you on your journey. The online communities of FCC, dev.to, and CodeNewbie are great, and I recommend following them. Even more important, in my experience, is finding people to talk to in person. Look for meetups in your area. Personally, I've been fortunate that there are welcoming communities in my hometown of Knoxville (huge shout-out to Code Connective and KnoxDevs!).
Everyone says that networking with people is a crucial part of landing a job. I hope this will also be the case for me, but in my experience so far, networking is a lot more than just a means to an end. Meeting with other developers has given me invaluable access to feedback, collaboration, direction, motivation, and even commiseration, as I have pushed forward on this path. I may be a self-taught developer (in that I don't have a CS degree and haven't been to a bootcamp), but I'm definitely not doing this alone.
I hope some of this has been useful to you! If you're in a similar situation, whether learning to code or on another career path, what things have you learned that help you move forward?