How to Become a Developer Part 1: Why?
April 15, 2017
I blogged recently about what I tell people when they say they have an app idea, and this post is in a similar vein. I frequently get asked something like, "How do I become a developer / get started in coding / learn how to make apps?"
It's a good question, and it's one I'm always happy to answer. Learning to program has made an incredible difference in my life, and I love to help others have the same opportunity. For the context of these posts, the question I'll be addressing is specifically, "How do I become a full-time developer?" Other variations of this question will probably be addressed through this, but I'm going to focus on how to make it your full-time career.
Before I point you towards a list of resources and a set of things to learn, I want to first talk about a few things that I don't hear discussed as much:
- Why should you become a developer?
- Why shouldn't you become a developer?
- What skills do you need?
- What skills do people think you need that you don't actually need?
These are the "why before the what" questions. Before you start down this path, it's important to set good expectations. This will help you plan correctly and minimize frustration/disappointment. This post addresses the first two points, and the next post will cover the last two.
But don't worry, after this we will talk about very concrete steps to becoming a developer. But first things first:
Why should you become a developer?
There's a common perception of developers as these silicon-valley-hot-shot-super-star-wizards that make six figures a year, don't play by the rules (shorts and t-shirt everyday baby!), and do it all from their bedrooms or their high-tech-space-age-looking open floor plan offices with ping pong tables, cold brew coffee, and beer on tap. But for the most part, I would say that is not the average case (unless you work for a Silicon Valley company—then this is quite literally the case). But, it's also not unobtainable if that's what you're after.
Now don't get me wrong, there are some great perks to being a developer, and we're about to go through them. I personally think there are two broad categories for reasons to become a developer: practical reasons and personal reasons.
Practical reasons
Reason #1: Salary potential
"Practical" reasons to become a developer are the cold-hard facts about life as a developer. They're reasons like salary and career or market potential.
Software development careers rank among the top of the best paid careers to have, and the reason is due to the power of software. Software broke the system of things that used to require cost, effort, and time. There used to be a person (or team of people) that would "crunch the numbers" to tell you if your business was doing well or not. Now there's a dashboard you just hit refresh on. Instead of a customer driving to a physical store, physically searching through the store, and physically talking to a sales associate they're paying $X/hr, you can just click a few buttons on a website that now reaches millions of people vs. the thousands your physical store can touch.
Extreme efficiency, information, and customer reach has changed the game of business forever, and we know this. Compare Amazon to Barnes & Noble. The incredible amount of business value software brings in literal cash dollars is why developers are paid so well. The value of software is so high that companies are throwing lavish bribes at software engineers so they can make 100x or 1000x what they pay their developers in profits.
(There's another point in here about venture capital funding and the startup cycle, but I'll avoid that here.)
So that's point #1: software development pays well. I'll let you look up the median numbers for your area, but I doubt you'll be disappointed.
Reason #2: Market potential
As of this writing, our world is saturated with software, and it's only becoming even more saturated day by day (smart toothpaste holder, anyone?). If you go to buy a new refrigerator today, most of the higher end models have Twitter built in. Why would I want that? I don't know, but apparently most people do. Regardless, almost everything we use today has some sort of software component—from our car's dashboards, to our phones, our TVs, our thermostats, etc. Software is everywhere. Where there is software there must also be software engineers.
And while the technology and methodology of software will certainly change in the future, someone's gotta use the new stuff, and someone's gotta make the new stuff in the first place—at least until a super AI takes over the the world. But hey, someone's gotta create that super AI. Might as well be you!
So here's point #2: software development is here to stay. There will be no shortage of jobs and career choices to be made.
Reason #3: Bootstrap potential
This won't apply to everyone, but for those of you who are looking to start a business, knowing how to program is an incredible asset. I really think learning to program is the business degree of the modern age. It's just so versatile.
Before the proliferation of the Internet, if you wanted to start a business or build a product, the chances were you needed a good chunk of startup capital. Money for renting physical space, purchasing equipment, creating inventory—the list goes on and on. I'm not saying you couldn't bootstrap it as "two founders in their garage" (it has obviously been done), but the cost of starting a software business is so incredibly low and risk free when you're the one doing the programming. All it takes is something you probably already have (a laptop), and a negligible amount of service fees (servers and such). However, if you're a business person looking for a programmer, you're in a tough spot (I will probably write about this too, but the "build an app" article covers parts of it).
Also, when a software business does become successful, the profit margins are insane. Your costs of goods and services is almost zero compared to the revenue you can bring in.
Here's point #3: bootstrapping a software business yourself is low risk and high reward.
Reason #4: The path is visible
We'll talk more about this when we get to the "ok how do I actually become a developer" part, but it's worth mentioning here that the path to becoming a developer is very apparent, and it's wide open. If you have a laptop and an Internet connection, you can be become a developer. Every day there are more and more free resources available to learn how to program.
And the best part is, it's a risk-free path. There's no need to quit your day job or drastically alter your life—you can do it all from the comfort of your home whenever you have some free time.
Again, we'll talk on this more later, but I don't want to set a poor expectation of what it will take to become proficient as a developer. Learning how to code at a full-time-job proficiency takes a lot of hard work, but it's not hard. What I mean by that is that the path to become a developer isn't a "hard problem." It's not something full of unknowns—something unsolvable or un-understandable (think theoretical physics—they're asking questions they may never find an answer to). But it does take a lot of hard work. I hope you can see the difference between something being hard, and something that requires hard work. To say it another way, it's not outside your ability to grasp or understand—if you're willing to work for it. That's why I titled the beginning of this section "the path is visible." The path is there, but will you follow it? Anyone can, but not everyone will.
I was beginning to feel a bit like Gandalf there talking about paths and such—so moving on! Reason #4: becoming a developer is "easily" achievable with hard work.
Personal reasons
Now that we've looked at the major face-value reasons, we can move onto the part that I think is really the most important: the "life" reasons to become a developer. After all, life isn't just about dollars and cents, pros-and-cons-list reasoning and decision making. Your career is a personal choice. It's something that you will spend the majority of your life doing—so you should enjoy it. It should bring a level of fulfillment to your life. And for me, creating software brings a lot of personal enjoyment.
Reason #5: Pure creation
I think humans are creative beings. I think creation and creativity is hard-wired into us—and when I say "creativity" I don't just mean the "creative arts" (music, art, writing, etc.)—I mean anything that takes something that wasn't there, or wasn't there in that configuration previously, and brings it into existence. Art can be creative. Process can be creative. Mentoring can be creative. For me, building software is inherently creative.
It's designing user flows and experiences in a very visual way—changing shape, color, or texture. Sometimes it's developing an algorithm (programmer-speak for "steps to accomplish something"), and sometimes it's creating a business. Whatever it is, when we program, we make something from nothing. We literally tell pieces of physical matter how to behave and move based on our instructions. I mean that's kinda cool right?
Whatever area of software you end up in (and we'll talk more about these areas in future posts), it will be inherently creative. It can be so engaging that you lose track of time and wonder where the past few hours went.
Reason #5: Coding will scratch your creative itch.
Reason #6: It's domainless
One of my favorite things about coding is that it is domainless. Programming is a tool, and it's a tool that can be applied to anything else. By becoming a developer you're not signing up for a life of poorly-lit basement cubicles—typing away on terminals with black backgrounds and neon green text (unless you're into that, and then go for it!). You can apply programming to whatever you're already interested in.
Like music? Use programming to write music, analyze music, or share music. Like dogs? What do you like about dogs that is too tedious or impossible to do with human effort (tracking, measuring, communicating, etc.)?
Whatever you like, use programming on it. I think you'll find that, for one, it's fun, but two, that it makes you better/stronger/faster/more capable at what you're already doing.
Reason #6: Programming isn't just for nerds doing nerd things, it's for everyone.
Reason #7: Learn to "Think Different"
One side benefit of learning to program was it changed the way I think about problems and solutions. Creating or changing software requires thinking about the system at a high level—how all of the major pieces connect—and how the internals of each piece works within itself. Being able to jump back and forth between these levels of details can be challenging at first, but it's a very useful skill.
To keep from being overwhelmed, software developers everywhere create things called "abstractions." Since our minds can only hold so much at one time, a common tactic for programmers is to "abstract away" details to allow them to focus on one specific area without being bogged down with extraneous detail. Instead of trying to remember every detail about how something works, we simplify the system by saying, "Ok, I know if give it this thing I will get back this other thing in return. I don't need to know how I got back this other thing —I just need to know that I will get it." This allows for a pushing-and-pulling-away of details as they are relevant. It's seeing the connection between things—as well as the details of those things when needed.
I find myself using this type of thinking in many areas of my life outside of programming. Knowing when to look at the forest vs. the trees and the relationship between them is very useful for effective decision making.
Reason #7: You will train yourself to see things for what they are, and for their connections to other things. This is a great problem-solving skill to have—applicable almost everywhere.
Why shouldn't you become a developer?
We've talked about reasons why you should become a developer, but what are the reasons you shouldn't? These are pretty self-explanatory, so I won't go into too much detail on them:
#1: You don't like computers
Notice I didn't say you don't understand computers. I said you don't like them. If the thought of working on a computer all day makes you nauseous—steer clear!
#2: You don't like working from a desk all day
Some people just don't like sitting at a desk all day—and as a developer—I totally get that. I don't like sitting at a desk all day. On top of the fact that it's terrible for your health—it can be boring. Humans are supposed to be active. It's hard to sit still all day. Of course there are things like standing desks that can help, and I try to take a lot of breaks to get up and move around, but in the end if you don't like working a desk job you probably won't want a developer job.
#3: You don't like learning new things
Software is evolving at a rapid pace. Even five years from now the tools and techniques we use to program could be drastically different. It's not that many years ago that we had computers that took up entire buildings that you fed tape. Constant learning is a core practice of being a developer. So if you hate learning, you'll probably hate development.
A notable exclusion from that list
You might have been expecting one of the reasons to not become a developer is if you're bad at math or science. Maybe you deem yourself as "not smart." This will be an entire section of the next post, but I wanted to address here as well because it's vitally important:
Level of intelligence, "smarts", or math/science skills are not required to become a developer.
I'll say it again: development is not exclusive to smart people or people who were good at math and science in high school. I'll explain why in the next post, but don't pre-exclude yourself based on this. Development is for everyone.
I'll stop here, since this is getting kind of long. I hope this encourages you to pursue learning to program. I'll tell you how soon.
Thanks for reading.
John