I'll try not to sound like a gatekeeper here, so I'll put it this way...

If you're an aspiring computer scientist, or a professional / expert computer scientist, TAOCP and SICP are some of the most amazing books in the field. If you have not read them, they should be on the VERY TOP of your wishlist!

"For Dummies" books are cheap for a reason: because they're, well... For dummies.

Also any "Teach yourself X in Y hours" bullcrap.

Do these books focus on any certain language? I'm not a programmer, but want to start volunteering with an open source project. I've heard of TAOCP, but what is SICP?

What language do you feel a programming newbie should tackle first?

I guess it depends on what you want to do and what sort of programmer you want to be.

There are classes of problems, bugs, and performance issues, you could never hope to solve as a computer scientist without a math background. At the same time there are plenty of classes of problems you can approach with a logical mind and minimal math.

I would say that any well rounded top of his class computer programmer needs to know math and computer theory. But if you lack those skills you can still be of help to a team and be productive, albeit at a diminished capability.

The issue is that if you dont know the math and theory, and no one else on your team does either, it can be hard for you to tell the difference. I often have programmers without a math/algorithms background propose solutions that sound perfectly feasable but due to my background I can immediately recognize that the proposed design will be impossible (perhaps due to performance limitations). I can likewise distinguish between solvable problems and unsolvable ones where someone without the background cant.

With that said I think if you have a logical mind and can understand mathy concepts even without the actual math, then yes you can probably get through an algorithms book and learn something. I would however suggest if you dont have a decent foundation in math you work on that as well.

Good feedback, thanks! Maybe I'll have to refresh my math on Khan Academy or something. I'm almost afraid to see how much I've completely forgotten.

It's not so much I don't have the foundation. I made it through Calculus 2, but I haven't used it in 15ish years after a career change from computers to healthcare. I suppose you could say I'm a little... behind the curve when it comes to math 🤣

I'd like to consider myself somewhat logically inclined, but it's all relative to whom I compare it.

Maybe I'll order the books, and if they're way out of my league (quite possible) set them down while I refresh/increase my math skills. I wish I found learning math as fun as what those skills can eventually be used to create.

Math is a bit of a weird topic... they use all sorts of crazy vocabulary and personally I think its just not needed. Most concepts to read them on wikipedia will make you go cross eyed, but if someone explains the ideas in plain english they often are so trivial you laugh at the fact that you never understood it in the first place.

Khan academy really does a great job at addressing that problem IMO.

All that said I suspect the math will come back to you really fast. It also helps if you try to do actual tasks rather than just learn the theory. I always learn the most math when I try to build things with math, rather than reading from a text book.

This is a really excellent discussion and a background in mathematics is pretty much helpful in *any* field.

If I could recommend one more book, it would be "Concrete Mathematics", co-authored by Knuth (the TAOCP guy). It's written for programming and is pretty much a companion to TAOCP. I only have it on digital but I really enjoyed it. It starts off by turning very simple algorithms into mathematical equations. It's not only informative and concise, it's *fun*!

I started out in Zoology and then moved into a MS in CS later in my career. The advice @freemo is giving is solid. Anyone with a decent logical mind can do well at the practice of programming (writing good code, working with other developers, etc) but you'll be limited on the design side without brushing up on your math. If you've made it through Cal2 then you should have a strong enough grounding to pick most of the other stuff up. Discrete math and Linear Algebre would be good courses to look for online as supplements.

SCIP is a very good intro book but TAoCS is extremely dense and you'll most likely miss most of the nuance without the equivalent of an intro to algorithms course.

Follow

"[Computer science] is not really about computers -- and it's not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes...and geometry isn't really about using surveying instruments. Now the reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought geometry was about surveying instruments: when some field is just getting started and you don't really understand it very well, it's very easy to confuse the essence of what you're doing with the tools that you use." - Hal Ableson (author of SICP).

SICP will show you how CS people 'think' about programming problems and teach you your first language (a semi-toy language, useful for instruction) so it's a great first book. I haven't read the Concrete Math book so I can't really comment on it but I'd definitely encourage you to seek out a good algorithms course after that. I think Harvard has some free courses online. Then you'll want to learn a very high level language like Python for general applications. After that, what tools you learn will be more specific to what you want to end up doing.