What skills are necessary for a developer to call themselves full-stack? It’s a term you hear a lot, but one whose meaning is harder to pin down than a lot of people think.
Depending on the year, the number of full-stack developers is between 45-60% of the industry. There are more job opportunities, greater promotion prospects, more clout. It generally takes 6-8 years’ hard work to begin calling yourself full-stack. The technical definition is somebody who knows both front-end and back-end code, but it doesn’t shake out like that in practice: if that were true, every JavaScript developer would be a full-stack developer. What a full-stack developer really means is a renaissance developer—somebody comfortable with any job you throw at them. Somebody who specialises in 4-5 languages but is able to work with a variety of languages and platforms. How do I become a full-stack developer has an obvious answer that nobody wants to hear: you work as a developer for a long time. You pay attention, you learn. You’re methodical and patient. A lot of people enter the industry with aspirations of being a full-stack developer; a lot of people play cricket and hope to play for the Boys in Blue.
That said, if you’re looking at the industry and dreaming big, here’s a primer on the things you need to know before you can call yourself full-stack, and some guidance about where to start.
Frontend and backend: know the difference
What is a full-stack developer? Well, somebody who knows both frontend and backend. What are those?
Think about a restaurant. When you go in and order food, a waiter takes it to the kitchen, the kitchen prepares it, then the waiter brings it back out. The restaurant is the frontend, and the kitchen is the backend—you interact with frontend elements (like the menu) gets communicated to the backend so it can be brought out to you. A frontend developer is the front of house staff, and a backend developer is a cook. A full-stack developer can do both.
Or, think about logging in. To create an account somewhere, you need to go through a website and fill out a form (frontend) which then stores all your account information on a database server (backend). Whenever you log in (by typing your username/password into a frontend interface), the system has send your username/password to the backend and check whether they’re correct, then serve the correct page for the logged in user.
Start small (HTML/CSS)
Almost every developer starts in the same place: HTML and CSS. They’re both simple front-end languages used for web design. There’s a couple of reasons everybody starts with them:
- Your first language is going to be the hardest, and HTML is fairly easy to learn.
- They’re core skills in frontend web design, and they open up a lot of functionality from other software: platforms like WordPress and Mailchimp have an option to let you edit the HTML directly.
- They’re some of the most common languages in the world, and there’s a lot of support and community online.
- HTML does not look good on the page by itself; even very artful HTML makes a site that looks like it’s from 1995. That’s where CSS comes in: once you’ve used HTML to make a page, the next logical step is to figure out how to make it look good.
Once you’ve spent some time looking at courses like codecademy, you want to grab yourself a light code editor like Atom or Brackets. This software lets you plug in and check your code, and will let you experiment freely. They’re very simple to learn, but also have a lot of depth. There’s also in-browser editing/testing environments like JSFiddle that will let you run code with very little setup. Eventually you’re going to want to grab a full IDE (integrated design environment), but Atom and JSFiddle are where you want to start.
The other option is to seek professional advice: attend a coding bootcamp or take a university course. These are expensive options, but they tend to give you a much more well-rounded toolkit. Coding bootcamps in particular are very good if you can afford them, and have an excellent post-camp employment rate.
Your first programming language: C++/Python/JavaScript
You’ll often hear the term ‘programming language’ get thrown around to mean any code, but it specifically means a language that programs things. HTML and CSS display things, but JavaScript can do things-among other things, it can add interactive elements to a web page that totally change the user experience (UX). There’s a few options for programming languages to start with:
- C++ is a classic programming language, its developed by Bjarne Stroustrup in the 70s. It’s still in use, but it definitely feels like a much more difficult language to start with, but will give you valuable insight into languages you will learn later with a similar syntax. In that way, C++ is the Latin of programming. Why on earth would you learn Latin? Well, because you want to learn French, or Italian, or Spanish, or English, or any one of the dozens of languages that sprung up from it. C++ is a difficulty spike for new developers, but it’s highly recommended because it gives you a fundamental understanding of how programming languages work, and that understanding will set you up to learn other languages.
- Python is very highly-regarded in the community and it’s easy to see why. It’s straightforward but powerful, and can do basically anything. Python’s code is somewhere between calculus and poetry. It’ll also let you move outside of web development: it’s extremely common in things like industrial control systems or scientific devices. Python is often the point that developers get hooked: you hear a lot of water-cooler stories about people learning to code who were so-so on it, then they discovered Python and fell in love.
- JavaScript is the most common language in the web development world. It’s used on 96% of all websites, and a huge number of applications. A big part of the reason JS is so popular is that it can be used to write both front-end and back-end code: if you can master JavaScript then you can, in a way, become a full-stack developer with only a single language. A lot of developers jump straight from CSS to JavaScript, though I’d personally recommend you go for something like C++ first: JavaScript has a lot more abstraction, which means there’s a greater disconnect between the code you’re writing and what’s happening. Learning JS without a lower-level language like C/C++ will teach you how to make things happen, but not why they’re happening. It’s the difference between driving a car and knowing how to fix an engine: it does the trick if you need to get places, but you’re in trouble if you break down.
Backend basics: SQL
SQL (structured query language) is an absolute must for any developer, and is crucial to most backend systems. In the last 10 years we’ve seen the rise of NoSQL databases like MongoDB that run very differently, but SQL is still one of the most useful and important languages on the planet.
Imagine an Excel spreadsheet. Now make it bigger. Bigger again. Now stack 1000 of them on top of each other. That’s a tabular database, which is the sort of database SQL is designed to access—it asks questions that allow it to locate specific tabs extremely quickly, and pull up information from them. Almost every website and app you use needs to call up information from a database somewhere. There are apps and services that run entirely client-side but they’re rare.
It’s not enough to just know SQL: you need to know SQL back-to-front. You need to see query strings in your dreams. Even with Mongo gobbling up more and more market share, you can’t call yourself full-stack if you can’t run a tabular database.
There are several structured query languages, though you don’t need to worry about that for now: start with MySQL and start looking at others when you feel more confident.
Servers
We talked about restaurants earlier and in that metaphor, the server is easy. It’s, well … the server. It communicates orders back to the kitchen (database) and it brings you out your food when it’s ready. Server architecture is its own whole field, loosely-related to networking but also a world of its own. Web servers, application servers, database servers: there’s a server for everything. It is a key channel for communicating between the frontend and the backend, and knowing how one works is critical.
Am I done?
At this point, you’ve got a solid basis to call yourself a full-stack developer. I say a basis: it’s a start. You can make attractive frontend content with HTML/CSS, you can program it with C++/Python/JS, and you can make requests to your database server with MySQL. Is that enough, though? It’s a solid start, but no. Next, you need to get into the real nitty-gritty.
APIs
An API (application programming interface) is a system that lets you interact directly with somebody else’s application. Have you ever seen a button on a site that says “sign in with Google” even though Google has nothing to do with the site? They’re using a Google API to give you an easier option to log in.
There’s a Marvel API and a Star Wars API you can use to pull up information about characters and events in those universes. It’s not just big companies that have APIs either: there’s an ocean of smaller ones like CatAPI, which lets you add a directory of cat pictures to your site. If you want a fairly simple API activity to start out with, try to use the Twitter API to tweet from your computer’s console.
REST APIs are currently very popular, though GraphQL has been gaining popularity in recent years—RESTful APIs are very reliable, but GraphQL are high-performance.
Git
Git is a version control system that is invaluable to collaboration. It records any changes to a piece of code, and lets you know who made them and when. Developers can also add notes to let their team know why they made the changes. Git is not the most intuitive system, and it will take a lot of practice to fully understand what you’re doing.
UX
It’s not enough to just made an interface, you need to make a good interface. UX is the art of understanding how end users will interact with your product, and designing it so they have the best experience possible while still retaining strong branding and artistic vision.
DevOps
DevOps has become a more and more crucial part of the pipeline over the last 10 years and they are only becoming more important as software gets more and more complex. It’s not enough to be good with code (though that is a prerequisite), you need to be good with people. Code is hard enough, but coordinating code across multiple teams in a way that ensures fast delivery requires a very rare mix of tech skills, people skills and organisational skills.
Oh, is that all?
No. That’s a very rough sketch of the sort of broad skillset required of a full-stack developer. There is always more, and it’s always changing. We’re twenty years into an exponential spike in computing complexity. A new JavaScript framework rises and falls every 18 months. New languages and platforms and data models seem to pop up every day.
One thing you’ll learn about tech is that you never stop learning. If you keep learning long enough, you go full-stack. It’s less of a profession than a coming-together of a dozen different strands—it’s iron and coal coming together to make steel. The best you can do is to adopt a broad approach to development, always be curious, and never stop learning. Ambition is wonderful, but it must be paired with dedication and patience if it’s going to mean anything.
That’s what it means to be full-stack.
If you have aspirations of being a full-stack developer or really if you’re interested in code work at all, please do get in touch with our team at CodeClouds. We have teams all over the world and we’re hiring developers right now. We do a diverse range of projects and can offer you frontend work, backend work, and everything in between. Contact us today!