Any good books on mathematics for software engineers?
What kind of problems in particular would you like to be able to solve better? I don’t really find myself needing much mathematics in everyday programming.
That said, Knuth’s Concrete Mathematics comes to mind as a book on the sort of mathematics used in computer science, and Alexander Stepanov’s Elements of Programming takes an interesting mathematics-like first-principles approach to constructing programs in a C++-like language (Stepanov came up with the STL for C++).
There are also people claiming that category theory can be used as a foundation for software engineering, but I’m not able to point to many convincing examples of a real-world software engineering problem solved neatly using category theory. I could sort of follow some of the bananas and barbed wire paper, which constructs CT-ish algebraic representations for basic looping constructs in programs.
Actual category theory stuff just puts my brain to sleep by the time it jumps to the third level of abstracting categories into categories with me still without a motivation for connecting the thing to something I can do something with, but Pierce’s Basic Category Theory for Computer Scientists is at least thin and has a title which makes you think you should read it. There’s also Conceptual Mathematics that explains categories at a college freshman reading level with several examples, which I should probably get back to reading at some point. I could actually follow it, but still came out with no idea what I would actually want to use categories for.
I haven’t actually read any of these to the end, though I’m pretty sure I’ve read the first chapter from each.
ETA: I actually did read the Cinderella Book cover to cover as an undergraduate. It’s an introduction to the theory of formal languages and automata, working its way up to Turing machines and the theory of computation. Basically this is the book you read to understand what people mean when they say “Turing-complete”. The take-away message for practical software engineering is that there’s a hard line between easily tractable, Turing-incomplete languages and fundamentally undecidable Turing-complete ones, and you shouldn’t cross it without a good reason.
Also, Pierce’s Types and Programming Languages is about the mathematical modeling of the type systems for programming languages, coming from the direction of the Standard ML family of languages. The pressure between tractability and expressiveness of a type system can be an actual concern for real-world software.
What kind of problems in particular would you like to be able to solve better? I don’t really find myself needing much mathematics in everyday programming.
That said, Knuth’s Concrete Mathematics comes to mind as a book on the sort of mathematics used in computer science, and Alexander Stepanov’s Elements of Programming takes an interesting mathematics-like first-principles approach to constructing programs in a C++-like language (Stepanov came up with the STL for C++).
There are also people claiming that category theory can be used as a foundation for software engineering, but I’m not able to point to many convincing examples of a real-world software engineering problem solved neatly using category theory. I could sort of follow some of the bananas and barbed wire paper, which constructs CT-ish algebraic representations for basic looping constructs in programs.
Actual category theory stuff just puts my brain to sleep by the time it jumps to the third level of abstracting categories into categories with me still without a motivation for connecting the thing to something I can do something with, but Pierce’s Basic Category Theory for Computer Scientists is at least thin and has a title which makes you think you should read it. There’s also Conceptual Mathematics that explains categories at a college freshman reading level with several examples, which I should probably get back to reading at some point. I could actually follow it, but still came out with no idea what I would actually want to use categories for.
For AI and probability, Bishop’s Pattern recognition and machine learning comes up a lot.
I haven’t actually read any of these to the end, though I’m pretty sure I’ve read the first chapter from each.
ETA: I actually did read the Cinderella Book cover to cover as an undergraduate. It’s an introduction to the theory of formal languages and automata, working its way up to Turing machines and the theory of computation. Basically this is the book you read to understand what people mean when they say “Turing-complete”. The take-away message for practical software engineering is that there’s a hard line between easily tractable, Turing-incomplete languages and fundamentally undecidable Turing-complete ones, and you shouldn’t cross it without a good reason.
Also, Pierce’s Types and Programming Languages is about the mathematical modeling of the type systems for programming languages, coming from the direction of the Standard ML family of languages. The pressure between tractability and expressiveness of a type system can be an actual concern for real-world software.