So you are a Ruby developer? You write Rails code for living? That’s cool. But you know what, you can do much better if you learn at least some of these 10 skills.
At AmberBit we hire Ruby developers. We also maintain internal document, describing skills required to advance your career (and get a better salary). I am presenting you selected items from that list, that you might also want to learn, to be a better Rubyist.
1. Alternative frameworks
Ruby is not just Rails. It became dominant framework, and is something we probably work everyday, but it is not the only Ruby framework out there. In fact, for some use cases, it’s better to go with Sinatra, Grape or plain old Rack application.
By learning what is available, and how to use it, you will be enabled to make smarter technology choices, and, possibly, incorporate some non-Rails approaches into your Rails applications. You can even mix-and-match them within one project if you split your big applications into smaller chunks.
2. Knowing how the web works
We sometimes find it embarrassing, but a lot of Ruby web developers have only vague idea on how the web works. This might be because in our community, developers often come from non-technical or non-IT background and often lack formal education in computer science.
If you are building web applications in Ruby, the knowledge of what happens when you enter address in URL bar and hit the Enter/Return button is really essential. Topics you should get yourself familiar are TCP/IP, DNS system, HTTP protocol (amazon.com) including headers and cookies.
The knowledge of internal mechanisms of the Internet (amazon.com) will help you in debugging and optimizing your application, and also allow you to avoid possible security issues with your code.
You should be able to get the stuff done with opening only one window - a terminal window. No matter if you are Mac or Linux user, sooner or later you will have to use the terminal to perform some tasks, either locally or on the server. You might be using IDE such as RubyMine (jetbrains.com), and I have seen impressive skills in using it to write and debug Rails applications, but you will not be able to run it on the server to inspect production system.
Unix commands can be useful not only for navigating or moving files around, it is also a philosophy of small programs that could be combined together to perform large tasks. Embracing this way of thinking about software will help you write better Ruby code, and be better programmer in general. Learn Linux/Unix terminal, there are plenty of resources to help you started out there.
Seriously. This one is embarrassing. But you cannot be productive if you cannot type. Get yourself a good keyboard, play some relaxing music and try to learn to type without looking at your fingers. Then, learn to type fast. Your life will be much simpler when you do not have to think about typing, as it happens automatically. This helps a lot when dealing with terminal-based environments (vim, tmux, zsh), or tiling window managers.
ActiveRecord is great library that forms core part of Rails. But it will not always generate best possible SQL. In order to write fast, secure and reliable database-backed applications, you need to know how to talk to the database directly. This will come in handy when you need to debug performance or concurrency problems, but also will allow you to write smarter, shorter and faster Ruby code. Use the full power of database of your choice, by learning how to use it directly.
6. Open source
This is not really a skill. Or maybe it is. Contributing to Open Source is a hard requirement for our career path at AmberBit. You should just do it, and it’s not a matter of giving back to the community you are taking from every day. By making contribution to some external projects, you learn how to read and understand code, and you pick up new programming skills in the process. More over, you also learn how to work with people. This is a soft skill that is sometimes the hardest to obtain for us, geeks!
Ruby has a built-in debugger, but it is not the only tool you can use to debug Rails applications. If you are using IDE such as RubyMine, you might have a nice UI for the built-in debugger as well.
Your applications do not exist in a void. They are deployed somewhere, to a server, to the cloud, to the container. Depending on what kind of setup you use, you might want to learn how to write Capistrano recipes, package the app to container or manage your servers with Chef, Puppet or Ansible.
Before, however, you do much automation, I would suggest you learn how to configure a server from scratch. You can get some dead-cheap VPS Linux box, and learn how to install and configure Apache/proxy, Postgres, Nginx or Redis.
10. Startup and business basics
Since you are writing Ruby, good chances are you will or already do work for a start-up. It is important to understand the gibberish of the management ;). In fact, it starts to make sense when you begin to understand it. Good starting point is playing a mind game of impersonating a startup owner (amazon.com) or launching your side-project as your real startup. Topics like marketing (amazon.com) and analytics (amazon.com) are important enough to become familiar with them.
This is nowhere a complete list of skills you might want to acquire. But it’s a good start on your journey in becoming smarter, better paid Ruby developer.
by Hubert Łępicki, twitter: @hubertlepicki