So you want to become a full-stack developer...
Businesses love to hire full-stack developers. But with more options at every place in the stack, becoming a full-stack developer seems harder than ever.
If you hope to break in to the industry, these job postings can leave you feeling lost and hopeless. After all, by the time you learn all of the technologies that these businesses require, a whole new set of technologies will have replaced them. What's an up-and-coming full-stack developer to do?
First, define your MVP
I don't mean the "minimally viable product" that you hear all over the place these days. I mean "minimally viable proficiency."
Do you know what full-stack means in the first place? If not, you can't begin to learn everything you need to work as a full-stack developer. You'll spend your time learning anything and everything that comes across your path... which might work, but which will undoubtedly take a lot more time than learning a single stack and then building on your knowledge.
You can work on many different kinds of stacks. I'll focus on web applications, because I've spent the majority of my career working on them and I know this stack best. For web software, I define a basic stack as follows:
- one general-purpose programming language (Ruby, Python, PHP, etc)
- one relational database system (Postgres, MySQL, Oracle, etc)
- one web server (nginx, Apache, etc)
- one deployment operating system (Ubuntu, CentOS, FreeBSD, etc)
- one version-control system (git. don't bother with the etc)
If you select one technology for each part of the stack, you can create a lot of useful software, all on your own. This will make you valuable to any business, and give you the option to create software independently if you want.
Many people ask, "What's the best language to learn?" or "What database should I use?" and in my experience, it really doesn't matter which one you pick first. Sure, each has its benefits and drawback, but as long as you choose reasonably popular technologies then your initial choices won't make a huge difference. By learning a whole stack, you will gain the context you need to learn alternate technologies for each part of the stack.
Learn by doing, always
I admit that I've read books and blogs, listened to podcasts, and watched screencasts as much as anybody. I have learned a lot from them... but I've learned a lot more whenever I've actually sat down to create software, no matter how frustrating or painful I sometimes find the experience.
I listed eight components of a minimum stack for web development... you have a lot to learn! Every minute that you spend on blogs, podcasts, and screencasts means a minute you don't spend creating software.
Employers want to know that you can solve their problems. Blogs and podcasts don't solve problems for employers. Following blogs and podcasts can indicate to employers that you have an active interest in technology... but a list of projects you've worked on flat-out demonstrates it.
If you build and ship even a simple software system, you will solve far more problems than you ever will by passively consuming educational content. You will develop core skills that you need to succeed as a developer - reading documentation, grokking error messages, and learning the capabilities of the tools available to you.
At the end of it, you will have a system that you can show people. You'll have made decisions and tradeoffs, and you can talk about them with people. You will understand what parts work well, and what parts don't work so well. You'll have advanced your abilities in a way that you can grow on.
Build on your new knowledge
Learning each part of a stack sets you up to learn new options in that stack. If you know one general-purpose language, you can learn a second quite easily. Your third and fourth languages will seem like pieces of cake. Knowing several general-purpose languages only makes it marginally easier to learn a database system... you've learned related skills like reading documentation and grokking error messages, but you don't have any of the core context needed to understand databases.
Don't fall for the trap of thinking that if you know three languages, it will give you three times as many job options. You will compete against a pool of developers in each language. If those developers know databases, or deployment, or any other part of the stack, and you don't, then you won't compare favorably to any of them.
If you know every part of a full stack, you have real options. You can create valuable systems all on your own - no job required. You can work with businesses that have yet to define a technology stack for themselves. You can compete with other developers in your chosen language, confident that you can work on any part of the stack. Most of all, you can learn alternate technologies to augment your existing skills.
When you know all parts of a stack, you can get stuff done.
You won't have to worry about the next hot thing. Businesses always want to hire people who can get stuff done. You'll have the context and abilities you need to learn the next hot thing, and add it to your resume.
But what about...?
Of course, my minimum stack rejects a lot of the stuff that's hot right now. I couldn't call it "minimum" if I included everything, now I could I?
I don't mean to suggest that you should never learn the following technologies... but I strongly feel that learning these before learning a minimum stack will set your career back several months or years. By all means, learn them after you've gotten a handle on a basic web stack.
iOS and Android
Nope. iOS and Android operating systems both run web browsers just fine.
If you want to write games, or native apps, then learn to program iOS and/or Android.
The web won't go away any time soon. You can create valuable software for the rest of your life without ever worrying about native operating systems.
Nope. Most programmers and businesses I've met that use NoSQL, do so because they don't know how to use SQL properly. Mean? Maybe. Sad? Yup. And totally true.
NoSQL can make a lot of sense in a lot of use cases - but if you haven't worked professionally as a developer, then you likely won't have access to the sorts of use cases where NoSQL technologies make more sense than SQL databases.
SQL won't go away any time soon. You can create valuable software for the rest of your life without ever worrying about NoSQL technologies.
You can have a lot of fun with machine learning, but once again, you simply don't need it to in order to create valuable software.
Your action plan
Now that I've discussed what a full stack looks like and why you should learn one, I want to lay out an action plan for learning.
- Learn basic HTML - code up basic pages, link between them, etc
- Deploy your HTML site to production - a hosting provider, heroku, etc
- Learn one backend language and integrate it into HTML - if you use a web framework, make it the lightest one you can
- Set up a virtual server for deployment - AWS, digital ocean, linode, etc
- Deploy your dynamic application to production
- Learn one relational database system and integrate it in to your app
- Learn basic CSS to make it look good
Congratulations, you've now made it to v1.0 as a full-stack web developer. Upgrade yourself by learning new technologies as your interest and energy compel you.
I suggest setting up a server on Digital Ocean. You can run a server for only $5/mo - and you can get $10 in DigitalOcean credit via my referral link.
Put all your stuff on GitHub, and you can show it off to potential employers. You can tell them the story of how you created software, of how you learned to create software, and how you plan to continue learning to create software.
Most of all, you can now create software on your own… and you never have to stop.