Book recommendations to learn programming fundamentals
from harsh3466@lemmy.ml to programming@programming.dev on 19 Sep 2024 01:40
https://lemmy.ml/post/20454865

Hello! I’m looking for book recommendations for learning programming fundamentals.

To be clear, I’m not necessarily looking for a book on learning language(s), but rather, programming, theory I guess you might call it?

For example, I’ve been playing around a lot in my terminal writing bash scripts, and I just implemented my first function. Another example, I know the phrase “Object Oriented programming”, but have no idea what it means.

I learn well by doing, and I’ve learned a lot just writing scripts and reading about bash scripting, but I also realize there’s a lot about programming at a higher level that I know nothing about.

#programming

threaded - newest

solrize@lemmy.world on 19 Sep 2024 01:48 next collapse

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.

harsh3466@lemmy.ml on 19 Sep 2024 01:54 collapse

Found it. Thank you!

ericjmorey@programming.dev on 19 Sep 2024 12:42 collapse

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.

discord.gg/j2tCPpMq

MajorHavoc@programming.dev on 19 Sep 2024 02:03 next collapse

It sounds like you may be ready to Obey The Testing Goat

tingly@lemmy.world on 19 Sep 2024 02:21 next collapse

The Pragmatic Programmer pragprog.com/…/the-pragmatic-programmer-20th-anni…

JustTesting@lemmy.hogru.ch on 19 Sep 2024 02:33 next collapse

‘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"
snek_boi@lemmy.ml on 19 Sep 2024 03:09 next collapse

On mobile atm but there’s the Princeton books on Computer Science

rockSlayer@lemmy.world on 19 Sep 2024 04:06 next collapse

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

ericjmorey@programming.dev on 19 Sep 2024 12:23 collapse

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.

kambusha@sh.itjust.works on 19 Sep 2024 05:15 next collapse

I think “Code” might fit the bill.

codehiddenlanguage.com

Phoenix3875@lemmy.world on 19 Sep 2024 07:16 next collapse

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.

DirigibleProtein@aussie.zone on 19 Sep 2024 08:30 next collapse

The Art of Computer Programming by Donald Knuth

ericjmorey@programming.dev on 19 Sep 2024 12:26 next collapse

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.

embed_me@programming.dev on 24 Sep 2024 10:56 collapse

Its not an entry point into programming at all. From the preface of the first volume,

The following chapters are not meant to serve as an introduction to computer programming; the reader is supposed to have had some previous experience. The prerequisites are actually very simple, but a beginner requires time and practice in order to understand the concept of a digital computer.

ericjmorey@programming.dev on 24 Sep 2024 23:58 collapse

I agree. I was just using understatment for rhetorical effect.

FizzyOrange@programming.dev on 20 Sep 2024 20:56 collapse

lol imagine…

embed_me@programming.dev on 19 Sep 2024 09:44 next collapse

teachyourselfcs.com

Its a long path but one you can take at your own pace. Good luck

FunkFactory@lemmy.world on 19 Sep 2024 17:09 next collapse

Head First Design Patterns really helped me untangle the spaget

NostraDavid@programming.dev on 20 Sep 2024 20:02 collapse

Head First Java is also nice to learn OOP as well! Don’t worry that you’re learning an older version of Java. It’s good to know the old style, because not all Java code is fancy schmancy new ;)

Out of a lot of series I’ve read, the Head First is really geared towards beginners. Highly recommended for beginner to intermediate programmers.

palordrolap@fedia.io on 19 Sep 2024 14:53 next collapse

95% of all "Introduction to <whatever programming language>" 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.

[deleted] on 19 Sep 2024 21:30 next collapse

.

gwilikers@lemmy.ml on 20 Sep 2024 03:24 next collapse

Automate the Boring Stuff with Python is a good way to get many of the general foundations through a series of projects.

NostraDavid@programming.dev on 20 Sep 2024 20:00 next collapse

I am going to toot my own horn… Or rather: MIT’s horn.

thaumatorium.com/articles/…/mit.drawio.svg

This is a graph of most of MIT’s CompSci courses, where the lines are dependencies. If you want to learn something on the right, learn the connected things on the left.

While there are video courses, the top link in each block links to MIT pages where they tend to recommend books for each course. The algorithm courses recommend “Introductions into Algorithms, Fourth Edition”, for example.

I hope it helps (even if I don’t think this is the be-all end-all to your question).

FizzyOrange@programming.dev on 20 Sep 2024 21:05 next collapse

I would probably recommend not trying to understand the whole field of programming initially. It’s huge, you won’t understand what the terms mean (e.g. OOP, functional programming, etc.) and it’s not very motivational.

Instead I would pick one or two popular languages to learn and actually make something in. The no-brainers are Python and Typescript. They’re hugely popular, not difficult, and let you get a lot done.

I think I would consider learning both at the same time. If not, at least don’t stick with Python too long. It is immensely popular but also has a lot of brain dead design decisions. Especially a) it’s reaaaally slow, you easily get a 50x speed up just by switching language, and b) the “infrastructure” around it - installing Python, adding libraries etc. is completely awful. There are attempts to fix that but they’re nascent.

Above all I think a good thing to have is a realistic goal of something to make. For Typescript the obvious thing is a web site. I really like this way of making web sites - you can get started with literally 2 command - but it may be a little too much for a beginner.

For Python I would look into some kind of automation or maybe web scraping thing. It’s decent at that.

Or if you have more specific project ideas you could use the most appropriate language for those, e.g. a microcontroller project you probably want to start with Arduino (C++). C++ was my first language (apart from QBasic which doesn’t count). Probably not for everyone though. I was very young and had free time.

houseofleft@slrpnk.net on 21 Sep 2024 18:23 collapse

I read ‘Computer Science Distilled’ early on and it really helped me. It’s a very shallow summary of some CS fundamentals, but that’s kind of what you want when you’re starting out- just enough knowledge to know what exists to learn later.

Here’s a link: goodreads.com/…/34189798-computer-science-distill…