Programming
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities !webdev@programming.dev
Head First Design Patterns really helped me untangle the spaget
95% of all "Introduction to " books tend to dedicate the first couple of chapters to the fundamentals but with a specific bias towards the language in question. Seek out a few of those at a library or online equivalent and you'll start to see patterns cropping up.
Anything that doesn't have that bias is likely to use pseudocode which looks like a programming language anyway.
Object orientation works around the concept that things in the program "know" things about themselves and how to do things for themselves rather than have some other part of the program do things to them. Commonly you'll see things like doSomethingWith(someObject)
being the non-OO way and someObject.doSomething
being the OO way. That is, in the latter someObject
contains the knowledge of how to doSomething
, and the dot notation urges it to do whatever it is.
For a silly but more concrete example, x ← 2 + 2
is non-OO, but x ← 2.add(2)
is at least partially OO because the first 2 is expected to know how to add another 2 to itself and give out the correct answer. Presumably in whatever language that is, someone has created a method for numbers to know what to do when told to add
. The other 2 doesn't really get a say in things. We might also have, say, elephant.putOn(hat)
, but it might not be possible to hat.putOn(elephant)
because no-one thought to teach the hat how to wear things, let alone elephants.
If you are looking at learning CS in a more holistic manner, there's Path to a free self-taught education in Computer Science!. It's a list of courses, categorized by topics, which are exactly what a CS undergraduate would learn. It might feel daunting at first, but you can pick any interesting topic and dive in.
I especially recommend CS50P for beginners.
OOP was a 1990s thing that is still around but don't worry about it too much at first.
The classic intro book is Structure and Interpretation of Computer Programs aka SICP. You can find it online with a web search. It will give you a good grounding in fundamentals. Then you can figure out what to pursue next.
Found it. Thank you!
Some people who are self studying Structure and Interpretation of Computer Programs have been using a discord server to assist each other as needed. I realize that there are a number of people using Lemmy whi are very opposed to using discord over other options, but I don't know of any other sustained forums focused on this book.
'Programming from the ground up' the main idea of this one is to teach programming in a bottom up way, so very low level.
it's mostly about teaching (linux) assembly to beginners, so in a way it is just learning a new language. But it's mainly about understanding low level how a computer works, like registers, kernel calls, how function calls are handled, all for beginners. It's really easy to pick up.
Knowing those fundamentals can go a long way in understanding other computing concepts.
Others that come to mind are :
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
- A Philosophy of Software Design
- Software Architecture: The Hard Parts"
The Art of Computer Programming by Donald Knuth
That's an entry point into programming that's not for everyone. It seems like the poster is looking for something more hands on and pragmatic rather than technical and academic.
I highly recommend the online book How to Think Like a Computer Scientist.
Fun fact, the person maintaining this book is professor emeritus from my college and received multiple awards of recognition from the IEEE
An author of the original book, Allen B. Downey, has released a third edition if his updates that is also available online at no cost and in Allen B. Downey's words:
The book is now entirely in Jupyter notebooks, so you can read the text, run the code, and work on the exercises – all in one place. Using the links below, you can run the notebooks on Colab, so you don’t have to install anything to get started.
The text is substantially revised and a few chapters have been reordered. There are more exercises now, and I think a lot of them are better.
It's interesting to see how the same source material has grown into two differently maintained and similar resources.
The Pragmatic Programmer https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/
On mobile atm but there’s the Princeton books on Computer Science