A realization has been dawning on me as of late, one that I’ve always known, but that is easy to forget, easy to misplace, easy to neglect. The best way to learn anything is to do it, to struggle through, to forge on, to fight and gnash teeth and curse at. There is no knowledge as highly regarded as that which you have to work for.
I’m not even particularly certain how this all came about, it seems to have been a culmination of things. I didn’t intend to but somehow I ended up putting on my plate a bunch of new stuff to learn around the same time. Git, ruby, rails, blogging, prosper, hosting my own domain, and testing (Testing being a decidedly late addition). This blog was the genesis of a lot of it, that and just being curious.
I had my first post back on October 2nd of last year, as of writing this 112 days ago. At that point I didn’t really know anything about the 7 topics above, I started the blog using Google’s Blogger platform, it was an easy onramp.
After a month or so, I was encourage by some friends to move the blog to my own domain, which you are now at. I also kicked off the prosper project around the same time as starting this blog. I played around with ruby and a crazy friend convinced me to try out rails. I moved prosper to GitHub and began learning git. Now prosper supports 19 backends and has gained over 100 unit tests in the last few days.
Here’s the kicker though, I don’t know what I’m doing. I never really did, I just started doing stuff, and have been running ever since. There have been days when I’ve gotten 5,000+ hits on this site, several days with several hundreds of hits and I’ve been steadily increasing the daily reader count. I don’t know how I did that, I just kept writing, I liked it, I promoted it over twitter and hacker news if I thought I had written something insightful, and I guess that is working. The same thing with prosper, I saw a need for something that didn’t exist, I had a vague idea of how to make it, and I started coding. I’ve rewritten and refactored it piece by piece to the point that it supports all kinds of things I never thought it would. It’s due for another architectural change after I finish these unit tests.
If there is one key thing I could convey to anyone reading this is to hustle. You will never be prepared for the things you are capable of doing. You will achieve your greatest accomplishments not by building up a grand framework of skill and then deftly creating something glorious, but by starting small and persevering in making it better and better. It is never an easy road and you will gain a grand framework of skills, but you have to push your boundaries to grow.
This came together for me last night, I was working on a rather tricky bit of rails and broke something. I hadn’t gone too far into it and so I typed rake db:rollback and git reset head --hard and was back to a working application. I stopped myself for a second and thought about what I had just done, how improbable it all was from where I was just a month ago. I then thought about what I was doing in rails, and thought about how earlier in the day I was wrapping up prosper functionality in unit tests and finding regressions, and how I would have to write some cucumber tests for what I was doing, and I realized that 112 days ago I didn’t have the vaguest idea of any of this.
I would love to put a triumphant “I’m just so damned smart and talented and handsome” paragraph here, but that’s not the case. I just steeped myself in this stuff, I worked in git daily, I read about it, watched screencasts, I bought agile web development in rails, I got design patterns in ruby, I hustled. And you can do it too, take the first step today.
The first step that you should take is to invest yourself in something non-trivially. Want to learn rails, then go buy agile web development in rails, want to learn github, move an active project out there, want to learn linux, reformat your machine so that’s all you have. You have to invest yourself, it plays a trick on your brain that makes it want to not waste that “investment” by quitting. If you can burn your boats (Hernán Cortés reference) all the better. I had no choice but to learn git or else I couldn’t keep working on my project, and as a side bonus I got the joy (and frustration) of working in git everyday.
Get out there and hustle, learn something new, do something that scares you, reach beyond your grasp.