I am an Junior in college and I have come to the realization that my school didn't to that good of a job of actually teaching real CS to the students. On my own, I have become a fairly proficient programmer, but I know I would be a lot better If I was more confident in my ability to swim on a lower level of the stack. I hardly know any C. (The syntax is easy, but I've never actually implemented anything in it besides some 100 level HW problems. I see this as a problem because so much is written in C.)

I want to be:

  • better at discrete math
  • More versed in algorithms
  • Have a more intimate understanding of how the higher level tools that I rely on actually work.

Basically, I know how to use logic, but I have become dependent on high level tools and I don't like that.

I also suck at math. I mean I understand it conceptually, and Im comfortable with set theory, so, Python's data structures are really all I need, but I want to be better at algorithms and math is necessary for that.

Are there any websites or other resources that stress an approach like this.

  • $\begingroup$ There is a lot more to CS than programming. And there are many very different things to do in CS. My suggestion would still be to do as much math andformal stuff as you feel capable of ... it underlies everything and, hopefully teaches you to think more cleanly and accurately. But I am very biased. From what you say, you should not "suck at math". Try to decide that you can do it. $\endgroup$ – babou Dec 17 '14 at 17:04
  • $\begingroup$ Its not that Im incapable, I just don't have many abstractions in my mathematical tool belt. Or rather, that muscle isn't very developed at all in my brain. I am looking for resources, to help guide me. $\endgroup$ – Luke Dec 17 '14 at 18:01
  • $\begingroup$ Can't you get guidance and classes from your college, or from some teacher? $\endgroup$ – babou Dec 17 '14 at 18:07
  • $\begingroup$ This is more appropriate for academic stackexchange site $\endgroup$ – jonaprieto Dec 17 '14 at 18:13
  • 2
    $\begingroup$ @d555 No, this isn't at all appropriate for Academia: it's not a question about academia. Please check carefully what is on-topic before advising that somebody post to a different Stack Exchange site. $\endgroup$ – David Richerby Dec 17 '14 at 19:03

Here are a few books I recommend:

Discrete math: Concrete Mathematics: A Foundation for Computer Science, Don Knuth. (http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025).

It's very complete and also pretty approachable for someone without much of a theoretical math background.

Algorithms: Algorithms, Kevin Wayne and Bob Sedgwick. Again, very complete and presents all algorithms with motivation and extremely well-written Java code. There's also a really good website with a lot of the info available for free (http://algs4.cs.princeton.edu/home/).

Systems: Computer Systems: A Programmer's Perspective, Bryant and O'Halloran. This one is a little more dense than the two above, but it's a great resource if you know what you want to learn about (e.g. processes, floating point arithmetic). (http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040)

I've had experience with all of these at the undergrad level, so they don't require an enormous amount of experience or higher-level coursework.


Not the answer you're looking for? Browse other questions tagged or ask your own question.