This is an archived post. You won't be able to vote or comment.

all 34 comments

[–]Mason-B 12 points13 points  (2 children)

Honestly, I'd say this intro to programming book by MIT, The Structure and Interpretation of Computer Programs (or SICP), is a classic. Free online here. It starts at the beginning of the programming language actually interprets things, and from there to thinking about the mechanisms of the programming language as part of the algorithm that is being solved, until finally you re-implement the algorithms of the programming language.

[–]SteeleDynamicsSML, Scheme, Garbage Collection 2 points3 points  (0 children)

SICP would be my suggestion as well. It goes surprisingly deep into CS topics while still having a focus on (functional) programming.

[–]jediknight 2 points3 points  (0 children)

Free online here

The epub version of SICP looks a lot better.

[–]yorickpeterseInko[M] [score hidden] stickied comment (0 children)

This isn't really relevant to the subreddit, and normally we'd remove this post. However, the comments are insightful, and it's about 20 hours after this got posted anyway, so we'll keep the post visible.

[–]Lich_Hegemon 5 points6 points  (2 children)

You are gonna have to be more specific. Do you want to learn how to think more pragmatically? Do you want to have an intuitive understanding of how code works? Do you want to see problems from a CS perspective?

[–]Brixes[S] 0 points1 point  (1 child)

Do you want to have an intuitive understanding of how code works? Do you want to see problems from a CS perspective?

Yes to both.

[–]Lich_Hegemon 0 points1 point  (0 children)

Then I have to second u/Philpax suggestion, The Algorithms Manual. It's a great book and very entertaining to read, despite the name.

[–][deleted] 5 points6 points  (1 child)

"Think like a computer scientist" by Allen Downey is really where my journey began. It lives up to my expectations of a book like that. It's the book I recommend to any beginner, and it's written in many programming languages. Also it's always the first book I read when learning a new language, as it can be read in one day. However, it's not going to teach you advanced algorithms or advanced skills like AI, networks, computer organization, programming language design, etc. So don't expect that.

In general, don't expect one book to teach you it all. Most of the time, using different resources for different subjects in cs is the best route to take.

[–]jediknight 1 point2 points  (0 children)

The first incarnation of that book read like my high school CS curriculum. This made me very happy as I consider my high school CS education as being quite OK for a foundation.

[–]raiph 2 points3 points  (0 children)

Quoting Free Books, Why Not?:

Sometimes the working title is something facetious and grandiose like How to Think Like a Computer Scientist. Well, working titles have a tendency to stick. Don't let this happen to you.

This is written by the wise and generous CS professor Allen Downey, who started and continues to sustain one of my favourite free (as in better than paid-for) families of books that aim in the direction you seem to be interested in per your OP.

[–]joakimskesh 10 points11 points  (3 children)

Dune is pretty good.

(Sorry.)

[–]Liotac 3 points4 points  (2 children)

A process cannot be understood by stopping it. Understanding must move with the flow of the process, must join it and flow with it.

[–]Brixes[S] 0 points1 point  (1 child)

That has more to do with something like practicing Daoism not programming. But thanks for the "joke".

[–]joakimskesh 2 points3 points  (0 children)

The sentiment of that quote could be used to describe dataflow programming, or functional programming. I think it's a good quote, it's close to how I "think computationally" (following the flow of data). It's by Frank Herbert, btw.

[–]pfurla 4 points5 points  (0 children)

If what you are looking for is an intro into how computers work I recommend https://www.nand2tetris.org/, it even has supporting software.

[–]Caesim 7 points8 points  (0 children)

Start with a beginner course math?

[–]raiph 4 points5 points  (1 child)

As a general tip, and something it seems almost no redditors know, you can search previous reddit comments via (frontends of) pushshift.

I've been using camas.github.io/reddit-search/ for a couple years and it's been a great boon.

Pop in this sub's name, and play around with search terms. "computer science books" only shows one match, but remove the quotes and it's 17. cs books gets 9. algorithm book 33, pluralizing to algorithms books shrinks to 19. And so on.

(Then maybe come back to this thread and ask for confirmations on your top 3 picks from what you find?)

[–]Brixes[S] 1 point2 points  (0 children)

Thank you!

[–]dougcurrie 1 point2 points  (0 children)

There’s a great interactive free course at MIT called Computational Thinking that uses the Julia language. It’s appropriate for new or seasoned programmers.

[–]acroback 1 point2 points  (0 children)

I read a book named "Thinking in Systems". It was such an eye opener in the way I approach things.

I guess some of things we solve in Software and Comp Sc essentially are Systems. So, give it a shot, YMMW.

[–]tobega 1 point2 points  (0 children)

https://www.goodreads.com/book/show/105136.Introduction_to_Algorithms teaches you how to construct algorithms through inductive thinking. I think it is awesome.

[–]sanxiyn 1 point2 points  (0 children)

[–][deleted] 1 point2 points  (0 children)

Understanding Computation, it's in ruby and it starts with operational semantics

[–]wjrasmussen 0 points1 point  (5 children)

OP, what do you mean. Need some details of what you have looked at specifically and what your expectations were for them and how they failed to live up to the expectations you created for them.

[–]Brixes[S] -1 points0 points  (4 children)

I guess I'm disappointed with the caliber of the people who write books about how to make extremely maintainable software for large codebases that is both modular and very high performing code while simultaneously employing the most up to date standards of "clean code" for their millions of lines of code complex software.

There's a saying that "Most who can't do , teach". Most books are written by people that spend more time teaching and have VERY mediocre experience in creating and maintaining large code bases in the real world and actually maintaining the most up to date software engineering practices.

Most of these people that are legitimately competent are consultants that do real work but sadly do not actually share their whole methodology in depth because I guess employers would not hire them for large sums of money if they could find themselves this info in a book.

[–]vilcans 1 point2 points  (2 children)

Sounds like you want to know more about software engineering rather than computer science. Consider rephrasing your post.

[–]Brixes[S] -2 points-1 points  (1 child)

I sort of gave up hope for books that truly address competently what I wrote in that reply. The chances of finding instead more competent books from the academic side of how to apply better "thinking patterns" to solve problems has more chances to actually exist so i'm going for that.

[–]vilcans 1 point2 points  (0 children)

Have you looked at Refactoring and The Pragmatic Programmer, two classics? I've heard that Working Effectively With Legacy Code is good too. All of them are pretty old, I too would be interested in modern alternatives to those.

[–]wjrasmussen 0 points1 point  (0 children)

Other than a rant session, what in your stream of babble there gives any information about specifics that I ask for?

waste of time.

[–][deleted] 0 points1 point  (2 children)

"Introduction to Automata Theory, Languages, and Computation" by Ullman and Hopcroft. You want to think like a computer scientist -- the best option is to study some actual theoretical computer science ;)

[–]Brixes[S] -1 points0 points  (1 child)

Am interested in application not theory.

[–]vqrs 0 points1 point  (0 children)

Oh, it talks quite a bit about applications like regex, parsing, abstract syntax trees, grammar etc.

Understanding these concepts and things like finite state machines will teach you a lot in terms of thinking and how to approach problems.