My Programming Journey

  • programming
  • software development
  • personal life
Josh DeGraw

I've been thinking lately about my experience learning programming, and how lucky I feel to be where I am today.

When I was like 10 I got the idea to learn html. I can't for the life of me remember what got me interested in it, but I remember I was driven. I'm sure it helped having a father that worked in cybersecurity at the time, as he encouraged my interest in technology. I got a few library books and learned basically the p and img tags 😅. We had Microsoft FrontPage, and I tried to make a family blog-type website with it.

I never deployed anything, but it was a fun activity for me as a kid. I then promptly forgot all about programming until I was about 20 and trying to figure out what I wanted to do with my life. I did a few Khan Academy courses on JavaScript but it was mostly about animations which I wasn't especially interested in, and while I could do the exercises well enough, it didn't really click for me how it really worked.

C# got me hooked

Then I took intro to programming and learned C#, and that's when it really clicked for me. I could make an actual WinForms app in like 3 lines of code? One that looked like any other "real" program? That feeling gave me a rush! That easy setup and instant feedback loop really fueled my curiosity and made me want to learn way more than we were covering in the class.

At the time I happened to be working a part time job doing Google advertising at a small product development company. I was trying to improve how I did that job, so I figured how to partially automate a few things using some of the scripting tools in AdWords to send email alerts that I would aggregate in an MS Access database and export to Excel. I didn't really understand how any of it worked since it involved a lot of copying and pasting, but I was learning.

Data modeling

By this point I knew I wanted to officially go into programming and was trying to find any ways I could to do programming at my job. Eventually my boss thankfully decided to take a chance on me and have me move to a more technical role: Data Analyst. Basically this involved managing an SSIS data warehouse (mainly using SQL and DAX), which would be utilized by other employees to create reports via Power BI. So I was less of an analyst, and more of a data/domain modeler.

I enjoyed this WAY more than my previous role (I never felt like I was very good at advertising), but it still wasn't quite what I wanted to do in the long run. My bosses knew I was interested in programming. By this point I had actually interviewed internally to try and become a developer, but didn't get it. Then one day I got my real "big break".

My proving ground

My boss asked me to see if I could figure out how to use the Google Analytics Realtime API to display some information on a dashboard. I said I would give it a shot.

Keeping in mind my knowledge of JavaScript was limited at best, and I don't think I even really knew what an API was, and I had absolutely no idea how the npm ecosystem worked, I set about to try and figure it out. Somehow, through a lot of googling and a bit of luck, I managed to figure it out! I still couldn't navigate the npm ecosystem, but I knew enough to reference an external script and hack together a few graphs.

I was so excited I basically sprinted to go find the TV that we were going to put the dashboard on and set it all up.

I don't know if my boss expected that I would actually do it, but he knew I was interested in programming so he threw it my way as a sort of challenge. And he was really pleasantly surprised that I was able to do it, and to do it all in one day I think impressed him even more. The next day when I came in, he brought me into his office and told me "we'd like to move you over to the development team." I was floored. I was officially going to be a developer.

My first true programmer job

After I joined the developer team, I got to work on a huge legacy codebase, with a .NET backend involving multiple application servers, Microsoft SQL Server, .NET remoting, WinForms apps, several hosted websites (ASP.NET MVC, Web Forms, and a lot of jQuery), as well as work on a greenfield internal React application that was replacing an existing one that was mostly written with jQuery.

It was awesome.

I felt way over my head, but I was loving it. It was a small team of me and 2 other part timers (all of us college students), along with the head developer. By the time I left about 2 years later, I was the lead developer and was feeling much more confident.

From junior to lead developer

During my time there I was able to accomplish a few big projects that I felt were meaningful and that I was proud of:

  • Migrated all of the source code (2 separate source trees, on incompatible TFS versions, which had been a major headache to deal with) to git from TFS version control
  • Moved all the source code off-premise into Azure Repos
  • Set up previously non-existent CI/CD pipelines to ease deployment and testing
  • Added Typescript support to a large React application
  • Set up a private NuGet feed
  • Significantly increased unit test coverage (basically nonexistent before), partially by improving the majority of the code to not be so dependent on static functions or bad coupling/cohesion
  • Standardized logging and error monitoring across around a dozen interconnected applications via NLog and Sentry, the process of which led me to contributing the official Sentry.NLog package to GitHub (which as of now has more than 566k downloads!!!) as my first major open source contribution

All the while I worked on maintaining and improving existing software that was used internally. This whole time, I was still finishing my Software Engineering degree. I feel very lucky to have had the freedom and discretion to pursue all those projects, especially before I had even graduated.

While at my this job I would listen to podcasts such as HanselMinutes and .NET Rocks!, and I kept hearing about F# and how learning it would make me a better C# developer. So in my spare time I would mess around with F#. I happened to see a tweet from the maintainer of the sentry-dotnet repo that pointed to an F# job posting at Pluralsight. I looked into the posting and the company and just knew I needed to work there.

The dream gig

Well, it took around 6 months and 2 tries going through the application process, but I got the job! And the timing couldn't have been more perfect: I started working at Pluralsight less than a month before I graduated, less than a month before I turned 26 and would be off my parents health insurance, and about 3 months before the birth of my first child! Side note: even though I had only been working there for a few months, I was able to take the full amount of paternity leave, which was so incredibly helpful for me and my family.

So now I get to work at Pluralsight with the best team I've ever gotten to work with, on a tech stack I love (F#, React/Typescript, PostgreSQL), working on really interesting problems.

TL;DR of my programming journey by age:

  • 10ish: look at HTML/CSS
  • 20: Brief intro to JavaScript, jQuery
  • 21: C#, SQL
  • 22: JavaScript revisited
  • 23: React, Typescript, F#, ASP.NET, officially a paid software developer
  • 26: Start at Pluralsight as Software Engineer at my dream gig!

I still have a lot to learn, but that's part of what I love about software engineering: there's always more to learn.