DEV Community

pokhanto
pokhanto

Posted on • Originally published at pokhanto.com

Point of departure on the road to systems programming

As a web engineer with 10 years of experience, I have been reflecting on my professional growth and future direction. After much consideration, I have decided to explore the world of systems programming. To stay motivated and accountable, I am documenting my journey in this blog. Balancing this new learning endeavor with a full-time job will undoubtedly be challenging, but I am convinced that maintaining this blog will keep me on track.

To achieve my goals, I need a structured learning plan. I have already dedicated some time to preparing this plan, and I will share it here and commit to following it. I hope this approach will help me structure my efforts and build a solid foundation of knowledge.

As you may already understand, this blog is primarily for my own benefit. Another personal goal I have is to learn Rust along the way. I've dabbled in it occasionally over the past year, but never seriously. Making Rust key focus will be another objective for me.

To begin, I want to outline some major topics to focus on. While these topics are interconnected and relate to each other in various ways, dividing them should help me structure my plan more effectively.

  1. Computer science
  2. Database development
  3. Rust practice focused on systems programming

Computer science

I never formally studied computer science and didn't feel it held me back as a web developer. I did some easy exercises on LeetCode occasionally and read about data structures and algorithms when I had free time. However, it was never serious, and the lack of consistent practice prevented me from building a strong foundation. But with my current goals, this area has become very important. After some research, I found this set of resources at teachyourselfcs.com, and it seems to be exactly what I need. For practice, I plan to choose challenges from LeetCode or a similar platform.

Database development

This part is somewhat specific and will definitely have connections to computer science, but I want to highlight it separately. The reason is this video course: YouTube Playlist. I've already watched a few videos and can't wait to complete the entire course. Additionally, there is a set of assignments related to the course, and I will likely choose some to implement.

Rust practice focused on systems programming

Here are some services to help me avoid spending all my free time thinking about project ideas:

First two contain a lot of interesting and challenging tasks in the form of real-world tasks or projects. I've already tried some tasks from CodeCrafters, and it feels very rewarding. It forces you to do additional research to understand how things work in order to get the job done.

Actual plan

Lets put everything together into a real plan. To do this there are few obvious statements about how I should approach my learning:

  • Before starting the database development course, I need to review and select some essential topics from Computer Science.
  • There is no need to jump into database development practice before database development course has at least started
  • At the same time I will need to improve my Rust skills whenever possible
  • I need to try to immerse myself in learning so it is very preferably to have 2-3 hours per day for this

There are several subjects on teachyourselfcs.com, but I feel I can categorize them into those I should learn first (before engaging in systems programming practice or specific courses) and others that can be learned later. The important ones, in my opinion, are: Computer Architecture, Algorithms and Data Structures, Math for CS, and Computer Networking.

The plan:

Part I: CS

  1. Computer Systems: A Programmer's Perspective
  2. Data Structures and Algorithms
  3. Discrete Math
  4. Introduction to Computer Networking
  5. Practice: CodeCrafters, Hackattic

Part II: Database development

  1. Intro to Database Systems
  2. Structure and Interpretation of Computer Programs
  3. Operating Systems: Three Easy Pieces
  4. Crafting Interpreters
  5. Practice: CodeCrafters, Hackattic

Part III: More database development

  1. Practice: PingCAP Talent plan
  2. Any information I will find working through previous parts

That's it. I'm going to follow this plan and post my most interesting findings, results, and progress here. I hope this plan, along with these useful links, inspires someone to start a similar journey or at least helps them learn something new.

Top comments (1)

Collapse
 
louys profile image
TQLeung

awesome man,just struggling!