DEV Community


Discussion on: What Are the Most Important CS Principles to Learn as a New Dev from a Non-Traditional Background?

louy2 profile image
Yufan Lou

Nicholas has done a wonderful job laying out the skeleton of what someone should do to stay passionate and informed about computer science and software engineering. Since I cannot do better, I will recommend some resources for doing each of them as a starting point.

Get a General Overview of the History of Computing

Go to the Computer History Museum! If you are fortunate enough, visit the museum in real life. Not only can you see all the computing devices throughout the history, you can try the Arithmeter, punch your own punch cards, see an IBM sorting machine in action, and stand inside a super computer.

Know The Machine

Custom build you own computer with PCPartPicker! You don't need to build the beefiest monster on earth. Compared to reading descriptions and looking at drawings and photos, it is infinitely more exciting to actually hold the motherboard in your hands, put the CPU in the cage, screwing on the cooler fan, insert RAM the right way, find where to plug power on the GPU, to close the case, to turn it on, and to see the BIOS screen... or nothing, which then teaches you about power consumption.

You can also go reverse and buy a cheap old machine for 50$ and take it apart. This doubles as a history exploration of obsolete hardware standards. Why do we not use 3.5mm anymore? What are IDE, SATA, M.2, NVMe? What are VGA, DVI, HDMI, DisplayPort, Thunderbolt? What's different among USB 1.0, 2.0, 3.0, 3.1, 3.2?

Well you can see how much a rabbit hole it can be. Don't sink too deep into it.

Data Structures and Algorithms

Practice applying the data structures and algorithms you have learnt to the questions on LeetCode! Many test cases there test with very big datasets, giving you real life feedback on the run time complexity of your code.

When you are bored with the language you started with, go to Rosetta Code to see how people write the same algorithms in other program languages! Every language comes with its own preferences and philosophies. Pick your favorite, but don't be constrained by it!

CS !== SWE

Involve yourself in a big open source projects! There are many opportunities every year ranging from Mozilla Grants to Google Summer of Code. Every famous open source project is almost always looking for contributors. They have mentors from whom you can learn a lot!

If you are a student, you can participate in hackathons in the Major League Hack. If you are not a student, you can participate in commercial hackathons which you can find at Devpost.

If you are into gamedev, definitely check out the gamejams at!