If you're just starting to learn Ruby, the numerous tools used with the language can seem overwhelming. For instance, right from the beginning, you may need to learn about RubyGems, rbenv or RVM, Bundler, and Rubocop, and that's just a start. Later, you'll learn about databases and SQL, Rake, Rails, and more. New developers have an even more significant challenge: they also need to learn about the command line and environment, git, a code editor, as well as all the concepts of programming. This toolbox provides the environment that makes Ruby a useful and practical software development language.

Fortunately, you don't need all these tools when you're starting out, nor do you need familiarity with advanced features from the beginning. All you need is a short introduction to the most commonly used tools. Here at Launch School, for example, we teach these tools as they come up in the curriculum. Yes, the introductions come hot and heavy at first, especially for new developers, but we don't present anything before you need it.

Since we already cover much of this material elsewhere, this guide doesn't spend too much time teaching you how to use these tools, though we do have a "how to" chapter. Instead, we concentrate on a handful of tools -- namely Ruby itself, rbenv, RVM, Gems, Bundler, and Rake -- and talk about how they fit into the world of Ruby development and your computer system. The information presented here aims at showing what these tools do, how they do it, how they interact with your computer, and how you can diagnose and even fix problems that arise from their use.

We don't expect you to thoroughly master every detail on your first pass through this material. The goal here is to help you formulate a mental model of how the pieces fit together; with that mental model, you have a realistic chance at debugging tricky environment issues. These are issues that surround the act of programming. Most professional programmers spend an inordinate amount of time and effort with these non-coding tasks; you probably will too. We want you to learn how to navigate your way through your coding environment with some idea of how everything works.

If this material still feels fuzzy after completing this book, that's normal and expected. The tools aren't generally useful outside the Ruby development environment; thus, they aren't foundational concepts that you must master as a developer. As a result, we don't expect you to master them at Launch School. Instead, we want to familiarize you with what the tools do, and to show you some basic debugging techniques in case you run into problems. We'll learn some more about them in our Ruby Foundations: More Topics course, but even there, you won't master these tools.

Please read that last paragraph again. Really. While this material is required knowledge for Ruby developers, it isn't foundational. Mastery isn't required at this time.

As with other Launch School materials, we assume that you are using a UNIX-like environment, such as that offered by Macs, Linux, and online programming environments like Cloud9. While you can develop Ruby programs under Windows, doing so may be complex; if your system uses Windows, we recommend using an online environment like Cloud9 for your Launch School education. You may also consider installing a beginner-friendly version of Linux such as Ubuntu in a virtual machine using something like VirtualBox.

This book leans heavily on using the command line and knowing a bit about how your system uses the environment. If you need a refresher, take some time to review our Introduction to the Command Line book.

We'll start by discussing the basic Ruby installation.