What are some good books that rigorously approach the theory of computer science from a heavy mathematical perspective?

What are some good books that rigorously approach the theory of computer science from a heavy mathematical perspective?

Other urls found in this thread:

cs.brown.edu/~jes/book/)
Veeky
youtube.com/watch?v=YnWhqhNdYyk
cryptopals.com/
youtube.com/watch?v=l1FCXUi6Vlw
youtube.com/watch?v=I8LbkfSSR58&list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_
twitter.com/NSFWRedditGif

>SICP

Fuck off to with your high school level shit.

>shitting os sicp
>c++ as a first language
Low effort

I'm a maths major. Look to get into theory of CS. Don't know any other book but SICP since it's a meme.

sicp is a high school level book consisting of a superficial survey.
C++ is a perfectly good first language that many universities use.

Take your /g/ memes back to the

definetly not SICP, it has zero (0) math in it.
Also it is outdated, use How To Design Programs instead.

For the mathematics part I guess concrete mathematics would be a good start, but anyway why would you want to learn it? I have been coding for scientific computing for years and I have been okay without it. Honestly if all you are going to do is implement PDE and ODE solvers then going full CS is overkill. Learn some software engineering if you wanna do good progrmas (again HTDP). Even ML and genetic algorithms, reduced order models and other cool stuff is better suited for mathematicians than CSfags.

CS is only needed for the soul-draining jobs at software engineering like how to improve in 0.00001 seconds the access to a server query. And since we are in Veeky Forums and not /g/ you should not be concerned with that stuff.

Bottom up approach: Models of Computation: Exploring the Power of Computing by John Savage (free: cs.brown.edu/~jes/book/)
Top down approach: Computability, Complexity, and Languages: Fundamentals of Theoretical Computer Science by Martin Davis, Ron Sigal, and Elaine Weyuker

Check the wikia for other topics:
Veeky Forums-science.wikia.com/wiki/Computer_Science_and_Engineering

>that many universities use.
Yeah, and even more schools use java or python as their first language, that doesn't make those less shit.
C++ is a very good and powerful language, but it's way too complex for a beginner who never programmed before.
The natural progression sis c->c++->some functional lang

youtube.com/watch?v=YnWhqhNdYyk

>a heavy mathematical perspective?

cryptopals.com/
Set 8 in particular.

you literally just have to listen 20 seconds
>I have no problem with people teaching intro to c
what she is talking about is people teaching c as the beginning of a c++ course

...

>learning c as your first language
vs
>learning some c just so you can learn c++ afterwards
these are very different

>The natural progression sis c->c++

>OP asks about math
>Thread instantly devolves into MUH LANGUAGES DURURURURUR
Why isn't CS shit banned from Veeky Forums.

yes, in a uni setting
first semester c
second semester c++
but you don't learn c as an intro to c++, you learn c bc it's a simple language, you can concentrate on learning about loops an functions and other fundamental programming concepts, instead of worrying about namesapces, the rule of 5, operator overloading, etc...
and it's easy to implement the most important data structures and algorithms by yourself

>yes, in a uni setting
>first semester c
>second semester c++

Only in clown colleges that teach code monkeying over a dozen of courses.

First semester: Programming in C++
Second semester: Data structures and Algorithms in C++
Third semester: System Programming + Networking + legacy C needed along the way
Third semester: Computer Architecture + AMD64 crash course (or MIPS or ARM if using P&H)
Fourth semester: Paradigms crash course - scripting(python), logical(prolog), functional(racket), stack(forth), and array(J)

After that, there is no more focus on coding.

>namesapces, the rule of 5, operator overloading, etc

You don't have to use them if you don't want to, you fucking autist.

>and it's easy to implement the most important data structures and algorithms by yourself

Even easier with C++.

CHOKE ME SCIENCE DADDY

>top down teaching
disgusting
>You don't have to use them if you don't want to
but then you are not teaching c++, but c witch funky structs which makes no sense
>Even easier with C++.
easier after you learn about smart pointers and other stuff
but much simpler in c

also stop with the reddit spacing please, it's horrible to read

lambda calculus, category theory, functional programming

youtube.com/watch?v=l1FCXUi6Vlw

youtube.com/watch?v=I8LbkfSSR58&list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_

Seriously it's a garbage book with one only theory. They have a updated python version but it's still only theory that's common sense

I don't think this really matters. Anyone using C++ in first semester is essentially coding in C equipped with cin/cout. Using templates, smart pointers, and more advanced features only comes later.

What's wrong with Sisper's theory of computation book?

Good books
Logical Foundations for Mathematics and Computational Complexity (best book I ever pirated)
Analysis of Boolean Functions
Stasys Jukna's (sp?) book

BONUS: Gems of theoretical computer science

>language wars
please take this to /g/
also, SICP is good but it's far from being mathematically heavy, I have no idea how bad you have to be at math to think so

>also stop with the reddit spacing please, it's horrible to read

It's not reddit spacing retard, it's paragraphing. Redditers, twatters, and phoneposting cancer tend to post everything in one ugly block. Look through any thread from 10 years ago, it's how everyone always has posted.

>>top down teaching
>disgusting

C is not "low level coding with portable assembly". Stop believing everything you read on /g/.

>but then you are not teaching c++

You don't have to use everything in C++. Stop being so autistically triggered by having multiple ways of doing things.

>easier after you learn about smart pointers and other stuff

You don't transfer ownership to an algorithm so you should just pass the raw pointer. For basic data structures like list, trees, etc; you shouldn't need smart pointers as allocation should only happen in the add/delete operations.

>It's 9th grade level material. Way too easy and slow pace when students get to it.
>"Proof sketch" and "Proof" were often times just the proof in words and the proof in symbols. This early on gives a false impression that proofs in words like "for all" is somehow less rigorous than using "∀". In the latter part of the book, the actual proof spanned the proof sketch (where things are defined) and proof (where they are used) making reading them unnecessarily awkward. Presenting the core idea behind the proof is a good idea but the author screwed the pooch trying to implement it.
>The last chapter should have been expanded into full chapters on each topic covered.
>And way too expensive for what little it does.

why the fuck would u even teach C to someone who knows no programming????
pick Java or Python or something

I never understood why people think that learning C as a first language is a bad idea. I learned C as a first language, I would say that it's a pretty basic language and just makes sense. I'm by no means a professional programmer or computer scientist but I feel that learning a language like Python first would put you at a disadvantage if you looking learn about computing.

Of course though, Python is a very useful language and has many pragmatic applications.

I don't understand why people get so worked up over which language you pick first. Jesus christ it's programming it's not rocket science, C, C++, python, who cares? Calculus, linalg, analysis are a million times harder than deep diving into C++ as your first language, so who the fuck cares?

This

It just makes life nicer.

>c++ data struct

template class list{
struct node{
node * next;
T item;
node(T item, node* next) : item(item), next(next) {}
node(T item) : item(item), next(nullptr) {}
};
node * first, last;
...
public:
void add(T item){
if(!first) first = last = new node(item);
else
last = last->next = new node(item);
}
list() : first(nullptr), last(nullptr) {}
~list(){ ... }
}
...
};

>c data struct

struct list{
struct node{
node * next;
void* item; // must remember what the fuck you placed in here yourself
};
node * first, last;
...
void add(void* item){
if(!first) first = last = malloc(sizeof(node));
else
last = last->next = malloc(sizeof(node));

last->item = item;
last->next = 0; // 50% of students will forget it when writing it
}
void init(){ //must be called by programmer (and he will forget)
first = last = 0;
}
void destruct(){ //must be called by programmer and he WILL forget leading to memory leaks
...
}
...
};

>c++ numerical algorithm

const extended_float G = ....;
...
auto force_gravity = G * particle[1].mass * particle[2].mass / ( (particle[1].location_vec - particle[2].location_vec)^2 )

>c numerical algorithm

#define GRAVITATIONAL_CONSTANT = (extended_float_256) ....
...
extended_float_256 force_gravity = extended_float_256_div(extended_float_256_mult(extended_float_256_mult(GRAVITATIONAL_CONSTANT, particle[1].mass), particle[2].mass), extended_float_256_add( extended_float_256_add(extended_float_256_sqr(extended_float_256_sub(particle[1].location.x, particle[2].location.x)), extended_float_256_sqr(extended_float_256_sub(particle[1].location.y, particle[2].location.y ))), extended_float_256_sqr(extended_float_256_sub(particle[1].location.z, particle[2].location.z ))));

>pick Java

the fuck out and stay out

>computer science
>math related
Nice meme

>Used Susan S Epps discrete maths book
>Learned precisely fuckall in the class
This checks out.

Because C teaches you programming, you tard. Java makes you jump over a bunch of nonsensical hurdles and chew through OOP at the same time, and Python is a bad language to learn first flat out.

Your C struct is suboptimal.

How so?

>>top down teaching
>disgusting

Only CpEs and EEs care about digital logic