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.
3. Unix
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.
4. Typing
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.
5. Databases
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!
7. Modern JavaScript and CSS
This list is for 2014. The web has changed. You might get away with simple jQuery for time being, but sooner or later someone will start to ask questions: “Does it have to reload the page on every click?” or “Why the hell does it load that slow”. You need to embrace JavaScript to be better web developer. I am afraid that also pure JavaScript will not be enough. We live in times of growing popularity of client-side frameworks, such as Backbone, AngularJS or Ember. By pushing some of the logic to the client, you will be able to build applications that feel snappier, consume less server resources and have better separation between UI and the business logic. You should also know how to use JavaScript-based tools such as Bower and how to integrate your framework with Rails.
As with JavaScript, the times changed for CSS development. You can no longer get away with writing your own CSS from scratch. It’s too difficult with all the existing incompatible devices out there. It’s not just IE hacks anymore you’d have to make, the web evolved into being much more mobile-friendly, and mobile devices have hundreds of resolution and screen density combinations. In order to keep up, you need to learn how to use CSS frameworks. We generally use Bootstrap or Foundation. The good thing about Bootstrap is that it can also be integrated with dozens of ready-to-use JavaScript components with libraries such as Angular UI to use with AngularJS or others.
8. Debugging
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.
Since we established that you will need to write more and more JavaScript code in point 7, you should learn how to do it too.
9. Dev-ops
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.
Summary
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.
Post by Hubert Łępicki
Hubert is partner at AmberBit. Rails, Elixir and functional programming are his areas of expertise.