Someone asked me recently “how did you learn HTML / CSS?”, I wanted to reply with a fancy answer and a clear, concise route of how I got from A to B - but I couldn’t. Thing is learning HTML / CSS was incredibly muddled for me. I was first introduced to this magical concept of HTML / CSS in University, I had a module on some very basic (now, not then) HTML and CSS. We needed to build ourselves a website, nothing advanced, just a static site. The course quality at my university was horrific, as such we were given little to no guidance on this and the things we were taught were just plain wrong (the kind of worst practices where ‘wrong’ is allowed) or years out of date. This “web stuff” piqued my interest though, I’d always wondered how the hell websites were made, so I figured this was a primary opportunity to learn. I’d have to teach myself, because University were obsessed with using ActionScript 3.0 and Flex to build websites at this point (I only graduated 3 years ago…that’s just how bad it was). Equipped with little more than knowledge of the <body> and <html> elements from an education standpoint I set about learning how the hell this all worked.

This learning process was messy. In fact it was pretty damn awful. At this point in time I had no idea which resources on the internet were good and which were poor - or worse, suggesting bad practices or even insecure practices.

I started ‘studying’ websites that I liked. I’d open up the Web Inspector (which was also new to me at the time) and just comb through every bit of HTML / CSS I could. I was pretty obsessed for a while. I wanted to know how these sites were replicating repeatable paper for a background and placing coffee stains in the corner (these were the design trends of the time).

By poking around in other people’s source code I started to see patterns appear. For example, container and col were very commonly used class names. Why? By Googling this, and stumbling from resource to resource again, I stumbled across the concept of grids and grid systems. At the time the 960 grid system was the Daddy.

My attention would then shift pretty heavily on to new concept ‘X’ (one day grids, next day accessibility etc). After a while I started to get an understanding of which blogs / websites were good and could be trusted and which couldn’t. At the time CSS Tricks, Smashing Magazine, NetTuts, Spoon Graphics and so on were part of my ‘regular reading’.

We only had about a week to make our static site for uni. Looking back now it was such a tragic hand in. position: absolute; ALL THE THINGS seemed to be my mindset at the time. That was okay though. I was enjoying learning this web stuff on my own and teaching myself. I decided that I’d keep on going, and that to be quite honest I’d quite like to be one of these fandangled Web Developers when I leave.

My self-study kept on going. And it was just as messy and ‘stumbly’ as ever.

After a few weeks of inspecting sites, reading blogs and playing around with markup I was pretty happy with the ‘static’ side of things. ‘Pretty happy’ does not mean good, I was just aware of most of the core concepts now. I had learned the hard way what the box model was and which order link states were applied.

I knew that this ‘static’ thing couldn’t get me too far though, after all all the websites I regularly viewed had lots of content, sometimes from multiple authors. There’s no way these people were making one page for every blog article. Turns out, they weren’t. After another Google-party I’d stumbled across the concept of Content Management Systems. Okay, cool. I had the front-end stuff pretty down now; well, the HTML and CSS! But I needed one of these CMS’ to get some data. I fell in to the WordPress hole. There are lots of different communities in the web industry, at this point I was quite firmly in the web agency / use a CMS camp. I started learning all about WordPress, after a month or so I’d built a totally custom theme from scratch and this had custom post loops and clever uses of images etc.

Hearing how WordPress was a blogging engine and that it wasn’t right for every type of site I started investigating other CMS’. Behold the period of ExpressionEngine! I paid for an ExpressionEngine license and started learning how to use it. I redeveloped my personal blog using it. I also learnt the pure and utter horrors of Drupal and Joomla during this time shudders.

I’d also gained some exposure to web ‘frameworks’ now. By exposure to the ExpressionEngine community I learnt of CodeIgniter. All I knew was ExpressionEngine was built on top of this CodeIgniter thing. But what the hell was CodeIgniter? The website was incredibly confusing given I’d never used / looked at a ‘framework’. The website said it used PHP. My head was now ready to explode. So you have the language PHP, which makes a framework, which then makes a CMS? Right, okay. Of course this makes sense now, but at the time this was genuinely confusing.

I’d also started brushing up on some JavaScript around now. My fiancé’s best friend (and Head of Digital at the time at an agency) mentioned this thing called jQuery to me. I know this sounds so cute and novel now, but at the time I had literally no concept of these things. I started ‘learning jQuery’ with very little understanding of where JavaScript stopped and jQuery began (an AWFUL way of going about things!).

Roll on a year and I was hurtling towards graduation. I had a very, very strong grasp of HTML / CSS, a good understanding of JavaScript and I could integrate with multiple CMS’. I was gunning to become a front-end developer at this point. I had absolutely no skills or expertise on the backend (other than using a CMS, which of course, isn’t the same).

Luckily I landed a roll straight out of university as a front-end developer. This company used Ruby on Rails, another one of these bloomin’ framework things.

Long story short, I started stumbling through backend development the same way I had with front-end development. What the fuck is MVC? What the fuck is an ORM? What the fuck is a server? How do I configure a server? What the fucking fuck is REST? Now? I’ll happily develop backends using Node.js, PHP or Python, using multiple data stores.

And the point in this post? Trust me, trust me please, when I say NOBODY KNOWS WHAT THE FUCK THEY’RE DOING. If you’re learning web development now, you’ll be alright. I don’t know when you’ll be alright, but at some point. When you’re done stumbling in to the right things at the right time.

My journey has gone from CSS to Sass / LESS, from Wamp to Vagrant, from manually running commands to Ansible / Puppet, from no source control to Git, from terrible shared hosting to Digital Ocean, from using CMS’ to building the CMS myself, from jQuery spaghetti to Object-oriented programming, from noob to conference speaker. And could I tell you how exactly to do the same? Nope. I stumbled, I stumbled a lot.

API, REST, MVC, SOAP, ORM, Gulp, Grunt, Sass, LESS, Ember, Angular, Backbone, OAuth, Rails, Laravel, Express, Sails, Django, Flask, HTTP, Vagrant, Ansible, Chef, Puppet, Provisioning, Source Control, Git, SVN, Mercurial, sessions, JSON, XML…you’ll need to learn a lot, but everybody did. No one was born with innate knowledge of HTTP status codes. So be nice, don’t laugh at people when they’re clearly learning. And lets definitely help people grow out of any awkward Joomla periods they’re stuck in.

TL;DR Learnt an awful lot over 3 years, with very little recollection of how I truly got here.