To really understand data structures and algorithmic complexity, you need to understand discrete math. This the best starting point for CS theory. I love discrete math, others may find it very boring.
- Essentials of Discrete Mathematics (Hunter)
I can't think of a good data structures reading off the top of my head unfortunately. Often the trick to an efficient algorithm is really just an efficient data structure. Check out Dijkstra's algorithm for a great example of this (BFS + min-heap/priority queue).
If you want to learn the basics pick one of the following, preferably Dasgupta or Kleinberg/Tardos. If you want to learn as much as you can from a single book then pick the CLRS book.
- Introduction to Algorithms (CLRS) - A beast
- Algorithms (Dasgupta) - Clear and concise but less advanced material
- Algorithm Design (Kleinberg & Tardos) - Usable for undergraduate and graduate algorithms study
- http://javascriptissexy.com/how-to-learn-javascript-properly/
- http://eloquentjavascript.net/
- https://leanpub.com/javascript-allonge
- https://github.com/facebook/immutable-js
- https://github.com/facebook/react
- Practical Object-Oriented Design in Ruby (Metz)
- Confident Ruby (Grimm)
- Anything from the Pragmatic Programmers (pragprog.com).
- https://leanpub.com/growing-rails
- http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/
- Ruby Science (Thoughtbot) - Patterns for refactoring Ruby/Rails applications
- http://learnyouahaskell.com/ - Haskell!
- The Clojure Pragmatic Programmers book
- http://4clojure.org
Advanced (towards Clojure mastery)
- The Joy of Clojure
- Rick Hickey's list of influential books for Clojure
http://www.amazon.com/Clojure-Bookshelf/lm/R3LG3ZBZS4GCTH
- Linear algebra
- Multivariable calculus
- ...
Source: https://www.wunderlist.com/lists/70326287
-
Release It: Design and Deploy Production-Ready Software (Nygard)
www.amazon.com/Release-It-Production-Ready-Pragmatic-Programmers/dp/0978739213 -
Structure and Interpretation of Computer Programs (Abelson, Sussman)
http://mitpress.mit.edu/sicp/full-text/book/book.html -
The Pragmatic Programmer (Thomas, Hunt)
http://pragprog.com/the-pragmatic-programmer -
Lambda the ultimate papers
http://library.readscheme.org/page1.html -
Let Over Lambda (Hoyte)
http://letoverlambda.com/ -
Extreme Programming Explained (Beck)
www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0201616416 -
Refactoring: Improving the Design of Existing Code (Martin Fowler)
www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672 -
Enterprise Integration Patterns (Hohpe, Woolf)
http://amzn.com/0321200683 -
Domain Driven Design (Evans)
www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215 -
Practical Object-Oriented Design in Ruby (Metz)
www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330 -
Smalltalk Best Practice Patterns (Beck)
www.amazon.com/Smalltalk-Best-Practice-Patterns-Kent/dp/013476904X -
Learn You a Haskell for Great Good (Lipovača)
http://learnyouahaskell.com/ -
Working Effectively with Legacy Code (Feathers)
www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 -
Concepts, Techniques, and Models of Computer Programming (Van Roy, Haridi)
http://amzn.com/0262220695