2022-05-03 Carl Riis
Note to readers
If you’re reading this, you likely came from the post Why I Dropped Out of High School. This is a copy of the now deleted Q&A that inspired that post. Parts of this Q&A got refactored into that post, meaning these two texts share some content.
Hello! I’m Carl (known online as “carltheperson”). I’m a software engineer at Depict.ai, which provides AI-driven product recommendations for e-commerce stores. I spend my time between Stockholm, Sweden, where Depict is located, and Odense, Denmark, where I’m from, and work remotely.
I was 13 years old when I taught myself to code and didn’t really consider it as a career at the time. It was mainly just a fun thing to do after school. I used programming as a creative medium to implement different ideas I found interesting.
My absolute most important tip is to create projects. This has two advantages. The first is the learning it will give you. In my opinion, creating projects provides you with learning that, say, a course can’t. In general, the best learning happens outside your comfort zone, which usually means outside a course. Courses are great, but I see them more as a prep for the actual learning which comes from projects.
The second advantage is the portfolio you’ll accumulate. Having a portfolio is an absolute must for any self-taught developer. It provides the outside world with evidence that you’re actually capable of producing software. I recommend using GitHub for your portfolio of projects. If you need some inspiration, you can check out mine (:
To build a nice portfolio of projects, you need an important skill: finishing what you start. I think many people underrate this ability and therefore don’t prioritize it very much, but nailing it down is a huge advantage. It feels amazing starting a project knowing you’ll be able to finish it.
Another important skill you’ll need as a programmer is dealing with failure. Most of what you’ll do will be stumbling through hard-to-solve problems, failing every step of the way until you eventually solve a problem. What I remember most about starting to code are the soul-crushing bugs I had to solve all on my own. It can feel excruciatingly difficult, but don’t let it discourage you.
In the beginning, just have fun. Treat programming as the creative medium it is. Don’t worry too much about the commercial or even quality aspects of your projects. It’s easy to get overwhelmed, which is the reason many people quit. Of course, later on, the commercial and quality aspects of your programming become very important. This includes the ability to write clean and maintainable code and a deep understanding of the technologies you use. I’m a huge believer in being quality-minded about your software, but I wouldn’t recommend it to a beginner. When starting out, give yourself the freedom to just have fun.
It’s important to give structure and consistency to your learning. I believe in habit-forming as an effective way to learn a new skill. Commit yourself to code a certain amount every day and stick to it. Consistency in your learning is another big challenge that if achieved, becomes a huge advantage.
When starting out, I don’t think it’s very important what you learn. Learning something using consistency and projects is really what’s important. That being said, if you’re lost about what to learn, I recommend using a roadmap.
I actually dropped out of high school. It wasn’t an easy decision, but let me give you some insights into my thought process.
By the time of dropping out, I had a full-time job and had definitively decided not to pursue a computer science degree. To understand that decision, I think it’s important I explain what value I believe a computer science degree gives you. It’s quite nuanced, but I think it can be broken down into three things: knowledge, self-discipline, and proof of the two former.
Before I get into the three things presented above: Computer science is a very broad academic field. When I refer to “computer science,” I refer to a classic computer science bachelor’s degree.
I also want to point out that I’m in no way anti-education. I have huge respect for academics and think education is a very individual decision that can’t be generalized in “should” or “shouldn’t” terms.
Knowledge is the primary purpose of getting a degree and therefore was my main consideration point. Here, I have one central belief: When it comes to computer science, no knowledge is exclusive to a degree. I truly believe that all the information obtained through a CS degree can be self-taught. Computer science, probably more than any other field, has embraced the internet to share information. Much of that information is freely available in the form of courses, articles, recorded lectures, papers, e-books, open-source software, etc. You could argue that some knowledge is practically exclusive to CS students because it’s impossible to teach yourself. I very seriously doubt this. Some things are, of course, much easier to learn with the guidance of a teacher, which I believe to be a very valid point - probably the biggest disadvantage to being self-taught.
Whether your aim when going self-taught should be to obtain the same knowledge you would with a degree is another point to bring up. I think not. The beauty of going self-taught is that you can teach yourself whatever you want. This can include things that are too new or niche for universities to include in their curriculum.
Regarding self-discipline, I doubt many people will claim that university provides the only way to achieve this. It’s true that many people use university to build the discipline needed for “adult life” - whatever that is. Finishing a degree definitely takes determination, but so does self-teaching. You have to constantly be the one to take the initiative about what to learn and learn it without short-term consequences if you don’t. Self-teaching requires a level of proactiveness you have to be prepared to handle. A degree does too. That’s to say, self-discipline wasn’t a big influencer on my decision.
Uniqueness is arguably not as important, although still something that can boost the impressiveness of your projects a lot. Reason being that creating unique projects is hard. This makes them much more interesting for others, especially if you solve a problem no one else has.
Visibility is another important aspect. Whenever you create something presentable, share it. Ideally, you create something that gains sizable attention online. This is easier said than done, however. Luckily, before dropping out, this had already happened to me. A blog post of mine reached the top spot on Hacker News (this got me a new job and changed my life). Some might attribute this entirely to luck, and I agree it partly was. But I still think it signifies an important lesson to others: Don’t be afraid to show the world what you make.
An important thing to note about proof: Once you have an interview, it’s less about the proof of your abilities and more about your actual abilities, which definitely should be your biggest prioritization.
I also found the fear of being rejected purely from a lack of CS-degree-signaling-value a very depressing motivator. This fear was the most common deterrent used by people trying to convince me not to drop out. The fact that people didn’t cite the value of the knowledge from a CS degree as its main argument, was a bit of a red flag for me. It seems that a CS degree plays a part in some annoying label-game I don’t want to play.
Quick note: When I asked people what value they gained from attending university, many people also mentioned something I didn’t list above: the social bonds and connections. This is certainly something I’ll miss out on, but also something I can obtain outside university. It’s something I’m aware of for sure.
Most of all, it has given me purpose. I’ve always been slightly restless and need a constant feeling of moving towards something. With coding, there are endless things to learn and create, which means there is always something productive and fun to do.
It has also given me the opportunity to hit the job market much earlier than I was expecting. I was never very satisfied in school and always longed for when I could get into the “real world” where I could produce real value. Having now lived in the real world for a while, I can confirm that I very much prefer it.
Having a steady full-time income has also allowed me to put more towards investing, which I care about a lot too. I haven’t increased my spending much since I was a student, which lets me invest a large portion of my salary.
So I work with integrating our product recommendations into e-commerce sites. Our recommendations are inserted using a single linked JavaScript file. This ensures almost no work is required from our customers, and lets us integrate with all sites no matter the tools that power them. It works well but requires each integration to be tailored to the specific merchant’s website, which is the main work that I do. To make this process efficient, we use a large assortment of our own tools and libraries written in TypeScript.
My first job was as a part-time DevOps assistant. I got it by sending an email to the VP of Engineering with links to my GitHub and personal website. There wasn’t much of an interview other than a phone call where I explained which technologies I was familiar with. The job wasn’t very interesting, but it gave me crucial experience needed to further my career.
I have a mixed bag of more goals than I can count, but I think most of them can be summarized as “getting better and smarter at messing with software.”
One thing I’ve learned about myself is that I love going deep in my learning. By that, I mean learning way more about something than is at all necessary. There is something very satisfying about understanding why a technology behaves the way it does. This usually involves reading specifications, papers, and source code.
I also want to keep making lots of projects. This lets me experiment with different languages, levels of abstraction, and design philosophies. It could also involve contributing to open-source software.
Making YouTube videos is another thing that I enjoy doing and which really requires me to step out of my comfort zone.
Another thing I’ve learned about myself is that I love writing. It’s definitely something I want to improve on and do more, perhaps make a bigger part of my career someday. I’m actually finishing up an e-book currently. It’s about JavaScript objects (yes, it’s possible to write a lot about just objects). For research, I’m using the ECMAScript specification, which is a long standardized document that JavaScript adheres to. I plan for the e-book to be more comprehensive than most other resources but still fairly easy to grasp. It won’t be for beginners or specification-nerds like me, but someone in between.