When learning web development it can be fustrating to know what to focus your efforts on. Especially when you are trying to land that first job or freelance gig. This post is designed to expose those learning web development where to focus their energy. Generally features listed below will be things you need to build for clients regardless of which framework or programming language you are using. This post will focus on showing you the tools and resources for Ruby on Rails web framework.

These are features that are extremely common and from my experience most developers have to build them at the request of the clients all the time. These features are what I regard as the most common functionality of web applications. If you can understand them and master them, you would be hirable and highly paid extremely quickly.

1.) Authentication

It goes without saying that eventually you will have to build some kind of authentication in your application. Product owners want to offer some kind of mechanism to allow their users to sign up and sign in to be able to separate who's who. Authentication may seem like a simple feature but it can be much more complex than it seems. Understanding how authentication works, when users sign up where the data goes, how business objects connect to different users will all require some kind of user authentication. You'll need to figure out who the current_user is 😜.

Being able to automate registration, email confirmation, and allowing users to reset password will be the defacto set of features you need to learn to build as a web developer. In the rails ecosystem there are a couple of gems that is battle tested, stable and well maintained.

Using gems can get you to finish your authentication extremely quickly however it is also wise to build authentication from scratch at least once so you understand how the mechanics work together.

If you are interested in building authentication from scratch check out our Rails Foundation series where we show you how to build authentication from scratch

user-authentication-concepts-cover

2.) Authorization System

Authentication and Authorization are 2 different things, and answers different questions. Authentication answers the question of "who" is accessing our system. Authorization controls which users can access which resource in the application. So imagine you are building a commenting system. Should one user be able to modify the comment of another user? The answer is it depends who the user is.

Generally Admins and Moderators will be able to modify any user's comment but each regular user should only be able to modify / delete their own comment. Systems that control access to business objects such as comments are known as Authorization.

Here is another scenario, you have an admin portal that only 'admins' should be able to access and regular users should stay out because it may contain some sensitive information or feature. Like if you are building a blog, you wouldn't want your users to meddle with the blog posts. Check out this free episode showing you how to implement this very feature.

authenticating-the-admin-user-cover

3.) Pagination

As your application grows, you'll need to be able to retrieve more data from your database, and eventually, you'll need to paginate. Pagination is a sort of performance feature. You definitely don't want to load 10,000 objects on to the screen at once. First of all you are going to cause your application to slow to a crawl and second of all no human being can handle 10,000 objects on the screen at once. It's literally information overload. You'll need to build some kind of pagination mechanism into your application. Luckily in Rails we have two gems for that!

In our Rails Foundation videos series we show you how to implement the kaminari gem.

implementing-pagination-cover

4.) State Machines

Also known as finite state machines. This is one of those things people don't know they need and usually end up writing overly complex code, when all they're trying to do is build a finite state machine. It's a concept in computer science that is used to track the state of objects. In computer games bots and AI use these to transition from one state to another. For example imagine you are playing a game, you'll see a bot idling (standing still) then he / she will patrol the corridor, the different state tells the game engine which set of animation to play. When Idling load the 'standing still animation' and every few seconds transtion to 'patrol mode' and play the 'patroling' animation.

In web applications we use state machines in many ways too. We have business objects such as a shopping cart, or a blog post. Shopping carts start out being 'carts', they transition to 'checkout', 'paid', 'shipped' and eventually 'completed'. Blog posts start out being 'drafted' and eventually become 'published'. Tracking and transitioning these objects from state to state can be done with state machines.

If you are curious about state machines and would like to see how it can be implemented in Rails using ActiveRecord Enum feature check out this free episode from our Rails Foundation series

implementing-a-state-machine-cover

5.) Image / File Uploading

I don't think I've ever gotten to far into building an application without needing to build some kind of image and file uploading feature. This is one of those that you should just know. This is also one of those things that may seem easy however it is usually not simple at all. You have to take into consideration things like file size limitations, file type validations, and make sure you are uploading files directly to something like Amazon S3 or Google Cloud Storage and not holding the file in your Rails application.

If that's not enough you'll also have to learn how to do image processing   in the background or on the fly. Luckily Rails now has an Active Storage feature that makes it extremely simple to build such features into your application. If you would like to learn more about Active Storage check out our free episode on Active Storage.

active-storage-basics-cover

Conclusion

These are just 5 things that can jump start your process on learning web development and becoming successful in the industry. I regard them as foundational knowledge of web development. This explains why we cover them in our Rails Foundation video series. You can always reach out for an existing library / gem but keep in mind that building these features yourself the first few times can make you stand out from the crowd. Gems can be time savers once you have a deep understanding of how these concepts work.

There are a lot more things to learn in web development, but if I had to choose these are definitely the top 5 things I would want my team members to know when they join my company as a junior web developer. When I used to hire people for my clients I would look to see if they've built any of these features in their past work, be it using Ruby on Rails or any other language or framework.

If you are just starting out learning web development and don't know where to begin, you can start by learning Ruby from Scratch and then move on to our Rails Foundation video series. This will put you on an extremely good path to becoming hirable.