Top products from r/compsci

We found 275 product mentions on r/compsci. We ranked the 669 resulting products by number of redditors who mentioned them. Here are the top 20.

Next page

Top comments that mention products on r/compsci:

u/mredding · 5 pointsr/compsci

I can't speak of a specific book that is a comprehensive history of computing, but I will speak to books that speak of our culture, our myths, and our hero's.

Hackers and Painters, by Paul Graham. People are polarized about the man, whether he's too "pie in the sky" - full of shit and ego, or if he speaks as an ambassador to our most optimistic ideals of our (comp-sci) culture. The contents of this book is a collection of his essays that are inspirational. It made me forego the societal pressures within our culture and reject popular opinion because it is merely popular and just an opinion, which is a virtue no matter who you are, where you are, or what you do. All these essays are on his website, though. If you want to review them, I recommend Hackers and Painters (the essay), What You Can't Say, Why Nerds are Unpopular, and The Age of the Essay; his oldest essays are at the bottom of the page and go up - he writes about what he's thinking about or working on at the time, so you'll see the subject matter change over time. So much of this will have direct application to his middle school and high school life. I cannot recommend this book, and the rest of his essays, enough.

If he wants to get into programming, I recommend The Pragmatic Programmer. This book talks about the software development process. I'm not going to lie, I don't know when best to introduce this book to him. It's not a hard read whatsoever, but it's abstract. I read it in college in my first months and said, "Ok," and put it down. Approaching the end of college and my first couple years in my profession, I would reread it ever 6 months. It's a kind of book that doesn't mean anything, really, without experience, without having to live it, when he has an obligation to his craft, his profession. I tell you about this one since you're asking about books to tell him, because this isn't something someone would normally come up across without being told about it.

The Cathedral and the Bazaar is a telling book about the cultural differences between the proprietary monoliths like Apple and Microsoft, and the Free and Open Source Software communities that back such popular software as Linux (the most popular operating system on the planet, running on all top 500 super computers, most server computers on the internet, and all Android phones) and Chrome(the worlds most popular web browser). Indeed, this book directly reflects the huge cultural battle that was duked out in the field, in the industry, and in the courts from the mid-90s and into the 2000s. It advocates helping the community, contributing to something larger than yourself, and that none of us are as good as all of us. To paraphrase Linus Torvalds(inventor of Linux) "Given enough eyeballs, all bugs are shallow."

It's important to know who the hero's are in our culture, and they are diverse and varied, they're not just computer scientists, but mathematicians, physicists, philosophers, science fiction writers, and more. I would find a good book on Nicola Tesla, since he invented basically everything anyway (Thomas Edison was a great businessman, but a bit of a tosser), Richard Feynman was a physicist who is still celebrated in his field, and he even worked for Thinking Machines, back in the day, which was a marvel of it's time. Seymour Cray founded Cray Supercomputers and they have a lasting legacy in the field, a biography on that would be interesting. A biography on Symbolics and their Lisp Machines will make him yearn to find one still functioning (a rare gem that crops up every now and again, though he can run one in an emulator), and about the "AI Winter", a significant historic era (note: the AI Winter is over, and we are in spring, the history is both compelling and enthralling). Anything Issac Asimov published (in nearly every category of the dewy decimal system) is also compelling, and hardly dated. In fact, he's the originator of a lot of modern sci-fi. Charles Babbage invented the modern computer (though it was entirely mechanical in his day, and it wasn't actually built until 1996-2002) and Ada Lovelace was the worlds first computer programmer. A woman! Speaking of women, and it's worth young men learning this about our history, Grace Hopper was a military computer engineer who invented the term "bug".

And speaking of women, someone I have respect for, especially if your boy wants to get into game development is Sheri Graner Ray's Gender Inclusive Game Design, which may be more appropriate when he's in high school, and I consider it required reading for anyone who wants to enter the gaming industry. The book lays out plainly how video games hyper-sexualize both women, and, for some reason surprisingly to many - men, it's disastrous effects it has for the game industry, the game market, and the gaming community, and insights on how we may combat it. I have seen colleagues (men) become indignant and personally offended at reading this book, but were absolutely humbled when they took the fight to Sheri directly (we had a few phone interviews with her, always fantastic). If your boy found a problem with this book, he would do well to read Paul Grahams essay on keeping his identity small... The subject matter is not a personal attack on the individual, but on the blight, and he would be better served finding himself on the right side of history with this one, it would serve him well if he were to pursue this craft, specifically, but also any forward facing media in general.

And I also recommend some good books on math. Algebra, linear algebra, calculus, and statistics. You can get very far, lead an entire career unto retirement without knowing anything more than arithmetic and basic, basic algebra, but he could only serve himself well if he makes the decision that he is going to like maths and chooses to willfully become good at it. Outside the context of school and terrible teachers, it's actually an enthralling subject. Just get him a copy of Flatland, Flatterland, and Sphereland. Try this. There are books about proofs that break them down into laymen terms so that anyone can celebrate how special they are. My wife has a few on the shelf and I can't remember their titles off hand. Also this, the book is the narrative of some witty laymen who discover a whole branch of mathematics from first principles, the surreal numbers, an extension of imaginary numbers. It's really quite good, but might keep him occupied for a couple years in high school.

I should stop here or I never will.

u/CSMastermind · 1 pointr/compsci

sigh This sub lacks good advice sometimes.

All right, I'm going to give you a real answer.

Go get yourself a copy of Cracking the Coding Interview. It's the best resource for tech resumes / interviews. Additionally you might want to look at The Google Resume by the same author.

Let's start at the beginning:

Get a Resume.

Here's my slideshow from the last time I gave a presentation about it. Here's a template to start from.

Now's a good time to stop and mention something. I can't tell you the number of times someone has come up to me and said, "<CSMastermind>, I have an interview with <big name company> tomorrow, how should I prepare?" I have to tell them, "Nothing you do in the next 48 hours will dramatically affect the outcome of your interview." It's just not how the process works.

Start Doing Things You Can Put on a Resume.

Right now. Go read this article. Then go watch this video.

Now that you're in the right mindset, do you have a Github profile? No? Get one tonight. You need to learn to use source control, you probably won't be taught it in school, and it will make you a better developer. Start by uploading the projects you've done for school. Once you have them uploaded, go back and clean up the code. Now that anyone can look at it make sure it's something you're proud of.

Likewise go sign up for a StackOverflow account. You'll need it in the future.

Go to Khan Academy's coding section, Code Academy and Udacity. Start learning outside of the classroom.

Ever been to a hackathon? No? Find the one that's nearest to you here. Go to it. Make something. It doesn't have to be good, it just has to be something.

Start reading some books about software development. Code Complete, The Pragmatic Programmer, and Don't Make Me Think are the ones I normally recommend starting with.

Watch the first video in this series. It gives a good overview of the history of programming languages.

Read through the archives of Joel on Software. Then get off of Reddit, the talented programmers are all on Hacker News.

Finally start doing personal projects. Use technology until you find something that you wish existed, an idea for an app, a game, or a browser extension. Make it. It will be hard, you might fail. Focus on making something, then work on improving.

Good now you have things to put on your resume.

Applying to Jobs

Okay, I don't know where you go to school. If you're at a top ~25 school the recruiters will be coming to you, ask around. If you're at a smaller school start by applying online, consider looking for career fairs in the area and travel to them. Remember that hackathon you were going to go to? It's full of recruiters. Are you a minority? There are conferences if you're a woman, black, hispanic, or native american. Those conferences are also full of recruiters. Does your school have a computer science club? If so they probably maintain a "resume book" that they pass out to employers.

So say you're at a hackathon / conference / job fair and you're about to talk to a recruiter. Before you go practice your "elevator pitch". This is the first thing 10 seconds or so where you introduce yourself to a recruiter. Something like:

"Hi, I'm <name>. I'm a sophomore in computer science major, and I'm really excited about applying game development to learning. I've actually developed an interactive educational program to teach children how to draw. Do you think you have an opening for someone like me?"

Hand them your resume, be prepared to answer some basic technical questions. Finally are you a woman? Congrats, you get a free job at almost any company you want. Go apply to Microsoft's explorer program and others like it.

Got an interview? Great.

Handling the interview

Remember when you got Cracking the Coding Interview? That's now your bible. Get some friends, got into a study room with a whiteboard and start to practice. Make sure you can answer any of the questions in the book in the language of your choice. Here's my slides from the last presentation I did about technical interviewing.


My background: internships at Microsoft, Facebook, and Google, Microsoft "intern ambassador" twice, Microsoft "student partner", Google "student rep", president of the ACM on campus. Now I work at a large financial company in NYC and help run our recruiting program.

If you need help with any of this stuff PM me.

u/nolsen01 · 6 pointsr/compsci

Here is my advice, take it with a grain of salt:

  • There are lots and lots of flamewar worthy disagreements in computer science, programming and technology in general. Linux vs Windows vs Mac, Gentoo vs Arch vs Ubuntu, Ruby vs Python vs Java, Object Oriented Programming vs Functional Programming. Even within languages, certain frameworks have their loyalists and will tell you their favorite framework is the only way to go. Do not get mixed up in this. Follow your interests and enjoy what you're doing.

  • Be patient. Do not try to learn too much too quickly. Since you have another year or so before you start taking computer science classes, you are not in a hurry. You can take this time to learn some practical skills rather than just theory (which is what /r/compsci is all about). You'll find that your classes will teach you really interesting theoretical stuff like how to measure the efficiency of your programs or how to organize your code to make it more maintainable, all of which is very helpful, but it probably won't teach you how to use Maven or how to use some of the things that the industry wants you to know how to use. This is what I mean by practical skills. Its one thing to know what a Binary Search Tree is, its another to know how to use a specific framework. Spend some time on the practical stuff now. That means actually creating stuff like websites or video games (or whatever interests you.)

  • "The perfect is the enemy of the good." Don't try to make your programs perfect. Make them work and try to form healthy habits but do not be the type that settles for nothing less than perfection. If you do, you'll find that you hardly get anything done.

  • Pick one language to specialize in. You will learn more this way in the beginning. A lot of people have stunted their own progress by spending their first couple of years learning different programming languages. Don't do that. You'll learn other programming languages eventually, it really isn't that hard, but you're better off specializing in a specific language (for now) than being crappy at a lot of languages. (I made this mistake.)

    If you want to get good at programming, I would recommend the book "How to design programs" combined together with The Racket Programming Language. If you're really up for it, mix in the content from Structure and Interpretation of Computer Programs (which is a great book by the way). If you finished those, you'll have a very good foundation for learning how to program. I would learn a new language (don't specialize in racket) and continue from there.

    The downside to learning racket is that it is not a common language, however as I said earlier, you'll find that learning new languages it very easy so this shouldn't be too much of a problem, especially if you're more concerned with forming a good foundation first.

    After learning all of that, I would say look into something on data structures and algorithms. There are a lot of great books on the subject. Introduction to Algorithms is considered the classic. If you can get through the whole thing on your own, then you are better then I am.
u/sanyasi · 11 pointsr/compsci

TAOCP is too hard: its like one of those fantasy wishlist items: the kind of thing every computer scientist wishes they had read but never really has the time to. Some nicer books that are gold standards in their respective fields are:

CLRS (Algorithms)

SICP (Just see the top two amazon reviews)

Kernighan and Ritchie (if you want to be a pretty accomplished C programmer and have little to no real C experience before)

Since you mentioned security, Ross Anderson's Security Engineering is a fantastic read, and very easy to parse: you could read it through in less than a week and have a deeply changed view of the structural issues in security: there is little crypto in the book (for that, Schneier is the gold standard) but more discussion about protocols, where protocols fail, real-world protocols like the military classification scheme, etc. It is absolutely fantastic. If you read this and Schneier you'd have a very thorough understanding of the entire security stack.

Kleinberg and Tardos is a much easier read than CLRS when it comes to algorithms, doesn't cover as much, and is very graceful in its explanations. Personally, I love it.

u/JohnKog · 8 pointsr/compsci

You probably already have, but if not, definitely read Design Patterns, which is old but a classic. I'd also highly recommend the Pragmatic Programmer.

EDIT: I just want to say, that I also fully support alienangel2's answer. I wanted to recommend a couple good books to get you on "the path", but ultimately, the best thing by far is to find a job that grows you. For some people, the best way to do that is to work at a super small startup, where everything you're building is from scratch. For others (like me), the best way is to work at a company with tons of really smart people who have already built great software, and learning from them and the choices they've made (and why). And if you still feel like you're regressing since school, maybe that's the answer: go back to school (i.e. get a Master's or PhD)!

u/GeekGoesRawr · 1 pointr/compsci

You probably don't need extensive knowledge of data structures for mobile apps, but I ALWAYS encourage learning data structures! Knowing what structures are available and when to use them is a bit like being a programmer super-hero and one of the things that really sets apart the self-taught hackers from the top tier engineers and scientists.

It's not a course, but I always love to plug my professor's book Open Data Structures. He's made it freely available in many different languages with code samples in multiple languages, and it's a really good read.

One thing I would highly recommend before getting into the mobile space, however, is looking into design patterns. The fundamental book on this is Elements of Reusable Object-Oriented Software by the Gang of Four, but there are some other ones I've found which are pretty handy. Game Programming Patterns is freely available, but it is a bit domain specific. It really nicely details a lot of patterns, however. JavaScript Design Patterns also really nicely details them and is also freely available.

u/IjonTichy85 · 2 pointsr/compsci

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/matthewjosephtaylor · 3 pointsr/compsci

Modern software development is more about being able to search for the answer you need when you need it, than learning anything on the off-chance it might be useful in the future.

I remember when my desk was littered with books, and browsing the tech section of my local bookstore was a happy diversion and source of inspiration. My list of RSS feeds was a mighty well tended garden.

Sadly no more. :(

The classic readings would be things like Joel on Software (blog), the Pragmatic Programmer, and the Mythical Man Month.

If you haven't read then do so (even if you already know C). If you own only one programming book, this should be it. It is the key to all modern languages you are likely to experience in your lifetime. Imagine you are an acolyte taking the first steps into your chosen religion. This book is the old testament, written by the gods themselves. If you truly want to understand the mysteries you will find no better reference.

More important today is being able to search/ask intelligent questions on stack overflow, use google effectively, and get a feel of what software is worth your precious time to learn. Hint: evaluate the community surrounding the software with a stern eye, often the community is more important than the actual software.

There is nothing special about building a computer. Feel free, and /r/pcmasterrace are your friends. More important would be to get an an Amazon account and learn how to spin up instances on EC2. Why build a computer when you can summon and disperse 100's of them on a whim?

And since 100 computers is more interesting than 1, the 2nd book you own should be:

By this point I assume you are proficient with, understand and love Unix. If not then IMHO your education dollars and/or time were misspent. Break loop, forget about learning frameworks, languages, etc and spend at least the next six months becoming intimate with vi, bash, make, and the linux kernel. These are the true weapons of a Jedi code master.

A full personal subscription to is more than worth it, and should be considered mandatory for any professional software developer.

Have fun. :)

u/scohan · 2 pointsr/compsci

I think this might be beyond what you're looking for, but I really enjoyed Pattern Recognition and Machine Learning. It's very heavy on statistics, and if you're looking into machine learning methods, it has a wonderful amount of mathematical information given in a fairly clear manner. It might be severe overkill if this isn't your field, but I thought I'd mention it since you said AI.

For AI in general, I see Artificial Intelligence: A Modern Approach used a lot. It gives some solid basic concepts, and will be helpful in getting you started writing basic AI in your applications.

I can't really recommend discrete math because, despite enjoying it quite a bit, I haven't found a textbook that I like enough to endorse. My textbook for it in college was by Rosen, and I despised it.

Just double checked it, and I would stay far away from the first recommendation unless you have a very extensive knowledge of sophisticated statistics. I like it because it gives the math that other books gloss over, but it's not good for an introduction to the subject. It's almost like going through a bunch of published papers on some new cutting edge methods. The ever popular Machine Learning by Thomas Mitchell is a much better introduction to machine learning. If you want to obtain the mathematical depth necessary for your own research into the field, go with the other book after you've gotten acquainted with the material. I'll leave my suggestion up anyway in case anyone here might find it interesting.

u/enteleform · 8 pointsr/compsci

I've been coding for a few years and for a while was just focused on getting things to work.  Now I'm at a point where I know I'll figure out any given problem with my accumulated knowledge and/or additional research, and I'm noticing that not planning ahead is the most significant (lack of) action that will set me back at this stage in my practice.

To remedy this, I've been looking into architectural patterns (MVC, MVP, MVVM, etc.), and UML diagramming.


Architectural patterns were initially difficult to grasp, as many of the explanations available online dig into topics that might not make sense yet if you are inexperienced with architecture.  The MVC Java Tutorial by Derek Banas is the best introductory explanation of architectural patterns that I've come across (he also has some great videos on design patterns & other topics).
Some books that cover code structure & architecture in more detail:

  • Clean Code: A Handbook of Agile Software Craftsmanship

  • Code Complete: A Practical Handbook of Software Construction

    The author of Clean Code, Bob Martin, has a ton of talks that are a great source of info, and has also produced the CleanCoders series.


    Also check out some Software UML Examples.  I find that mapping out an overhead view of your project before starting to code gives you a chance to make sure the majority of relationships, life-cycles, and high-level details are planned out correctly from the start.  You'll still have to make inevitable adjustments while coding, but it's much more efficient than figuring it all out from the inside while you're building it.
    yEd Graph Editor is a good freeware option for creating UML diagrams.
    If you find that you really like the UML approach, check out Enterprise Architect.  It's definitely worth picking up since it allows you to generate file structures from your UML diagrams, with all of the boilerplate filled out already (class/method/variable definitions, etc.).


    Also related, SourceMaking has some good wikis on:

  • Design Patterns

  • Refactoring

  • Anti-Patterns

  • UML

    (Although their UML material is pretty in-depth and may be overkill if you just want to use UML as a quick way to plan out code.  But it's legit if you want to go all-out UML mode)
u/BrigadierWilhelm · 2 pointsr/compsci

Do you have an academic adviser in the department or a professor you are friendly with? They could be a great resource. If you get your hands on the textbook / slides / notes from the better taught classes through a professor or student, that could help quite a bit.

You can also try the websites of some of the big name CS departments, there may be some openly available projects, slides, or notes.

It may suck, but books can actually be a fantastic resource.

This book isn't bad for algorithms and such, and you can pick up c++ with it too.

The price is pretty nasty though, maybe you can get it at your library.

I've had employers rave about this one:

But I have to be honest, I haven't checked it out myself.

Here is an OOP and design pattern one:

Google is also your friend and there are many great wiki pages on software engineering related topics.

Your college is a great resource, use the TAs, professors, lab and library to their fullest. You can get a lot of material very quickly there.

Hope this helps, sorry I didn't have any direct links to sites for you.

u/cholland89 · 27 pointsr/compsci

I just finished reading Code: The Hidden Language of Computer Hardware and Software and will state unequivocally that this book is the most satisfying read I've experienced. It starts with flashlights blinking through windows, moves to Morse code, introduces electrical relays and demonstrates how they can be connected to form logic gates, then uses those gates to construct an ALU/counter/RAM and multiplexors. It goes on to describe the development of an assembly language and the utilization of input and output devices.

This book can be described as knowledge hose flooding the gaps in my understanding of computer hardware/software at an extremely enjoyable pace. It may help satisfy your interest in the concepts and technology that led to modern computers. Check out the reviews for more info.

If you haven't already studied logic gates in depth in your formal education, I would suggest using a logic simulator to actually build the combinational logic structures. I now feel very comfortable with logic gates and have a strong understanding of their application in computing from my time spent building the described logic.

I went through the book very slowly, rereading chapters and sections until I felt confident that I understood the content. I can not recommend this book enough.

After reading CODE, I have been working through The Elements of Computing Systems: Building a Modern Computer from First Principles. If you are looking to gain a better understanding of the functions of hardware components, this is the book to read. This book's companion site has the first chapters free along with the entire open source software suite that is used in the book's projects. You will build, in the hardware design language starting with Nand gates, each logic gate and every part of a computing system up to a modern high level language with which you can program custom software of your own design to compile in a compiler you designed into an assembly language you specified which is turned into binary that runs in a processor you built from Nand gates and flip flops. This book was very challenging before reading CODE, now I feel like I'm simply applying everything I learned in code with even more detail. For somebody that hasn't attended college for computing yet, this has been a life changing experience.

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/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] · 1 pointr/compsci

Resources recommended to get started with AI:

Matt Buckland's "Programming Game AI by Example" book. It's oriented towards video game AI, but I find it to be a great place to start with, and will give you a nice first impression of what AI involves. It has a lot of code, which often helps when starting.

When you're ready to move on to something more formal and academic: "Artificial Intelligence, a modern approach", by Norvig and Russell (you can find the 1st/2nd edition for pretty cheap, and from what I hear it has little differences).

u/kevroy314 · 43 pointsr/compsci

I first heard about these when reading Godel Escher Bach back in later high school. That book was a long, difficult read, but man did it blow my brain wide open. Quines are definitely the thing that I remember most vividly (probably because it was the easiest to understand), but that book was full of awesome stuff like this.

You should totally check it out! You can get it super cheap at used book stores since it was such a successful book.

u/theinternetftw · 5 pointsr/compsci

That's kind of besides the point of this post, but is nonetheless awesome, and you posting that does let me use it as a springboard to say these two things:

>Jonathan Blow, the creator of Braid is making a compiler

For the interested, the link to watch that is here.

>I know nothing about making compilers, but it was awesome to watch

Compilers *are* cool, and if you want to make a simple one for fun, try it as the last part of this project. As for needing to know anything before you do it, I went through that book at the same time I was taking my first college CS course, and I managed alright. By the end of it you have a complete platform, from a machine you make from scratch (NAND) up to a compiler for an object-oriented language that runs on the machine you designed yourself.

u/jav032 · 3 pointsr/compsci

This might be frowned upon by others in /r/compsci for not being "serious enough", but I greatly enjoyed "The New Turing Omnibus: Sixty-Six Excursions in Computer Science". To quote an Amazon review " He illuminates the dark corners of abstract thought with practical puzzles and plain language."

I had a lot of fun reading this book when I started studying CS, and it definitely helped me later on. It covers almost everything in plain language. I recommend you at least read the beginning on amazon's free preview and see if you like it: (click on the book thumbnail on the left)

u/alex_kendall · 7 pointsr/compsci

The Mythical Man Month published 1975(!)

"Arguably the only classic book in our field"
Lot of good books listed here, but my advice is to read this book, and play around with some new tool (like git). Now that I think about it, learning git along with reading this book is actually perfect, because you'll learn how to use the tools that we have today that the author dreams of, and why they are so powerful and important.

Yes, this is the perfect break material: git and The Mythical Man Month. Short book too.

u/scriptsvcs · 3 pointsr/compsci

> Thanks for your time, my god this was longer than expected.

I suppose in the age of twitter that was a bit of a novel. For us old fogies, that's just a bit more than a post card :)

Introduction to Algorithms is the book for learning everything about algorithms. You'll learn all the standards; how to analyze them (space/time efficiency, Big-O, Big-Theta); and how to prove them; etc.

If you want to learn a great low-level language, the typical things to learn are assembly and C, but I would highly suggest learning Forth. There's tons on the web about it, but the seminal book was Starting Forth. You get all of the low-level detail of assembly, a bit of scaffolding, and you learn to build your higher level language structures as you need them. Great fun, and it's turned out to be very useful through the years, even though I never get to use it in production/release.

u/kharashubham · 4 pointsr/compsci

It's a great course, doing well in it would definitely give you more confidence in taking up more challenging problems in the CS or Software Engineering domain in general. I would recommend you to go through Data Structures chapter in the The Algorithm Design Manual by Steven S. Skiena, also a great book to study about Algorithms. This book is an amazing read and I recommend it to all CS majors.

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/maruahm · 5 pointsr/compsci

You're probably right.

For algorithms, the usual undergraduate text is Introduction to Algorithms by Cormen, et al. I do recommend it, too. It's comprehensive and good.

Besides Cormen, I've also made good use of Analysis of Algorithms and Analytic Combinatorics by Sedgewick and Flajolet. They're a bit more advanced, but I don't know algorithms analysis well enough as a field to know where they would usually be taught or how central their material is. They've been very worthwhile purchases for me, though, and I do recommend them as well.

Edit: It's also worth pointing out that, at my institution, the graduate intro algorithms course used Kozen's other textbook, The Design and Analysis of Algorithms. You might want to take a look.

u/intertroll · 5 pointsr/compsci

If you don’t want to real an actual textbook, this one will do the job (without skimping on details) and is more laypeople friendly:

Just as an aside, I had a non techy friend who had a similar sense of mystification as OP’s but really wanted to understand them better, so I pointed him at this book. The next time I saw him we had a great conversation about logic gates and data representation. So it works! It was actually almost a cathartic experience, taking a person who doesn’t get to someone who does, since as a developer you often have to deal with users who don’t know and don’t care.

u/fossuser · 2 pointsr/compsci

If you're looking for a detailed, but approachable overview I'd highly recommend picking up this book:

I did CS and this book does a great job explaining how it all works from the ground up as well as how it was figured out. Putting everything in a historical context makes things a lot easier to understand and remember. It doesn't suffer from the common high level explanations that are useless to understand how something really works.

It's also just a fun read.

u/SnailHunter · 1 pointr/compsci

>I highly, highly, highly recommend reading Skiena:


>It's really readable, and is a really good refresher. I've actually reread it a couple times now (like, actually read like a novel, unlike what you do with CLRS), and each time I've been glad I've done so.

Just wanted to let you know that I checked this out online thanks to you and it looked good so I just bought it. I'm gonna read through it during my break.

u/DarkAnt · 26 pointsr/compsci

I don't know how to tell you how code well, because I don't know how to do it myself. I look at John Carmack, Bjarne Stroustrup, Guido van Rossum, Herb Sutter and co. and I realize how poorly I measure. That said, I do know of some things that will certainly help you. I believe to get good at something takes time and dedication. The following is in the order that I thought of it. I'm not sure how you should attempt to learn this material. Hopefully someone else can help you out with that.

Learning how to recognize potential solutions to classes of problems and of course having the basic tools to design a solution.

u/chrome_x · 1 pointr/compsci

First, I don't read books too often. So when I do read, I try to find books that have some form of practical aspect in it. I am currently reading Clean Code ( and it has exercises to help me understand the situation and to show me how I could design software in a better way. Not only does this help me understand the problem better, but writing/executing the code and feeling the problem makes me really understand why the particular solution is the best solution.

I do not usually take notes because i won't read them again(sorry I know myself too well). I prefer doing these exercises once in a while and hoping that I would be able to fall back on my intuition when I encounter something similar at my job/class/internship/personal coding time etc.

u/nimblerabit · 3 pointsr/compsci

I learned mostly through reading textbooks in University, but not many of the books we were assigned stood out as being particularly great. Here's a few that I did enjoy:

u/jrockIMSA08 · 2 pointsr/compsci

As well as discrete math, one thing some students have problems with is actually doing the amount of work required in a CS class. Not because they aren't capable, but because they don't realize that they probably shouldn't leave it off until the night before. If you get into the habit of doing an hour of work per night this summer, and just keep it up in college, you'll be way better off than most of your classmates. Do project Euler or Topcoder problems, or work on an open source project (imho harder). You'll get slapped around in Algorithms and discrete math no matter what.

If you want some light reading that you'll actually enjoy. is an awesome book. I read it during my senior year summer, and I feel like it gave me a really nice cursory introduction to CS.

u/Nezteb · 43 pointsr/compsci

Some book recommendations:

u/guiraldelli · 1 pointr/compsci

Excellent! I'm glad to know the concept is clear to you.

I would recommend you to using the Lewis & Papadimitriou book as well as the Sipser one: for me, the former is more formal than the latter, that is more didatic (specially for undergraduate students); however, both use a simple language and are very didatic.

My advice is: take both books and keep studying by them. I've learned Theoretical Computer Science by the Lewis & Papadimitriou book, but always I couldn't get a concept, I went to Sipser. And vice-versa.

At last, the 2012 (3rd) edition of the Sipser is so beautiful, with good automata drawings to understand Pushdown Automata. :)

u/reten · 0 pointsr/compsci

Good list!

Does it make sense to add a 'methodology' category for the SDLC. I think it's important that software engineers understand good PM/Agile principles.

Not sure the best book but books I like the 'Agile Manifesto', or Alistar Cockburn 'Crystal Clear' (

or a Microsoft SCRUM book.

and the Mythical Man Month:

To me books like these and the feedback loops it teaches will help deliver software that somebody 'wants'..

u/bluebathysphere · 2 pointsr/compsci

The two starting books that gave me a great deal of understanding on systems (which I think is one of the toughest things to grasp and CLRS and the Art of Programming have already been mentioned):

[Computer Systems: A Programmer's Perspective] (

This along with its labs served as a crash course in how the system works, particularly a lot about assembly and low-level networking.

The Elements of Computing Systems: Building a Modern Computer from First Principles

I've mostly only done the low-level stuff but it is the most fun way I have found to learn starting all the way at gate architecture. It pairs well if you have read Petzold's Code. A great introduction to the way computers work from the ground up.

u/mmddmm · 3 pointsr/compsci

I like The New Turing Omnibus. It's kind of old, but gives a great overview over many interesting computer science topics. After reading it you should have a general sense what computer science is all about. Then you can dive into more specific books on topics that interest you.

u/neop · 4 pointsr/compsci

I'm also a math major who turned into CS. There are already a lot of good recommendations here so I won't add much, but I suggest reading Code: The Hidden Language of Computer Hardware and Software by Charles Petzold.

It's not very technical and it's not in-depth, but I think it's an amazing book. You probably won't learn anything you're actually going to use by reading it, but I think this book has a unique ability for expressing the underlying facts that make us all find computer science so fascinating. It's a very fun read and it will give you a very broad overview of how computers work and how software gets compiled and ultimately ends up moving electrons around to make the magic happen.

u/MmmCurry · 5 pointsr/compsci

Not specific to algorithms or even to CS, but Douglas Hofstadter (Gödel, Escher, Bach, I Am a Strange Loop) touches on many of the logical fundamentals in a relatively layman-digestable manner.

I wouldn't call him easy reading compared to Sagan or Kaku, and don't know a "pop computer science" equivalent to those two, but you definitely don't need a CS or math degree to get through GEB. Whether it's on-topic enough here is definitely questionable.


Edit: I haven't read it, but from the description this one by Thomas Cormen looks like it might be close to what you're looking for: Algorithms Unlocked.

"This is a unique book in its attempt to open the field of algorithms to a wider audience. It provides an easy-to-read introduction to an abstract topic, without sacrificing depth."

From the TOC, it looks like it's probably fairly light on math but gets into code or pseudocode relatively quickly. I still wouldn't call it pop-CS, but if that sounds like a fit, maybe give it a shot!

u/devrelm · 1 pointr/compsci

Thank you! And that thread contains one of the books I was thinking of, The Mythical Man Month. I know it's more computer programming than computer science, but this is more the type of book I would like to find. Something that's more about the art of computer science as a whole rather than specifics on a certain aspect of it. Still, there are many great suggestions both in this thread and the Stack Overflow thread.

u/UncleMeat · 5 pointsr/compsci

I cannot recommend the book Code by Charles Petzold highly enough. This is the book that solidified my love of computer science and hits most of the major topics in CS in an easy to understand and thoroughly entertaining way. By the end of the book you have walked through the fundamentals of how to build and program a rudimentary computer and had fun why doing it!

u/sporksporksporkspork · 9 pointsr/compsci

I highly, highly, highly recommend reading Skiena:

It's really readable, and is a really good refresher. I've actually reread it a couple times now (like, actually read like a novel, unlike what you do with CLRS), and each time I've been glad I've done so.

u/0PointE · 10 pointsr/compsci

Absolutely and unequivocally The New Turing Omnibus. There are all sorts of scientific questions and solutions along with proofs and use cases over the years usually surrounding computer science. I loved everything I'd learned in this book and still remember learning what the Hamming Distance is and how it helped us develop a reliable way to communicate at such long distances with satellites and other such things. I have a copy sitting on my shelf next to me atm so I got a photo for you to check out the TOC if you wish. Truly a light favorite of mine.

u/ontoillogical · 4 pointsr/compsci

The Sipser book mentioned elsewhere is pretty much all of those topics. You may also be interested in a good algorithms book. CLRS has been recommended elsewhere, but Kleinberg & Tardos is probably more accessible. I am using both in school right now, and I find CLRS as a better reference (more breadth) and K&T better for exposition.

u/Ishmael_Vegeta · 3 pointsr/compsci

can't believe he non-ironically linked to that jeff atwood blog post where he makes a complete fool of himself.

I will eat my fucking shoe if Jeff Atwood actually read this book he gives an amazon referral link for on his blog page.

> Like all the software engineering books I recommend, this book has a timeless quality. It was originally published in 1979, a shining testament to smart people attacking truly difficult problems in computer science: "I can't find an efficient algorithm, but neither can all these famous people."

> Unfortunately, not all NP-complete problems have good approximations. But for those that do, I have to wonder: if we can get so close to an optimal solution by cheating, does it really matter if there's no known algorithm to produce the optimal solution? If I've learned nothing else from NP-complete problems, I've learned this: sometimes coming up with clever cheats can be more interesting than searching in vain for the perfect solution.

u/Helix_van_Boron · 3 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. This is the book that made me decide to switch my college major to CS. It gave me great insight to what I was manipulating inside of a computer. It might not be very helpful to an experienced computer scientist, but I recommend it to anybody that's interested in getting into CS. And even if you understand all of the concepts in it, it's still an interesting read.

u/_--__ · 1 pointr/compsci

Wow. That's quite a range - normally those would be covered in two, three, or even four courses. Any wonder the pass rate is so low.

It's difficult to recommend anything sensible for the whole course - I'd have suggested Rosen - I have found it somewhat useful as a reference text later on - but it seems to be unpopular with amazon reviewers. For the latter part (finite-state machines etc), Sipser is a common course textbook - but it may be too advanced for a starting point (though might be worth getting so you can get ahead before you get to that part of the course, which will almost certainly be the trickiest).

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/theskimonkey · 0 pointsr/compsci

"Will it be harder for me to get summer internships at companies like Microsoft and Google?"

The fact that you ask that question at all puts you ahead of most people in your class.

I would recommend The Pragmmatic Progrommer (

Find out what languages you will be using in your future classes, and start learning/playing around with them now.

Also, as a general college rule; within the drop period, if you can tell the professor is horrible/not your learning style and there is any way possible to take the class with a different professor, drop the class and take it with the other professor.

Good luck and have fun!

u/jadae · 6 pointsr/compsci

I'd also recommend Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. I recently finished reading this book after having it recommended by a post on Reddit a year or two ago. It starts off with a lot of basic information, covering Morse code and braille, and moves along in the development of code and hardware up until you actually create a functioning computer in the book. The later chapters were harder to get interested in, but the first 3/4 was very excellent and actually covered more than my computer architecture class in undergrad.

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.

u/curious_webdev · 3 pointsr/compsci

Not all on topic as "CS" books, more general programming, but here's a short list. I also suggest the opening chapter or two of a lot of books for stuff you don't know but are interersted in. They're generally just nice easy to read introductions.

u/fj333 · 3 pointsr/compsci

Read either of these books, and your CS education will become much much easier. The first book is lighter reading, the second book is intended to be studied over two full semesters, but I finished it in about 2 months because I enjoyed it so much.

Truth charts should be fairly easy to understand conceptually. To understand how they relate to hardware may be more difficult at first. In the second book about, you are told at the start that a NAND gate is a magical piece of hardware that can do one very simple boolean operation. From that magical gate, you can then learn how to build every other kind of boolean gate, from which you can build ALU's, RAM, CPU's, and a computer. A NAND gate can be made out of many things; you could make one out of legos. The reason NAND in computer hardware is so cool and so scalable is because it is tiny.

u/cbarrick · 1 pointr/compsci

> Michael Sipser's book, Introduction to the Theory of Computation

SIPSER!! That book was great, and I think anyone wanting to learn more about CS should read him, cover-to-cover. No matter what you want to do with computers, a good understanding the theory will always help.

u/willardthor · 21 pointsr/compsci

During my studies, in my research (information-flow security), and as a working computer scientist, I practically never find use for analysis.

Most of (theoretical) computer science is based on logic and algebra, and deals with discrete structures.

That is not to say that real analysis has no home in computer science. Far from it.

Any aspect of computer science that deals with randomness touches on analysis. These aspects resort to probability theory to reason about randomness. And probability theory applies analysis. Example aspects in computer science include cryptography (pseudo-random number generators, hash functions, etc., which rely on number theory), formal verification (model checking, which sometimes uses continuous-time Markov chains as models), information theory (channel coding and signal processing), and machine learning (Bayesian networks).

And, as I am sure you know, optimization and analysis of algorithms (smoothed analysis).

You might find the following books interesting:

u/fatso784 · 1 pointr/compsci

Anything can be self-taught if you're determined enough. Buy a good book on algorithms ( and watch That book is definitive, so if you finish it and learn it, it's all you'll really need to get ahead of most programmers.

In terms of math, you'll pick it up. Recursive and Big-O notation were surprisingly easy to understand after watching a few lectures, not even looking at the book.

u/Ars-Nocendi · 2 pointsr/compsci

Algorithms in a Nutshell

Use it as a practical rendition of the math-rigorous material presented in CLRS, even though it does not cover everything CLRS has to offer. Nevertheless, it should make your journey a lot easier.

As for Math reference, try getting through [Concrete Mathematics] ( Legend says that if you can get through that book, you are prepared in math rigor for most of algorithmic materials. XD

u/ApokatastasisPanton · 1 pointr/compsci

It's incredibly expensive as well.

For more affordable resources :

u/sandsmark · 4 pointsr/compsci

firstly, let me do some self-advertisement for /r/artificial (we could use more traffic). :-)

secondly, Artificial Intelligence: A Modern Approach is generally considered to be one of the best introductions to artificial intelligence. It isn't all that up to date anymore (the current edition is almost six years old by now), but it gives you a very solid foundation for learning about AI (algorithms, history, etc.). And it is very well-written, imho. (though you might find it cheaper elsewhere.)

u/poincareDuality · 10 pointsr/compsci

For designing programming languages, my favorites are

u/nziring · 2 pointsr/compsci

All the suggestions above a really good! I'd like to suggest a couple more; I
think these are necessary for a Computer Science god, if not a programming one.

Concrete Mathematics by Knuth & Patashnik

Computers and Intractability by Garey & Johnson.

That's all for now...

u/coned88 · 8 pointsr/compsci

The best way to learn these structures is to simply make a list of the ones you need to know, which can be done via looking at wikipedia and

One you have that list, take any language you know and program them without copying the code/psudocode from the web/book. You should know the general idea of the structure and be able to implement it. Then have a worker function that populates and tests all of them.

This books is also quite good if you want a book

  • Queue
  • Stack
  • Linked List
  • Dictionary/AA
  • Hash Table
  • Heap
  • Binary Tree/search tree
  • Binary Tree
  • etc...
u/Kaelin · 4 pointsr/compsci

Study design patterns and read books by the masters.. Find the books that are recognized by the community as "the best". For example "Effective Java" is one of the best books on writing Java beyond the basics.

The Pragmatic Programmer: From Journeyman to Master

Design Patterns

u/fellipebl · 1 pointr/compsci

As far as I know to understand how a computer works it's also important to understand the algorithms running on that.

I'd suggest you to read something light like this ( and after that read things like Knuth ( (

MIT's introduction to CS is also a nice begin (

u/SaturnMoth · 2 pointsr/compsci

Elements of Computer Systems: Building a Modern Computer From First Principles is a great introduction to a wide range of computer science topics. It covers principles from the bottom up, and is a good place to start for things like computer architecture and programming language design. It doesn't cover things like networking or algorithms/data structures, but if you're interested in systems, this is a great book.

u/SidewaysGate · 7 pointsr/compsci

When I was a young teenager I read (most of) a book called Code.

This was absolutely fantastic. It didn't just talk about programming or about software, it explained the concept of a code and the work that we do from the ground up. It literally started from light bulbs and switches and went to microprocessors and programming languages. This is the book that helped me bridge the software-hardware cognitive gap. Eventually it got to be too much for me, but in my defense I was 12-13 at the time. Even so, the parts that I did get through stuck with me.

I'm going to go back and reread it.

The book isn't going to cover design patterns or microservices, but IMO it's best thing to give computer scientists context on what we're doing here from an engineering perspective (with sipser as the book from the mathematical perspective)

u/aaarrrggh · 1 pointr/compsci

Stuff like this is quite frustrating actually.

You're declaring me a hopeless case? You're literally arguing that we should have comments in our code that reference individual people in the company and why we did things based on conversations we've had with them? Yeah, comments like this are 100% pollution and I would delete them without question the moment I saw them.

Comments in general are pollution though, yes. And it's not just me that thinks this - there's an entire section in the book literally called "Clean code" that talks about this exact thing:

Honestly, I'd love to know where your confidence comes from. I'm sure your code is messy if it requires comments all over the place. Mine generally just doesn't require them. Consider this:

  • Comments often go out of date. Often people go into the code, update something, then forget to update a comment. This leads to comments that are lies - this is more harmful than no comment at all

  • If you rely on comments instead of writing code that is self documenting, it encourages you to write messy code.

  • If you enforce a no comments rule, it forces you much more to have to write code that doesn't need comments. Code never goes out of date - if a method no longer does what it once did, you rename the method and viola! Up to date.

    My code is generally far easier to read than the code most people write. I know this because I've spent years working on it, and I've pair programmed with some great people - learning things every step of the way.

    You know, just because someone disagrees with you, doesn't make you right. It's quite obnoxious to declare me a "hopeless cause", especially when I've had the benefit of working with BOTH methods of working, which I guarantee you haven't.

    I also guarantee I'm a much more experienced developer than you. Let's just call it a hunch.

    Keep on trying though.

    *Edit article for you to read:
u/incompetentrobot · 1 pointr/compsci

It's very doable, especially if you have both an academic and practical bent. I'm a self-educated programmer and I work on cutting-edge software alongside top-tier CS academics.

I saw in another comment that you have a strong programming background. Here's a great algorithms text:

u/plbogen · 1 pointr/compsci

CLRS is an awful book for learning or even gauging interest. Despite its love in AoA classes it is really more of a reference book than an instructional one. Not to mention not all of Computer Science is about algorithm analysis. I'd suggest reading Skiena instead, it is well presented and interesting. It will do much more for gauging his interest in AoA than wading through CLRS will.

In a way CLRS is like telling a kid thinking about going to grad school for Roman History to go read all of "The Decline and Fall of the Roman Empire" first. You are setting him up to be turned off.

u/CandyCorns_ · 3 pointsr/compsci

I knew a colleague that did this exact thing. She was a PhD student with a Mechanical Engineering undegrad, and it worked out just fine for her.

Honestly, with your (assumed) mathematical background, just buy this book, read and understand all of the fundamentals, the data structures, the sorting algorithms, and maybe touch on some of the advanced topics, and you'll be ready.

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/soroun · 1 pointr/compsci

If we're recommending books to help grasp the concept, I'd like to recommend this one that's meant for use with a free online course called Nand2Tetris. It walks you through the building of your own 16-bit computer from the ground-up, teaching you many of the ins and outs of what makes a computer tick. /u/reeecheee suggested Code: The Hidden Language of Computer Hardware and Software by Charles Petzold, which is also an excellent read, but if you're more of a hands-on learner, try this:

The Elements of Computing Systems: Building a Modern Computer from First Principles, by Noam Nisan

u/asiefker · 5 pointsr/compsci

The Pragmatic Programmer ( It's a great resource to help you think about your career and how working as a software developer is different from what you learn in school.

u/ElectricRebel · 5 pointsr/compsci

For compilers:

u/the_omega99 · 5 pointsr/compsci

You should mention more specifically what kinds of problems you're looking for. Do you want to merely implement well known algorithms? Design novel algorithms for specific problems? Analyze the efficiency of a given algorithm?

For the first two possibilities that I listed, you should not need solutions (and there's no single way to write code and many algorithm problems have multiple solutions). Instead, you should be writing test suites that can let you know when they code works. This isn't 100% perfect because it's always possible that there'll be some edge case that you'll miss (although test suites should be rigorous to try and avoid this), but it'll do well for most cases and is how you'd work in the real world.

And of course, you can always try and formally prove novel algorithms work. There's isn't really an easy way to check for answers here, though, since there's more than one way to prove many algorithms (and some algorithms are extremely complicated to prove). So there isn't really anything you can do besides having a more experienced person check your answers. If you have a low volume of questions, Reddit might be able to help (find specific subreddits). But otherwise expect to have to pay for a tutor (if you're in school, your university might have something free available for CS help).

As for some actual advice, I thought Kleinberg's Algorithm Design was very good for creating novel algorithms. It has lots of problems. No answers, though.

You're right that it's pretty hard to find quality books that come with solutions (even if it's just one solution to a problem that has many possible solutions). It seems that most texts of a reasonable quality are targeted towards universities and thus don't make answers available so that universities can use the problems in assignments. I wish more books would do something like giving answers to even numbered problems. It's a major pain in the ass for those who would try and self-learn something.

u/insane_chocolate · 5 pointsr/compsci

Cambridge recommends its CS students to read The New Turing Omnibus: 66 Excursions in Computer Science before starting their studies. It's quite interesting and gives a good intro of what CS is.

u/craiig · 5 pointsr/compsci

I agree, CLSR is too much like a dictionary and not enough like a story. For my graduate algorithms course, we used Algorithm Design by Kleinberg and Tardos. I could actually read this book because they took the words to explain the formulas they used. I'd recommend it! Not only did I learn about algorithms, but it also helped with reading formulas. Website Amazon Link

That said, they focused more on algorithms than on data structures, so this might not be for you.

u/mattandersen · 4 pointsr/compsci

You may be beyond this book, or it may not be full of the harder science of logic design but every CE or CS student should have a copy of CODE from Charles Petzold. It will probably fill in a lot of gaps of a formal classroom discussion of processor architecture, and it provides a great set of tools to explain the concepts to others. Which for me has always been the benchmark of understanding.

u/bonesingyre · 9 pointsr/compsci

Introduction to Algorithms, 3rd Edition

Surprised no one mentioned this one. This book goes into more depth on the topic, including theory and derivations of formulas.

Its definitely one of the best Algorithm books out there.

I would also look into Coursera, specifically Stanford's algorithm design class, it uses the above textbook and goes into more of the design of algorithms vs. here is how they work.

u/pg1989 · 2 pointsr/compsci

At first blush, this book seems pretty decent. However, my personal favorite discrete math textbook/reference is Concrete Mathematics. I would consider it a step up in difficulty from a canonical text like Rosen, but it does a great job of explaining some difficult subjects, especially recurrence relations.

u/shwestrick · 9 pointsr/compsci

Sipser's Introduction to the Theory of Computation is an excellent book with three major parts:

  1. Automata and Languages
  2. Computability Theory
  3. Complexity Theory

    Each part builds on the previous. I highly recommend working through it.
u/hextree · 1 pointr/compsci

Insertion in O(1) is definitely possible. Because you can just add to the end of a linked list in O(1) time. This would result in duplicates though, which would make for a more complex deletion.

The wiki page for Hash Tables seems to be accurate. If you want more depth, any reputable Algorithms book (e.g. should be ideal.

u/sid78669 · 18 pointsr/compsci

I would recommend reading Design Patterns: Elements of Reusable Object-Oriented Software. That book will give you the majority of design knowledge you would gain at this point in your career from college.

u/bsmartt · 10 pointsr/compsci

I haven't heard of any of these. Unless you're pressed for time, read one of the classic DS&A books, and then read some c++ stuff. There are lots of ds&a books that are partially or fully language agnostic, they only have code blocks in pseudocode. This provides a very important opportunity for you to implement stuff in whatever language you like. Here's the one I used in college:

u/sweml · 10 pointsr/compsci

Clean Code: A Handbook of Agile Software Craftsmanship it explains how to write elegant code in a simple and clear manner

u/BuxOrbiter · 1 pointr/compsci

There's a ton of instructional videos on Coursera, YouTube, etc. As I learned C++ many years ago, I can't really recommend a specific course. But find one that works for you.


I strongly recommend you learn the C [not C++] programming language first. It's super simple, and you won't get bogged down by all the bells and whistles which complicate C++. Plus, most of the complicate C++ language features won't be used in a data structures course.

The C Programming Language, K&R

The book is about C, not C++. However, the C programming language is incredibly simple, and you'll learn the core concepts without all complexity of C++. This book is a quick read [185 pages, not including the reference section]. As you're coming from Python you'll need to understand types, memory allocation, pointers, and headers.

The Google C++ Style Guide

Google's C++ style guide is battle tested. It offers than mere style recommendations, but also many lessons in avoiding pitfalls in C++ code.

Effective Modern C++, Scott Meyers

Read this book 5 years ago. Can't recommend it enough. It covers more advanced features and pitfalls. So you can read it after you have a basic grasp.

C++ Reference

Incredibly dense technical reading, but the more you read the easier it becomes.

u/th3byrdm4n · 5 pointsr/compsci

The Pragmatic Programmer: From journeyman to Master. It's a philosophical book that shares wisdom on how to think like a programmer. . . Not in the pure sense making you a better Computer Scientist (in terms of thinking algorithmically) but if you write code you should give this one a thumb through.

u/Nihili · 2 pointsr/compsci

I'd recommend

u/Mazer_Rac · 3 pointsr/compsci

Code by Charles Petzold. It starts with Morse code and works up to a fully functional computer processor. All while written in a prose style. Very nontechnical and a great read.

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/erisson · 2 pointsr/compsci

I would suggest reading these books:

u/sindrit · 3 pointsr/compsci

Skip Calculus (not really useful unless you do fancy graphics or sound generators or scientific stuff). Discrete mathematics is what you want to look at for CS. You might want to move on to a linear algebra course from there.

Get the CS specific University textbooks. Here are some to get you started.

u/kruchone · -1 pointsr/compsci

This really isn't a textbook, but it might as well be: Gödel, Escher, Bach

All of these suggestions are spot on, I can second Sipser's textbook, as well as Structure and Interpretation of Computer Programs.

u/ismtrn · 4 pointsr/compsci

This book(Code: This hidden language of computer hardware and software):

It explains it all! The title makes it sound like it is about code, but it is really about how a computer works(code is of course a part of it). It is very easy to read and does not really require any prior knowledge, it actually starts by explaining how a flashlight works and builds on that.

I simply can't describe how awesome it is, you should really read it!

u/dangkhoasdc · 3 pointsr/compsci

Concrete Mathematics - one of the best textbooks to study discrete math

u/sciencifying · 4 pointsr/compsci

It is hard to answer this question without knowing your background. If you are really interested, I suggest you read this book (especially part three) on Artificial Intelligence so you can understand how automated theorem proving relates to AI. In my opinion, automated theorem proving is not a particularly interesting problem in modern artificial intelligence, since representing real-world problems using symbolic logic is almost always impractical.

However, the problem is still interesting for computer assisted theorem proving, and boolean satisfiability is a very important problem in the theory of computation.

u/e_vampire · 2 pointsr/compsci

Either Introduction to Algorithms

or Algorithm Design

Those books were the textbooks for the algorithm and data structures courses, respectively during my bachelor and master's degree in computer science, I find both of them really well written.

u/chindogubot · 8 pointsr/compsci

I get teased by people that I am one of only 3 people in the world to have actually finished this book, one of those being the author and the other being the person who recommended to me, but Godel, Escher, Bach: An Eternal Golden Braid was pretty interesting. It covers the profoundness of the topic and is interspersed with Alice in wonderland style dialog that comes at the topic from another angle. Deep but captivating overall.

On a tangent, Goedel's theorem and Turing's incompleteness theorem, along with some other mathematicians who have gazed out over the edge of logic and gone somewhat mad are covered in the BBC documentary Dangerous Knowledge.

u/guy_gold · 1 pointr/compsci

The first few chapters of Introduction to Algorithms are great to understand the basics Big-o and other asymptotic notation.

u/pixel_sharmana · 2 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software
by Charles Petzold

The book starts with very simple binary logic, then how to create your own transistor out of bent wire and batteries, building logic gates out of transistors, creating your own assembly language, then implementing BASIC on top of that, and finally screens and pixels

u/PM_ME_UR_OBSIDIAN · 6 pointsr/compsci

The first step to doing research is ingesting whatever knowledge already exists. With that in mind:

u/mcscottmc · 9 pointsr/compsci

This book explains how computers work from first principles (electricity and switches on up). Very easy to read. I am surprised it hasn’t been mentioned yet.

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/stepstep · 1 pointr/compsci

It doesn't take much math to understand the basic principles of how a physical computer works (starting at the level of transistors, and not including all the software that runs on it). OP said he/she wants to work from the level of transistors upward, so he/she doesn't really need to know any chemistry or physics. In fact, OP doesn't even need much electronics knowledge (e.g. inductance, impedance, etc.), since most of the construction of a computer will be at the level of digital logic gates. "Engineering" is a broad term that encompasses all of these topics, so I won't consider it separately. Software development and computer science might be relevant once OP has conquered his/her quest of understanding how a physical computer works and wants to study higher abstractions, but this is not prerequisite knowledge. industrial engineering will be useful only if OP actually wants to cheaply build practical computers out of silicon, but this is probably not the goal.

By the way, I second /u/azimuth's suggestion: Code: The Hidden Language of Computer Hardware and Software.

u/peschkaj · 2 pointsr/compsci

Check out Charles Petzold's Code. It starts with some basic ideas and moves through digital communication and then into the wonderful world of computering.

u/samort7 · 3 pointsr/compsci

The hardest two classes in my studies were Discrete Structures and Analysis of Algorithms. Mainly because they were so math-heavy.

u/nomad42184 · 4 pointsr/compsci

If you're interested in this subject and want to broaden your arsenal of known NP-complete problems, I highly recommend the book "Computer and Intractability" by Garey and Johnson. It's a classic text in this area and a great place to go when you're faced with a new problem and are looking for something to reduce to it. Wikipedia also has a nice list of NP-complete problems. To become "efficient" at reductions, you really just have to do a lot of them, to recognize the types of patterns that commonly occur and the types of widgets that tend to work. Of course, even then, sometimes coming up with a reduction for a new problem is incredibly challenging — often such things lead to papers if the problem you're reducing to is an interesting one whose hardness has not yet been proven.

u/flebron · 37 pointsr/compsci

Introduction to Algorithms (CLRS). I bought this book the year before I started university. I've now moved into my own place, and the first book I brought was that one. There's no technical other book I've read that many pages of. It's really filled with information, and presented in a rigorous, formal way.

Definitely my best purchase, books or otherwise.

u/jackthehobo · 3 pointsr/compsci

Gödel, Escher, Bach: An Eternal Golden Braid is a fantastic read.

Hofstadter discusses Gödel's incompleteness theorems, computability, AI, music, and art, and generally about how complexity arises out of self reference.

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/stevenxdavis · 27 pointsr/compsci

I just started reading CODE by Charles Petzold and I've really enjoyed it so far. It's an accessible take on the basics of computer science that doesn't just focus on computers themselves.

u/bcguitar33 · 24 pointsr/compsci

Introduction to Algorithms is an absolute classic. It covers the vast majority of the algorithms that a good programmer "should" know (and goes over much of the math in the appendix in the back). Every school I've worked with has at least 1 course using this text, and typically each company doing anything interesting has at least 1 copy floating around somewhere.

I have a bunch more books that I could personally recommend if you have a specific thing you're trying to learn, but in terms of books that are 100% canon, that's the only one that comes to mind for me.

u/darkroastbeans · 8 pointsr/compsci

Props to you for working through a textbook with python! Someone recommended Concrete Mathematics to me a while back as a good resource for really sharpening my math skills. Knuth is one of the authors, and while the book does not discuss programming at all, I'm interested to see how, as a programmer himself, he explains mathematics.

A Khan video series would be awesome. I think there would be a lot of demand for it.

I think the thing I have the most trouble with is understanding math notation. For some reason all the symbols really confuse me. I can learn a new programming language syntax with relative ease, but when I try to learn math syntax, my mind just goes blank. Not sure why this is an issue.

u/lotion_booger · 7 pointsr/compsci

Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin, amazon link on the [internet] (

u/rabuf · 2 pointsr/compsci

Why not just buy the real thing? $54 new from Amazon, maybe less elsewhere, certainly less used. Or go to a library and check out the book. Even if you're not in school, most universities allow non-students (in the US, can't speak for other countries) to obtain library cards and check out books.

u/fiskfisk · 8 pointsr/compsci

Code: The Hidden Language of Computer Hardware and Software from Charles Petzold does just that, starting from the simplest form and going through all the different steps we took to get to where we are today. Well worth a read!

u/reeecheee · 1 pointr/compsci

This book was absolutely awesome and will take you logically from a flashlight to logic gates to an entire computer with no EE background:

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold

u/jacob1044 · 1 pointr/compsci

Introduction to Algorithms. I still have the 2nd edition within arms reach at work.

EDIT: after re-reading your post, i see you already have a copy :)

u/spacez320 · 1 pointr/compsci

I don't know if it's been suggested yet, but this is the algorithms book. ...although it's not for the faint of heart (or those scared of math).

u/llimllib · 6 pointsr/compsci

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



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/ThreeHolePunch · 2 pointsr/compsci

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

u/Xiroth · 7 pointsr/compsci

Operating Systems Concepts (AKA The Dinosaur Book) is generally quite well regarded.

Artificial Intelligence: A Modern Approach tends to be the text of choice for teaching AI to undergraduates - it doesn't deal with many of the most modern techniques, but it establishes the common functionalities.

u/azimuth · 8 pointsr/compsci

Also Code: The Hidden Language of Computer Hardware and Software. It literally starts out with telegraphs, and shows how, if you are sufficiently crazy, they can be assembled into a working computer. Then it shows how you can write software for your telegraph-relay-cpu. A great read.

u/JAPH · 2 pointsr/compsci

$50 for the 2006 edition? I'm not sure I would count that as "incredibly expensive".

But yes, the CLRS is a must-have. Almost every intermediate-high level algorithms course I've seen at any university uses the CLRS.

I've also used Kleinberg's Algorithm Design back for some 200-level algorithms course.

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/jschm · 19 pointsr/compsci

AIMA. A real treasure trove!

u/mrmoreawesome · 0 pointsr/compsci

I would highly recommend this book, if you are at all interested in algorithm design and analysis.

[EDIT] Just finsihed a very difficult algorithms course, this was my bible.

u/entropicone · 11 pointsr/compsci

Riding on your top post coattails...

The Elements of Computing Systems and Code by Charles Petzold are exactly what you want.

Code goes through number systems, basic information theory, circuits (from gates on up), memory, machine code and programming languages, all with accessible diagrams and explanations.

TECS has you build an actual working computer from the ground up.

u/blindingspeed80 · 2 pointsr/compsci

Try this book for a start, then move on to the algorithms book dethswatch mentions.

Out of curiosity, given that you seem to be generally unaware of what CS entails (assuming you're not just trolling), what is the basis of your interest in the field?

u/DisintegratedSystems · 3 pointsr/compsci

Introduction to Algorithms is, by far, the most important book during my time at college. If you ever pursue a career in computer science, most places will ask questions directly out of this book for interviews (examples for me: Google, Microsoft, several stock-trading companies, Dilliards, and Amazon).

u/quixotidian · 15 pointsr/compsci

Here are some books I've heard are good (I haven't read them myself, but I provide commentary based on what I've heard about them):

u/Bonejob · 1 pointr/compsci

Get yourself a copy of the Pragmatic programmer. This will help you with fundamentals that all professionals should know but few do. Not all of it is programming. "Each tip is drawn from experience, told as concrete advice, and related to others to form a system"