Evolution of a Full Stack Web Developer

Laptop with php code being edited
In this story I will be documenting my long journey to becoming a Full Stack Web Developer.  I hope you will get some value and insight from this. All of us take different paths to becoming Web Developers, this is for anyone who thinks they need to start in any specific way.

The Beginning

It was 1995 and my wife was going back to college soon, so we had plans to purchase our first computer.  After some research we focused on one with a Pentium processor.  We settled on a Packard Bell, Pentium 100, 8MB Ram (after 4MB upgrade), 1GB Hard Drive, 14.4k modem\sound card combo with a 15″ monitor.

At the time we had the choice between Windows 3.1 or Windows 95 and chose Windows 95.  I wasn’t happy about dropping nearly 3 grand on this.  But, in retrospect it was a tiny investment in my education.  This was about to become the beginning of a huge obsession of mine spanning decades.

Curious about how everything worked, I would spend hours playing with the bundled software.  That quickly became boring, so I turned my attention to the file system.  I played around with every file type to see what happened if you tried to open them directly or just delete them.  Certainly these useless .exe, .dll and .sys files serve no purpose and are hogging up all this extra space on my tiny hard drive.

Bad idea! Of course deleting those files would create a non bootable system.  The first time this happened I panicked. My wife had started school and was storing all her homework on there. Lucky for me she had a backup of her work, maybe she didn’t trust me.  This was my first lesson in the value of a good backup routine and recovery tools.  Our system included a system restore disk, which I used frequently.

I spent the next year learning as much as possible about computer hardware and software.  At that time an internet connection was extremely slow and expensive. You really had to limit your time online to limit the fees. It wasn’t until 1996 that we were able to have an unlimited flat fee based internet connection.  That changed everything!  Now you could access anything without paying some ridiculous hourly fee, this made learning so much easier.

Computer magazines also became a huge source of information for me.  That was the main place at the time to learn about new software and hardware.  I couldn’t get enough.  After gaining a little experience I started volunteering to fix computers for anyone I knew.  I did this for free over the next few years just to learn.  Doing this for free was probably the best decision I had ever made.

Games – The Hidden Path to Programming

In 1995 PC gaming was much more of a process than it is today.   For some DOS based games you would need to create boot disks with modified Config.sys and Autoexec.bat files just to free up enough memory to load the game.  At the time I thought “So annoying”!  But, after the introduction to boot disks and batch (.bat) files I started exploring their uses further.

Batch files really were my first introduction to programming. Of course I didn’t think of it as programming at the time. I just thought batch files were a cool way to automate things.

There were a lot of problems for anyone trying to play games on Windows systems in the early days of Windows 95. Systems then didn’t have enough ram, had weak video cards and small hard drives. Video games were advancing fast and would start pushing hardware technology to keep up with demand.

Plug and Play hardware wasn’t exactly functioning as advertised (not for gamers anyway).  Each device on your computer would be assigned and IRQ number (Interrupt Request).  Some devices would share the same IRQ number with each other.  This would cause mostly sound problems when trying to play games. You really had to be good at disabling any shared device before playing your game.  Troubleshooting IRQ conflicts would prove to be a great skill in the years to come.

Then the fun really began in 1996.  Duke Nukem 3D and Quake were both released that year.  Both had multi player modes and would eat up my time like crazy.  Playing games online was about to become big business, and I was hooked.  But, of course our internet connection was extremely slow. Even upgrading to a 56K modem didn’t provide the best experience.

Screen freezes were common as your modem would choke trying to manage the flood of packets. Your helpless player would be stuck, standing there like a statue providing an easy kill for someone.  These 2 games had so much more value than just the game play itself.  You could create mods and maps to extend them.  This alone was probably responsible for a lot of successful careers in the gaming industry.  I spent a huge amount of time building maps for both games, so much fun and a great learning experience too.

Web Pages – What is hidden underneath?

At some point in 1996 or 1997 I figured out that you could save a web page, edit the HTML and change the way the page looked.  There was no wide use of CSS (Cascading Style Sheets) yet so everyone would modify how things looked by setting attributes of the element itself.  As and example, see the H1 Element below, we are using a Font element inside with a color attribute set to red.

<h1><font color="red">Quake v.1.0</font></h1>

So, I really had no use for this information yet, It was just another thing that seemed interesting. Hours were spent modifying web pages and I was slowly understanding how everything worked together.  I put this knowledge on the shelf and didn’t really do anything with it for the next couple of years.  Occasionally I would dabble in it and read tutorials when I ran across them, but for the most part I set it aside because it didn’t seem useful.

Building Computers and Local Area Networking

Its 1999 now and I have started building computers, first for myself and then for others.  It was a great way to make a small fee and play with new hardware too.  I was focusing on budget gaming computers for myself and friends.  This was a fantastic way to get paid to continue learning.  At some point someone gave me an old switch or hub (probably a hub) that had some dead ports. I was excited because I had 2 computers and now I could experiment with getting them to speak to each other.

It took a while to get the rest of the equipment I needed, such as 2 Cat 5 cables and network cards for each of the computers.  The company I worked for at the time was ramping up for Y2K  and I volunteered to help the IT team.  They just needed someone to go from computer to computer and copy profiles to the company server.  I loved it!  Because of Y2K they thought certain pieces of hardware would fail, and were replacing them so I was able to pick up some free network cards for my home networking project.

Free network cards in hand I only needed a couple of Cat 5 cables. I’m not sure where I got those from, but they were only about 10 feet each.  I had one computer in the living room and one in a back bedroom.  So to connect both computers, I would have to lay the hub in the hallway between each room so that each Cat 5 cable would reach. Pretty hilarious when I think about it now.

I don’t remember the specifics about how I was able to get the computers to speak to each other.  But, it probably went some thing like this, assign each computer a unique IP address, setup a folder share on one or both computers then connect each to the hub and hope to see each other.  It wasn’t until we moved into a house with a dedicated office that I went crazy building my own network. At that point I built 2 workstations, one file server\backup server and my own web server.

First Paid Job

In 2000 I was looking for a way to get some legitimate experience, something that could be added to a resume and verified.  The problem was I worked all day and wasn’t sure how that would work out.  After a little searching I found a part time gig at one of those overpriced mini mall schools, the kind of school that charges $400.00 + for an accelerated course.  Whatever, I didn’t care, I just needed something to add to the resume.

A typical day went like this:

1) Class #1 is teaching Adobe Premiere for 20 students.
2) Once that class ends, you have one hour to set it up for 3D Studio Max.
3) Make sure you have enough computers for the next class, if not steal some from another classroom.
4) Bring in a computer that you will use as a server, this will be used to push a Ghost image to the rest of the computers.
5) Boot all the computers using a Ghost boot disk, connect to the Ghost server.
6) Push the image once all the nodes are connected.
7) Cross your fingers and hope nothing fails.

We would have 3 or 4 classes per night to setup. This wasn’t the most fun you could have, but I learned how to use imaging software which would prove be extremely useful later.  There was a side benefit to this job, the other guy that worked there was a gamer.  So, if we had classes to setup on Saturday we would stay after everyone went home and set up a head to head Warcraft game.  Before that I had no idea what a LAN party was.  I worked this job for about 6 months before budget cuts happened and I was let go, but I got what I needed by that point.

Home Network

In 2000 we had been in our new house for about a year, I had an extra room that became our home office.  I built us each a new computer and kept the old ones around for projects.  Boot Magazine had a cover story about Linux years earlier and I had always wanted to try it.  After a little research I settled on Slackware for my first Linux test server.  This was a very raw Unix like distro, and that’s the way I wanted to learn.  I learned a lot about how the Linux file system was structured.  It wasn’t easy, but I loved it.

Over the next few years I would use my extra computers to setup a mail server, file server, web server with PHP and MySQL and even an NT4 server.  You name it, I probably did it. Most of this exploration was being driven by curiosity, nobody was paying me to learn this at home.

Weeks were spent building and tweaking a test server, only to format it and start over a week later.  I would document everything to create a set of instructions that would make it easy to set up again.  These instructions were useful years later when building Linux servers for a few small companies.

Ready For a Real Job

It is January of 2001 now and I am ready to start applying for jobs.  I started sending out resumes looking for an entry level IT job.  By March I had landed an interview, the testing and 2 levels of interviews went well .  Withing a week I was offered a Systems Support Technician position.  I took a pay cut to get it but was happy to do it.  Now I was working with a team of guys that shared the same interests as I did.

The work environment was great and no two days were the same.  I was learning at a rapid pace now because I was exposed to a huge amount of problems.  In addition to the PC problems I was expecting, there were printer issues, phone issues, server issues and general network connectivity issues.

It was fantastic!

Then after work it was LAN party time, one of the other guys would host a game and then we would play for an hour or two before heading out for the day.  These were the Unreal Tournament days, and it was so much fun. We would also have huge LAN parties once in a while, either at someones house or at the office on a Saturday.

Never underestimate what you will learn building a host server and a LAN just for playing games.

With any IT job you can have some down time, not always, but there were a lot of hours where you were able to learn whatever you wanted.  Our manager encouraged learning whatever you wanted.  At this time I was becoming interested in web stack again.  I would play with building static HTML pages, a little PHP and MySQL too.

In 2004 our Web Developer was working on a very large project. I knew he could use some help so we approached our Manager to see if he would allow us to work together.  This was a ColdFusion project and I had never heard of ColdFusion at this point.  But, my part in this project would be working with static HTML anyway.  Of course I started learning ColdFusion right away.

By the end of 2004 it was announced in a department meeting that our Web Developer unexpectedly quit.  Excited that the position had opened up I informed my manager that I was interested. He said the position had already been posted but encouraged me to apply.  I stepped up immediately and took over the workload as interim developer.  After applying for the position I interviewed and waited.  Shortly after interviewing everyone else I was offered the position.  Excited and terrified, I couldn’t wait to start.

By this time I had been the interim developer for a few months.  I was quickly realizing that everything I had learned up to this point was in preparation for this position.  This was a full stack position.  So, if I had never spent all that time playing with every technology I came in contact with, I would be completely lost at this point.  We had multiple web stacks running, the LAMP stack for some things and the Windows, MSSQL and ColdFusion for others.

Even with everything I knew up to this point I would struggle every day.  But without the foundation I had built, it would have been much worse.  I probably would have cracked under the pressure.  This was a one man position maintaining an infrastructure supporting 500+ users in 5 offices at the time.  I built and maintained multiple web servers, task servers and file servers to support the user base.

Today our web stacks are mostly the same, of course there is a lot more vanilla JavaScript, libraries and frameworks thrown in.  ASP.Net and C# are the current foundation for any new large projects we build.  But, I will write in any language that makes sense for the given project. Not everything is going to be a full scale web project.  You may need to automate a task using BASH (Linux shell), PowerShell (Windows CLI) or maybe ColdFusion makes sense for a single page application like converting an existing Microsoft Word document to a web form.

If you are just starting out, just learn anything you can.  Don’t get wrapped up in the idea that one technology is better than any other.  Leave those arguments to those thumping their chests in the forums.  Nothing is a waste of time, even those seemingly insignificant projects you are working on today will make a huge impact later.

If you are considering a career as a web developer please take a look at my Resources page.  There is a large list of books, software and other educational resources that you can benefit from.