Many people ask me “How do I learn to program?” and “What book(!) should I read to learn Rails?”.
UPDATE: I’ve created a section for the Absolute Beginner as well, you might find it useful.
These are legitimate questions, but they aren’t necessarily the right questions to ask in order to begin the journey of becoming a software craftsperson.
Better questions, I feel, are:
- What resources do you recommend for beginners?
- Where can I go for help?
I’ve been finding things around the ‘net that can greatly help people new to programming, new to web development, new to Rails, and so on.
This is a quick, short list of things. I urge you to seek them out, and seek out others as well, and create your own list of learning resources. People will begin to ask you, and it’s nice to have something handy.
Also, learning Rails is hard. But don’t despair! The key to learning is break things down, focusing and practicing small things, and build up a lot of skills slowly. (“Wax on, wax off.” “Ok, Mr. Myagi.”) I’m going to jump ahead and tell you to download the first chapter (free) of Justin Weiss’s book Practicing Rails. Search for “first chapter” and fill out the form to get it. You’re also signing up to get e-mail from Justin, but it’s always good stuff.
Update Sun Jun 8 11:39:13 2014: Recently came across web post Best Way To Learn Ruby and Rails and must say it is a great compilation of resources. In addition, Ashton puts the focus right at the heart of the matter: you have learn both Ruby and Rails.
Think Like a Programmer: An Introduction to Creative Problem Solving by V. Anton Spraul.
Spraul’s purpose in this book is not to teach you how to write a program, but to begin to understand the problem-solving approach that is inherent in good programmers. Like so many skills, programming is driven by the desire and vision of the practitioner. A painter uses brushes, canvas, paints, other media to create a work of art, but it isn’t the tools, it isn’t the specific techniques, and it isn’t even the particular skill the painter has that makes a good work of art; it is their composition, the melding of media and surface, the use of different techniques, and practice in developing the skills that come together to form the work of art. Spraul is going to take you deeper than just the syntax, semantics, and data structures of software to the heart of what makes a good programmer: the ability to creatively find and generate solutions to problems.
Learn to Program by Chris Pine.
To be honest, I have not looked through this book. It is, however, nearly universally recommended to people new to programming. The original tutorial is available online for free as well: https://pine.fm/LearnToProgram/. LtP was featured on the great webcomic Unshelved.
A Pattern Language: Towns, Buildings, Construction by Christopher Alexander.
You may be wondering why I’ve included a book on building construction. The answer is quite simple: the concepts in building towns and houses is nearly directly translatable to building software applications and systems. One part of being an excellent craftsperson is being able to apply abstract learning in different problem domains. If you are an expert in writing software, you are almost never going to be solving problems only for other software developers. (You can and should do so, but the client and users are generally non-programmers.) Thus you’re most likely going to be working in someone else’s domain of expertise. Alexander’s views on architecture apply to software architecture as well.
Beautiful Code by Andy Oram and Greg Wilson.
A book with a purpose, that isn’t a how to, so much as a how to think. The forward speaks eloquently to my purpose with this blog and web site:
I got my first job as a programmer in the summer of 1982. Two weeks after I started, one of the system administrators loaned me Kernighan and Plauger’s The Elements of Programming Style (McGraw-Hill) and Wirth’s Algorithms + Data Structures = Programs (Prentice Hall). They were a revelation—for the first time, I saw that programs could be more than just instructions for computers. They could be as elegant as well-made kitchen cabinets, as graceful as a suspension bridge, or as eloquent as one of George Orwell’s essays.
Time and again since that summer, I have heard people bemoan the fact that our profes- sion doesn’t teach students to see this. Architects are taught to look at buildings, and com- posers study one another’s scores, but programmers—they look at each other’s work only when there’s a bug to fix; even then, they try to look at as little as possible. We tell stu- dents to use sensible variable names, introduce them to some basic design patterns, and then wonder why so much of what they write is so ugly.
This book is our attempt to fix this. In May 2006, I asked some well-known (and not so well-known) software designers to dissect and discuss the most beautiful piece of code they knew. As this book shows, they have found beauty in many different places. For some, it lives in the small details of elegantly crafted software. Others find beauty in the big picture—in how a program’s structure allows it to evolve gracefully over time, or in the techniques used to build it.
Wherever they find it, I am grateful to our contributors for taking time to give us a tour. I hope that you enjoy reading this book as much as Andy and I have enjoyed editing it, and that it inspires you to create something beautiful, too.
- Greg Wilson
Eloquent Ruby by Russ Olsen.
Olsen’s approach in this book is to go far beyond just learning a programming language, but a way to learning the idioms and the “Ruby Way”. Even if your chosen language is something other than Ruby, reading this book will give you an appreciation for how to delve into a language and get the most out of it.
Confident Ruby by Avdi Grimm.
More than any other book I’ve read on Ruby, “Confident Ruby” has affected my coding habits more than any other. If Ruby is about making programmers happy, Confident Ruby is about making programming joyful, and not just in the immediate, but being able to look at code you’ve written in the future and recall the joy. Confident Ruby seeks to combat software rot from the get-go.
Well-Grounded Rubyist by David A. Black
Also known as the “Black Book” (because of the author’s name), WGR is the successor to Ruby for Rails by Black that provided me with the much-needed introduction to how to write Ruby code, with the idea of using it in Ruby for Rails. This book is a fabulous primer on the Ruby idioms and expressions that help make one a good Ruby programmer.
Practical Object-Oriented Design in Ruby by Sandi Metz
This book provides a deeply-needed introduction to object-oriented design, specifically targeted to the Ruby language. Ruby is one of the richest languages in which to express object-oriented patterns, but it is easy to fall of the OO wagon and start to get things messed up. Sandi provides the thinking tools necessary to decide how to structure your code for better maintainability, extensibility and testability. Comprehension and forward communication of the choices made during software design are crucial to programming, and Sandi is one of the very best at explaining things.
Rails 4 in Action by Ryan Bigg, Yehuda Katz, Steve Klabnik, and Rebecca Skinner.
A follow-on the highly successful Rails 3 in Action, R4iA has been completely rewritten, with new examples, case study, and all the great new features in Rails 4.
A great book for beginning Rails developers to start with, and for intermediate developers to step up their game.
The first chapter alone (free!) is worth a download and very thorough read. Justin has provided one of the most effective strategies for learning just about anything skill based, and it’s especially effective for learning software skills. The focus of the book and the examples and such are obviously Rails, but the first chapter is applicable to anything.
HTML and CSS Specific
HTML and CSS Design and Build Websites by Jon Duckett.
This book has been recommended by several people in the [GDI] courses I’ve been helping in. A very visual approach, using full-colour photographs to explain the two declarative languages.
This is just going to be a list of sites I’ve found or been pointed at for helping people learn to program. These are most definitely biased towards Ruby and Rails, as that is my current area of concentration, and generate the most requests that come to me.
The Odin Project – pulling together a curriculum from around the web, this is a curation site that gives order and structure to learning how to develop web applications.
Code Kata – Dave Thomas’s site that lists a great set of coding exercises. You can work these more than once, in fact that is what you do with kata.
Exercism.IO – a site devoted to helping people learn and think deeply about writing excellent code. It has projects you implement and then get feedback on from others, and allows you to give feedback as well.
RailsBridge – a site devoted to helping people get up and running on learning Ruby on Rails, with emphasis on reaching out to women and LGBTQ folks. RailsBridge workshops are run around the world and the documents here can be used individually to help turn your computer into a development machine. What so often isn’t addressed directly by very many of these sites and books is the ecosystem that one has to learn as well: a coding editor, the command line, rake, irb/pry, git, heroku if that is your choice for deployment (which I do recommend for small beginner projects so you can show it off to your friends); RailsBridge tutorials include these very important tools.
RailsGirls Guides – I haven’t explored these in depth yet, I just got the site yesterday. However, I can see just from the list of guides these would be pretty great, just like the RailsBridge site above.
CodeSchool – learn from the “Comfort of your own browser”. Codeschool has web casts, coding practices, challenges, and so on.
RailsCasts – another super awesome effort has been put together by Ryan Bates. Current production is on hiatus, so the $9/month fee for the full screen casts is being pro-rated, so you can buy in for $9 and there won’t be further monthly charges until production starts up again.
RubyTapas – Avdi Grimm is a fabulous Ruby and Rails mentor and guide, who puts out two very short screen casts a week (tapas – small plates). These are really impeccably done, and I personally love listening to Avdi talk.
Ruby Koans – “koans” are an Eastern discipline tradition: small, repeated exercises to learn skills and build them into your muscles and memory, so you can use them without thinking consciously about them. In this sense, the ruby koans are small exercises intended to lead you on the way to learning ruby. I can’t say if they’re that successful, but some people definitely enjoy this progressive way of learning. The ruby koans definitely guide you in the way of test-first development, which is a beneficial practice for all to know.
I am not such a big fan of podcasts, but that has more to do with my personal learning style. Nevertheless, there are some great pocasts out there.
- CodeNewbies – started off as a twitter chat, and grew into a thing, CodeNewbies offers podcasts on topics that range far and wide. Recent topics have included Scrum/Agile methods, maintaining your mental health while programming, interviews with folks who have created significant web sites (Gina Trapani of LifeHacker!!), mobile, databases, single-page apps, you name it. One of the best aspects I can see directly is that this is a very open, diverse collaboration.
These are the ones I’m familiar with at this point in time (late 2015) in the Twin Cities area:
Frontend Masters – Based out of Savage, MN, they offer both live in-person and online courses, and they have recorded all the training sessions for on-demand viewing if you’re a member. The quality of these sessions and the videos are extremely good (these are not your twitch.tv live sessions of someone rambling about their code as they hack away) All the courses I’ve taken and viewed are fantastic.
Girl Develop It! Minneapolis serves up training courses mainly in the HTML, CSS, and JS arena, and is focused on bringing this training to women and other underrepresented groups. The training sessions are focused on beginners, which rather fills the gap between the beginner and intermediate. There are GDI chapeter in several other cities as well. The parent organization is at https://www.girldevelopit.com/.
These are becoming quite popular, if expensive, but they seem to provide what’s being offered: intensive training in the skills necessary to become a web application developer, with experience and skills in the entire lifecycle of modern software development. I can’t really provide much information on them, as I’ve never experienced them. Bootcamps.in provides at least a first-glance at several bootcamps.
Conferences and Meetups
Going to conferences, hanging out, meeting like-minded people, and generally instilling one’s self into the millieau of the Ruby and Rails communities can be extremely rewarding. Even if you’re not the conference type, make an effort to find people in your area to talk to.
If you’re ever in the Minneapolis area, look me up at Rails.MN and Ruby.MN – I attend those pretty regularly (weather permitting).
I also “run” the weekly Toast and Tech meetup from GDI Minneapolis on Tuesdays at the Canteen. Stop on by and have wonderful toast, coffee, and working with a bunch of wonderful folks learning web and other development.