Any good books on mathematics for software engineers? I’ve been looking at the best universities in UK, they all have much more mathematics in their degree than what I’m taught.
I assume they teach mathematics, because it’s useful for software engineers.
Be aware that computer science and software engineering are different disciplines, and don’t assume that people who design university curricula are experts on teaching software engineering. You can find top-notch computer scientists at universities, but top-notch software engineers tend to end up in the industry instead of academia.
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.
Are you saying that you have a friend who attends this program at Oxford and they don’t do any actual programming? I suspect I’m misunderstanding because that sounds really unlikely.
Oxford’s course is unusually pure. My freinds reading it don’t actually use, you know, computers. They just write their algorithms down on paper.
“Pure” one word you could use for that teaching strategy. Just what it is a ‘pure’ representation of is up for debate. “Pure backwards self-congratulatory tripe” would be the cynical description.
I think they’re trying to train a Scott Aaronson, not a John Carmack. A Scott Aaronson really does work by not actually using a computer much for anything other than typesetting LaTeX.
And that sounds like a brilliant idea. Most of the problems I have with having being forced to write algorithms on paper at times disappear right there. It’s even worse than forcing people to write sentences on paper, given the need for correctness in the details.
You’re being awfully cynical lately, and I don’t like it.
I have never respected cheap ‘purity’ signalling at the expense of practical considerations. Not when I was learning at university, not now. I will always consider the obligation to use paper rather than modern technology to be a bad thing, not an indicator of elite quality.
Would you like an internet hug?
No, you are making me uncomfortable. Please don’t ask again.
That’s because I wanted to see what their programmers study and computer science was the closest I found. I assume that their programmers would study that? And that it’s better than study software engineering in a significantly worse university?
It really depends on what field you’re going into and what specifically the employers you’ll be courting will be looking for. For example, having a degree in philosophy was a major boost at my current job, because there are (oddly) so many CS majors out there with no critical thinking skills.
I was going to give various detailed advice here, but I realized I have no idea what the tech jobs are like in the UK. I assume they involve a lot of paperwork.
I assume they teach mathematics, because it’s useful for software engineers.
Maybe, but I think a bigger reason is that it is useful for computer scientists, and these courses aim to prepare you for research as well as for work in industry.
Any good books on mathematics for software engineers? I’ve been looking at the best universities in UK, they all have much more mathematics in their degree than what I’m taught.
Also, any good books for probability theory and all the things needed for AI development? I’m doing this course: https://www.edx.org/courses/BerkeleyX/CS188.1x/2012_Fall/about
Edit: These are the programs I’ve been talking about.
Imperial college: http://www3.imperial.ac.uk/ugprospectus/facultiesanddepartments/computing/computingcourses http://www3.imperial.ac.uk/computing/teaching/ug/mengcompse
Cambridge: http://www.study.cam.ac.uk/undergraduate/courses/compsci/
Oxford: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html
I assume they teach mathematics, because it’s useful for software engineers.
Be aware that computer science and software engineering are different disciplines, and don’t assume that people who design university curricula are experts on teaching software engineering. You can find top-notch computer scientists at universities, but top-notch software engineers tend to end up in the industry instead of academia.
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.
Oxford’s course is unusually pure. My freinds reading it don’t actually use, you know, computers. They just write their algorithms down on paper.
Are you saying that you have a friend who attends this program at Oxford and they don’t do any actual programming? I suspect I’m misunderstanding because that sounds really unlikely.
I think they did at one point—but yes, when I asked them about it, they basically hadn’t entered code into a terminal for an entire semester.
“Pure” one word you could use for that teaching strategy. Just what it is a ‘pure’ representation of is up for debate. “Pure backwards self-congratulatory tripe” would be the cynical description.
I think they’re trying to train a Scott Aaronson, not a John Carmack. A Scott Aaronson really does work by not actually using a computer much for anything other than typesetting LaTeX.
And that sounds like a brilliant idea. Most of the problems I have with having being forced to write algorithms on paper at times disappear right there. It’s even worse than forcing people to write sentences on paper, given the need for correctness in the details.
Oh, they don’t have to write on paper. I just don’t know any maths students who do. Handwriting maths is easier than typesetting it.
(At least it is for people who are bad at typesetting.)
Wolfram-style automatic formatting buttons ftw.
Maybe try with a bit less sarcasm? I’m having genuine trouble parsing what you are objecting to, exactly.
There isn’t any sarcasm in the grandparent.
You’re being awfully cynical lately, and I don’t like it.
Would you like an internet hug?
I have never respected cheap ‘purity’ signalling at the expense of practical considerations. Not when I was learning at university, not now. I will always consider the obligation to use paper rather than modern technology to be a bad thing, not an indicator of elite quality.
No, you are making me uncomfortable. Please don’t ask again.
It’s not the teaching strategy, it’s the subject matter. See for instance pure maths.
It looks like you’re talking about software engineering, but looking at computer science courses.
No, they teach mathematics because it is necessary for computer science. They probably have little care for what is useful to software engineers.
That’s because I wanted to see what their programmers study and computer science was the closest I found. I assume that their programmers would study that? And that it’s better than study software engineering in a significantly worse university?
It really depends on what field you’re going into and what specifically the employers you’ll be courting will be looking for. For example, having a degree in philosophy was a major boost at my current job, because there are (oddly) so many CS majors out there with no critical thinking skills.
I was going to give various detailed advice here, but I realized I have no idea what the tech jobs are like in the UK. I assume they involve a lot of paperwork.
Maybe, but I think a bigger reason is that it is useful for computer scientists, and these courses aim to prepare you for research as well as for work in industry.