(Part 2) Best products from r/compsci

We found 93 comments on r/compsci discussing the most recommended products. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 669 products and ranked them based on the amount of positive reactions they received. Here are the products ranked 21-40. You can also go back to the previous section.

Top comments mentioning products on r/compsci:

u/FearMonstro · 3 pointsr/compsci

Nand to Tetris (coursera)

the first half of the book is free. You read a chapter then you write programs that simulate hardware modules (like memory, ALU, registers, etc). It's pretty insightful for giving you a more rich understanding of how computers work. You could benefit from just the first half the book. The second half focuses more on building assemblers, compilers, and then a java-like programming language. From there, it has you build a small operating system that can run programs like Tetris.

Code: The Hidden Language of Hardware and Software

This book is incredibly well written. It's intended for a casual audience and will guide the reader to understanding how a microcontroller works, from the ground up. It's not a text book, which makes it even more more impressive.

Computer Networking Top Down Approach

one of the best written textbook I've read. Very clear and concise language. This will give you a pretty good understanding of modern-day networking. I appreciated that book is filled to the brim of references to other books and academic papers for a more detailed look at subtopics.

Operating System Design

A great OS book. It actually shows you the C code used to design and code the Xinu operating system. It's written by a Purdue professor. It offers both a top-down look, but backs everything up with C code, which really solidifies understanding. The Xinu source code can be run on emulators or real hardware for you to tweak (and the book encourages that!)

Digital Design Computer Architecture

another good "build a computer from the ground up" book. The strength of this book is that it gives you more background into how real-life circuits are built (it uses VHDL and Verilog), and provides a nice chapter on transistor design overview. A lot less casual than the Code book, but easily digestible for someone who appreciates this stuff. It culminates into designing and describing a microarchitecture to implement a MIPS microcontroller. The diagrams used in this book are really nice.

u/aherpiesderpies · 2 pointsr/compsci

I'm more vocational than academic - with the experience you have you can probably jump straight into work if that's what you want to do. I planned to work for a while and then go onto a masters but a few years later it became clear that employers do not look past your vocational experience once you have a couple of years. Part of the reason I wanted to go back and do a masters after working was that I found during my undergrad that we were taught a lot of concepts but that there was nowhere to tie them without the real world exeprience - this leads me to downplay the value of academic qualifications beyond somebody demonstrating they can get shit done.

That said, you almost certainly can, looks like GU would take you . If you just want to get a better understanding of software development you'd be better joining in some open source projects, if you want to get a better fundamental understanding of computers then get this book. My copy is > 5 years old and computers still work p.much the same way so don't bother splashing out :)

I do apologise for answering a different question from the one you asked but from your question it looks like you are self motivated and do a lot of learning on your own, if this is true it's likely you can achieve more outwith an academic context than in it, and save a pile of cash along the way.

All the best :)

u/IjonTichy85 · 2 pointsr/compsci

Hi,
do you want to become a computer scientist or a programmer? That's the question you have to ask yourself. Just recently someone asked about some self-study courses in cs and I compiled a list of courses that focuses on the theoretical basics (roughly the first year of a bachelor class). Maybe it's helpful to you so I'm gonna copy&paste it here for you:



I think before you start you should ask yourself what you want to learn. If you're into programming or want to become a sysadmin you can learn everything you need without taking classes.

If you're interested in the theory of cs, here are a few starting points:

Introduction to Automata Theory, Languages, and Computation

The book you should buy

MIT: Introduction to Algorithms

The book you should buy


Computer Architecture<- The intro alone makes it worth watching!

The book you should buy

Linear Algebra

The book you should buy <-Only scratches on the surface but is a good starting point. Also it's extremely informal for a math book. The MIT-channel offers many more courses and are a great for autodidactic studying.

Everything I've posted requires no or only minimal previous education.
You should think of this as a starting point. Maybe you'll find lessons or books you'll prefer. That's fine! Make your own choices. If you've understood everything in these lessons, you just need to take a programming class (or just learn it by doing), a class on formal logic and some more advanced math classes and you will have developed a good understanding of the basics of cs. The materials I've posted roughly cover the first year of studying cs. I wish I could tell you were you can find some more math/logic books but I'm german and always used german books for math because they usually follow a more formal approach (which isn't necessarily a good thing).
I really recommend learning these thing BEFORE starting to learn the 'useful' parts of CS like sql,xml, design pattern etc.
Another great book that will broaden your understanding is this Bertrand Russell: Introduction to mathematical philosophy
If you've understood the theory, the rest will seam 'logical' and you'll know why some things are the way they are. Your working environment will keep changing and 20 years from now, we will be using different tools and different languages, but the theory won't change. If you've once made the effort to understand the basics, it will be a lot easier for you to switch to the next 'big thing' once you're required to do so.

One more thing: PLEASE, don't become one of those people who need to tell everyone how useless a university is and that they know everything they need just because they've been working with python for a year or two. Of course you won't need 95% of the basics unless you're planning on staying in academia and if you've worked instead of studying, you will have a head start, but if someone is proud of NOT having learned something, that always makes me want to leave this planet, you know...

EDIT: almost forgot about this: use Unix, use Unix, and I can't emphasize this enough: USE UNIX! Building your own linux from scratch is something every computerscientist should have done at least once in his life. It's the only way to really learn how a modern operating system works. Also try to avoid apple/microsoft products, since they're usually closed source and don't give you the chance to learn how they work.

u/cabbagerat · 10 pointsr/compsci

Start with a good algorithms book like Introduction to algorithms. You'll also want a good discrete math text. Concrete Mathematics is one that I like, but there are several great alternatives. If you are learning new math, pick up The Princeton Companion To Mathematics, which is a great reference to have around if you find yourself with a gap in your knowledge. Not a seminal text in theoretical CS, but certain to expand your mind, is Purely functional data structures.

On the practice side, pick up a copy of The C programming language. Not only is K&R a classic text, and a great read, it really set the tone for the way that programming has been taught and learned ever since. I also highly recommend Elements of Programming.

Also, since you mention Papadimitriou, take a look at Logicomix.

u/AlphaMotel · 1 pointr/compsci

Mathwise you could start with some basic number theory
I found Rosen's Discrete Mathematics textbook to be really helpful.


You could also start with boolean algebra (AND OR NOT XOR ) bit shifting and so on since it will be absolutely useful later on.


For computer hadware and assembly language, I used this book Art of Assembly Language by Randall Hyde and Computer Organization and Design by Patterson and Hennessy.

For cryptography you might learn all about prime numbers , algorithms to find really large prime numbers, random number generator algorithms and why some are more random (cryptographically strong) than others.

Then using that you can apply that towards public / private key encryption, one way hash functions, and the main hash algorithms used by the public.
(MD5, RSA, SHA512) and how they compare against each other.
And how one way hash function are used to verify data integrity.
I found Gary Kessler's site to be really helpful


For password security then you can understand how you can use a one way hash function with a salt and a nonce to make a reasonably secure password storage system. You could learn how one could safely store password hashes in a database like mySQL (www.mysql.com)


And once you understand one way hash functions and public and private keys, then you would already 90% on the way to understand how the bitcoin protocol works and how CPU's mine bitcoins and how the public ledger blockchains works.

For other languages, another language you could easily learn is Java using Processing. I really do enjoy using it and it was easy and fun to learn, and I use it a lot for rapid prototyping.

u/jeykottalam · 8 pointsr/compsci

Introduction to Algorithms by CLRS

TAOCP is a waste of time and money; it's more for adorning your bookshelf than for actually reading. Pretty much anyone who suggests TAOCP and is less than 55 years old is just parroting Standard Wisdom™.

Godel, Escher, Bach is a nice book, but it's not as intellectually deep in today's world as it was when first published; a lot of the memes in GEB have been thoroughly absorbed into nerd culture at this point and the book should be enjoyed more as a work of art than expecting it to be particularly informative (IMO).

If you're interested in compilers, I recommend Engineering a Compiler by Cooper & Torczon. Same thing as TAOCP applies to people who suggest the Dragon Book. The Dragon Book is still good, but it focuses too much on parser generators and doesn't really cover enough of the other modern good stuff. (Yes, even the new edition.)

As far as real programming goes, K&R's The C Programming Language is still unmatched for its quality of exposition and brevity, but these days I'd strongly suggest picking up some Python or something before diving into C. And as a practical matter, I'd suggest learning some C++ from Koenig & Moo's Accelerated C++ before learning straight C.

Sipser's Introduction to the Theory of Computation is a good theory book, but I'd really suggest getting CLRS before Sipser. CLRS is way more interesting IMHO.

u/njoubert · 1 pointr/compsci

I would suggest that the carlh programming guides is not a bad idea then!

I would heavily suggest learning C well - this is a language that was designed to stay close to the hardware while being portable, and is a very small language. So, buy a copy of the K&R Book, ever C programmer has one.

Then, Patterson's book is a tome for computer engineering. It'll show you assembly, all the way down to NAND gates.

I would suggest you start by watching and working through Berkeley's CS61C course. It's the logically second course in CS, and after a quick overview of C it dives into the machine itself. Website here, videos here. Also, Dan Garcia is an excellent lecturer.

Once you have all the machine details down, you'll probably feel hampered by your actual program wizardry. This is where you start looking into algorithms and data structures. Your go-to guide here is probably Cormen's Introduction to Algorithms since it handles both data structures and algorithms. It's definitely more of a theoretical/CS-ey book, so if this is not what you want, then Head First Java will teach you a new language (and learning more languages is one of the best ways to grow as a programmer!) and also do many data structures. In fact, you can get both those books and have the light side and the serious side of programming books.

At this point you should be well equipped to go off in whatever direction you want with programming. Start contributing to open source projects! Find things that interest you and try to solve problems! Being a part of the programming community will be your biggest aid in both learning programming and starting to make money through it. People pay for programmers that they know can deliver, and success in the open source world means a lot, and you don't need to go to school for it to get to this point!

Lastly, many CS/programming folks hang out on IRC. If you have questions, find the appropriate IRCS channels and go talk to people. Good luck and welcome to programming!

u/[deleted] · 3 pointsr/compsci

C++ was my first language, followed closely by Assembly and then Java. While I agree with you on the most part, I think it's better to learn something seemingly more "complex". Once you get into the flow of things, other languages seem easier.

OP, I started programming back in high school as well. While my instructor was fairly decent, I would still recommend you take the "sucky" teachers' c++ courses. That could help with getting started. YouTube tutorials and buying a relatively cheap book off of amazon worked wonders for me. Programming is "perfected" through practice, practice. A whole lot of the things (most of them, anyway) you're going to learn on your own, but having a teacher around could help a bit. Best of luck!

This is the book I most recently got (well, received from a friend) about a year ago. This is the one I used back in high school.

Join Stack Overflow to ask questions/learn from previous questions asked, and github to share your code.

Edit: Added links.

u/brokenKetchup · 1 pointr/compsci

It depends on how far and how fast you want to go. If you want to quickly learn enough programming that you can make code that actually does useful stuff then you might want to start from scripting languages like python, bash etc. If you want a solid(but slow) foundation for programming then you're better off starting with C, moving to C++ and then going to high level languages like Java or C#. If you want to start from C, I'd recommend Problem Solving & Program Design in C. You can easily transition to C++ from C. When you've learned enough C++ & want to dive into algorithms, you should read this book by Robert Sedgwick.
If you just want to have fun with Maths. You can start learning Matlab(It wouldn't teach you a lot about general programming though). You can easily start learning image processing & Artificial intelligence with Matlab, and these are really fun things to do.
Unfortunately, there is no single language that you can learn to be able to talk to all phones, computers, fridges and browsers. You have to pick one area and start from there.

u/AmaDaden · 5 pointsr/compsci

It depends on what I'm reading. 20 for the average book is about what I can read. I've had things like What Every Programmer Should Know About Memory that I could only do 5 pages at best and things like Head First Design Patterns where I could do 40 or 50

An interesting side note is that I've also been reading books like Thinking, Fast and Slow that basically say that we have a finite amount of mental will power. We can only focus on a difficult task for so long before we run out of steam. The only way we know to improve focus this is by maintaining decent glucose levels. So you might be able to improve your limit by having a snack or breaking for something to eat.

I've also been reading Seach inside yourself. It's book on meditation written by a programmer at Google. I'm hoping to improve my focus with meditation. It might also let you bump up your number number of pages per-day or at least let you settle in to reading faster

u/hsklr · 1 pointr/compsci

These two are my absolute favorites:

The Algorithm Design Manual and Introduction to Algorithms

They have a quite different take on algorithms. I recommend them both, actually. CLRS (the Introduction to Algorithms) is a staple book in most courses. The Algorithm design manual has a more practical view of things, which might be really great to learn alongside the more technical stuff that CLRS teaches.

I will not recommend the Art of Computer Programming to prepare for an algorithms course. I own the books as a collection, but they will be too hard and focused on things that your algorithm course will just jump over. The other books I mentioned here are in my opinion better suited for that. I've never heard of Art of Computer programming being used in an algorithm course, except for small exempts of it. Also, without reading Knuths Concrete Mathematics (great book) or being well versed in the mathematics he uses, it will be extremely hard.

I've heard good stuff about Sedgwick's book as well, which nerga recommended.

u/Shadowsoal · 11 pointsr/compsci

In the theoretical field of complexity...

The 1979 version of Introduction to Automata Theory, Languages, and Computation by Hopcroft & Ullman is fantastic and used to be the canonical book on theoretical computer science. Unfortunately the newer versions are too dumbed down, but the old version is still worth it! These days Introduction to the Theory of Computation by Sipser is considered to be the canonical theoretical computer science text. It's also good, and a better "introduction" than H&U. That said, I prefer H&U and recommend it to anyone who's interested in more than getting through their complexity class and forgetting everything.

In the theoretical field of algorithms...

Introcution to Algorithms by Cormen, Leiserson, Rivest and Stein is dynamite, pretty much everything you need to know. Unfortunately it's a bit long winded and is not very instructive. For a more instructive take on algorithms take a look at Algorithms by Dasgupta, Papadimitriou and Vazirani.

u/gmarceau · 2 pointsr/compsci

Like you I work at a tech startup. When we were just starting, our business/strategy people asked the question you just asked. They opened a dialog with development team, and found good answers. I attribute our success in large part to that dialog being eager and open-minded, just as you are being right now. So, it's good tidings that you are asking.

For us, the answer came from conversation, but it also came from reading the following books together:

  • The Soul of a new Machine. Pulitzer Prize Winner, 1981. It will teach you the texture of our work and of our love for it, as well as good role models for how to interact with devs.

  • Coders at Work, reflection on the craft of programming Will give you perspective on the depth of our discipline, so you may know to respect our perspective when we tell you what the technology can or cannot do -- even when it is counter-intuitive, as ModernRonin described.

  • Lean Startup It will teach you the means to deal with the difficult task of providing hyper-detailed requirements when the nature of building new software is always that it's new and we don't really know yet what we're building.

  • Agile Samurai Will teach you agile, which ModernRonin also mentioned.

  • Watch this talk by one of the inventor/popularizer of agile, Ken Schwaber Pay particular attention to the issue of code quality over time. You will soon be surrounded by devs who will be responsible for making highly intricate judgement calls balancing the value of releasing a new feature a tad earlier, versus the potentially crippling long-term impact of bad code. Heed Ken Schwaber's warning: your role as a manager is to be an ally in protecting the long-term viability of the code's quality. If you fail -- usually by imposing arbitrary deadlines that can only be met by sacrificing quality -- your company will die.



u/lkh01 · 3 pointsr/compsci

I read The Annotated Turing by Charles Petzold while I was in high school and it really sparked my love for logic, math and computer science. So, as far as popular science books go, I can't not recommend it.

Right now I'm interested in programming languages, and I think TAPL is a great resource. The (relatively) new blog PL Perspectives is also pretty cool, and so is /r/ProgrammingLanguages.

u/skytomorrownow · 1 pointr/compsci

I think for a rigorous treatment of linear algebra you'd want something like Strang's class book:

http://www.amazon.com/Introduction-Linear-Algebra-Fourth-Edition/dp/0980232716

For me, what was great about this book was that it approached linear algebra via practical applications, and those applications were more relevant to computer science than pure mathematics, or electrical engineering like you find in older books. It's more about modern applications of LA. It's great for after you've studied the topic at a basic level. It's a great synthesis of the material.

It's a little loose, so if you have some basic chops, it's fantastic.

u/twopoint718 · 1 pointr/compsci

A really interesting book that would complement (or be) a course in computer architecture is "The Feynman Lectures on Computation" http://www.amazon.com/Feynman-Lectures-Computation-Richard-P/dp/0738202967 This is a really fascinating book that explains computers from basic physics up to a useful machine that does work. It also has the virtue of being written by Feynman, someone with an amazing ability to explain things!

u/Nezteb · 43 pointsr/compsci

Some book recommendations:

u/Brimshae · -1 pointsr/compsci

Well, what do you want to learn?

I mean, if you're looking to code, the HeadFirst books might be worth looking into. Go browse one at your local book store.

Eclipse is pretty cool for writing Java, but I'm sure someone will come along and suggest another IDE.

I haven't tried it, but Python is supposed to be pretty good.

Also, when you're trying to learn to code, do the exercises. Do all of them. Practice doesn't make perfect, but it helps.

Finally, Bucky, aka theNewBoston, is a friggin' boss when it comes to tutorial videos.

u/vvillium · 14 pointsr/compsci

https://www.amazon.com/Quantum-Computation-Information-10th-Anniversary/dp/1107002176

Best book hands down. This will bring you to the frontier of quantum computing. The book is also very approachable and meant for people trying to learn. It covers some linear algebra as well as physics in order to bring you up to speed.



Michael Nielson is an amazing educator and expert in the field. His you tube lecture course https://www.youtube.com/playlist?list=PL1826E60FD05B44E4 Quantum Computing for the Determined, is a short version of that book. He also has a free book online on Neural Networks that is probably the most referenced source on the matter. http://neuralnetworksanddeeplearning.com/index.html

u/lowlycollegestudent · 3 pointsr/compsci

I know that this is way more on the theory/mathematics side of the spectrum than CODE, but Charles Petzold also wrote a book called The Annotated Turing that I really enjoyed. He took Alan Turing's original paper on computability which was about 30 pages and annotated it until he had about a 400 page book. There were a couple of chapters in the middle that got a bit dense, but he did a fantastic job of making the subject more approachable and understandable.

u/yellowstuff · 1 pointr/compsci

I've not read that, but The Algorithm Design Manual is a great book. Reading that and Programming Pearls is the best preparation I know of for programming interviews at software companies.

u/the_lie · 3 pointsr/compsci

Maybe this one: Algorithmics - The Spirit of Computing

A good conceptual overview of Computer Science
>The best selling 'Algorithmics' presents the most important, concepts, methods and results that are fundamental to the science of computing. It starts by introducing the basic ideas of algorithms, including their structures and methods of data manipulation. It then goes on to demonstrate how to design accurate and efficient algorithms, and discusses their inherent limitations. As the author himself says in the preface to the book; 'This book attempts to present a readable account of some of the most important and basic topics of computer science, stressing the fundamental and robust nature of the science in a form that is virtually independent of the details of specific computers, languages and formalisms'.

u/bhrgunatha · 7 pointsr/compsci

This isn't criticism or a judgment, but that sounds like an odd request. If you've really absorbed what's in CLRS, I would imagine you could just research those data structures yourself and, for example, look at some open source implementations.

Or research what's in other Data Structures and Algorithms books and read up on them.

Having said that - there is an MIT course on advanced data structures.

I also enjoyed Chris Okasaki's Purely Functional Data Structures

There are 2 Coursera courses in particular - Princeton University's Algorithms Part I and Algorithms Part II - they've provided a web site for their book where lots of algorithms and data structures are implemented using Java with the libraries and source code freely available.

u/DashAnimal · 4 pointsr/compsci

I know this is a pretty common recommendation and you've probably already heard of it
or even read it, but can I recommend the book Code: The Hidden Language of Computer Hardware and Software? I think having a history of how we got to where we are today (written in an entertaining way) is a good starting point, even though it barely scratches the surface of computer science.

u/VSMNeophyte · -6 pointsr/compsci

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.

u/mhatt · 4 pointsr/compsci

I would repeat jbu311's point that your interests are way too broad. If you're interested in going into depth in anything, you'll have to pick a topic. Even the ones you mentioned here are fairly broad (and I'm not sure what you meant about concurrency and parallelization "underscoring" AI?).

If you want to learn about the field of natural language processing, which is a subfield of AI, I would suggest Jurafsky and Martin's new book. If you're interested more broadly in AI and can't pick a topic, you might want to check out Russell & Norvig (although you might also want to wait a few months for the third edition).

u/cypherpunks · 2 pointsr/compsci

As others have mentioned, if you can afford it, TAoCP is definitely a keeper. How much Knuth will ever finish is unclear (he's something of a perfectionist), but it's a classic for a very good reason.

Slightly lower end, two great books are Hacker's Delight and Steven Skiena's Algorithm Design Manual. The latter is an algorithms book beyond the standard CS textbook, covering more exotic things like approximations to NP-hard problems. It's similar (but not identical, so it won't be boring) subject material to that class you link to.

u/gotomstergo · 2 pointsr/compsci

Remember that CS is much about the physical computer than anything else. Computers are made possible by multiple layers of abstraction. They begin with semiconductors, boolean logic, machine language, assembly language, compiler/linker, leading up to high level languages like python and C. Computers organized memory hierarchy to arbitrate between the access time and availability of different types of memory (cache, DRAM, hard drive) .
In addition, the current trend seems to be much focused on the multi-core, parallel system, since engineers can't get enough performance improvement just by implementing pipelines or faster clock cycles.

So that's that. If you enjoy this realm of CS (it's more of computer engineering to be precise), you should read about these books. Nevertheless, this knowledge will "expand", as you put it, your understanding of computing system in general.

http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686/ref=pd_sim_b_27

http://www.amazon.com/Computer-Organization-Design-Revised-Edition/dp/0123747503/ref=sr_1_1?ie=UTF8&qid=1344489171&sr=8-1&keywords=hennessy+computer+organization

u/schreiberbj · 3 pointsr/compsci

This question goes beyond the scope of a reddit post. Read a book like Code by Charles Petzold, or a textbook like Computer Organization and Design or Introduction to Computing Systems.

In the meantime you can look at things like datapaths which are controlled by microcode.

This question is usually answered over the course of a semester long class called "Computer Architecture" or "Computing Systems" or something like that, so don't expect to understand everything right away.

u/jnazario · 1 pointr/compsci

Severo Ornstein's book Computing in the Middle Ages: A View From the Trenches 1955-1983

Contains some neat gems and is a neat read

http://www.amazon.com/Computing-Middle-Ages-Trenches-1955-1983/dp/1403315175


The Soul of a New Machine by Tract Kidder is also a lot of fun

http://www.amazon.com/The-Soul-A-New-Machine/dp/0316491977

u/alfiedotwtf2 · 2 pointsr/compsci

Your link looks like a pirated copy of the book. Here's the real one:

​

https://www.amazon.com/Introduction-Design-Analysis-Algorithms-3rd/dp/0132316811/

​

Levitin's book is great. I'd also recommend Sedgewick:

https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882

​

There's also a Java version of Sedgewick if that's your thing

u/michaeltpb · 1 pointr/compsci

Seems like it goes from types and operators through to multithreading. If you're set on learning Java first (though I'd suggest C or Python) then I suppose it's not a bad place to start since I think a lot of Java books would assume some previous programming knowledge. Personally, I liked http://www.amazon.com/gp/product/0596009208 since it was quite an easy read but I think that one assumes too.

You might find /r/learnprogramming has a lot of useful stuff for you.

u/B_Master · 1 pointr/compsci

I always recommend this book for a self-study beginner.

Edit: To clarify, this is a programming book, not a CS theory book. Not sure which you're looking for, but learning programming now most definitely will help you with your future CS classes.

u/poincareDuality · 10 pointsr/compsci

For designing programming languages, my favorites are

u/Augur137 · 3 pointsr/compsci

Feynman gave a few lectures about computation. He talked about things like reversible computation and thermodynamics, quantum computing (before it was a thing), and information theory. They were pretty interesting. https://www.amazon.com/Feynman-Lectures-Computation-Frontiers-Physics/dp/0738202967

u/roland23 · 1 pointr/compsci

I've found Discrete Mathematics and Its Applications to be easily the most useful textbook I've owned throughout my CS degree. I highly recommend it.

u/krat · 7 pointsr/compsci

CLRS is obviously a good choice, though I found The Algorithm Design Manual even though less known, very useful.

It's divided in two parts: the former is a discussion of many algorithms and data structures, so it covers the foundations like sorting and complexity analysis, then talks about trees, graphs and related problems like minimum spanning tree, TSP, ... The second part of the book is more like an encyclopedia, indeed there are a lot of problem sets, each one with an explanation and several questions you should always pose to yourself when facing those problems as well as several possible solutions.

u/pmorrisonfl · 1 pointr/compsci

I took a long, long break between undergrad and grad school (think decades). I found this GRE math prep book very helpful. (The GRE math section tests high school math knowledge), I'd take the sample tests, see where I fell short, and focus on understanding why. I also found Practical Algebra to be a good review-and-practice guide, for the fundamentals. I boned up on discrete math by buying an old copy of Rosen and the matching solutions guide. And, I watched a bunch of videos of this guy explaining various facets of the math you need for computer science.

u/n2dasun · 4 pointsr/compsci

If you look in the sidebar, you'll notice a few other subreddits that might be better for this question, like /r/askcomputerscience and /r/cscareerquestions.

I'm learning, like you, and from my experience the answers you'll receive will generally be to learn one language intimately, and to learn data structures and algorithms to the point where you can explain them in an interview and be ready to cobble together an implementation in code (whiteboard or on a computer). Also, design patterns. You'll see recommendations for CLRS and Head First Design Patterns.

Don't forget to check the sidebars and FAQs for each of these subreddits. Your answers are likely to already be there.

u/jmct · 2 pointsr/compsci

There are a few good tutorials online. In fact Scott Aaronson has linked to several of them from his blog when that question comes up. I have a bias for this one

Quantum Computing Tutorial

Since Dr. Braunstein is my former supervisor. Also, in my opinion the best introductory book on the subject is:

This

though some academics seem more partial to:

this

u/skibo_ · 1 pointr/compsci

Well, I'm a bit late. But what /u/Liz_Me and /u/robthablob are saying is the same I was taught in NLP classes. DFA (Deterministic Finite Automatons) can be represented as regular expressions and vice versa. I guess you could tokenize without explicitly using either (e.g. split string at whitespace, although I suspect, and please correct me if I'm wrong, that this can also be represented as a DFA). The problem with this approach is that word boundaries don't always match whitespaces (e.g. periods or exclamation marks after last word of sentence). So I'd suggest, if you are working in NLP, that you become very familiar with regular expressions. Not only are they very powerful, but you'll also need to use them for other typical NLP tasks like chunking. Have a look at the chapter dedicated to the topic in Jurafsky and Martin's Speech and Language Processing (one of the standard NLP books) or Mastering Regular Expressions.

u/dupelize · 30 pointsr/compsci

>So do you guys have any ideas on a title?

"Everything I Learned About Quantum Computing After I Stopped Worrying About the Title and Learned About the Content"

>and can you recommend any good books?

What level? The standard intro is Mike and Ike if you have a calculus and linear algebra background.

It sounds like you might be in high school (or equivalent) so you probably don't have much linear algebra knowledge beyond knowing what a matrix is.

It isn't a book, but Scott Aaronson has a decent blog. There is a lot of non Quantum talk too, but if you sift through there is a lot of interesting stuff.

u/ElectricRebel · 5 pointsr/compsci

For compilers:

u/fbhc · 17 pointsr/compsci

I recommend picking up a copy of either Programming Principles and Practice Using C++ or C++ Primer.

​

https://en.cppreference.com/w/ is a reference website, and is the goto resource for quick documentation lookups, etc. However, when learning C++ from scratch, a book is simply the best way to go.

u/cybereality · 0 pointsr/compsci

I found the books C++ Primer ( https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/ ) and C++ Primer Plus ( https://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402/ ), no relation, to be great resources for learning C++. They are a little older now, so covering C++11, but if you are just starting out that is fine, since most of the core concepts have not changed in the last few years (and most of the new features are more advanced anyway).

u/jstampe · 3 pointsr/compsci

I found Tanenbaum's Structured Computer Organization to be very good. Giving a complete overview of the whole stack.

u/vogonj · 5 pointsr/compsci

I'm quite a fan of Sipser's Introduction to the Theory of Computation: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X

It's not a full-on algorithms book but formal models were always the most interesting part of theoretical computer science to me. vOv

u/csp256 · 3 pointsr/compsci

The Mathematical Theory of Communication is short and sweet.

Once you have had your linear algebra, you might be interested in looking at quantum computing. The canonical text there is Quantum Computation and Quantum Information.

u/42e1 · 12 pointsr/compsci

If you're interested in learning more about Turing's paper that introduced the Turing Machine, I highly recommend the book The Annotated Turing. It's by the same person who wrote Code, which is an oft-recommended book on this sub-reddit.

u/Gr8ingPresence · 10 pointsr/compsci

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:

u/ixampl · 15 pointsr/compsci

I think the field you are looking for is called Natural Language Processing.
There is a nice introductory lecture on it on coursera.

I think this is the standard introduction book.

u/joshuaeckroth · 16 pointsr/compsci

To my knowledge, Chris Okasaki made a big impact with this work in this area, and directly influenced Clojure, among other projects.

His book is a great read: http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504

It's based on his PhD thesis: https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf

This StackOverflow question addresses what's changed since the late 90's: http://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki

u/uhwuggawuh · 1 pointr/compsci

I'm kind of in the same position as you, OP. Thinking of getting CLRS, New Turing Omnibus, The Elements of Computing Systems, and Algorithmics!

So excited.

u/mtVessel · 2 pointsr/compsci

I've only browsed Concrete Mathematics, but others have said it might not be sufficient. My uni used Rosen's Discrete Mathematics and its Applications. I think it's a fairly standard text. Pricey, but older editions might be just as useful.

u/kunjaan · 1 pointr/compsci

There are books that are compendium of computing such as

  1. http://www.cs.brown.edu/people/jes/book/

  2. Guide to Turing's Papers

    but they still require some effort on your side.

    It would be better if you rephrase the question from "Cliff Notes" to "beginners intro that is not Sipser" : )
u/saitt04 · 1 pointr/compsci

[This one?]
(http://www.amazon.com/Structured-Computer-Organization-5th-Edition/dp/0131485210)

I just started my computer architechture class and this is one of the books they recommended, I think I'll try to get this one if it is that good.

u/cderwin15 · 2 pointsr/compsci

For what it's worth, I'm in the midst of working through the dragon book and would highly recommend it. Unfortunately I don't know of any online courses you could take for credit.

u/sv0f · 2 pointsr/compsci

This book was handed to me by my data structures and algorithms professor at CMU back in the day and it was really inspirational -- and totally accessible.

u/stulove · 2 pointsr/compsci

On the functional programming front, Purely Functional Data Structures has some fun stuff in it. You should be really familiar with functional languages before going through it though.

u/PM_ME_UR_OBSIDIAN · 1 pointr/compsci

The "last interface" between hardware and software is the CPU. Think of it as made from a few universal shift registers connected to various other components (adders, etc.) Instructions will assert/deassert the control lines of the registers and components, and cause their contents to change accordingly. It's very interesting. Look at this book for more.

u/llimllib · 6 pointsr/compsci

sipser (I have the first edition which you can get on the cheap, it's very good.)

AIMA

Dragon

Naturally, TAOCP.

Many will also recommend SICP, though I'm not quite sure that's what you're angling at here, it's probably worth browsing online to see.

u/lurkishdelights · 3 pointsr/compsci

If you're looking for a story, here's a good classic non-fiction one:
The Soul of a New Machine by Tracy Kidder
And a fictional one:
The Bug by Ellen Ullman

u/shimei · 3 pointsr/compsci

Michael Sipser's Introduction to the Theory of Computing is another good book on this topic. Very readable and short.

u/ThreeHolePunch · 2 pointsr/compsci

In addition to that book, I would also highly recommend The Art of Computer Programming books by Knuth.

u/JerkingItWithJesus · 1 pointr/compsci

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.

u/slashcom · 5 pointsr/compsci

In Natural Language Processing, it's Jurafsky and Martin. In Machine Learning, it's debatably the Bishop book.

u/dnabre · 1 pointr/compsci

Feynman's Lectures on Computation

Definitely light reading. Some of the stuff seems a bit dated and some a bit basic, but Feynman's has a way of looking at things and explaining them that is totally unique. (You might want to skip the chapter on quantum computing if you don't have the background).

u/TwistedStack · 4 pointsr/compsci

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)

u/maybefbi · 10 pointsr/compsci

Title: On Computable Numbers, with an Application to the Entscheidungsproblem

Authors: Alan Turing

Link: http://plms.oxfordjournals.org/content/s2-42/1/230.full.pdf

Abstract: In just 36 pages, Turing formulates (but does not name) the Turing Machine, recasts Gödel's famous First Incompleteness Theorem in terms of computation, describes the concept of universality, and in the appendix shows that computability by Turing machines is equivalent to computability by λ-definable functions (as studied by Church and Kleene). Source

Comments: In an extraordinary and ultimately tragic life that unfolded like a novel, Turing helped break the German Enigma code to turn the tide of World War II, later speculated on artificial intelligence, fell victim to the homophobic witchhunts of the early 1950s, and committed suicide at the age of 41. Yet Turing is most famous for an eerily prescient 1936 paper in which he invented an imaginary computing machine, explored its capabilities and intrinsic limitations, and established the foundations of modern-day programming and computability. From his use of binary numbers to his exploration of concepts that today's programmers will recognize as RISC processing, subroutines, algorithms, and others, Turing foresaw the future and helped to mold it. In our post-Turing world, everything is a Turing Machine — from the most sophisticated computers we can build, to the hardly algorithmic processes of the human mind, to the information-laden universe in which we live. Source

u/rocksInGorges · 1 pointr/compsci

From personal experience:
CLRS (theory)
http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504 (data structures / practical)

From what everyone else says:
wizard book.

u/Narbas · 6 pointsr/compsci

Can we not put this in the sidebar by now? This question has been posted so many times lately. Use this book. The prerequisites are basically nothing.

u/PubliusPontifex · 11 pointsr/compsci

The Dragon Book by somebody. A bit out of date now, but really helped me with my parser/tree implementation.

u/TezlaKoil · 2 pointsr/compsci

I think he may have meant the other Feynman lectures.

u/Isenhatesyou · 4 pointsr/compsci

Sipser's Introduction to the Theory of Computation is somewhat of a classic in the field. I just really hate his notation.