Notes for a presentation to high school CS students

2023-08-31 00:00:00 +0000 UTC

Earlier this year I had the opportunity to speak with computer science high school students about career advice & a what’s-a-day-in-the-life-like type of thing. To prepare for the presentation, I wrote out some notes about what my journey to this industry was like. (No I didn’t try to present this, I would have bored them to tears!)

Early days

As a kid, I was lucky to have easy access to computers. Pretty sure the earliest one we had in the house was a Commodore64.

Commodore 64 at Video Game Museum in Berlin (45946155851)A Commodore 64. Not the author’s.

In middle school, I remember writing silly text based programs / games / pranks in QBasic. In the first day of AutoCAD class, the head of IT challenged us to bypass the school’s security software (“Foolproof”; his “y’all can’t hack my Foolproof” in a Texan drawl was a popular punchline among my group of friends for years). After successfully doing so (IIRC it involved using a startup disk to edit a bootfile to not load the software), I was promptly hauled to the principal’s office, let go, then… blamed for every hacking incident at my school for the next years 🙃.1


Beyond that, I remember interest in Visual Basic programs, and an unsuccessful foray into C with the CodeWarrior IDE; with no support or guidance I gave up on that quickly. This was pre-Internet days in Saudi Arabia. Our first Internet access was the ability to download email a couple times a day, later there were a limited number of sites one could visit. I remember searches in a science class for “Tycho Brahe” (the substring “bra” was problematic to the censored Saudi Internet 🤦🏻‍♂️) getting blocked with an ominous message about how “this has been logged” and the authorities would follow-up with you. Some people ran BBSes, which were fun for the silly text based role-playing games, but for programming, there really was nowhere that you could go for help.

High school & university

Later, in high school, I took AP Computer Science classes. I wasn’t a great student (a teacher complained about my “modus operandi of procrastinating” in one of my report cards) but I really enjoyed writing software! Somewhere I still have a floppy disk with a chess program I wrote including my half-baked idea of an AI opponent.

After graduation, for whatever reason I didn’t apply to university for Computer Science. I think there was a sense of wanting to avoid the inevitable and/or take the opportunity to explore other things.

Later, at second year of university at UNC Asheville, I decided to pursue Computer Science and Philosophy degrees. Then a few months later I became completely preoccupied with anti-war organizing (this was 2003-2004) and couldn’t keep up with much. Something had to give. Somewhere between failing the course in learning assembly, and hand-writing Java code because my laptop wasn’t compatible with the Windows-based IDE our class was using (if I remember right?), I decided to drop the CS degree. In retrospect, not the smartest decision, but YOLO and all that.

Around that time, 2005-2006, I made my first personal website with HTML (no CSS) on a university server, and later used Drupal to make some sites for some friends.

Drupal 5 Screenshot

Now what

After university, I worked a series of odd jobs: waiter (a forgetful one, alas), delivery driver, and production worker at Kinko’s. Around that time I wanted to modify the appearance of one of the Drupal sites I was maintaining. After googling a bit, I found instructions to modify a template file. The file was in PHP. Once I figured out how to do that, I wanted to do more, and I continued with the virtuous loop of make changes in production, see the famous “white screen of death”, make more changes, FTP the files into place, then eventually get something working. I was hooked.

I learned a ton through this type of development work, even if all of it flies in the face of best practices today.

With my interest for programming re-awakened, I thought more seriously about trying to get a job in the industry. It all seemed hopelessly out of reach. I didn’t have a CS degree and it seemed like all employers wanted one. People working in web development all seemed much smarter and farther ahead than me. I decided to try for it anyway, looking up some local web development agencies and cobbling together a CV and visually-heavy portfolio (thanks to Eric for his design skills in that!) and threw myself at the mercies of any tech employer who would take me.

Found a job

To my surprise, I was offered a 3 month position at a web agency called DesignHammer, most of it working on Drupal sites. I spent the next 5 years there. Working in a web agency is quite unlike software engineering at a more established company. You have clients with all kinds of projects, and a near constant time pressure to deliver as quickly as possible, to (superficially at least) highest possible quality. Testing or clean code aren’t really priorities for most clients; shipping is. On the plus side, almost all my work was with Drupal, and I was able to contribute back to the open source community as part of my client work, which was pretty cool.

After five years and some big life changes, I wanted to do something different and had the idea I would freelance. Freelancing wasn’t for me; too much accounting and self-promotion/networking that I wasn’t any good at, nor interested in. I lasted a couple of months doing that, then accepted an offer to be the director-of-technology/lead developer/engineering manager at Savas Labs, another digital web agency. This was similar to the last job except that I now had roles in mentoring, attending to code quality, training, etc.

After a couple of years of that, I came across a job posting for Wikimedia Foundation, and wrote about that experience here; I’ve been at WMF ever since.

A (non) traditional career path?

I think the above describes a “non-traditional” career path though I’m really not sure.2 A lot of my colleagues have similar, winding routes to where they are today. I’m sure there are lots of people who study CS in high school, then in university, then land a job and continue in that direction, but I am not sure how common it is.

What I’d do differently? The obvious one, stick with and complete the Computer Science degree, even if that meant an extra year or two in uni. It’s still quite common to see “B.S. or M.S. in Computer Science” in the requirements for tech job postings, even if the words “or equivalent in related work experience” appear begrudgingly as an afterthought. The work experience is the most important thing, IMO, but the degree is what gets you to the place where people will consider you for a role.

Beyond the getting-hired side, having a working knowledge of the theoretical underpinnings of what you work with day-to-day seems useful. Maybe the best would be to have 1-2 years of practical experience, then work on the CS degree.

I don’t regret studying philosophy; on the contrary, I wish I had taken a few more classes available to me. My advice to someone pursuing computer science would be to also study something else (in the humanities or otherwise). Learn about the world and have a broader view of your role in it, beyond “this is cool tech that I get to play with” (see e.g. surveillance tech industry, military robotics, cryptocurrency scams, etc).

My day in the life of a software engineer

I can speak to my experience, because for everyone it’s a little different, but for most of my days:

Getting started in tech

It’s hard to get a start in tech industry in the year 2023. The frameworks that we use in web development have much higher barriers to entry than the PHP templates and FTP deployments I used in 2005-2006. My suggestions:

Any questions?

Let me know. And enjoy your studies! 🧑‍🎓

  1. OK, I deserved some blame, but I was falsely accused a few times and that was no fun ↩︎

  2. This section and two that follow are mostly what I talked about with the students ↩︎