How is retraining going?
The program consists of three stages:
- learning the basics of the language with a mentor: syntax, RubyGem, gems, tools;
- familiarity with Ruby on Rails and development of pet projects;
- deep work with the framework, unit tests and combat missions.
The first stage is mentoring. Each newbie is assigned a mentor who helps them learn Ruby: syntax, the RubyGems package management system, and other tools.
It is important to understand that this is not a school for programmers, so most of the time a new employee learns the language on his own, under the supervision of a mentor. He will answer questions, conduct code reviews and discuss tasks with the ward at several meetings a week.
The second stage is the Ruby on Rails framework and pet projects. At the second stage, the developer learns Ruby on Rails, a framework for integrating applications with a web server and databases. And having mastered it, he begins to write his pet projects.
The third stage is best practice, unit tests and simple combat missions. This is work on real tasks in projects and the transfer of experience and knowledge of our team. Our program is not an internship. Therefore, switching to a retraining project is not a downgrade: developers also work (only learn Ruby in the process) and receive a competitive salary. Right now we are recruiting into the marketing domain, but if someone wants to take on an employee from another team, that’s not a problem.
According to our observations, for a person to successfully adapt to Ruby, it takes an average of 3-4 months. I restrain myself and there are few statistics, but I want to say: “Holy saints, Ruby is mystically alive.” I am very glad that the Ruby community is replenished with experienced developers.
What should a developer know to switch to Ruby
An approximate list of requirements for a candidate is as follows:
- wrote in any scripting programming language for at least two years (Perl, Scala, PHP and others);
- developed client-server applications;
- understands how networks work;
- worked with relational databases (MySQL, PostgreSQL);
- owns classical algorithms and data structures;
- used Git;
- worked with Linux.
I believe that a good developer is independent: he can find out the requirements for the task himself, write documentation, test and submit the task for production. These qualities distinguish a good programmer from an average programmer who needs to be run after. This is exactly what we expect from candidates – independence and a high engineering culture.
What tasks do developers solve during retraining
Research tasks. For example, a promotional code flies after placing an order. To solve the problem, the developer needs to understand how the promo code is applied, find out what the bottlenecks are, and write a fix. Such tasks help to understand how our monolith works.
New features. In this case, the guys are already rolling something into production. For example, there was a task to make an increased accrual of SberThanks using a promotional code. We have released this functionality, and users of the service have received additional benefits from purchases.
Fix. For example, remove the old collection of metrics from the Sber API. Here we are talking about simple tasks: fix something, add, remove, check that everything works fine.
Programmers can also learn Go as a second language along with Ruby. The tasks are similar. For example, we are planning to make a notification service. We want to collect all user notifications in one service: email, push notifications, SMS, and so on. An interesting and challenging task that we intend to implement in Go.
How the Ruby Retraining Program Came to Be
I took the resumes of applicants on HeadHunter and compared them with the number of vacancies. There are seven applicants for one vacancy for a Python developer, four for Elixir. With Ruby developers, the situation is terrible: a little more than one specialist per vacancy. This means that there is no choice, and we cannot take those who wrote only “Hello, world” in Ruby.
A programming language is just a tool. SberMarket is growing rapidly, we lack developers. Therefore, we came up with the idea of hiring experienced engineers with a different stack and retraining in Ruby. They should have a good knowledge of any programming language such as PHP, Scala, Perl or Java. And we will train Ruby and help you join the team.
In 2021, we hired 2 Scrum teams to retrain as Rubists. In the next one, we want to hire even more – now we are preparing mentors and polishing tasks.
Why IT companies choose Ruby, because it was possible to quickly develop an MVP on it and show it to investors. Now the load has grown, and we are gradually moving to microservices. At the same time, the monolith did not disappear anywhere.
Under the hood of many modern products is a monolith based on the fifth version of Ruby on Rails. For example, the largest food delivery aggregator in Western Europe from restaurants processes 160,000 orders per day, on peak days – more than 200,000. And every day it distributes tasks to 38,000 pickers and couriers.
Rubists in the team solve two problems: they support the monolith and take out part of its functions into microservices. Therefore, without them, nowhere.
Technical requirements for a Ruby specialist
- It must be a web application:
- On the server side, use Ruby on Rails.
- It must have client-side and server-side validation;
- It must work as a single page WEB application and must use AJAX technology (load and send data without reloading the page);
- It must have a solution to authenticate the user. The user should have access only to his projects and tasks (Devise, Cancancan);
- It should have automated tests for all functionality (models – RSpec, controllers – RSpec, acceptance/functional tests – RSpec + Capybara);
- I’m passionate about performance. I want to manage my tasks and projects more effectively. I need a simple tool to help me control my task flow.