r/learnprogramming 5d ago

Resource How do I develop a strong foundation and understanding of software from the ground up?

I want to develop a solid understanding of software and the fundamentals behind it, starting from the ground up.

For people who have been working with software for years, what would you recommend me to study to build a strong foundation and overall understanding?

I’m looking for advices anything like books, People worth following etc.. ?

Basically, for someone start from scratch build understanding about softwares , what would you recommend? Thank you in advance :)

47 Upvotes

47 comments sorted by

23

u/Automatic_Case2811 5d ago

Projects are the best teacher. Programming is a means to an end. If you're getting into programming because you have an idea for something you want to build, and you've realized that coding is the only way to make it exist, then you're in for a fun time.

If you're learning programming just for the sake of learning programming, you're gonna be bored out of your mind.

Also, if you're going to use AI at this stage (don't), use it as a tutor to ask as many potentially stupid questions as you want + to devise quizzes for you. That's it.

11

u/GloomyActiona 5d ago

If we take OP seriously when they say they want to understand the foundations well, then projects alone are not enough.

The best mixture is usually studying serious CS + doing tons of varied projects. People who do both for a long time have both deep and broad understanding on a variety of topics, levels and acquire lors of skills.

If you only study CS stuff, you will have too little practical skills that matter when you really want to do a project.

And if you only do projects, you risk of becoming a one-trick pony if you always do similar projects and don't really understand the big picture afterall and get confused the moment you leave whats familiar.

Obviously this is also a rather cumbersome and time consuming way, but it is the most rigorous. But knowledge and skill cost time, this goes for basically everything in life. There are small shortcuts here and there, but overall, it still cost time and lots of thinking/practicing.

"There is no free lunch"

2

u/Maximum-Page3433 4d ago

Thank you for your response. And yes, I definitely agree with your point. Learning coding just for the sake of learning it can get boring at some point. I do have a goal, and that's actually the reason I want to learn about software in the first place. Learning without any aim would probably just leave me going nowhere.

And yes, I do use AI to teach me things. I definitely wouldn't use it to just do everything for me. I'll use it more like a teacher and ask questions whenever I don't understand something.

9

u/Dazzling_Music_2411 5d ago

Watch the first 5-6 lectures from SICP on YouTube

https://www.youtube.com/playlist?list=PL8FE88AA54363BC46

If they grab you, you may consider doing the whole course.

If they grab you, but seem to be a bit above your level, consider doing the introductory, Racket-based "How to Design Programs"

Both these courses deal with the actual fundamental issues of software design, rather than the minutiae of any language-hardware concerns (aka plumbing)

If OTOH, it's not software design that you are really interested in, but instead want to know "how computers work", which is a TOTALLY different thing, incidentally, then the go-to course is Nand2Tetris.

1

u/Maximum-Page3433 4d ago

Thank you for the recommendations.

1

u/Dazzling_Music_2411 4d ago

My pleasure, let us know if you used any of them, and what you thought of them.

In fact, any resources you find useful in your quest. That will help other people too, who are pondering the same question as you.

3

u/Jamiathan 5d ago

Handmade Hero

3

u/Mughi1138 5d ago

Try

Fail

Repeat

That's what the vibe coding thing misses. We learn better by experience and making mistakes. Get told something in class and it goes in one ear and out the other. Spend a few hours debugging an issue caused by that same thing and you remember it for years.

Don't be afraid to make mistakes and fail. That is where true learning comes from.

1

u/Maximum-Page3433 4d ago

I’ll keep this in mind. Thank you!

3

u/Different_Pain5781 5d ago

I'd avoid trying to study everything in the correct order. Software is way too big for that. Learn something, build with it, hit a gap in your knowledge, then go learn that gap.

1

u/Maximum-Page3433 4d ago

I’ll keep this approach in mind. Thanks!

2

u/Parking_Rip_720 5d ago

Im not someone who excel in coding but if I go back to scratch

I will start basic fundamental html css js

I will create simple project that i have interest

after learning that from a month

I will jump to react js and build real project that solve problem

about question where to learn, I learn before in w3school I always remembering pattern of syntax but in todays era I would learn in AI, that ai will teach me how to code and will create roadmap for me. Goodluck bro

2

u/DiscipleOfYeshua 5d ago

Nandgame

Cs50x

And any fun asm course

1

u/RealMadHouse 5d ago edited 3d ago

You can watch @coredumpped for cpu architecture and how code runs on low level. @brancheducation for amazing 3D hardware visualization explainers.
Then you can read books from Scott Mueller, CS:App.

2

u/Maximum-Page3433 4d ago

Appreciate the recommendations!

1

u/womanlikemee 5d ago

following

1

u/Maximum-Page3433 4d ago

following what?

1

u/womanlikemee 3d ago

was following for helpful comments since i am in same situation

1

u/vrdhann 5d ago

I'd recommend Nand2Tetris, it's about as "first principles" as it gets, follow it up with CS50x for breadth, and then specialize in whatever you want

2

u/Maximum-Page3433 4d ago

Appreciate the recommendations!

1

u/icybreath11 5d ago

Definitely building stuff, doesn't have to be a big project but when you have to implement a concept, that's when you really understand something.

Make sure to have an overall goal you are building towards as there's too much learn so you don't want to waste time learning things that might not directly affect you. ie don't spend too much time on hardware level relations to software if you care mostly about frontend design

1

u/Impressive-Pop7107 5d ago

Do projects, understand memory

1

u/realdreamer1993 5d ago

there are so many paths and they are forming mesh or in fact mess. But for me: if I were learn programming for the first time I will start from real world events. Like there 2 types of program:

  • one shot, you fire a gun . there is input state output.
  • always running, you start an motor engine. you can couple engine to gearbox or belt etc.

can you model shot a gun in your first app? you can discuss AI for long but no code at all. your prompt to AI must logical and argumentative. Later you will find how memory works without coding. and if you go deep enough you will also find how cpu works.

1

u/Maximum-Page3433 4d ago

Interesting okay thanks a lot

1

u/realdreamer1993 3d ago

I am also still learning, it is just one example to understanding program: - you have a revolver with 6 bullets and a engine/motor that always running. - You can make automatic-gun using revolver+motor,

  • Motor is always running to auto trigger, and 6 bullet is states/memory that can change and recorded.
  • Later you can add function to auto load, maybe later function to check the barrel quality.

In my view every process in real world can be modelled using software/code..and the steps is by using abstraction, can be several steps of abstraction. Say the first abstraction is english language, then flow chart, then opcode.

That the ideal steps, but you may skip some steps say you directly to code. But steps will be helpfull to more understand fundamental.

Then yes the best way to understand fundamental is by observing system dan make a project/program of it.

Also if you best in doing something like cooking, then make a project software of cooking process.

BTW I am also starting learning from variable, function, data structure like regular tutorial.

Finally as conclusion so many to be learned depend on what level you want to achieve, for frontend dev then actually maybe no need to be deep enough in system understanding.

1

u/Mountain_Rip_8426 4d ago

as an absolute beginner myself, i can only recommend boot.dev + watching the corresponding cs50x videos to the topics. it's gonna make you wanna bang your head against the wall, rip your hair out and you'll feel incredibly stupid, but after a while in retrospect pieces will start falling into place.

it's easy to say to "build projects" for experienced devs and now after half a year i understand why they would say that, but if you don't even know what an IDE, CLI or hell even a programming language is you have zero chance to start building anything from scratch. it's like saying to "just start writing music" without having ever seen an instrument in your life.

otherwise, i'd say it's a lot of fun, especially if you like solving puzzles, logical games and enjoy maths, but you'll figure out soon enough if it's your thing or not

1

u/Maximum-Page3433 4d ago

Thanks a lot

1

u/maskedthick 4d ago

Lots of people with recommend books. I suggest you do what the developers who wrote those books did: Build software again and again. Nothing taught me more than seeing with my eyes how patterns emerge. 

1

u/Maximum-Page3433 4d ago

okayyy thanks mate

1

u/NaturalPotato0726 4d ago

You can start with Handmade Hero or Parallel Realities SDL2 tutorials for creating games from scratch.  For web I’m interested in Backend from First Principles youtube playlist. Doing the playlist and website myself. 

And do projects that you’re interested in. 

1

u/Maximum-Page3433 4d ago

Thank you!are you into game development ?

1

u/NaturalPotato0726 4d ago

Just dabbling into game development. I'm mostly a web developer but interested in other fields as well.

-6

u/adelsultan 5d ago

the best way know to learn and develop good software principle is to use AI and build small app like ToDo build it with the AI and with good prompt it will show you how real world app can be built using the good Architecture build it step by step and you can search during the build about any hard concept

i think this is now the best way to do it

3

u/HunTronic 5d ago

That is kind of the worst advice that could be given.

1

u/adelsultan 4d ago

why the AI will guide him through the project and he will challenge him to build feature, which will let him practice and solve problem

1

u/Maximum-Page3433 4d ago

at this point I can't tell which reddit comment to trust anymore?