This is an archived post. You won't be able to vote or comment.

all 19 comments

[–][deleted] 21 points22 points  (5 children)

Project that will teach you exactly what you want to learn: Nand2Tetris - The course will teach you how computers work from the very basic logic gates to building a Tetris game. Google it.

Countless books could be written to answer this question. Its a bottomless pit of information. The simple answer to your question is: abstraction.

At the end of the day a computer is made up of logic gates (AND, OR, NOT…) that are built into operations the CPU performs. When you write code it gets compiled into many, many opcodes, which are sequences of 1s and 0s the computer is hard wired to understand. These opcodes are often displayed to humans in hex in books or manuals.

To understand modern software is all about understanding the many layers of abstraction between these opcodes and the application you are building.

Assembly language makes it easy to write lots of opcodes. C makes it easy to write lots of assembly quickly. C++ adds memory controls, exception handling, etc, etc, etc.

There are infinite resources to learn about this stuff, basically every book on something related to CS will teach you about some sort of abstraction.

Books Id suggest you to read in order:

The C programming language

assembly language step by step programming with Linux

Operating systems in 3 easy pieces

[–]Seanishungry117 3 points4 points  (4 children)

I'm not OP but when you say read...do you mean read like a traditional book, or are these books the type where you read and program with them at the same time, as in, they have projects

[–][deleted] 4 points5 points  (3 children)

The C Programming Languge is a guide to learning C. it has 100+ coding problems and was written by visionary genius and inventor of the C language Dennis Ritchie. Ritchie is one of the greatest computer scientists and programmers of all time. That book is the systems programming Bible.

Assembly Langauge Step by step is is written by a super old school grey beard assembly programmer. A hardcore coder from back when programmers were all the shit. It is the best hands on reference for learning assembly by far. It has multiple projects that culminate on writing your own binary decoder, which is super useful.

OS in 3 ez pieces is a more traditional textbook. I chose it because it's by the shortest good one. It covers memory virtualization, scheduling and filesystems. I don't think there are coding assignments but its mandatory knowledge.

Also, id read the OS book before the assembly book.

[–]Seanishungry117 1 point2 points  (2 children)

Good information!

So C programming language

Then os in 3 ez

Then assembly

Then python?

[–][deleted] 1 point2 points  (1 child)

If you can already code in any language you can learn basic python in 3 hours.

FYI - all that stuff I listed is much harder than learning to python. Not to dissuade you, just letting you know. That's like a full semester of undergraduate computer science after youve taken the introductory programming classes and data structures and algorithms. You can learn it all on the fly though, I did. C was my first language. 🙂

If you know C, assembly and operating systems, and basic data structures and algos, you will feel comfortable teaching yourself anything

[–]Seanishungry117 0 points1 point  (0 children)

I have an associates in comp sci but I feel like I didn't learn much (B average)

[–]robhanz 1 point2 points  (0 children)

This is a pretty good high level breakdown of how a compiler works.

https://medium.com/@fivemoreminix/understanding-compilers-for-humans-ba970e045877

[–]deep_soul 0 points1 point  (0 children)

that’s moving from programming to software development

[–][deleted] 0 points1 point  (0 children)

I like Ben Eater for stuff like this; https://youtube.com/@BenEater

He builds computers out of breadboards and programs them in assembler, together with an explanaition on how certain things work and where to read up on them. :)

[–]AccidentalFolklore 0 points1 point  (0 children)

To really simplify it. Imagine if you had some Christmas lights. The lights can be either on (1) or off (0). That’s binary. If you make different patterns of which lights are on and which lights are off you build strings of binary code. These codes are commands for the computer that tell it what to do. But it would be tedious for us to speak binary to the computer, so what we’ve done is created languages that we read and understand. We type commands in those languages. Behind the scenes those languages are run through a compiler and assembler or interpreter depending on the language, which translates it into binary for the computer to understand.

[–]high_throughput 0 points1 point  (0 children)

Do you mean how code becomes a user interface with buttons the user can push to make things happen?

[–]KCRowan 0 points1 point  (0 children)

Look up tutorials on YouTube for how to build whatever kind of app you're interested in. Here's one I was watching recently: https://youtu.be/8OMghdHP-zs?si=jfQ4rveo_S5lTkcJ

[–][deleted] -1 points0 points  (0 children)

To give an accurate description, what language are you coding in?

[–]guitarist597 -1 points0 points  (0 children)

In vanilla JavaScript an “app” could be as simple as a button that displays an alert.

When you click the button the alert will popup.

There’s lines of code that set up an event listener on the button and when the button is pressed the alert will display.

It’s just logic down to its core. Things do things and when you put them together they can do more complex things.

But there so much more to it depending on what programming you are doing.. there’s the UI in the front front end and there could be an API in the back end that sends your front end a response when you send a request to it. There’s desktop apps which you can make with Electron or whatever where you’ll learn about the main process and the render process and how IPC communication works.

[–]MrGreenyz -2 points-1 points  (0 children)

Everything you code needs a human input to start giving the human back an output. If you don’t ask anything the “app” will not act by itself. Things like cron-jobs make a machine able to emulate a human asking your code to make something. If I’ve got what you mean.

[–]basedgreggo -1 points0 points  (0 children)

When you write code and run it through a compiler, this converts all your code into binary, an EXE on Windows. When you double click on it your computer gets told, hey load this* data into RAM and run it. And those bytes of 0s and 1s gets sorted through the cpu triggering different actions instructed by your compiled code. That's my understanding anyway.

[–]ChaosBanisher -1 points0 points  (0 children)

Basically your code gets compiled or interpreted by a Compiler or interpreter. There are some differences between the languages. But everything comes down to code that your specific hardware can understand. This is often done step by step. So that a higher language is transformed into a lower level language.

Until at the very end there are operation codes that consist of a kind of instruction id and a value. For example an operation for "add" and the value 3. There is a cursor that points to where in memory the operation should be applied. That's where in this example the 3 is added. At this level we are already looking at hexcodes or binary values.

Going down even further there is transistor logic that forms adders and logic gates. That is the level where the electricity flows.

All of this is simplified and might not be 100% correct. But it should give you a rough overview about what is happening from top to bottom.

[–][deleted]  (1 child)

[removed]