Planning to study computer science
a self-taught junior developer's perspective
5 min read
I happen to be one of those developers who started their career in a totally different field, then at a later stage made the switch to software engineering.
I learnt how to code while still studying civil engineering, and continued to slowly (and inconsistently) learn one or two things after university, in my free time. Fast-forward to early 2022, a couple of months before my 37th birthday, I landed an opportunity to work as a software developer, and now, 8 months later, I'm at a point where I have to make an important decision on how to navigate this new career.
While it's possible to have a thriving career in tech without a CS degree, I think it's important to be well grounded in the fundamental CS concepts and principles. In the words of Oz Nova and Myles Byrne from teachyourselfcs.com
If you’re a self-taught engineer or bootcamp grad, you owe it to yourself to learn computer science.
There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.
I don't want to be the type 2 guy 😀, so I have to do something about it!
What are my available options?
Physical or Online?
At this stage in my life, I do not have the luxury of going to university full time, so that's out of the question. This only leaves me with online options.
Pursue a degree, or learn on your own?
Now, do I want to pursue an actual CS degree, or do I just want to learn the core subjects on my own? Well, I think it's nice to have an actual CS degree. However, one has to
- find a well accredited University with good rankings
- have the money to pay for university education
- have the time to actually invest into learning, doing assessments, exams, etc.
Item № 1 is not difficult. The challenge is № 2 and 3.
Most of the really good universities out there aren't cheap. There are some institutions which I've found to be affordable, but I'm not quite sure about credibility. I do not want to spend 3+ years pursuing an academic qualification which will only be recognized in very few places. That's a definite no-no for me!
If I'm going to enroll to study at a university, I have to dedicate about 25 hours per week towards studies, that's quite a lot of time for someone who has a family, has a full time job and other responsibilities.
So there has to be a balance between quality, affordability and time.
If degree – Bachelor's or Master's?
Having already earned a Bachelor's degree, the thought of going to pursue another Bachelor's degree kinda feels counter productive. It's more desirable to move forward and pursue a higher qualification.
There are a lot of excellent institutions that offer CS Master's degrees to people whose first degree is not necessarily a CS degree. However, I have also found that admission into these programs generally isn't easy. Further, I looked at a few curricula and saw that either
- the content is generally "basic" and broad, not going in depth, since the target students are not coming from a CS background.
- the content is advanced and rigorous, as one is expected to somehow already have the foundational concepts that are typically taught at undergraduate level.
Going for a program with a category 1 curriculum just for the sake of "having a Master's degree" would not do me any good. At this stage, it's hard for me to get into a university offering Category 2 curriculum, so I have to rule out a Master's degree for now. I need to be well grounded in the core CS concepts, so it would be better for me to pursue a Bachelor's degree.
However, even if I had the money, enrolling at a University to pursue an undergraduate CS degree may be difficult for me because of time constraints. I cannot commit to 25 hours per week at this point.
So, what do I do?
Only 1 option!
Well, clearly, my best option (unless you can convince me otherwise) is to self-study, in my own time, at my own pace. However, I have to do so in a well defined and structured manner, not haphazardly and only doing so when I feel like. What would really help is to be part of a community of other people in a similar situation, so that we study and learn together, encouraging and challenging each other along the way.
Fortunately, there are many resources and guidelines out there to help people like me pursue a CS education on their own. I have already referred to teachyourselfcs.com, which suggests that one studies the following nine core subjects, aiming for 100-200 hours of study of each, then revisiting favorites throughout one's career:
- Computer Architecture
- Algorithms and Data Structures
- Math for CS
- Operating Systems
- Computer Networking
- Languages and Compilers
- Distributed Systems
There's also the OSSU curriculum, which is described as a complete education in computer science using online materials. OSSU has a discord server where one can interact with other OSSU students.
Looks like I'm sorted, right? Well, not quite!
I need to look at the various guidelines and curricula, also comparing with actual CS programmes at selected universities.
I need to think critically about the end goal and structure my learning accordingly.
I'll put up a follow-up post where I document what I'll come up with — essentially, I'll be talking about building my own CS degree!
Until then, adios! 👋