While there are many job opportunities in Ruby development, it can be challenging for junior developers to get their foot in the door. This is causing a problem for the growth of Ruby as a language, as many potential developers shy away from the language, and move to some other language or some other career which offer more lucrative opportunities. I am writing this article in my effort to try to push for the revival of what I still consider one of the most enjoyable programming languages to work with in the world (hands down Ruby on Rails remains the best framework even today to build an quick MVP).
Here are some issues that you will commonly face as a junior developer.
Highly competitive scene: The tech industry is highly competitive, and many junior developers are vying for the same job openings. There are often a limited number of entry-level positions available, and the competition for these roles can be fierce. This makes it difficult for junior developers to stand out and land a job.
High experience requirement: Many companies prefer to hire developers with experience, even for entry-level positions. Junior developers may struggle to find job openings that are suitable for their level of experience. They may also struggle to gain the necessary experience to qualify for these positions.
Wide skillset required: While Ruby is a popular programming language, many companies require developers to have a wide range of skills in addition to Ruby. Junior developers may need to be proficient in other programming languages, frameworks, and tools, which can make it difficult to land a job.
Strong portfolio expectations: In addition to experience and skills, many companies also require junior developers to have a strong portfolio of work. This can be difficult for junior developers who are just starting out and may not have many projects to showcase. Building a strong portfolio can take time and effort, which can make it difficult for junior developers to get their foot in the door.
Internal and reference hires: Some job openings are not publicly advertised, and companies often rely on referrals and networking to find suitable candidates. Junior developers who are just starting out may not have an extensive network of contacts, which can make it difficult to find job openings and get their foot in the door.
When we are hiring, we often lean towards a mid-level developer over a junior developer. Our thought process includes:
Can they work on legacy applications? The code here is often messy, and for a junior developer, fixing bugs and creating new features in these applications can be overwhelming.
How much time do they need to learn newer concepts? Learning is generally done on the job, and while bigger companies do provide dedicated time for learning, smaller and medium-sized companies cannot generally afford to do this.
Do we have the luxury of time to allow them to make mistakes? This is where internships (where junior developers are being paid a stipend or less) can still come at a higher cost, as senior developers would need to dedicate time to supporting them and guiding them through their mistakes.
Can we provide enough support for hand-holding them through the initial phase? Quite often, companies don't have a budget for this. We do pair-programming quite often, and here, it would help if we don't need to explain basic concepts to the developer.
Some issues that I have noticed during our interviews with junior developers:
Little to no testing knowledge / experience: Often, there is little to no knowledge of testing (using a framework like RSpec or otherwise)
Bloated CVs: The resume seems more bloated than reality. Applicants are not able to explain the skills and experience listed in their resume.
More talk and less action: Confidence levels are generally quite high until we get to technical questions.
Not enough knowledge of Ruby / Rails: Applicants get stuck on basic tasks during a technical assessment round.
Basic experience: Applicant experience doesn't highlight dabbling with much technical complexity (their knowledge and experience is on a very basic level)
Being a Lead Engineer myself, in regard to the apps I work with, I've also listed some of my own (slightly ambitious) expectations.
You will need to have a solid understanding of the Ruby programming language. This includes understanding the syntax, control structures, data structures, and object-oriented programming concepts like classes, objects, inheritance, and modules. You should also be familiar with the standard Ruby library.
You should have a good understanding of several key design patterns, including the Strategy pattern, Polymorphism, Builder, Factory, and SOLID principles. These patterns provide a framework for organizing and designing code that is maintainable, scalable, and easy to understand
You should have a good understanding of Ruby on Rails and its components, including the Model-View-Controller (MVC) architecture, routing, ActiveRecord, views, helpers, assets, and testing frameworks like MiniTest and RSpec.
You should have experience working with at least one SQL database, such as MySQL or PostgreSQL. You should be familiar with concepts like data types, tables, primary keys, foreign keys, and SQL queries. You should also be familiar with tools like MySQL Workbench and pgAdmin for managing and querying databases.
You should have a good understanding of ActiveRecord and its features, including models, associations, validations, callbacks, scopes, and migrations.
You should be familiar with RESTful API design, including HTTP methods, URI design, request and response formats, authentication, and security.
You should be familiar with Git and its commands, including git init, git add, git commit, git push, git pull, and git merge. You should also be familiar with common Git workflows like branching, merging, and rebasing. Also understand how to create and review pull requests. Quite often, this is a very good source of learning and improving your code.
With the philosophy of Devops geting stronger in smaller and medium-sized teams, knowledge of some Docker is generally expected from a Ruby Developer. Docker is a platform used to build, ship, and run applications in containers. As a junior Ruby developer, you should have some experience working with Docker and its concepts, including containers, images, Dockerfiles, and Docker Compose. You should also be familiar with common Docker commands and workflows for building and deploying applications.
You don't need to be an orator, but you should be able to communicate well enough (your listening skills are very important). Get rid of all the fluff on your resume, and talk only about what you actually know. Companies do have culture rounds, and here you should let your personality as a team player shine. Get cracking on Leetcode, Hackerrank, etc. to get your knowledge of algorithms up to speed. While this is not always a requirement, many companies still commence their interview process by sending you some algorithmic problems to solve. Others might be interested in your problem solving skills rather than actually expecting you to solve the algorithms, and use the white-board method (if done locally) or some remote coding method if done remotely. Here, they would like at the questions you ask, and the approach you take.
Now, while this might seem like a tall order, trust me - it's worth it. You are now trying not only to get ahead of your competition, but are also working your way into becoming a mid-level developer. When you do join, you might also work on legacy applications that can be overwhelming, and it would definitely help to have someone mentor you inside your company, and hold your hand through the initial period where you get an understanding of how these apps work.
By building a strong portfolio, learning additional skills, networking, applying for internships, and being persistent, junior developers can increase their chances of landing a job in this exciting field. I am personally trying to figure out ideas that can provide opportunities for junior developers myself and get them to a point where they can get access to opportunities more easily.