The recommendations in this thread so far do suggest a lot of nice books - CS:APP and SICP - but given your description of previous struggles with more academic stuff, along with the request for "practical examples or projects", I'm not sure they are right for you. By all means take a look, but don't be discouraged if they don't fit what you're after. An algorithm book with a somewhat different tone that you might check out is Skiena's Algorithm Design Manual. I've been reading Ousterhout's A Philosophy of Software Design recently and that might also be something that would interest you.
However, I might suggest that books and theoretical knowledge are not the main things you need right away. I moved into software engineering after a long time in science. I had done plenty of coding, and had a pretty decent amount of theoretical knowledge, but there was still quite a bit of practical adjustment. I really like Rzor's suggestion of https://missing.csail.mit.edu to start with.
Beyond that, I think maybe I would find some specific codebases that you'd like to understand better, and start with reading more of those. I feel like that's often better than books for picking up idiomatic usage and patterns in given domains. As you hit specific barriers, I think it will be much easier to pick up the intrinsic motivation to dip back into theoretical knowledge at that point.
Yeah, I would not point somebody unfamiliar with Stern-Gerlach trying to learn "the basic idea of quantum mechanics" at Sakurai. Feynman lectures vol. 3 maybe
Well, the characters are stuck on a primitive planet in the Slow Zone so if you go in expecting Space Opera then you’ll be disappointed.
Except half of Fire Upon the Deep was characters on the same planet but it was actually cool. The first two books are definitely among my favorite sci-fi of all time, the third one was a dud.
My main gripe is that these three books all share the same trope that underpins one of the major subplots: glib, charming politician type is scheming, eeeeevil. In the first two books, there's enough novelty (how the Tines and Spiders work, programming as archaeology, localizer mania) to make up for that. But I don't really think the third book adds much in the same way, and it is also very clearly building to a confrontation that will happen in a future book. So the staleness is much more noticeable
I spent quite a bit of time at the end of high school into early college playing on a Forgotten Realms themed MUD. It accomplished two valuable things: it durably increased my typing speed by 20-30 wpm, and it also inoculated me against the MMOs which would have been way more destructive for me.
You might be interested in Kip Thorne (of Gravitation fame) and Roger Blandford's book Modern Classical Physics, which is designed to cover the elements of non-quantum physics that are generally ignored in the first year PhD curriculum. Part headers: statistical physics; optics; elasticity; fluid dynamics; plasma physics; general relativity
I second the recommendation of this book -- it really is quite excellent and covers at an advanced level most of what is commonly left out of a modern physics curriculum (though it is quite imposing in its size/weight).
I largely agree with your comments in this thread -- I'd been thinking about trying to express the same thing myself. I'd been guessing the motivation would be ML, where I feel that most people substantially overestimate how much they'd need.
Signals processing, though, is one of the places where I actually think a decent understanding of some of the higher-level concepts in linear algebra is really helpful. Linearity itself comes to mind, and maybe it just reflects my physicist's education, but it's hard for me to imagine having a working understanding of Fourier transforms without getting the idea of changing bases. I feel like you're about halfway through a first linear algebra course before you'd get there.
EDIT: that said, a good signals processing book probably covers a lot of this in sufficient depth if you can figure it out. The other catch-all comment I'd make is that linear algebra from a math class can look somewhat different from practical linear algebra on a computer. (That it's often a bad idea to directly invert a matrix for many computing applications is non-obvious from math class.) A book like Trefethen and Bau is great on that latter subject but is not a good starting point for OP.
When the conductor is grounded, the charge on the conductor is no longer constant. It can change until the total enclosed charge in any sphere surrounding the conductor is zero.
Nocedal and Wright is good. +1 also to the suggestions for Boyd and Vandenberghe. I really like Boyd's writing in general; he has coauthored some good review articles on proximal algorithms and ADMM.
A couple of other suggestions:
Nesterov's Introductory Lectures on Convex Optimization. This one is pretty tough sledding, but I found the perspectives in the first chapter particularly to be enlightening. It seems like there's a newer Springer book which is probably an expansion on this.
Bertsekas's Nonlinear Programming. Bertsekas has written a lot of books, and there's a fair amount of overlapping going on. This one seemed to be the one that has the most nuts and bolts about the basics of optimization.
EDIT: If you want more understanding of convexity beyond what's presented in these books, Rockafellar's Convex Analysis is helpful.
Convex analysis by Rockafellar is pretty hard for a beginner. It's a research monograph. I would recommend "Fundamentals of convex analysis" by Hiriart-Urruty & Lemaréchal
I specifically mentioned those because they have little to no prerequisites other than high school math which I interpret can be read by any non-math major. They’re very self-contained but have very little hand-holding. I think just absorbing a little of these books will establish a decent foundation.
Concrete Mathematics is pitched at graduate students in computing. Spivak’s Calculus is an introductory real analysis book pitched at undergraduates who have gone through a computational calculus course already and want to study the subject more formally and rigorously; it has many difficult problems and would generally benefit greatly from the structure and expert feedback of a university course. Jaynes’s book is probably most relevant to science students who are at least at the advanced undergraduate level. How to Solve It is a dictionary of heuristic problem-solving techniques which is most useful to someone who is already (deeply) familiar with mathematical problem solving, and wants to codify their existing methods. Even advanced undergraduate math students who read it aren’t going to fully understand the book IMO; I would recommend Pólya’s other books (Mathematics and Plausible Reasoning, Mathematical Discovery), or maybe start with a gentler book like Mason, Burton, & Stacey, Mathematical Thinking.
Concrete Mathematics is solidly an undergraduate text. Much of the material in it would already be taught well before graduate school. The preface actually states the book takes comes course material taught to graduates and junior/senior undergraduates and presents it for a “wider audience (including sophomores).”
Otherwise I basically agree with your comment. I just take issue with calling Concrete Mathematics a graduate textbook, because I hear people say that as though it’s not an appropriate recommendation for learning. That gives me the impression they’ve not actually opened up a graduate textbook in math or computer science. Concrete Mathematics might not be year one material, but you can do it after a calculus course and maybe an algorithms course. Contrast this with an actual graduate course, like convex analysis and optimization. Textbooks at that level would definitely not be accessible for most undergrads.
Fair enough. It’s still not an easy book for someone to self-study after having no university-level mathematics, just as a side hobby.
I would certainly recommend giving it a shot for anyone interested, as it’s a lovely book full of fun problems. As you say, it’s accessible to well prepared undergraduates.
However, I might suggest that books and theoretical knowledge are not the main things you need right away. I moved into software engineering after a long time in science. I had done plenty of coding, and had a pretty decent amount of theoretical knowledge, but there was still quite a bit of practical adjustment. I really like Rzor's suggestion of https://missing.csail.mit.edu to start with.
Beyond that, I think maybe I would find some specific codebases that you'd like to understand better, and start with reading more of those. I feel like that's often better than books for picking up idiomatic usage and patterns in given domains. As you hit specific barriers, I think it will be much easier to pick up the intrinsic motivation to dip back into theoretical knowledge at that point.