My Trip Through Tech
personal philosophy
I love developing, but I didn’t always. I’ve told this story several times to semi-intersted parties at pubs, but I figured I would write it down for anyone more than semi-interested. This is my trip to where I am now (at 25), from how I got into computers to software.
A few heads up for this article:
- It is not intended to be technical. It’s meant to be a qualitative accounting of my experiences. I will write a follow up article (with some clever title, learning towards “My Trip through tech stacks”), which will go into technical detail about my progression through the years. As such this article is also relatively emotional, and covers various topics including bullying, self-harm, suicide etc.
- I intend to write this the same way I’m used to telling these stories, and writing it in mostly 1 shot. This means I don’t intend to be perfectly accurate on every detail
- This article will be long, I’ve got nearly 3 decades to cover ;)
In the beginning
As a kid I played a lot of video games, primarily gameboy, DS, and gamecube games. The only computer I used before junior high was I would every so often use our family computer to play the floppy disk with frogger, or a collection of arcade games on it. I had 0 interest in any modding, or anything really besides just playing games on those systems.
It begins
Towards the end of elementary (ballpark grade 4-5) I got a PS3. A this point in my life I had just come out of being very heavily bullied. Because of this I hated my school and a lot of the people in it. I spent most of my days after school playing PS3 by myself, mostly playing Call of Duty (2008-2010 ish). Eventually through required tech classes, and the fact we ended up getting a family laptop to share I started watching many YouTubers.
At this point I was super lonely, and while I would talk to people at my school, I wasn’t very social. I decided I didn’t like that, and so I figured that if I learned to talk to a camera, then I would be able to talk to people more. So in secret I setup a youtube account, got my family terrible underwater point-n-click camera and recorded some gameplay. Eventually a friend of mine moved to the US, and so he got rid of his CRT TV, which he gave to me. This meant I could “upgrade”, to stealing the family laptop, precariously placing it on some boxes, and recording the TV with the webcam.
I hated recording those videos (and deleted many of them), but I would force myself to do at least 1 a week. After about a year or so of doing that I actually found things got a bit better. I definitely wasn’t outgoing, but the embarrassment of talking to people is way less than the embarrassment of being on camera, and so I got more confident. After a while of doing this eventually Modern Warfare 3 came out (the original one from 2011). I was super excited for the release, and completely no-lifed the game. I ended up getting decent at it, and accidentally found myself joining a “university” team and playing in some tournaments (turned out to be just our “manager” defrauding university gaming groups for prize money ¯\_(ツ)_/¯ ). This meant that I got a mic, and while they weren’t “friends”, I now had a group of people I played with. I occasionally recorded the videos still, but I still wasn’t super happy with my social skills, so I made a plan.
My first computer
I wanted to “do things right” on the YouTube front, so I endeavored to buy a computer, get a capture card, and record gameplay. Question is where does a 12 year old get the money for all that? Luckily there was a group I was going to at my local community center, and somehow they convinced the government to let them do child labor (based). So one summer (in 2012 ish) I worked 2 weeks straight, 9 hours a day, for $10.50 an hour (still can’t believe it was that high). This left me with ~$1200 all things said and done!
Luckily at the time Costco had a crazy deal where I got a desktop with a i7-3770, a terabyte HDD, either a NVIDIA GT 430 or 530, 8GB of RAM, a monitor, keyboard and a mouse for $1k + tax. I bought it, and then got super excited. I had moved up in the world, and now I could edit my 4th Generation IPod touch videos, in windows movie maker!!!
At this time I knew nothing about computers. I knew I could turn it on, I could use movie maker, and I could watch youtube videos in my room. That was really all I cared about. That christmas I got a capture card, and for the next few years I forced myself to do daily uploads. With this I started a new channel, and decided to try putting on more of a show while recording. This felt awful at first, but eventually I actually grew very comfortable making videos. I also managed to will social skills into being. Mostly this came from more practice talking, and the faux self-confidence from “being a youtuber”.
Skills start forming
I ended up picking up some more proficiency with computers. Not out of choice, but out of accidentally installing multiple viruses and ransomwares (minecraft modding was a dice roll). So I did have to learn about how to re-install windows, and basic internet security practices.
Hardware
In 2014 my cousin came over from England (where I’m from originally). While here he convinced me to play some games with him (cry of fear was a great one). Unfortunately my computer was trash at this point. Namely the GPU was not able to play anything well. He was PC modder and worked doing water cooling builds for people, so he explained how the different parts of a computer worked briefly, and then we picked out a GTX 660 Ti, and upgraded the power supply to match it. He forced me to do the upgrades so I knew what I was doing (wasn’t happy about that), which was probably the best thing he did.
This was one of the first times in my life where something “complicated” actually “just worked”. We made a plan, and got it done. My first year in high school I ended up building my own PC (had a job at a pizza place), and a handful of PC’s for other people. Eventually this experience lead me to getting hired at a local PC store. Realistically I didn’t know much at the time, but I spent most of my spare time learning, and learned a bunch while there. Me and the manager became close friends, and we did tons of weird experiments and found tons of weird ways to fix things while we worked there. He was a software dev, but I told him I had 0 interest in software at the time.
My interest in hardware continued to blossom, and I learned more about the various parts of computers, and new technologies emerging to make them faster. I finally felt like there was a thing I was good at. I was getting faster at solving problems, learning more about computers and phones alike. I had also picked up 3D modeling as a hobby, and started a practice I did a lot of, daily habits. In order to learn 3D modeling I challenged myself to do 1 render a day for a year (which I did). This came from how well my YouTubing had worked out, and I used this later in life to learn photography, photo editing, graphic design, logo design etc.
Inadvertently I was also learning more about operating systems, and how hardware interacts with them. As I was nearing the end of my time in high school I had a new plan for life ahead of me. I was going to try to get into computer engineering, and I had 3 ideas I wanted to try to implement and research:
- While looking at an SSD I noticed a bunch of empty space. I knew about raid and wanted to try creating an SSD that was multiple SSD’s stacked together in raid 0. Essentially a mini very speedy SSD for operating systems.
- SSD’s at the time were in 2.5 inch form factors, and HDD’s were in 3.5 inch. I had an idea to just expand the PCB, and use the extra space to “put more chips”
- With all the extra height why not just make taller chips and put more storage per chip
All 3 of these ideas while possible would already have been implemented in some capacity, or implausible for various reasons. So I needed a new plan.
The dark times
As I was wrapping up high school my cousin comitted suicide. At the time I had no way of dealing with this. The person who invariably put me on a life path that helped give my life “value” was gone. When I wrapped up high school my grades were mediocre in my best subjects, I had no more motivation knowing my plan for life was fucked, and I had a tremendous amount of guilt for not being able to help provide the same sense of accomplishment to my cousin.
I took a gap year, during which I was working full time, and often working contract work on the weekend (marketing promotions mostly). I then eventually landed on 2 options:
- Go into fine arts, specifically creature concepting. Go work in movies and/or video games
- Go into computer science, deal with writing software even though I hate the idea, and get paid well
Because of my poor grades I had to do some upgrading, and went into my university in the open studies program. While doing this I took my first ever coding course, some geology, and some psychology. At the same time I had gotten into a self-help kick, and tried to grind my way out of how I was feeling by drowning in responsibilities. If there’s no time to stop, there’s no time to look around at my life and analyze how I was feeling.
A New Job
I had applied to work part time at the university support desk answering people’s IT questions. Midway through the summer I received a call asking me to interview for an entirely different position. I assumed I made a mistake, but decided to accept the interview anwyays. My first day on campus was when I did my initial application, my second day ever on campus was for this interview.
I was very nervous for multiple reasons. This was going to be my first “real job”. No janky back alley repair shop, or pizza place, but a real job at a large company. Before the interview they told me I would be a support representative for a CMS called drupal. My knowledge of the web at this point was essentially going to youtube and facebook, so I felt woefully underprepared. I entered the interview to see my soon-to-be boss in his textbook hawaiian shirt, bright orange oversized octopus coffee mug, and board shorts. He was sitting next to my soon-to-be supervisor who was in much more “normal” clothes.
As was probably spoiled I ended up getting the job. At the time I had a deep disdain for software, and especially web development just based on the stories I heard. However I just thought of the job as an option to become more “corporate”, and add it to the resume. My third time on campus was my first day in the office, and so began a several year journey. I will get into more details about it later.
Software
As I was doing my first computer science course, and learning to code, I realized I was significantly below average. I always felt significantly behind, and struggled in many of my assignments. Around this time I decided my laziness in high school was catching up to me, and made a few life changes:
- I started reading: Embarrassingly I had only read 1 book up until my first year of uni. Every other book in school I read reviews of, or cheated to get through. So on the train I started reading.
- I re-started my daily projects: I needed more structure in my life, so I reinstituted my daily projects
- I started journaling: At first it was 1-5 sentences a day, then down the road it became full page journaling at least 5 times a week
On top of this I forced myself to start “faking it till I make it”. I knew a little about what good programmers do, and so I tried to emulate those things as much as I could. I started a few open source projects, and swapped my daily projects from 3d-modeling to coding. This lead me to a few projects, nothing special, but they helped solidify a lot of my skills and comfortability around coding. However I was still quite bad at my coding for my courses. That first course was just a struggle for me. I could not get my head around how classes worked, or many other concepts, and as such I nearly failed quite a few assignments. This was exacerbated in me going out and drinking every weekend, counting the nights our in liters, not rounds. I was basically trying to run away from my problems.
There are 2 concrete pieces of advice I can give anyone going through something similar:
- Define exactly what concepts you don’t understand, then take those questions and what you’ve tried so far to available resources. If you’re in university, take the questions to your TA’s, or profs. If not then take it to online forums. In both cases you won’t always get perfect answers, but I found that even the effort it took to properly articulate and explain what I didn’t understand would often lead to me understanding it.
- If you are struggling mentally, seek a professional. I had the idiotic idea that I could just work my way through my problems myself, and if you hold this belief you are likely the sort of emotionally illiterate person who needs therapy as I was. It takes a lot of shopping around to find a good therapist, but in my case it literally made the difference between C-’s and A’s in my courses. They’re not there to fix you, but a good therapist gives you the tools, and outside perspective you need to even begin approaching your problems appropriately.
Following many of these changes I drastically improved my skills. Articulating my problems often made it way easier to solve them, and I found I was problem solving a lot of issues I used to think were insurmountable. This is important because I was then told the transfer GPA to computer science was 3.8 (above an A- average). I finished my first semester with a 3.5 (B- to A in all my courses), and went on. Again I had 1 computer science course and 2 options (linguistics and sociology). This time the computer science course was in the fundamentals of object oriented development.
Act 2
At the start of my second semester I was now:
- working and helping answer emails for people who were struggling to use our drupal installation to make websites
- I was working on some side projects, mostly dogfooding1 and slowly finding my footing in the python world.
- I was watching conference talks about python, and learning about new features in the language
- I had just started a channel called canadiancoding2 where I intended to write blog posts about things I had been learning
I was then told that my second compsci class would be in Java, and I would be mostly working on a group project with 3 other students. There wasn’t much to talk about with that project from the coding perspective, however from work I had learned some project management techniques, and implemented them with my team. This was a great idea in hindsight because without it we probably would have never finished our project. We essentially created a reasearchgate3 /linkedin4 clone5. Essentially a way for profs to network with researchers. It was written poorly, however the planning and coordination was actually done well.
From the beginning I forced my team to use git (and taught them how to use it), and we used the planning boards there to divide responsibilities and work on the assignments. I felt like my technical skills took a back seat, but many of my soft skills improved dramatically from this course.
However not everything was sunny, I was massively overworking myself, and still had not dealt with a lot of emotional issues. I finished this semester worse than last due to one of my options, and then found out the transfer GPA was a lie. The transfer acceptance GPA was a 3.3, which I was above and I was accepted into the program.
Teaching
I ended up getting into the compsci program 1 day after the deadline for applying to courses. As such I ended up only being able to join option classes, so Latin, philosophy, religious studies and Greek mythology made up my time for that year. I was super embarrassed to be taking 0 compsci courses, but there was nothing I could do about it. However opportunity came knocking in a weird form.
I don’t remember how I found out about it, but there was a group on campus who had just started called schulich ignite, they were originally a google-run group, but google gave up on the initiative after a year (classic google6). Essentially they were a volunteer organization that would teach high school kids how to code in processing (java drawing library).
While I would like to say I joined out of the kindness of my heart, initially I joined for 2 reasons:
- I wanted something to keep me coding outside my daily stuff
- Still hadn’t gotten over my cousin, and felt like this was a good way to “pay it forward”
Naturally I lied on the application. The team was comprised mostly of engineering kids who learned processing in their first year. Luckily they naively assumed the same of compsci students. My first semester I was an assistant in charge of answering questions about the sessions content, and mentoring 4 students. Like a good teacher I stayed exactly 1 week ahead of the session content, and somehow it managed to work out well.
If you do get the chance to teach in any capacity I would highly recommend it. Reading other people’s code gives you a good chance to reenforce your understanding of the fundamentals, and articulating concepts helps reenforce them in your mind.
The rebuild
In between my latin class, I did still upkeep a job. There was an incredible oportunity that presented itself with my job right around when I started teaching. The university decided to transition to a newer version of our CMS, and with it they wanted to do a complete rebuild. This ended up transforming my job massively. Instead of just answering emails I was asked to take a role in helping with this rebuild, not in the code, but in other ways.
Initially I was asked to write all of our documentation and training for the system. This meant I was the first one on the team to get access to the builds, and I would pick them apart, QA test them for bugs, submit those bugs, and then document and prepare training. Most people would find this incredibly boring, but for me it meant that I got a chance to learn about how problems are solved.
While I learned little about coding I learned a ton about:
- Testing
- CI/CD
- Containers
- Networking
- Cloud infrastructure
- Documentation
- Presentation writing
- BA work
- Collecting requirements
- Refining features
- Keeping track of feedback
- Project planning procedures (Agile etc.)
This work was very scrappy, and I loved that. Oddly formatted word documents and videos being our documetnation. In-person sessions to train our admins. Access to the backend code to learn about whatever I wanted.
My work felt like being a real contributing member to the project. Considering our environment housed over a thousand sites the work we were doing was not insignificant. I learned an incredible amount about design, and business work. I learned tons about new technologies as we implemented them, made new suggestions from what I was learning on the side about our CMS, and overall had a huge impact on how the system looks today. All of this while still teaching, helping make teaching materials, posting to Canadian Coding, and doing side projects.
My company
Eventually my arrogance got the better of me. After working for a bit in the web development field I realized that a lot of my assumptions about it were completely correct. Web development is a cesspool. Particularly where I live, the bar of expectations is in hell. People charging $250/month hosting fees for static sites that have no mobile support was not uncommon. My city is very “enterprise”, and as such they just throw money at anyone. So why not me?
I was getting particularly annoyed as I used to assume that things weren’t how I was seeing them. There’s no way that what I’m seeing is true, and I must be missing something. That was until a friend with a small business approached me. When I saw the work, and how much they wanted him to pay for it I told him “I’ll do it for $100 if you promise me that dogshit never is allowed to be public”. My first contract was essentially rage-baited out of incompetence.
Looking back I knew next to nothing about web development, however I was so angry that I was just willing to through sheer force of will make something better. I knew we used bootstrap7 at work, so I started there and learned about how HTML, CSS and JS actually work. After a week I had a nice static site built, and sent it off to be hosted on AWS (I think). With that Canadian coding was turned into a website8, I didn’t advertise web development much, but I did end up with a few clients eventually.
More sites
Schulich ignite needed a website. It started as a static site 9 that I wrote to replace the firebase concept we were left with from the google days. Later I would learn about static site generators (especially hugo ), and would rebuild the site10 to make it more accessible for our team, and coordinate our expanding roster of sessions.
But before all that I was contacted by my old manager from the repair shop. I was on vacation out of the country, but he had a contract he needed help with urgently. He had a 1 week deadline to create a check-in system for a salon. He needed me to make an app for him to do it. For some reason I agreed to help, I ended up teaching myself flask, and basic networking while running a python server on my phone, and using it’s browser to get everything working. Somehow it got sorted, he deployed it, and it became a pain in the ass for a long time. But it still worked… kinda.
Important note
One important lesson I had learned through all this was that you should be willing to try things you assume you’ll hate. I had assumed I would hate software, so I stayed away until I had to, I assumed I would hate web, so I stayed away, I assumed I would hate devops, so I stayed away etc. etc.
All of these things I now love, and they all help to feed into exactly what i love most about programming, and hardware in general. When I first built my computer I felt like it was the first time I was allowed to succeed. Computers were at the time an impenetrable and complex topic that felt so hard to understand, yet to build one I could figure it out quite easily, and it worked. For software building things is often actually pretty simple.
With both of these combined eventually my teaching, and my general outlook on why I like coding is similar to why I got into 3D modeling in the first place. Anyone can have the access to unfettered creativity, without needing permission to succeed. Anyone can go out and create the next best thing, or just something simple to help improve their lives. Anyone can do all of this whenever they want. I can wake up tomorrow and build a workout tracking app that works perfectly for me, and I don’t need some company to do it for me. Code is beautiful in the way that it allows people to be expressive of their though processes, and build things from nothing.
Fast-forwarding
At this point I fast-forwarded to roughly 3-4 years into my programming journey. Due to lots of nonsense I still have years to go to finish my degree. However it’s worth checking where I was at.
I ended up helping create a ton of the course content for schulich ignite, especially when they transitioned to python. There’s 3 courses now (beginner, intermediate[flare] and web-dev [scorch]), and I had a large part in the creation of all 3. I also got to work on a helper library called spark11 12 and was teaching some of the courses.
Open source wise I had created a ton of packages including ahd, ezcv, ezspreadsheet, ezprez, pystall, and others. At this point I was very comfortable with creating projects.
Canadian coding wise I had done a few contracts, had tons of posts up, and was planning on doing courses that were philosophically different from Schulich ignite. Shulich ignite was interested in trying to get people to want to program. I wanted to create some separate pre-recorded courses on Canadian Coding for people who were already interested, but wanted more in-depth teaching.
I had completed some firmware courses, bit of C#, and a few other courses, but nothing crazy really.
At work I had built out a ton of automation software, and
The present
So, it’s 2023. 6 years on from the start of my programming journey. There’s quite a bit in the few years I skipped over, but it’s already 3am and my writing is getting shoddy. But there’s been a few changes I think are worth mentioning:
- I am in a much more stable situation mentally; This all came to a head in between our last check-in and now, but I started doing very poorly in courses and was not doing well. Eventually found a good therapist, massively helped
- I have more projects than I can count at this point. I will have a blog post talking about strategies for completing projects, but man be careful not to wind up with too many
- I picked up a minor in philosophy. Turns out philosophy has been one of the most helpful skills I’ve picked up for navigating through life. Logic for coding, and a lot of other stuff for navigating complex situations. Worth a whirl
- Lost a bunch of weight, turns out getting healthier makes managing everything including stress and energy much more easy
- I have entered an internship in a completely different field. The one thing I hated most when doing web dev was my database management… So now I work as a data development intern ¯\_(ツ)_/¯ think I’m finally starting to like that now as well
Along with all the regular updates it’s probably worth mentioning my plans going forward. I have no idea what my career will look like. No idea which field I will end up in. But I know at this point I have a good chance of getting hired wherever I want (mostly). With that I have recently been doing a retrospective on some of my opinions, and feelings about things. This whole article was an excuse to do a retrospective of some of my thoughts. But also as part of that I intend to challenge myself to do things I’m less comfortable with, and try the technologies I wrote off years ago again to see if they have more to offer.
It will be a slow process, but I’m going to give it a whirl. I intend to re-write some of my more popular packages. Some are upwards of 30k downloads, and I think it’s irresponsible to leave them in disrepair. Along with that I intend to do more projects outside my comfort zone, specifically in game dev, VR, AI and possibly some compiler work.
Conclusion
It’s been a wild ride so far, there will be another article covering more of the technical journey for people interested in that, but this felt cathartic to do. I figure after something that long, it’s worth recapping the highlights that might be useful for you as a TL;DR:
- Learn to articulate your questions well. Often times in articulating them properly you’ll solve them
- Try things you assume you’ll hate. Stick with it for a few weeks and you might be surprised what diamonds you can find in the rough
- You don’t need permission to achieve things. Try, fail, retrospect, improve, and iterate. most people give up before step 1, so even just trying is admirable
- Soft skills matter. Most of my jobs I’ve landed on my soft-skills more than my technical
- Teaching is a great way to reenforce your learning (thanks Feynman 13)
- Mental health massively impacts your capabilities. Trying to sort out your problems “on your own” isn’t strong, it’s usually a cope for being a coward about seeking help
- Other people will reward you for maladaptive behaviors. I ended up trying to do way too much, and as a consequence eventually things fell apart a bit for a while.
- Physical health massively effects mental health. Didn’t get the chance to cover this much, but it’s absolutely true. You wanna get smart, get swole 💪
- Time changes things. Opinions can rot. Things that used to be true can change, and so can you
Whatever path you take make sure you look around every now and then. You’d be surprised if you honestly look back to where you were.
Footnotes
-
Get started with Bootstrap · Bootstrap v5.2 (getbootstrap.com) ↩
-
Schulich-Ignite/website: The 2020 revamp of the schulich ignite website (the currently live one) (github.com) ↩
-
Descent098/spark: Library used for the Fall 2020 schulich ignite sessions (github.com) ↩
-
The Feynman Technique: Master the Art of Learning (fs.blog) ↩