learning to program through osmosis
There are times when I wish learning by osmosis was less dream and more reality. Studying for exams is probably the circumstance where I wished this the most (you know: step 1 - place textbook under pillow, step 2 - sleep, step 3 - wake up refreshed the next morning knowing the contents of all 14 chapters and the glossary, step 4 - ace exam). But I've also fantasized about learning by osmosis when it came to developing some basic web design and programming skills. Before I mislead you into thinking that I developed a way to do just that, the closest I've gotten to living the dream is by moving to San Francisco, being unemployed, and living with four YC alumni.
I've created some websites in the past using WYSIWYG editors. I won't be posting links to them here because they're, well, ugly. At the time, I didn't have time to learn enough HTML and CSS to do away with Dreamweaver and tables and all of their inherently frustrating limitations.
In contrast, when I arrived in SF I had time. Lots and lots of time. And I had a premise for a site. And I was surrounded by guys and their Macbooks and their nearly constant creativity. Not only were they creating things, they were creative in the sense that creativity is synonymous with innovation, initiative, enterprise, and resourcefulness. And I was inspired. I bought a domain.
After asking my roommies a few questions, I concluded that I was starting so close to knowing nothing about web development that perusing the results of Google searches would suffice as my guide. Sensei Google. I borrowed an O'Reilly book, but found myself returning to Google for tidbits of assistance (with a background in biology, most of my time with the O'Reilly book was spent speculating on what the species of fish was on the cover... salmon, in case you're also curious).
I began by mocking stuff out in Photoshop by following a few online tutorials. One of my roommies was hosting a houseguest who worked as a graphic designer, and he shared a few tips and tricks. I played with colours and wondered aloud why Photoshop tools were so counter-intuitive. Needless to say, the ⌘+⌥+Z keys got a lot of use.
Once I had a better idea of what the site would look like, got some feedback from a graphic designer friend, and determined the extent of the site's functionality, I debated whether I should learn Ruby on Rails (the language of choice around here) for the backend. Ultimately, I decided to create a custom theme for Wordpress (despite being warned that Wordpress could be a nightmare). Enter more tutorials.
I started with a template from a tutorial and started modifying it. Trial and error was the name of the game. I came to appreciate that the method isn't called "trail and flawless" - there was a lot of error. Starting with the CSS in a TextEdit window, I made changes, saved, and refreshed. And I did that again and again and again. For awhile, I would enter #000000 and expect white to appear. I then realized that, because the absence of all light/color is black, the nomenclature actually made sense. I got pretty far just by editing the CSS, but reached a point where I couldn't ignore the HTML any longer.
More trial, more error. I'd think that I was on the right track, then I'd make a change, save, refresh, and (fingers crossed) ... error. I began to understand more of the nomenclature. I developed a love-hate, or rather hate-love, relationship with semicolons (hating them when one was missing and the structure of the page suddenly collapsed in a heap of div rubble and loving them when inserting one would miraculously fix everything). When trying to float divs, I found myself envisioning the position of lily-pads in a pond. Eventually, I got to the point where I would make a change in the code and was no longer surprised that the desired change would materialize in the browser window. The code made sense and I was able to appreciate that the code I was using as template was inelegant and inefficient. The experience was analogous to learning the basics of a foreign language using a textbook only to discover that the textbook was poorly written.
Then came Wordpress. Kevin graciously set up the server side of things and I began the process of integration. The tutorial was less than helpful, but I followed it to the best of my limited abilities. Ultimately, Kevin helped me navigate the intersection of HTML and PHP. More trial. More error. But I was learning. As a result, I have a website: www.amerishock.com
It's not perfect, but it's far from fail and it's mine. The design is mine. The underlying structure (minus the Wordpress code) is mine. The idea is mine. And, most importantly, I learned to program. Admittedly, what I learned was very basic but it can still be classified as learning.
While it wasn't learning by osmosis, the learning process was relatively friction-free. Being immersed in a culture where spending hours at home staring into the glowing screen of a laptop is seen as creative and productive, rather than antisocial, makes it easy to put in the time and effort needed to learn to code. And if you already code, I can't help but conclude that living in SF can only be good for productivity. Sharing an apartment with YC alumn can't hurt, either.
