It hasn't been that long ago when I installed my first Python build. In fact, the earliest record I have of an earnest attempt at coding is dated April 19th, 2009 (an autogenerated Django manage.py). Of course, PHP had preceeded that, but only hacking on top of existing packages. I wanted more control over the site.

My first real project was LetsJ.am, a specialized forum for musicians where you'd create "jams" (IE: threads) and upload an MP3 of your playing. Someone else would come along, download it, slap it into Garageband, record another track with it, and upload both their isolated track and the mix. Rinse and repeat.

Like many others, I didn't even consider hiring someone to code it for me, I just Googled around and found Django (the fact that it was written in Python meant nothing to me). Rails seemed cool, but, Django seemed cooler (being a jazz guitarist myself).

So I installed Django and proceeded to bang my head against the wall. Though the wonderful Django tutorial softened each blow, the suffering was noteworthy. But, after a week or two, something interesting happened…

I figured out just enough Python and Django to do what I wanted to do. Namely, I figured out:

Models were just a way to access the database. (I had no clue what a class, object or ORM was.) (?P<some_id>[\d]+) meant dynamic numbers in URLs that let you get records from the database. (What is a regex?) HttpResponse() sends the browser text. It also can send HTML (and I knew a bunch about HTML/CSS). (The Request/Response cycle meant nothing to me.)

And to be honest, that was it. But, once I had those three pieces of the puzzle, it was good enough. What had previously been a mysterious and confusing world suddenly started making a little bit of sense. In my mind, URLs just mapped to an HttpResponse which grabbed Models.

Armed with that knowledge, I just coded and coded some really repetitive (and horribly maimed) code and, to my surprise, it worked.

And that was my tipping point. Once I got past that, my learning of "proper things" accelerated, but I could always fall back to the really hacky solutions to "get things done". And I never knew enough to feel guilty about it.

This is one thing I think a lot of the "learn to code" sites get wrong (though they get a lot right). To me, it isn't about achievements, challenges or whatever. It's about hacking a way to a solution, however rudimentary it may be.

If you don't have a problem that code can solve, what are you hacking for?