Whether you want to build your own app, or get one of the highest paying jobs in the industry, learning web development is essential.
But one of the most common questions asked by aspiring web developers (or aspiring to be anything, really): How to get started?
I understand this is one of the most overwhelming topics for a beginner. It may feel like there's so much to know, and not enough clarity on where to start.
But part of the obsession with this question also comes from the fact that it's easy to waste time studying and debating the best way to get started. And it's hard to actually start and do something.
So what's the big secret to getting started? Take the first step. When you think about all the steps ahead of you, you can feel overwhelmed and not do anything. It's a lot of pressure to handle.
But if all you got to do is just take the first step, it's easy to summon courage and do it. Once the first step is done, then you take the 2nd and so on. You'll be on your way to becoming a web programmer, one step at a time.
In this guide, we'll go over the steps involved in getting started as a full-stack software developer. We'll talk about planning your journey, the technical skills you need and how to go about learning them.
A full-stack web developer is someone who is able to work on both the front-end and back-end portions of an application.
- Front-end generally refers to the portion of an application the user will see or interact with.
- Back-end is the part of the application that handles the logic, database interactions, user authentication, server configuration, etc.
Being a full-stack developer doesn’t mean that you have necessarily mastered everything required to work with the front-end or back-end.
But it does mean that you are able to connect, work on and understand both sides. You know what’s going on when building and deploying an application.
I am going to try to break this down as simply as possible, with only the most essential components of the picture. By the end of this guide, you'll know enough to get started on the right foot and create a roadmap for the next few weeks.
It’s Not Just Coding
Before we get started with more information on web development, there is something basic you need to understand first. Many aspiring developers think that becoming a web developer only means learning to code. But that's not true.
Don't get me wrong, you do need to know how to code, but there's more to it than just programming, the first of which is a web development model or method.
Most software programmers or teams have a standard process in place which they are supposed to follow from start to end. Two of the most popular models these days are waterfall model and agile development. So you should at least know what these two mean.
Regardless of what model you or your team picks, the following components will still apply. The only difference will be in sequence and the extent of overlap between them. Let's take a look at all the key parts of being a software developer.
Every web development project is about solving a problem. In most cases, it means automating a manual process, either completely or to some extent.
Needless to say, you should have a good idea about a manual process and its flaws before you decide to build software to improve on it.
One of the common best practices at this stage is to talk to a potential client or customer about their needs and prepare a specifications document.
Only then you can fully gather requirements and understand what the web application is supposed to do.
Once you have understood the requirements well enough to proceed, the next step is to visualize some sort of interface - a design depicting how a user will interact with the software to achieve its purpose.
You can't start building a house before putting some kind of plan in place about which room goes where, how spacious it needs to be and so on.
There are many different approaches to do this based on what kind of web application you're building, including wireframing, prototyping and mockups.
But for now, just be aware that some kind of architectural blueprint to guide the coding phase is necessary before you start coding.
Front End Development
- HTML allows you to add content to a website.
- CSS is what allows you to style your content.
- Semantic HTML. CSS Box Model.
- CSS Media Queries to target different devices and write responsive CSS.
- Bootstrap (a framework for helping design and layout content on a page).
- Understand how to work with the DOM.
- Know what JSON is and how to manipulate it.
- Important language features such as functional composition, prototypal inheritance, closures, event delegation, scope, higher-order functions.
- Asynchronous control flow, promises, and callbacks.
Also learn how to properly structure your code and modularize parts of it. Things like webpack, browserify, or build tools like gulp will definitely be helpful to know.
Back-End Programming Language
Now that you know what you need to build and how it's supposed to look like, it's time to start coding. This is the stage where you build the software that will help users solve a problem or automate part of a process.
One thing that bogs down most beginning developers is which language to start with. But it's not as much of a big deal that you may be making it out to be
The important thing is to start with and master one coding language first, instead of confusing yourself with too many.
As long as you're focused on mastering only one language at first, the choice of that language doesn't matter that much.
There are too many good and bad coding practices to cover in this guide, but what you must know for now is that good code is well structured, robust and clean.
It works as it's supposed to in as many scenarios as possible and is easy to understand for other programmers, who may later need to change or expand on it.
Algorithms & Data Structures
Algorithms and data structures are ready-to-use solutions to some of the most common coding scenarios. For example, a part of your code may require to sort a list of things.
Sorting a list of things is a common problem faced by many coders before you. If you can learn the best way to do that, you can use it not just for code that you're currently writing, but also for any other code or project that you may work on later.
But instead of putting a lot of mental effort and time in how to do so, you can just learn and use a standard sorting algorithm, developed and agreed upon by the programming community in general.
Also, it's not just enough to memorize or be able to use an algorithm or data structure. You must understand how and why it works.
This is because most of the problems you will face as a programmer will require you to tweak the algorithm, not just apply it as it is. So you must be able to create your own variations of these algorithms.
Being good with algorithms and data structures can help you solve a coding problem way faster than it would have taken you to figure out the solution from scratch.
But also know that it's not going to be easy. That's the reason the majority of web developers don't focus on this area as much as they should. Here are some things you should definitely learn:
- Understand how trees and graphs can be beneficial as data structures.
- Understand the basics of Big-O analysis so you don’t do silly things like create a nested loop 3 levels down if you don’t need to!
- Know when to use an object vs an array and understand the trade-offs.
- Learn why caching is so important when working with a large amount of data. Also learn the pros and cons of in-memory vs disk storage.
- Learn the difference between queues and stacks.
If you really seek to build your reputation as a killer developer, or get a job at your dream tech company, then you need to eat, drink and sleep algorithms and data structures.
A Development System
To be a software developer, you'll need to gain experience and competence in at least one platform that you'll be developing software for.
For example, if you choose to build software for Windows, then you'll need to work on mastering Windows and not other platforms like Mac, the web browser, Android, or the world wide web.
Similarly, if you're making a web application, then you'll need to focus on a specific web platform, with its development standards and practices.
Having mastery of a platform means knowing the tools, patterns and frameworks typically used when developing for that platform.
Frameworks & Stacks
Now that you know that you need to master a programming language and a development platform, you might as well know about frameworks and stacks.
A framework is a set of code libraries from which you can add code snippets into the code of software that you're working on. Just like algorithms and data structures, frameworks make common programming tasks faster and easier.
.NET, for example, is a commonly used framework with C# programming language. It has many C# classes and libraries prebuilt, which you can use in your C# code where needed. So you don't have to reinvent the wheel every time you're trying to do something that has already been done before.
A stack, on the other hand, is a set of a programming language, a framework, a database and some other technologies typically used together to create a full software application.
If you know about all the tools and technologies associated with a particular stack, you can develop an entire application with it from start to finish. So learning a complete stack is extremely valuable. If you have ever heard the term "full stack developer," that's where it came from.
Databases are an important part of software development, used to store data for applications. Regardless of what kind of software you're developing, there's a good chance of some kind of database being involved.
Depending on what the software does, the database is required to store information about users, configurations and more. At some point you’ll probably want to store data somewhere and then access it later.
You should have a good grasp on the following topics related to databases and storage.
- Understand the benefits of relational data, e.g. SQL.
- Learn about NoSQL databases, e.g. MongoDB.
- Understand which would be better in certain situations.
- Know how to connect a database with your chosen back-end language (e.g. Node.js + MongoDB).
- Understand the benefits of in-memory data stores like Redis or memcached.
- Web storage to store sessions, cookies, and cached data in the browser.
Some of the essentials you should know include how databases work; the basic queries to fetch data; inserting, updating and deleting data; and joining datasets.
You may also need to perform these activities programmatically and write code that can talk to the database.
HTTP & Rest
Some important topics you should learn about are listed below:
- What is REST and why is it important in regards to the HTTP protocol and web applications.
- Best practices for designing a RESTful API. POST/GET requests.
- Learning how to use Chrome DevTools can be extremely helpful.
- What are SSL Certificates.
Source Control With Git
Version control, or configuration management, is an integral part of any coding project. Source control lets multiple developers work on the same code at the same time and then merge all those changes back together.
Different versions of software are stored and collaboratively worked on to add more bells and whistles, or to fix bugs. Version control also helps in tracking the history of changes that have been made to different parts at different times.
As a software developer, you'll be expected to know at least one version control tool, especially Git. Git is a version control system that allows developers working on a team to keep track of all the changes being made to a codebase.
It’s important to know a few important things related to Git so that you understand how to properly get the latest code that you’ve missed, update parts of the code, make fixes, and change other people’s code without breaking things.
Architecture, Build & Deployment
At this point if you want to create a somewhat complex web application, you’ll need to know how to structure your code, how to separate your files, where to host your large media files, how to structure the data in your database, where to perform certain computational tasks (client-side vs server-side), and much more.
The more you work with all sorts of different applications and websites, you’ll learn how to architect and design applications to be most efficient, along with performance optimization for applications and modern browsers.
Most software development projects today use some sort of automated build and deployment technology. After you have checked in a piece of code in your source control system, a build will help ensure that it works.
At the very least, it will compile the code to check if there are any compilation errors. Depending on how sophisticated the build system is, it may also run some user and code quality checks, plus a report on the results.
The next step is deployment, which means making the software available to all or a limited set of intended users. The initial deployment will probably be to a production machine or a testing environment.
You don't need to be an expert in everything related to deployment. Creating and maintaining a build and deployment system is a huge topic in itself. In fact, it has given rise to a separate and rising subject called DevOps (developer operations). But you need to be familiar with the basics.
Learn about common platforms as a service, e.g. Heroku and AWS. Heroku allows you to easily upload your code and have an application up and running with very little configuration or server maintenance and AWS offers dozens of products and services to help with storage, video processing, load balancing, and much more.
Most importantly though you should try to work on projects with people, look at codebases of popular projects on GitHub, and learn as much as you can from senior developers.
Testing & Debugging
Before the final software is released to users, it undergoes a phase of testing. This is where a limited group of people try different ways users may interact with the software, and check if any of those scenarios cause the software to behave the way it shouldn't.
As with different approaches to building software, there are a number of methods to carry out testing.
In the early days it used to be a linear process. So it was okay if the developers didn't know much about testing. A software developer wrote the code. The tester tested and found bugs. The developer fixed the bugs and so on.
But with the adoption of agile methodologies, having basic knowledge of testing isn't optional anymore. Software developers and testers work much more closely with each other, often in parallel.
With that in mind, you should have a basic understanding of concepts like whitebox testing, blackbox testing, test automation, boundary conditions and acceptance testing.
A good programmer will always perform some kind of basic testing to their own code before passing on to someone else. In fact, 90% of where a coder spends most of his or her time is debugging - not writing code but trying to identify why a piece of code they wrote isn't working.
There's no way around it. You're going to have to know how to debug code, whether your own or someone else's.
How To Begin
As you can see, there's a lot more to software development than just writing code. Right now, it's okay to feel overwhelmed and not know what any of these concepts mean.
What you need is a plan that takes you from being an aspiring web developer to a competent one. And you must be wondering what is the best way to develop all these technical skills and be a coder.
Many aspiring coders fall into the trap of reading several reference books, page by page, as if they need to know every library, every class, every framework and every concept before they begin coding.
This is a huge mistake because not only are you wasting precious time, but also because you wouldn't know how useful or important something is until you need it to solve an actual problem at hand.
Only 20% of information about a particular skill or technology is used in 80% if the real world projects a software developer works on. So the key to learning something quickly is identifying what concepts fall into that 20%.
Yet most programming books are written as reference manuals, with the same treatment given to 100% of the topics. There is practically no emphasis on what you need to know as soon as possible and how much. Here's a better way to learn anything quickly.
Understand The Big Picture
When you begin with a new skill, start with a surface level understanding of what it is, what it does and what are the subtopics included within this particular topic.
You don't need to go into detail about anything because you can always go deep on concepts later or google things. But the idea is to know the things you don't know that you don't know.
You're not learning to change the tire of a car, but at least you'll know there is a toolkit in the trunk that can help you do that. Similarly, in order to Google something, you'll have to at least know what to type in Google search! The idea is to not read too much up front and learn by doing.
Learn By Doing
Set a goal to create an actual working software application and let your curiosity drive you to what you want to know at a particular step.
When you're stuck at a step, then go on and read more about the topic that'll help you solve that immediate problem. That way, you'll also be sure that what you're reading is actually relevant. And it's more likely to stick in your mind.
For example, it's one thing to learn about databases, how to run queries and so on.
But you learn at a different level when you decide to create an application that interacts with a database to manage your music albums - from which you can fetch titles, edit album information, add or delete albums and more.
Since you have a specific purpose now, you crack open a book or a course on databases and know exactly what you need to find and read to achieve the functions/features you want to build.
And then you use that information to solve your immediate challenges, eventually moving towards the full application goal. Think about how much more enjoyable and useful that is than just reading a bunch of stuff you don't even know to be relevant in the real world.
Conclusion: Get To Practice
Hopefully, I have given you everything you need to begin. So there's no excuse not to get started.
Just keep in mind that patience and practice are going to take you far ahead than just reading and studying. Try to stay calm and enjoy the process, even if it may get frustrating at times.
It’ll be hard work learning all of this, but it’s rewarding in the end and Full-Stack Development is fun! The skills will come and you'll be on your way to the exciting world of software development.
Did I miss anything? Did you try these tips? Do you have any questions or comments? Share your thoughts below in the comments section.