Many people ask me “How do I learn to program?” and “What book(!) should I read to learn Rails?”.
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.
- Web sites
- Teaching Organizations
- Conferences and Meetups
- More Advanced
UPDATE: I’ve created a section for the Absolute Beginner as well, you might find it useful.
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.
**The Pragmatic Programmer by Andrew Hunt and David Thomas
This is the best modern treatise on the craft of programming. It represents the best of experiences programmers have come to appreciate during years of development. I read this book after years of practice, and found everything in it to ring true. (The thought “I could have written this!” came up frequently.) This book is not about any specific language or technology, but spans the gamut of software development. This is a must-have for practitioners.
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. It’s a collection of essays by various software developers on what they think makes code beautiful. In all, the following holds true:
- First, make it correct.
- Second, make it pretty.
- Third, make it fast.
Programming Proverbs by Henry F. Ledgard
This book, published in 1975, and a subsequent volume dedicated to the Pascal language published in 1979, were essential to me back when I was in university learning computer science. They’re out of print now, so I’m starting a blog series covering them. Programming Proverbs: Introduction
99 Bottles of OOP by Sandi Metz and Katrina Owen.
A recent book, representing the absolute best by two teachers of software engineering. Sandi has been teaching Object-oriented programming for decades, and Katrina brings in her expertise with refactoring, resulting in a deep book that stretches beyond the basics and deep into the structures and understanding of object systems and idioms. It brings up to date the actual concepts of refactoring, test-driven development, naming things, reducing code “smells” and making code more easily and economically maintainable and sustainable. They take all the buzzwords and unbuzzify them into practical, useful methodologies and techniques.
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.
Greater Than Code Also known as
>Code, this is a podcast that’s more about people that practice software development and allied things, about management of such people, and making all our lives better.
**Frontend Happy Hour A handful of front end developers, including Brian Holt, Jem Young, Ryan Burgess, Augustus Yuan, and Stacy London, joined by various guests. It’s a fun podcast, each week with a special word or phrase that when uttered, everyone takes a drink.
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.
There’s lots of other meetups in the Twin Cities I’m regularly trying to attend: