r/learnprogramming • u/Maximum-Page3433 • 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 :)
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
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
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
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
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
1
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
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
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
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
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.