A Coder's Journey:Or, The Lessons I've Learned Along the Way

As a web designer, coding is an important part of what I do. Recently, there has been some discussion in the design community about whether or not designers should know how to code. I'm not going to get into that debate in this article.

Suffice it to say that I do my work both in Photoshop and Coda, and actually do all my own coding by hand. For me, learning how to do it has been a long and interesting process that has spanned several years.

I thought that it might be interesting to actually map the course of that journey, so that's what this particular article is going to be all about. Novices and beginners might be able to learn a thing or two from my mistakes. And as for you more experienced readers, hopefully you will be at least entertained or be able to relate to some of what I'm talking about.

The Basic Story

Let's start with the recent past, head back to my beginnings and then move forward again. As of 2006, I completed five years of school at a small (but awesome) university near where I live. First, I did a four year program and graduated with a Bachelor's degree in English literature. I then blitzed through an intense eight month Master's program in the same field.

A few months ago, I would have said that my degree is completely unrelated to what I actually do as a designer and developer. Some of my recent thinking has started to change that, though, as you can see in a pair of articles I wrote recently on the relationship between language and coding.

I don't remember this, but apparently at that age I was able to build a very simple program in Basic, with a little guided assistance from my dad.

Anyhow, that's all a very roundabout way to come to the point that, despite having not actually completed a PhD (something I did consider pursuing), I seem to have earned the nickname of “professor” in my family, especially from my father. My dad always supported my schooling, but he has often said that he thought I would have gone into something to do with computers or programming.

He also likes to tell the story of how I “wrote” my first program at three years old. I don't remember this, but apparently at that age I was able to build a very simple program in Basic, with a little guided assistance from my dad. I have no idea what that program actually did, and it was likely just a simple script of a few lines that would be executed by an interpreter. Still, I like to think of that as the starting point of my journey as a coder.

Learning to Program

The first instance that I actually remember of doing anything that could actually be called coding (or programming) came several years later, when I was about 11. I was at a friend's house and we were just playing around on his DOS-based computer (a very dangerous thing to allow two unsupervised boys to do), and we stumbled across a program called dBase, which we obviously started playing around with. For those of you who don't know dBase at all (and I'm assuming that's many of you), it's an older database package that includes a command prompt, where you can execute single line commands and even extensive program files.

As it turned out, dBase was also a software package that my dad was quite familiar with, and I eventually sat down and started to learn how to write basic, procedural programs. After that, I moved on to working with a language called Clipper, which was a compilable variation of the dBase core. I learned about declaring memory variables, working with conditional logic, building loops and writing user-defined functions. The syntax was quite a bit different than most of what I work with today, but most of the key concepts were all there (no “objects” though).

My friend also learned the language, and together we developed a very simple contact management program, which we called Tele-Rec. It didn't do all that much other than store contact data, and maybe print a few basic reports, but as a couple of 11 or 12 year olds, we were pretty proud of it at the time.

World Wide Web

Ultimately, the dBase/Clipper language never really seemed to make the transition to becoming a viable development platform for the emerging world of Windows (though some efforts were made). As such, I never really pursued it much further. However, right around that same time, another technology was starting to become more popular. I think you might have heard of it. It's called the Internet. Or, as seemed so trendy and hip to say back then, the World Wide Web.

I learned most of what I know now by studying and copying the code from other sites (scandalous, yes). Through trial and error, I learned how to structure an HTML document, and what most of the basic tags did.

Despite the fact that the dBase family of languages was completely and entirely unrelated to HTML, I still found myself migrating toward this new method of coding, which offered something that I never really had before—a simple way to develop more extensively graphical interfaces (as opposed to the simple 16 colour text interfaces that I was used to working with).

Like many young coders, I learned most of what I know now by studying and copying the code from other sites... Through trial and error, I learned how to structure an HTML document, and what most of the basic tags did.

Unfortunately, at the time, I had some pretty bad misconceptions about markup, believing that it was a matter of presentation rather than description. I thought of the tags as a way to make content look a certain way, rather than as a means to structure that content according to a certain schematic. I even taught myself how to slice up an image and recompose it within a table (insert blood-curdling shriek here).

Yes, I was a table guy. It was also 1996 and I was 15, so I cut myself some slack.

Further Development

By this point I had started high school. My voice was cracking, I was fighting rogue pimples and convincing myself that the crush I had on that girl I knew only in the most superficial of ways is actually the incredible depths of love, all the while wallowing in self-pity as she does not return my feelings. As far as I was concerned, my future held nothing but drawing comics and writing fantasy novels (all very successfully, of course).

Okay, somethings never change—I still have plans to pursue both of those things to some extent at some point down the road. I did manage to outgrow the rest of those things though.

Still, I never really stopped coding, and managed to get my hands on some web space, where I created a plethora of horrid fan pages for the various geeky things that apparently interested me at the time. I think there was a Spawn page, and some stuff about Final Fantasy VII. It was probably about as bad as it gets, as far as both content and design are concerned, but I was still learning some of the things that would become the fundamentals of my later work.

One example was a basic introduction to JavaScript. I'm not sure if it was for a class project or just something that I decided to do on my own, but at one point this guy who was working for my parents helped me build a simple script that would accept input from the user and then print it out to a page. It was nothing all that fancy (I could probably recreate it in matter of minutes these days), and he wrote most of the code. I just knew how to change a few values, none of which really effected the functionality of the script itself.

High school was also the time when I got what could probably be called me first “freelance client”. I was taking a class called Communications Technology (or something to that effect), in which we were apparently learning some web stuff. In truth, I think we hardly learned anything at all from that teacher, but through it I did end up getting hooked up with a local telephone company, for whom I created a website of sorts. I built it complete with frames and poorly achieved JavaScript-based mouse over menu effects.

It almost hurts to remember those things now, but the journey was continuing, albeit rather slowly.

A Flash in the Pan

After high school, I worked for a year before university, and one of my primary responsibilities was to “redesign” and manage the company website. In that role, I inherited some JavaScript and Perl scripts, so I needed to learn more about those languages in order to be able to perform some routine maintenance. From that learning, I even found myself writing a few custom scripts (like an email tracking script which, looking back now, may have been of a somewhat dubious nature). In all honesty, I suppose “write” is a relative term. Patching together snippets of code might be a better description. Still, that's the point at which I really learned the basic syntactical structure of C-based languages.

It was also around this time that I introduced myself to Flash. You see, being the silly and naive teenager that I was, I convinced both myself and my employer that it would be a good idea for us to have a fancy flash-based splash page (insert further groans here). So, I installed Flash MX on my super fast 486 and started learning about basic tweens and keyframes. In the end, I ended up building this ridiculously simple little animation that really accomplished nothing, other than maybe inflating my ego a bit and hurting the overall usability.

In fact, I am reasonably sure that I could essentially duplicate the same basic animation with a combination of jQuery, HTML 5 and CSS 3 today. Not that I would want to. But I could.

I don't discount my time with Flash as completely useless, though, as I still find myself opening it up every once in a while, to build small, graphically rich web applications (but never a splash intro or complete site). The opportunity to work with ActionScript 2.0 was also useful, since I find that every programming language that I learn to code in actually helps round out my abilities as both a coder and programmer.

Marginal Progress

My journey as a coder didn't make all that much progress during university. During the actual school year, all of my attention was focused on my classes (which, being in the English program, had very little to do with any kind of computer code). During the summers, I went back to work, but only part of what I did ever had to do with the website. I continued to learn basic JavaScript and Perl, and my designs were getting better, but for the most part I don't feel that I advanced all that far.

The one thing that I did do was to make at least a minimal effort to start implementing CSS, though in horrible fashion. By looking at some existing code, I was able to figure out that you could apply classes to your HTML tags and then write CSS rules for those classes. I did not, however, have any understanding of the cascade, and ended up writing these horribly bloated style sheets, where everything was done with classes. I also had no concept of inheritance, and found myself repeating the same property declarations over and over again. Nor did I even know that there was such a thing as the box model.

The unfortunate result of all of this was that my use of styles was pretty much limited to changing the font, size and colour of text. Looking back, it was all really just one step removed from littering my code with all kinds of <font> tags.

Enlightenment

By this point, you are probably wondering: what's with this guy? Is he ever going to figure it out? Yes! After finishing university, I went back to work for the same company, and landed there just in time to be implicated in a complete re-branding process. This, of course meant another redesign of the website. By this time, I knew that my skills weren't up to snuff, and I'd already heard plenty of murmuring about creating tableless layouts.

Suddenly, the box model was revealed to me. I had a better understanding of selectors, inheritance and specificity.

So, I made a concerted effort to get better at coding.

The main crux in that effort was a trip to the local bookstore, where I hunted down and purchased a book explaining CSS. It was like turning on a light in my mind. Suddenly, the box model was revealed to me. I had a better understanding of selectors, inheritance and specificity. I was astounded to learn about positioning and floats and pseudo classes.

From there, the next site I built was completely different, and much more inline with the way I code now. It still wasn't great, but there were no tables (at least not for layout purposes—there were a few tables that were actually meant i> tables), and far fewer classes.

I also found myself hungrier for knowledge, and started learning about coding at a much faster rate than I have had in the past. Eventually, I was also introduced to blogging, which was also my first real introduction to the concept of content management. I started with a Perl and flat text file based system called blosxom, which was lightweight and elegantly coded, but a little bit inflexible and clunky in terms of updating.

Later, I discovered the much renowned WordPress and a system called Concrete5, both of which blew my mind and both of which I still actively use today. I started to learn PHP too, and have found it to be much nicer server-side language than Perl, especially when it comes to creating output specifically crafted for websites.

Conclusion (So Far)

Today, I develop custom themes for my clients, often building custom PHP routines to allow for very specific functionality. I keep my markup separate from my design with CSS. I can write complex JavaScript functions from scratch, or can implement a variety of jQuery awesomeness. I've even had other designers approach me with questions about their CSS code (and been happy help them iron out a few gremlins).

I think I've come along ways. Have I reached the end of my journey, though? Not even close. While I'm comfortable with my current coding ability, there is still so much left out there to absorb. I have a reasonably firm grasp on CSS 3, but I know there's more to learn. The same is also true of HTML 5. Then there's Ajax, which is something that I've never had to actually implement myself, but which I certainly want to add to my skill set.

The basic truth is that there's always room for improvement—always some way to get just a little bit better. The day I stop learning is the day I become stagnant, and from there, it's only a hop, skip and a jump to also becoming irrelevant.

So, while I've come a long way from sitting with my dad and writing that first Basic program, I can openly say that I still have a long way to go. I've found that is especially true in this precious landscape that we call the Internet, where technology is always changing and advancing.

What's Your Journey?

We all take different paths to get to where we are. Maybe you can relate to one or two of my experiences, or that you learn a thing or two from some of my rookie mistakes back in the day. If not, I hope that you've at least enjoyed reading about how I got to where I am today!

Now it's your turn to share. What was your journey like? Did you follow a similar path, or did you come to coding through a completely different avenue? Let's hear some of your stories!