For some years now, I’ve had a “back burner” project to fill in some holes in my knowledge of the fundamentals of Computer Science (CS). Much of my education in computers and programming has been self-taught, although the education I got from the Navy in digital computer operation and electronics was excellent and has served me in good stead.

In fact, part of the reason it’s taken me so long to start on this project is that from a certain point of view, it didn’t matter. I’ve had a pretty successful career in technology. My employers and clients have (for the most part) been really happy with my performance, and my team members have been happy with my skills and my collaborative work. I co-founded a really awesome code school (The Tech Academy). I have co-written seven technology books.

And yet, all the way along, I knew there were some gaping holes in my knowledge - things I’d be almost embarassed to tell experienced engineers: What is Big-O Notation? How do all those various sorting algorithms work? What is a Binary Search Tree - and honestly, why should I care about it?

Well, I recently started looking into some of these areas, and you’ll never guess what I found:

I am an idiot.

Now, I didn’t really need to do a deep dive into the fundamentals of CS to figure that out - I could have just asked my wife when she lasted questioned her good judgement in deciding to be with me; she’d need about 10 milliseconds to come up with at least five examples

All kidding aside, I figured it was time to take a bit more dedicated run at this - so I’ve decided to put some accountability at work. I’ll be steadily working through the CS area, learning and practicing and (hopefully) bettering my understanding as I go - and I’ll be posting about what I’ve learned. Along the way, I’ll try to break down the concepts so they can be easily understood - an ability I do have, thankfully.

I’d like to have you along for the journey, particularly if you find yourself where I am - you know you can code, and you are even getting paid to do so - but you know there are things you don’t know, and it bothers you.

I’d like to thank two friends for some conversations that really helped me decide to embark on this path:

Phil Scott, a dear friend and also one of the best engineers I know, helped me understand some of the fundamentals- and (more importantly) made an excellent case for why these things are important.

Mike Rooney, a co-worker and all-around great person, also made the case for learning this info - and pointed me towards some excellent references, most notably the book Algorithms by University of Illinois professor Jeff Erickson.

So, here we go. I hope you’ll join me - but either way, I’m leaving :)