#2 in Algorithms and data structures books
Reddit mentions of The Art of Computer Programming, Volumes 1-4A Boxed Set
Sentiment score: 23
Reddit mentions: 53
We found 53 Reddit mentions of The Art of Computer Programming, Volumes 1-4A Boxed Set. Here are the top ones.
Buying options
View on Amazon.comor
- Volume 1: Fundamental Algorithms
- Volume 2: Seminumerical Algorithms
- Volume 3: Sorting and Searching
- Volume 4A: Combinatorial Algorithms
Features:
Specs:
Height | 13.4 Inches |
Length | 13.1 Inches |
Number of items | 1 |
Weight | 12.81547129006 Pounds |
Width | 8.9 Inches |
Here's my list of the classics:
General Computing
Computer Science
Software Development
Case Studies
Employment
Language-Specific
C
Python
C#
C++
Java
Linux Shell Scripts
Web Development
Ruby and Rails
Assembly
In the art of computer programming there are problems with a rating of 50 which are unsolved research problems.
In the first chapter they used to give Fermat's Last Theorem as a score of 50 but since it has already has a proof it is now at 45 .
https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/ref=sr_1_1?ie=UTF8&qid=1484672727&sr=8-1&keywords=the+art+of+computer+programming
My main hobby is reading textbooks, so I decided to go beyond the scope of the question posed. I took a look at what I have on my shelves in order to recommend particularly good or standard books that I think could characterize large portions of an undergraduate degree and perhaps the beginnings of a graduate degree in the main fields that interest me, plus some personal favorites.
Neuroscience: Theoretical Neuroscience is a good book for the field of that name, though it does require background knowledge in neuroscience (for which, as others mentioned, Kandel's text is excellent, not to mention that it alone can cover the majority of an undergraduate degree in neuroscience if corequisite classes such as biology and chemistry are momentarily ignored) and in differential equations. Neurobiology of Learning and Memory and Cognitive Neuroscience and Neuropsychology were used in my classes on cognition and learning/memory and I enjoyed both; though they tend to choose breadth over depth, all references are research papers and thus one can easily choose to go more in depth in any relevant topics by consulting these books' bibliographies.
General chemistry, organic chemistry/synthesis: I liked Linus Pauling's General Chemistry more than whatever my school gave us for general chemistry. I liked this undergraduate organic chemistry book, though I should say that I have little exposure to other organic chemistry books, and I found Protective Groups in Organic Synthesis to be very informative and useful. Unfortunately, I didn't have time to take instrumental/analytical/inorganic/physical chemistry and so have no idea what to recommend there.
Biochemistry: Lehninger is the standard text, though it's rather expensive. I have limited exposure here.
Mathematics: When I was younger (i.e. before having learned calculus), I found the four-volume The World of Mathematics great for introducing me to a lot of new concepts and branches of mathematics and for inspiring interest; I would strongly recommend this collection to anyone interested in mathematics and especially to people considering choosing to major in math as an undergrad. I found the trio of Spivak's Calculus (which Amazon says is now unfortunately out of print), Stewart's Calculus (standard text), and Kline's Calculus: An Intuitive and Physical Approach to be a good combination of rigor, practical application, and physical intuition, respectively, for calculus. My school used Marsden and Hoffman's Elementary Classical Analysis for introductory analysis (which is the field that develops and proves the calculus taught in high school), but I liked Rudin's Principles of Mathematical Analysis (nicknamed "Baby Rudin") better. I haven't worked my way though Munkres' Topology yet, but it's great so far and is often recommended as a standard beginning toplogy text. I haven't found books on differential equations or on linear algebra that I've really liked. I randomly came across Quine's Set Theory and its Logic, which I thought was an excellent introduction to set theory. Russell and Whitehead's Principia Mathematica is a very famous text, but I haven't gotten hold of a copy yet. Lang's Algebra is an excellent abstract algebra textbook, though it's rather sophisticated and I've gotten through only a small portion of it as I don't plan on getting a PhD in that subject.
Computer Science: For artificial intelligence and related areas, Russell and Norvig's Artificial Intelligence: A Modern Approach's text is a standard and good text, and I also liked Introduction to Information Retrieval (which is available online by chapter and entirely). For processor design, I found Computer Organization and Design to be a good introduction. I don't have any recommendations for specific programming languages as I find self-teaching to be most important there, nor do I know of any data structures books that I found to be memorable (not that I've really looked, given the wealth of information online). Knuth's The Art of Computer Programming is considered to be a gold standard text for algorithms, but I haven't secured a copy yet.
Physics: For basic undergraduate physics (mechanics, e&m, and a smattering of other subjects), I liked Fundamentals of Physics. I liked Rindler's Essential Relativity and Messiah's Quantum Mechanics much better than whatever books my school used. I appreciated the exposition and style of Rindler's text. I understand that some of the later chapters of Messiah's text are now obsolete, but the rest of the book is good enough for you to not need to reference many other books. I have little exposure to books on other areas of physics and am sure that there are many others in this subreddit that can give excellent recommendations.
Other: I liked Early Theories of the Universe to be good light historical reading. I also think that everyone should read Kuhn's The Structure of Scientific Revolutions.
Only kind of people that mishandle books say that (/s).
But seriously, borrowing to people and (in case of technical books) reference material. And some of them are really fucking expensive
I don't think it's reasonable to speak about "canon" books in computer science - the field has become so broad that a handful of PhDs in the modern era could get to the very bleeding edge of their niche and not share any crucial books in common among their libraries.
That said, here are a few I think are fantastic:
Among these, I think Stevens' UNPv1 is about the best textbook, by a lot, I've ever owned.
Presumably it's an affiliate link https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/ ~$180
CSC265 should only be reserved for people who truly love math. Not for people who like math and enjoy it, but the people who sit up at night reading math textbooks for fun and doing Spivak because it feels good. I took it because I wanted to be elite at data structures. I ended up getting an offer at Google but 265 did not prepare me for interviews in the way that I thought (what I'm trying to say is my offer at Google was not because of 265).
You will be doing purely math. A lot of the topics are covered in more depth, and you have to read chapters on your own.
The questions I got were absolutely insane and had me working unbelievably hard. I'd put in almost 25-30 hours a week for the course. I was able to get 90's on the assignments (but one of them was downright impossible).
There's a lot of really smart math geniuses who take the class so if you're a "normie" or even just "smart", you will feel like an idiot. People would come to class and clearly had read way ahead, so the TA would blaze forward since you'd feel like an idiot going "no I don't get this" constantly. You'd have to spend a ton of time at home playing catch up. All my practical knowledge of data structures wasn't too useful, but attempting Faith's homework prior to doing the course helped me the most. If anything, I think reading TAOCP is probably the best preparation, but it's probably not even feasible for anyone to do that before this class because it probably takes years to properly read that.
One of the questions we got was some probability question that I literally could not get after 30 hours of trying. It was impossible for me. The answer ended up being a published paper, so you get the question then you pretty much could have published the paper if you did this question 30 years ago. When I practiced on Faith's assignments for 265, there was not a question that I found that insane to the point where I couldn't get it.
This class should only be taken IMO if you want to do algorithm research or were bored out of your mind in CSC236/CSC240. I don't know if this course is physically possible if you do it with MAT257 and 3 other courses, but I'm sure some genius would prove me wrong. There is no physical way you could do 5 courses with one of them being CSC265 and work on side projects to prepare for PEY unless you are really good.
Also it's the first class I ever took where the average was so shit for the midterm that one of the questions got turned into a bonus question right after the midterm (usually they just shift people up at the end, so doing it after a midterm tells you something).
Maybe people who did MAT157 can handle such things, I'm not sure. It was the most stressful semester I ever did. What I learned was amazing, but it will definitely fade in time because I will probably never use that knowledge since I don't intend on going to graduate school.
I'd further only recommend that class to people who are sadistic enough to enjoy such hard questions where you are literally freaking out 2 days before it's due because in 12 days you still weren't able to find the solution and kept finding holes in the problem. How I managed to get 90's on the assignment when the class average was between 65-72 is beyond me.
Lastly, this course feels much different from other courses cause the math at times isn't hard, it's just proving some discrete property tends to be nuts. However, the part I found really hard might actually be better off with people having real analysis since it was probability and real numbers which I'm not as good at.
tl;dr: If you get through it, you will be a Navy SEAL for CS. If you are asking "is the workload too much" when deciding to take this course, you should not take this course.
EDIT: I should also say if you're a CS genius then maybe the workload is normal.
Steps to build your own engine from scratch with no knowledge:
Note: Most people who decide to put together a voxel engine take about 2 years from inception. At the end of the two years, they will have a library they could use to create a game. They've also already made it through the first 4 steps when they start.
Without a degree program to solidify the concepts, I suspect that the first 4 steps will take at least 2-3 years: about 10-20 hours per week each week.
> I want to gain knowledge and learn more by reading and thinking
Say no more, I have your answer
I would recommend not looking for C# specific books. Language specific books tend to get out-dated very fast and won't be as high of quality.
For this reason you want books like https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844 and https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043
​
I'm personally in the market for data structure books, sadly its a slippery slope when you already have a few.
Well the whole boxed set costs $183 on amazon http://www.amazon.com/gp/product/0321751043/.
If you want to dig deep into the theoretical of programming, and help build a good foundation for OOP, patterns, and algorithm design, check out Concrete Mathematics: A Foundation for Computer Science. It is honestly the best textbook I have ever come across.
From there, if you're feeling really ambitious in studying algorithms, check out The Art of Computer Programming, but I should warn you, it is very dense and can be hard to understand even for accomplished developers.
Beyond that, I suggest checking out The Odin Project. It covers a variety of languages and frameworks including Ruby On Rails, which is pretty standard in app development these days. They have a lot of great references and side material. It's basically a "go at your own pace" open source coding boot-camp.
> Like I said, this is for me. I hate just being told "do this" and having no concept of why. I want to understand why I'm doing it, the implications for doing it "this way".
This... This is the mindset that will carry you and eventually make you stand out as an exceptional programmer. Learning how to do something might land you a job, but knowing how it works makes you an invaluable asset to any employer.
As long as you are passionate about learning the material, you will pick it up over time.
>This is where I realized that I was doing this wrong, at least for me. I'd be on codeabbey and know what I wanted to do, but not how. I realized that I needed to be building larger things to be working with oop concepts. I really felt I was missing a lot of "base" information.
Awesome observation. Doing studying and doing drills both have an important role in the learning process, but there are other forms of practice to include in order to reinforce the material in a meaningful way. Ruby Rogues Podcast has a great group discussion about how to learn that I highly suggest you give a listen.
Personally, I learn best by throwing myself into a project where I am in wayyy over my head. By struggling through problems, scrupulously tearing through documentation and examples, I learn a lot more of the why than the how at the end of the day.
I learned Javascript, jQuery, and AJAX by building a templating & ecommerce framework. I started out with little to no knowledge or understanding of how JS worked, and was forced to restart a number of times as I began to see what was good and what was not, but now I feel very comfortable working with it.
Find a problem, and solve it, because Computer Science is, really, just the art of problem solving.
Best of luck, and most importantly, have fun :D
You may be interested in reading Incompleteness, and then consider how if we can convert Scripture to a formal system, we must have either an inconsistent one, or an incomplete one. The first is clearly false, but the second destroys Sola Scriptura.
Oh, and snide response: yes.
I haven't been in or done a junior dev interview in a long time so I can't speak to whether most companies ask algorithm questions these days.
What I can say is that many of the mid- and senior-level interviews I've been in do. This means, to me at least, that you should learn this stuff even if you don't get asked it in a junior dev interview.
As as self-taught developer, you have shown that you've got the drive and curiosity to learn a lot of stuff enough to do useful work. That says something. So bravo!
Practicing is a great idea. However, if you're constantly looking at the hints before coming up with your own answer, that's probably not as helpful. It sounds like you should learn more about algorithms as a whole topic.
To shore up your weaknesses with algorithms I'll suggest a few resources that I've come across over the years. Since I went the traditional CS degree route, I haven't used these personally but I know many people who recommend them:
Per testare le acque velocemente puoi usare https://rubymonk.com/ (introduce Ruby in modo basico). Anche Coursera, Khan, Udacity e simili hanno corsi introduttivi sulla programmazione.
Mentre se vuoi imparare a programmare, il percorso deve toccare almeno tutte queste tappe, in ordine:
Organization-Design-Fourth-Edition/dp/0123744938)
Da qui puoi partire e specializzarti in quello che ti interessa
Knuth has your back
You want this if you want the most complete set available. You can also just get volumes 1-3 and wait until all of volume 4 is done. (Hopefully Knuth will get to finish volumes 4 and 5)
The Art of Computer Programming - this is a 4-volume series (4A is out; 4B, 4C, 4D coming soon; 5 planned for 2025). It'll take a lifetime to master everything written in this series :)
CS is almost pure math, especially beyond the freshman year. You can learn to code with almost no advanced math. So, what's up with that?
Numerous---everyday---apps are actually very simple coding, which do not require much math. This lures people who code into thinking math is not required in programming. That is a false assumption. This is the rub...anything advanced in technology requires equally advanced mathematics. AI, machine learning, data science, robotics, graph theory, geometric modeling, parallel architectures, electronics, telecom transmissions, cryptography, etc., etc., etc., all require advanced mathematics skills. The list goes on forever.
You'll never be a great programmer without at least a strong foundation in discrete mathematics (maybe you'll be a elementary app coder or maybe you'll be a low-level developer). Anyone saying you don't need math in CS is wrong. Anyone saying CS is easy is mistaken. For those that claim all you need is 3rd or 4th grade math, are 3rd or 4th grade coders. At least 1/3 of people drop out of computer science degrees---stating it was just too difficult.
I suggest to everyone to pick up The Art of Programming, by Knuth (and/or Introduction to Algorithms, from MIT Press). Come back and tell us if you think CS is hard, and...if math is required in programming. Find a quiet corner to cry in....the books are as intense, as they are inspirational.
My advice? Take a few discrete mathematics courses. You may have a job one day that requires you to know the cost of nodes in a tree, based upon the mathematics of recursion and exact powers: Example - That isn't 3rd grade math. Stare at this gem for a while: https://www.tug.org/texshowcase/cheat.pdf
The good news is...you live in the best possible era to learn CS. Millions of resources are at your disposal. You just need to be dedicated.
-MrNetTek
> Is it even possible to get jobs in software development with an EE degree and quasi-software development experience?
Yes, as I have my degree in Electrical and Computer Engineering, which included maybe 3-4 "proper" CS courses, and I was employed as a full-time software developer right out of college.
> So how do I fill the large gaps in general Computer Science knowledge?
I think it comes down to "read and do". Read blogs, books, and maybe even code from reputable sources. Try new things, like languages, paradigms, and frameworks. If you have some idea about the gaps in your knowledge, i.e. you know what you don't know, then start searching there. Begin at Wikipedia, look at the sources and related links, and just keep pressing on.
In general I find it's pretty easy to learn about new things. If you keep reading, you'll eventually come across something you didn't know or hadn't heard of before, and probably more often than you'd think. Sometimes it's just worth knowing that something exists that you can learn about later when you actually need it. You definitely don't have to learn all facets of programming in depth.
Since you mentioned algorithms, maybe check out TAOCP. The first volume is about algorithms. It is language agnostic and based heavily on math, though you don't need a math degree to follow along by any means. It's surprisingly readable, too. *Though that doesn't mean you should sit down and read it like a novel.
Yes, this is good books
​
I can recommend https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844 this books instead Sedgwick
Or if you go further https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/ref=sr_1_1?crid=3KIIUSO0OCYLD&keywords=donald+knuth&qid=1566900852&s=books&sprefix=donald+kn%2Cstripbooks-intl-ship%2C369&sr=1-1
Also see this https://www.amazon.com/Structured-Computer-Organization-Andrew-Tanenbaum/dp/0132916525/ref=sr_1_5?crid=2PZADWCTIJ5EM&keywords=tanenbaum&qid=1566900893&s=books&sprefix=tanen%2Cstripbooks-intl-ship%2C263&sr=1-5
> 4) All this aside, I wish I spend more time in college learning computer science. I don't mean how to use PHP, or Ruby, or what HTML is. I mean how to properly setup an R-tree, how low-level systems work, proper indexing methods, security, etc. These topics would be incredibly valuable, but not always easy to learn.
You should read Knuth. You'll effectively be learning from one of the most prestigious computer scientists of one of the most prestigious schools for the low price of $177.
> not well versed in these data structures.
Donald Knuth books
These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".
I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read
For learning your first language: This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++
Top Recommendations:
Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it doesn't start with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.
The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (very helpful), and an interesting war story of how it Saved The Day.
Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions straight from this book so this book can equal getting a job. Put that way, it's ROI is insane.
The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here
Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.
For Intermediates:
Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing good Java and C++.
Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.
The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)
Some of these are directly related to programming and some are not but are additional reading that touch on skills that most every programmer should have some concept or idea of.
I've read all of these at some point throughout my career and can attest to their usefulness. Here's my personal list:
If you only read one work on the topic, it should be The Art of Computer Programming by Don Knuth: https://www.amazon.com/dp/0321751043/
The textbook for MIT's 6.001 (introduction to computer science) is the much loved Structure and Interpretation of Computer Programs by Abelson, Sussman, and Sussman: https://www.amazon.com/dp/0262510871/ . Originally it was in Scheme but the 2nd edition is in Python.
Finally, because people asking about computer science are often asking about something a bit broader than pure computer science, I recommend Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. It is a thorough tour of computing in practice at every level, top to bottom. https://www.amazon.com/dp/073560505X/
General:
Pragmatic Programmer
C language
This one is a lot tougher read and is probably one of the most famous book sets in Computer Science
Computer Programming Don Knuth
Edit: fixed spacings
My elementary school and high school teachers made me detest mathematics at an early age, but I have taken up interest for it in later years. Last week, I purchased the books Concrete Mathematics and The Art of Computer Programming, which I plan to start reading soon. But first I need to school myself on some topics with Khan Academy and MIT OpenCourseWare. I've also posted this thread last week on /r/learnprogramming hoping to get some input, and lurking at /r/math and the Mathematics StackExchange. I'm quickly gaining interest for the subject :)
In addition to that book, I would also highly recommend The Art of Computer Programming books by Knuth.
> Desculpa, não sabes do que estás a falar.
Sinceramente, cada vez tenho menos paciência para ti.
> Programar é fácil. É apenas a definição de instruções de maneira a expressar um algoritmo.
Nunca na minha vida vi a palavra "programar" ser interpretada com esse significado. Para além qualquer curso de programação (independentemente do nível) requer que se faça mais que isso.
Quanto ao significado da palavra programar. Começando pelo básico, i.e. wikipedia.
> "Computer programming (often shortened to programming) is a process that leads from an original formulation of a computing problem to executable computer programs. Programming involves activities such as analysis, developing understanding, generating algorithms, verification of requirements of algorithms including their correctness and resources consumption, and implementation"
Se quiseres ler livros sobre o assunto, alguns clássicos são,
Systematic Programming: An Introduction - Niklaus Wirth
The Art of Computer Programming - Donald Knuth
The Science of Programming - David Gries
The Algebra of Programming - Richard Bird, Oege de Moor
The Mathematics of Programming - Tony Hoare
E porque sei que ler livros dá muito trabalho, ficam algumas quotes,
Edsger Dijkstra
> "Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians."
Tony Hoare
>"Programming is a mathematical activity. Like other branches of applied mathematics and engineering, its successful practice requires determined and meticulous application of traditional methods of mathematical understanding, calculation and proofs"
if you are hardcore and have a year: https://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043
Entrepreneur Reading List
Computer Science Grad School Reading List
Video Game Development Reading List
http://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/ - use this, and you won't need anything for a while.
I'm a computer science undergraduate, so I can only tell you about things I've gone through in my curriculum. Which course is right for you depends on what you want to learn.
edit: Whoops, missed the part where you said you were looking for an ebook. In the software design patterns section below, I link to the canonical book on design patterns. Also, Donald E. Knuth's The Art of Computer Programming is a book I haven't yet read, but is known to be a must-read resource for computer scientists. Lastly, check out the Think series by Green Tea Press. It's a growing selection of free, accessible ebooks on major computer science topics.
Algorithms and Data Structures: This topic is about what makes one program run more quickly than another. For example, how much faster is one sorting algorithm from another? Or, what is the best way to store a list of items on the byte-level if I expect a lot of insertions and deletions from the list? This course is one of my favorites, since it really helps get you into the computer scientist mindset. Some people have difficulty with this topic, though, so be prepared.
Assembly programming: If you want a better understanding of what happens when you compile a program, try learning how to program a few easy programs in a simple assembly language like ARM. Assembly programming is basically on the level of what the CPU understands: move this data from RAM to a CPU register, perform this simple arithmetic operation, save this value in this register to RAM. It also helps to learn how GCC compiles a C program to assembly code, and then to binary. There should be plenty of educational resources online about this.
Software design patterns and software engineering: This was broken into two courses at my university. The first course, Design Patterns, was about common patterns that are seen when programming in modern languages, particularly (but not limited to) object-oriented languages. Check out the book on design patterns by the "Gang of Four." The second course, Software Engineering, is about how to work effectively in groups on software projects. This is mandatory learning if you want to work at a tech company!
Computer Systems Organization: I just finished this course. Perhaps this is more what you would be interested in, since you said you were interested in the low level stuff. Computer systems organization is basically about how computer systems work on the level of circuits pushing electrons about, and the pros and cons of modern CPU designs. You learn what happens on each clock tick of the CPU. Knowledge of assembly programming is basically required before you learn about this. This topic is more on the Computer Engineering side of things, but it is important for computer scientists to know as well.
Network Programming: If you would like to understand how the Internet works, how data is transferred between networks, or how programming ties into networking concepts, this is the class for you. You learn things like how packets are sent across networks, how to calculate the time it takes to reach another host on a network, and how the whole system works that lets you connect to the internet, find another computer, and send data to it.
Operating Systems: I haven't taken this course yet (next semester!), but as far as I know, this course is about fundamental concepts that guide operating system design. This includes things like handling hardware/software interrupts, memory paging and multiprocess task switching. There are probably more things that I just haven't learned yet.
Those are some of the major subjects I have come across so far. Hope it helps get you started out!
Relevant
I have most of these books.
The Art of Computer Programming
The Art of Computer Programming is dense. It is deep. You can likely put off this one. It should be a goal to be able to get through it though.
Introduction to Algorithms
Introduction to Algorithms, I don't have it. All I know is that it does come highly recommended.
Code Complete
Code Complete is excellent. Well written, it feels a lot shorter than it is. It will get you thinking about every step of the software development process.
The Pragmatic Programmer
Another one I don't have but gets recommended time and time again.
The Mythical Man Month
The Mythical Man Month is less directly relevant. It will go over meta issues in software development.
Don't Make Me Think
Don't Make Me Think is also not about code itself, but about design. Because if no one uses your application, does it matter if you made it?
Buy Knuth and work your way through it over a year.
Design Patterns
The Art of Computer Programming
I'd recommend Tanenbaum's Modern Operating Systems, that should get you started on beginning to understand what goes on inside your computer. If you'd like further reading and you want a mental beat-down, you can't go wrong with Knuth's The Art of Computer Programming. Want to start with programming? One of my favorites is The C Programming Language by K&R. Those three recommendations, while they add up to a single semester's tuition, are worth way more than that. Good luck!
Price of a Kindle : $69
Price of books I read : $183
except this one that noone buy's
Well, simply thinking that Knuth could make such a mistake, strikes me as naive. After all he wrote this and this.
I'll throw out some of my favorite books from my book shelf when it comes to Computer Science, User Experience, and Mathematics - all will be essential as you begin your journey into app development:
Universal Principles of Design
Dieter Rams: As Little Design as Possible
Rework by 37signals
Clean Code
The Art of Programming
The Mythical Man-Month
The Pragmatic Programmer
Design Patterns - "Gang of Four"
Programming Language Pragmatics
Compilers - "The Dragon Book"
The Language of Mathematics
A Mathematician's Lament
The Joy of x
Mathematics: Its Content, Methods, and Meaning
Introduction to Algorithms (MIT)
If time isn't a factor, and you're not needing to steamroll into this to make money, then I'd highly encourage you to start by using a lower-level programming language like C first - or, start from the database side of things and begin learning SQL and playing around with database development.
I feel like truly understanding data structures from the lowest level is one of the most important things you can do as a budding developer.
If you're a CompE, you're gonna be writing a lot of C. If you haven't read The C Programming Language, by Brian Kernighan and the late Dennis Ritchie, shame on you - it's one of the best, most helpful, and most concise programming books I've ever read. (The design of the book is a lot like the design of C, really.)
Also, if you want a reference for any algorithm you could possibly think of, I can guarantee it's in Knuth's Art of Computer Programming somewhere. CLRS, mentioned by xibernetik below, is another good algorithms book that's more accessible, but less in-depth.
Yeah, Amazon's price for the boxed set of Volumes 1-4A is $177. Far more than you should be spending on something you can probably get at your local library.
Volume 1 on its own is $56. You can undoubtedly find them for cheaper, especially if you live near any engineering school; they'll probably have a bookstore nearby with it, or you might be able to visit their library.
Not sure what you mean by CS background, but depending on the book, you may need more books to understand that one.
For introduction to computers and programming I recommend David Harel and some people really dig Jon Bentley. There's probably a ton of other recommendations out there, but ultimately they all lead to the bible :)
So yea, getting some background on programming may be necessary, but not too difficult. I mean, if a highschooler/college freshman can do it, so can anyone, right?
Maybe you would prefer "working knowledge" over "solid grasp". My point is that the math known and used daily is well beyond basic "arithmetic".
If you ever have the time, I recommend you read the bible of programming, Knuth's TAOCP. The math inside may surprise you. Does it have combinatorics, eigenvalues, integrals, fourier transforms, euler totients and more? You bet! Does it tell you that the factorial is readily extended to non-integers, eh... not so much. An example more relevant to the fields listed above, lets say I have some user data that needs to be stored and I want to be able to sort/search/join on certain functions of the data. What is the best way to store the data and what are the runtime complexities for the queries I need?
We all know what the real number one is.
http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612
http://www.amazon.com/Modern-Design-Generic-Programming-Patterns/dp/0201704315
http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
http://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586
Also if you want something really challenging:
http://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043
http://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262510871
Free below:
https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html
Everyone here is going to give you a bunch of 30-days or head-first books - many of which will have the ostensible impremateur of big names like Crockford and Resig.
Let me be the first to tell you to basically ignore this crap.
Read the standard, get a good reference on browser differences, then focus on real programming books that are not language specific. That's the way to rise above making jQuery plugins and "HTML5 Game Demos" of Atari 2600 games.
The standard:
http://www.ecma-international.org/publications/standards/Ecma-262.htm
Good reference on browser differences:
http://www.quirksmode.org/compatibility.html
The kinds of books you should be reading (notice the used prices please):
http://www.amazon.com/Introduction-Algorithms-CD-Rom-Thomas-Cormen/dp/0072970545/ref=sr_1_1?ie=UTF8&amp;qid=1313160060&amp;sr=8-1
http://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/ref=sr_1_1?ie=UTF8&amp;qid=1313160086&amp;sr=8-1
http://www.amazon.com/Structure-Interpretation-Computer-Programs-Second/dp/0070004846/ref=sr_1_1?ie=UTF8&amp;qid=1313160117&amp;sr=8-1
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;qid=1313160130&amp;sr=8-1
http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?ie=UTF8&amp;qid=1313160138&amp;sr=8-1
I'd throw in a rickroll if I could.
A deep knowledge of CSS will help. If Javascript is your hammer, CSS is your screwdriver; the two are very related in most cases (sure there are exceptions, like node servers, but they're not common.)
Like JS, the best way to learn CSS is the standard.
http://www.w3.org/TR/CSS21/
Happy hunting.
The best book by far is the Art of Programming.
The best textbook my university used was Introduction to Algorithms for Algorithms I, and Algorithms II. If you can understand that textbook, you've learned some of the most important lessons in computer science.