probable knot
Programming wasn't something that I thought I could learn a few years ago. I was a web designer. I struggled to xhtml/css as I tried to cut up the psd of a site design and make it into a web page. Even though it was what I did exclusively at that time as my profession, I found the end of every project a narrow escape from total annihilation. Rarely did the conclusion of a project leave me with a sense of accomplishment. The problem was (and still is) that design is so subjective. A clients taste, mood, corporate politics, over developed sense of competence, favorite color, or what ever can lead them to totally rip apart a well reasoned, professional interface design. Design is too subjective. Don't get me wrong on this, I understand that the client is always right and I was being paid to make them happy and not satisfy my aesthetic sense and motivations. It was the random and non-sensical ways they would destroy something I had spent many hours crafting. All that thought, research, and experimentation swiped aside on a whim by someone who thinks they know more about how to design a website than I do, and yet are paying me to make one for them.
What attracted me to the development side of things is the absolutes. A function returns the right value or it doesn't. It is all about consistent and repeatable results. A finite set of rules govern all aspects. You can always find a solution, and when you have it there is a verifiable outcome to confirm it. Not so much with the wild ass world of colors, images, tones, and narratives. I can learn the rules of the language and build outward in my knowledge and understanding. With design the rules are different in how you understand them and their application. Most importantly clients don't know a damn thing about programming, mostly convinced its dangerous magic that will burn them if they touch it.
Programming has the same potential for creative exploration. I know this, and I really want to get to a place where I have the familarty and experience with the tools to do some of this exploration, but I am constantly set back due to my lack of the personality and natural abilities of a traditional programmer. I really love logic and elegance, but I don't naturally think in numbers and equations. I do not have a mathmatical brain. I've always struggled with language and symbols, I was even diagnosed in my school years with a learning disability in english. I find it very hard to draw the lines between ideas and concepts and where I should practically apply them, more so how to go about even starting to. I do have breakthroughs though. I can hammer my head against an idea or programming concept for 12 hours straight and after I've broke it every way possible and read dozens of tutorials, blog posts, and book pages I'll suddenly have an intuitive insight into how to apply the idea to my problem and then I will rapidly sprint to a complete solution.
And I will only retain 20% of my understanding so the next time its almost like starting over. That is the most frustrating part. How little of the knowledge I retain that I've worked so hard to find. I write notes, comment my code, play with mnemonic devices to remember argument orders or function names but I still struggle and have to spend nearly as much time looking things up as being productive. And that's for the easy stuff. I have no idea if this is a normal experience or not. If other people find it as difficult to learn and retain the myriad of syntax, patterns, methodologies, and rules that are designed to make it easier to write things a computer can turn into machine code.
I really wish I knew how to ask questions. Most times it feels like if I knew what question I was asking I wouldn't need to ask it. That is, if I could articulate with words the difficulty I'm experiencing with something - the part I don't understand - just the act of coming up with those words would make apparent the answer. I also fear that my questions are probably one level or more below where I'm trying to work - such as I'm struggling with object type handling (like how to think about what an object is) while this knowledge is assumed and the stuff I'm trying to accomplish requires concrete understanding of enumerations, module mixins, closures, proc/lamda, or class inheritance.
So why do I do it? Partly because of the stimulation. I possess intense amounts of curiosity. Programming at times is so much outside my intellectual capabilities that I feel crushing demoralization, but those times I gleam some intuitive understanding of the inner workings of a complex system of events I become electrified. I beat the motherfucker! Ha ha universe! Fuck you and your abject indifference! I made this bitch work! Suck it!
What follows is a dark period of inactivity that lasts until the next struggle to learn, breakthrough, and crash. The cycle repeats and I learn and retain just a little more so that the next time I find out how to make the problems harder. It's not nearly as stimulating to solve something over again as it is to make what I want to achieve more complex.