Naivety Helped Me Learn Rails
Published on November 30, 2012 by Jesse Storimer
Before I started working at Shopify I had near-zero experience with Ruby and Rails. I had read the PragProg book before starting there, but that was pretty much it.
After a few months on the job, I was shipping features on my own and started contributing to all different parts of Shopify. There were a few key factors that helped me ramp up quickly.
I consider myself lucky that, by chance, I didn't have a laptop for my first week of work at Shopify. Since I had no laptop, and relatively no experience with the tools, I had a hard time participating in pair programming sessions. So I just watched.
I got to sit and watch while smart people did stuff they were good at all day. And I soaked things up like a sponge. I spent most of that week sitting with @Soleone. He was a great sport when I slowed him down with questions.
As programmers, I think we're sometimes too eager to 'get our hands dirty'. Getting experience with a particular project is valuable, but it's akin to heading into the woods with no idea where the trail is. If you're experienced with the tools and workflow of the team you're joining, you may be able to spot the trail easily. If you're inexperienced, your eagerness to get started might have you wandering off and getting lost.
Spending time watching how others work can be immensely valuable when you're starting out. When my laptop arrived the following week, I still had a lot to learn, but at least I knew where the trail was.
The naive beginner
After a few months of Rails programming under my belt I started to look around at what else was going on around me. Shopify has always been a company focused on engineering. When I started there, I was blind to the business side of things.
Based on what I saw in the office, I thought it would be easy to start a software product of my own with some hacking on my own time. Creating a software product does require some programming, but a successful product requires so much more than just that.
But I was naive.
In my off hours I would think up ideas for software products and immediately create a Rails app to build it. I did this more than once. At first, I was bugging my wife about what kind of software she might need to run her business as an Acupuncture practitioner. I was going to build a multi-tenant application to implement all the things she could possibly need.
But it was hard for me. I got stuck technically because I didn't know how to structure a multi-tenant application. I did some Googling and poked around Shopify to see how it was done. Eventually, I figured it out. But, in the process, I lost interest in that 'business' idea and moved on to the next one.
I did this a whole bunch of times. I would get excited about some 'business' idea and begin implementing it right away. I would usually work until I hit some technical roadblock. This gave me opportunities to learn stuff I would never have learned on the job. I got to feel the pain, firsthand. Besides running into all kinds of new technical problems, I learned to think about things from a customer perspective, pricing, and learned put together a simple sales site. But none of these apps ever saw the light of day.
Rather than watching TV, or going out to social events, I would stay home hacking, because I believed I was going to be running a successful software product in the near future. Why?
The guys that I worked with made it look easy. It seemed like they were just hacking all day, and business was good. I didn't see any of the behind-the-scenes business stuff that really held everything together. I got it into my head that this was easy. I had no reason to believe otherwise.
Beginners mind is a concept from Zen Buddhism. It says:
In the beginner's mind there are many possibilities, in the expert's mind there are few.
For better or worse, if you asked me now, "I've got this idea for a software product, do you think it'll be successful?", I would say no. I would begin telling you all of the things you haven't thought of that make this hard. I would start boxing you in, telling you that you must have this much time, and this much money, and this much market data, etc.
If you asked me that same question a few years ago, I'd have been excited to get started. I had beginners mind. In a beginners mind, there are only opportunities.
What I learned
This naivety, or beginners mind, helped me learn Rails. In the end I didn't launch a software product. But I learned a lot about software. I was writing code all day, then writing code in the evening too. Of course, this was before I had kids and while my wife was going to school in the evenings. You might think this was tiring, but I was driven by my naivety.
After attempting to build a number of products this way, I eventually completed one. I had an idea, went to build it, and ended up with exactly what I wanted in the end. By this time, I had overcome enough technical hurdles that I was able to build the app without hitting any major roadblocks.
When I got to that point, I thought hard about what I should do. I was driven by the idea that I could put this on the market and start charging for it. But when that time came, I shelved the project. In the end, I realized that I really didn't want that responsibility. I just wanted to build stuff. But I needed a reason. My naivety drove me to keep going and keep learning.
I must admit that this naivety reared its head again when working on my first ebook. I asked a few people, and they were interested in the concept I had. But I didn't really know how to write a book, or sell one. In my mind I was convinced that this would be a useful resource for other people like me. This kept me motiviated. I jumped in with both feet and got to learn a lot, both about the technical subject matter, and the writing/selling process.
I think this is a powerful concept. Some of the most learning-intensive times of my life have been situations like this: when I have no idea what I'm getting myself into. Put yourself in situations where you can be naive. Take these opportunities to really learn something new. Enter the world of possibilities for a while. Become the beginner again.