DEV Community

loading...

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

Collapse
jahzielv profile image
Jahziel Villasana-Espinoza

I love this question!! I've been doing a lot of thinking lately about how we as an industry can better serve folks that come from non-traditional backgrounds.

How do computers really work?

This is probably the single biggest point to focus on in my opinion. At Georgia Tech we have a class called Computer Organization and Programming, which is probably the most influential class offered here. The class starts with describing (at a high level) how transistors work, then shows how transistors can be combined to create logic gates. Once you have logic gates, you can put them together to create things like registers and do math, as well as create RAM. You can then take those components and assemble them into a CPU. To make the CPU do stuff, you can write machine code, and if you want to write programs more quickly, you can write assembly code. If you want to write programs even faster, you can write C, which becomes assembly, which becomes machine code, which switches transistors on and off in the CPU to actually do things like add numbers together, or surf the Web! Being able to comprehend and internalize these aspects of how computers really work has been key for me to be able to grow as an engineer and as a computer scientist.

Even if you're working way above the guts of the machine, knowing how the underlying internals work will enable you to think like a computer. No matter what kind of code you write, you're still manipulating the bits in the registers and RAM of the machine, and you'll eventually come up against an issue that can only be solved well by knowing the machine intimately.

Layers of abstraction

To understand computing as a concept, you must understand the idea of a layer of abstraction. Our entire field is basically devoted to finding better and neater layers of abstraction; they are the power that gives computing its semblance of magic. One of the things that fascinates me about computing is that it is based on math, which doesn't really have any anchor in the real world. Binary Search Trees? Those don't grow anywhere. And yet this layer of abstraction, this different way of thinking about data and how it's organized, gives us real results in terms of lookup speed. There's no BST inside your computer – the data is still organized in a long row of transistors in memory. But having the BST layer of abstraction suddenly makes finding some of that data faster, even though nothing physically changed about the computer.

As you can tell, I really like talking about CS fundamentals! I think we as a community should try to find better and more accessible ways to educate everyone about these concepts. Hopefully discussions like these can inspire more folks to explore these fundamentals and take away some of the fear and apprehension that often surrounds these topics!

Collapse
beardedbry profile image
Brian

Is there any books you would recommend?

Collapse
ssimontis profile image
Scott Simontis

The program we used to learn logic gates was called Logisim and is freely available. There was one TA who pretty much made the class worthwhile when I took it. He knew the content leagues better than the professor who wrote the textbook, created all of the exercises and projects himself, and overall was a super awesome human being. I was struggling hard with depression when I took the first class, and would have majorly failed if that TA didn't help motivate me through it.

Collapse
jahzielv profile image
Jahziel Villasana-Espinoza

Hey Brian! I'm not a huge book learner, and a lot of what I've learned I've gotten from classes I've taken at Tech. This is the syllabus for CS 2110 (Computer Organization and Programming), the class that started my love for all things systems/fundamentals. I'd recommend finding resources that cover the topics in this syllabus. There are two textbooks mentioned, both of which I used intermittently while taking the class, but which contain most of the concepts.

Once you've looked at that, I'd recommend taking a look at the concepts covered in the next systems class at GT, CS 2200. The class site has a link to the textbook, which I'd definitely recommend. This class is basically a deeper dive into topics introduced by 2110, including more stuff on processor architecture, basic OS design concepts, and networking.

That seems like a lot, and you definitely don't need to become an expert in any of these areas or even cover all of them. Since my main experience with a lot of this stuff is in college, these are some of the best resources I have to recommend. If you want to actually take free college CS classes, I believe that Harvard and MIT offer several of their core CS classes online for free. Focus on things like architecture, operating systems, and networking.

Finally, my own personal goal is to be creating more accessible resources for folks to learn these concepts online, without the college classes. I'm doing a lot of thinking about how to best do this, so keep an eye out for more stuff that I might potentially make!

Collapse
rozay10 profile image
Agbolade Adeniyi

Can you mentor me

Collapse
jahzielv profile image
Jahziel Villasana-Espinoza

Hi Rasak! Thanks for asking, but unfortunately I'm pretty busy these days with wrapping up school. Check out the resources I linked above for some direction on how/where to learn. Good luck! 😁

Thread Thread
rozay10 profile image
Agbolade Adeniyi

Thank you Jahziel for reaching out.
Would appreciate if I can get links to some of those topics rather that toiling the wilds.

Thread Thread
jahzielv profile image
Jahziel Villasana-Espinoza

Sure! This is a comment I left on this thread with a couple of links to get you started. They take you to course descriptions of classes that were particularly influential for me.

Collapse
ssimontis profile image
Scott Simontis

Glad to see another Yellowjacket here! Those were my two favorite courses, but when I tried to take CPU design in Verilog all of a sudden I was in way too deep over my head. I guess I did not pay quite enough attention to CS 2200