Best products from r/computerscience

We found 78 comments on r/computerscience discussing the most recommended products. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 168 products and ranked them based on the amount of positive reactions they received. Here are the top 20.

Top comments mentioning products on r/computerscience:

u/CodeTamarin · 2 pointsr/computerscience

The Stanford Algorithm book is complete overkill in my opinion do NOT read that book. That's insane. Read it when you've been doing programming for a while and have a grasp of how it even applies.

Here's my list, it's a "wanna be a decent junior" list:

  • Computer Science Distilled
  • Java/ C# / PHP/ JS (pick one)
  • Do some Programming Challenges
  • SQL
  • Maybe build a small web app. Don't worry about structure so much, just build something simple.
  • Applying UML: and Patterns: An Introduction to Object Oriented Anaysis and Design Iterative Development
  • Head First Design Patterns
  • Clean Architecture
  • Refactoring: Improving the Design of Existing Code
  • If you're interested in Web
  • Soft Skills: Power of Habit , A Mind for Numbers , Productivity Project


    Reasoning: So, the first book is to give you a sense of all that's out there. It's short and sweet and primes you for what's ahead. It helps you understand most of the basic industry buzz words and whatnot. It answers a lot of unknown unknowns for a newbie.

    Next is just a list languages off the top of my head. But you can pick anything, seriously it's not a big deal. I did put Java first because that's the most popular and you'll like find a mountain of resources.

    Then after some focused practice, I suggest grabbing some SQL. You don't need to be an expert but you gotta know about DBs to some degree.

    Then I put an analysis book that's OOP focused. The nifty thing about that book, is it breaks into design patterns nicely with some very simple design patters to introduce you to design patterns and GRASP.

    Then I put in a legit Design Patterns book that explains and explores design patterns and principles associated with many of them.

    Now that you know how code is structured, you're ready for a conversation about Architecture. Clean architecture is a simple primer on the topic. Nothing too crazy, just preps you for the idea of architecture and dealing with it.

    Finally, refactoring is great for working devs. Often your early work will be focused on working with legacy code. Then knowing how to deal with those problems can be helpful.

    FINAL NOTE: Read the soft skills books first.

    The reason for reading the soft skills books first is it helps develop a mental framework for learning all the stuff.

    Good luck! I get this isn't strictly computer science and it's likely focused more toward Software Development. But I hope it helps. If it doesn't. My apologies.
u/Joecasta · 12 pointsr/computerscience

If you aren't doing well in your current CS courses, I'd highly recommend you focus on your university's courses and do well in them before deciding to bite off more than you can chew. Do some research and look for very basic coding books, not ones like this:

Look for a bit more like this:

This depends on what language you are currently learning right now. Don't worry about entering contests and participating in projects or open source coding until maybe second or third year in especially if you haven't had any prior experience. Don't rush yourself into this, you need to make sure you absolutely understand the basics before going into things like hackathons or being very concerned about internships. Take your time learning, and don't enroll onto too many online courses if you think that you can't handle it. Yes, online courses can be helpful, and will only be really helpful if you treat them like real classes. I would advise against code academy or khan academy to learn languages since I've gone through them and they never helped me really grasp CS material better than a book and actual coding. Key here is to code as you go through a book, or else you'll never learn how to actually code. Do tons of simple programs and if you don't understand code bits, don't get frustrated. Copy paste the code, and use a debugger (a bit more advanced but very very helpful) to go through step by step what the code is doing.

Main Points:

  1. Don't rush, learn slowly, fully understand each concept before moving on

  2. This won't be very intuitive for most people, it's like learning an entirely new thing, but you will eventually hit a wall and learning gets much much easier in the future.

  3. Don't do more than one or two online courses, and don't be too concerned about doing any projects or competitions you likely won't be able to understand most project code or any, same goes for competitions until you at least fully know how to code in an industry standard high level language such as C/C++ or Java.

  4. There's a lot to do, but don't overwhelm yourself, pause every now and then and focus on a single task

    Best of luck to you, remember to enjoy the process, and keep in mind that while you might not like coding, CS isn't coding. It's the principles that underlie what we can do with code. A lot of it comes from really basic logic, you will be surprised in the future how easy some things can be to understand with basic step by step thinking.
u/serimachi · 5 pointsr/computerscience

It's so great you're being so proactive with your learning! It will definitely pay off for you.

I like other's suggestion of Clean Code, but I fear as a first year that it may have mostly flew over my head--not that it would at all hurt to read. For a first year student specifically, I'd recommend either of two books.

Structure & Interpretation of Computer Programs, also known as The Wizard Book and free on the link I just sent you, is a famous textbook formerly used in MIT's Intro to Computer Science course. However, it's conceptually useful to programmers on any level. If you really, seriously read it and do the exercises, it's gonna give you a rock-solid foundation and shoot you ahead of your peers.

It uses Scheme, a quote-on-quote "useless" programming language for any real-world purpose. That's arguable, but the important thing about the book is that it's really edifying for a programmer. The skill it helps you develop is not the kind that will directly show on your resume, it's nothing you can point to, but it's the kind of skill that will show in your code and how you think and approach problems in general. That said, the book has exercises and the MIT site I linked you to has labs that you could potentially show off on your github.

Code: The Hidden Language of Hardware and Software is much more approachable, is not marketed specifically for programmers, and does not contain any exercises. Read it, though, and you'll find you have a huge boost in understanding the low-level computing classes that your classmates will struggle with. What is basically does is show the reader how one can build a computer, step by step, from the very basics of logic and switches. It's readable and written for a casual audience, so you may find it easier to motivate yourself to finish it.

SICP and Code, despite both being extremely popular, can be a bit difficult conceptually. If you don't fully understand something, try reading it again, and if you still don't understand it, it's fine. Everyone experiences that sometimes. It's okay to move forward as long as you feel like you mostly get the topic. Don't let the perfect be the enemy of the good.

Best of luck to you, and be excited! It's thrilling stuff.

u/heres_some_advice23 · 2 pointsr/computerscience

Mechanical Keyboards: High quality keyboards with tactile feedback. They have a real impact on your typing speed, and also make programming less boring. They are very commonly used by programmers. Mechanical keyboards have different "switches" that make different tactile sounds. "Blue Switches" are considered the most popular. Here are some examples:

Gaming Mouse: Same usage as keyboards, but not as useful. Its mostly just nice to have.

Textbooks: In computer science, there are one or two textbooks per subfield that are considered to be "Bibles" of the subfield because of their importance. If your bf just started cs, he won't have any interests in any subfield. However, the subfield of algorithms is more or less all encompassing. More crucially, knowledge of algorithms is the most important (and arguably only) thing you need to know to get a job. If you want to work at a top CS company like Facebook or Google, you need to know your algorithms very well in order to pass the interviews. There are two books I can recommend for this:
These are the most prolific algorithms books (imo). Another important book is "Cracking the Coding Interview":

This is the "Bible" textbook for passing tech interviews. Every computer science student I know at school has at least skimmed through this book once.

Personally, if I were starting in CS, I would appreciate either the mechanical keyboard or the "Cracking the Coding Interview" textbook the most. Good luck!

u/kaisercake · 2 pointsr/computerscience

Current industry professional and interviewer. Just got out of one in fact.

Certs won't do much for you. I know some interviewers who actually look down on people who get certs. I personally don't care at all if you see them. Chances are, I don't know enough about the process to get that specific certification to give it proper weight. Did it take a few hours of training? Several weeks? Years of experience? I'm not going to look that up when I have work to do along with better things to grill you on for your resume.

Speaking of those better things: Projects and internships. Projects done OUT OF ASSIGNED CLASS WORK are always more valuable than just showing off that you can do assignments. Everyone will also push the importance of internships. They're great. They show that you know how to work on a team in complicated systems with a different set of demands and people.

School in NY? I'm an RPI grad. Transferred in from HVCC. Big roadblock you won't hear about is how big company interviewers typically completely disregard your CC experience. They didn't care about my 4.0 there.

"Okay, but what's your GPA here?"

In a field/school where many people get internships after their sophomore year, it puts us at a big disadvantage, especially for the schools who do job fairs during your first semester. You won't have a GPA you can tout there. Several online applications require your 4 year university GPA. Doing a 2-3 program will slightly alleviate the issue...but now you graduate a year later. There's a myriad of hidden problems no one will tell you about because they're too busy pushing positives. Also, it's more complicated than just "being a sophomore" again. Feel free to PM me, I wrestled way too much with my administration while I was there.

You'll have some challenges ahead. But two things will help your resume immensely:

  • INTERNSHIP At least if you can get one.

  • Does the school have an open source program you can do for "research?" We had RCOS, a two hour a week class you could do for credit or research. It helps you fill out your resume with interesting and more complicated projects that aren't assigned.

  • Portfolio What good is all this if you can't show off your work? Make a GitHub. We Look.

  • Interview skills. Maybe not on the resume directly, but you need to be able to sell yourself. Practice an elevator pitch for job fairs. Practice doing interview questions. Cracking the Coding Interview is a great resource to see what to expect from us.
u/-jp- · 2 pointsr/computerscience

In my experience, languages are pretty easy to pick up once you know one. I think you'd be better off sticking with Java and exploring concepts, algorithms, data structures and certain frameworks.

When I was starting I got a lot out of the GoF Book. It's a C++ book but they don't really use any C++ features that are hard to translate to Java. I've heard good things about Head First Design Patterns too but haven't read it.

As far as Java goes Spring and Hibernate are two great libraries to be familiar with, since you'll encounter them in the wild pretty regularly.

If I were to suggest something you might not have learned, consider installing VirtualBox and using it to run Ubuntu. Familiarity with Linux will give you a big leg up and Ubuntu is a pretty good way to ease into it. Plus it has packages for a ton of different programming languages so you can experiment with any that catch your fancy.

u/[deleted] · 2 pointsr/computerscience

As those letters paired with CS/EE/etc are typically placed at the top of a resume, and used to classify applicants (from the Job-Fairs that I've been to), I do see the importance in that sense. I have seen rare cases where English majors are working in AI software projects for instance. I don't know the implications of BS vs BA. There may be a state law or accreditor of the university which defines what those mean. Most of what I see is CS, EE, and MIS in the software field. CS is basically Discrete Mathematics, Data Structures, Heuristics, and Programming Lang. Theory. Learning these topics well, and to apply them in software day-to-day, can easily fill four years. Knowing these topics puts you on a higher tier with respect to other coders (hobbyists, self taught and the like), but they can be acquired outside of uni. It's just easier in uni if you find math hard or in some cases impossible (in uni you do learn how to learn though). A&M for instance had smaller classes in the summer, with more intimate relationships with the professors (that was my main attraction). Always sit-in on classes in session to see what they are like, before committing to the uni. Most uni's post a class schedule on the course page, or elsewhere on the web.

Also every CS program should have a algorithmic problem solving component. What I mean by this is that either there should be for credit courses, or associations/student groups of problem solvers. Some UT schools for instance have monthly programming algorithmic problem solving contests. These allow for the application of theory, but also they are the only method that I know of, for stress-management and preparation for some job-interview screens.

To segway a bit, and give you an idea about what CS is (because no one told me this when I was applying years ago):
All software programming uses CS. If anyone proposes otherwise, they are wrong. Computer Programs in-fact follow a series tautological propositions from predicate logic (from discrete mathematics). So if the propositions that the computer follows are incorrectly written, or illogical, this is a bug. The logic that a program follows however exists outside of the program, and outside of the computer in a mathematically rigorous form. What I mean is that the logic can be much more efficiently reasoned about, and solved on paper using techniques from CS theory. Much of what CS teaches, in addition to a structured, encyclopedic like bag of tricks, is to express these propositions (things which are true or false), mathematically, and correctly, then write programs which follow the inferences proven by that process. Why is this necessary? After a certain point, algorithms reach a sophistication where they cannot be adequately reasoned about while created & encoded on the computer as a single activity (QuickSort is such an example). Going from nothing to being confident that such algorithms will work without error, and further that the algorithm is more efficient than others, takes CS theory. If the school does not teach this, then run. Some good books covering the vast majority of uni CS (that I used in course-work, still use to this day in the real world, and have NOT exhausted) are:


u/Danori · 2 pointsr/computerscience

To learn C++ as someone completely new i recommend this series on youtube:
This will introduce you to the language and alot of the concepts that carry over to other languages as well. After you go through that whole series as boring as it may sound i really recommend you buy a textbook and read through it, doing whatever programming projects / exercises that interest you. My recommendation for a textbook would be C++ primer:

Edit: Also, I would recommend as your first language you start with Python. Its becoming more and more popular as an introductory language and its well suited to get you past the initial learning curve. I personally haven't worked with the language too much myself so I cant provide you with any recommendations. Good luck, comp sci is an incredibly interesting subject and is useful in so many aspects of work. :)

u/rainerdeal · 3 pointsr/computerscience

C: Just start practicing with it. "The C Programming Language" is commonly regarded as the best textbook by young and old programmers alike. Hands on experience is the best especially when supplemented.

Linux: Get VM software and install a few flavors. Poke around. Get used to using a package manager, BASH, and Git. Your TA or professor may be able to help you with Virtual Box. The beauty of a VM is that you can pretty much do whatever you want without risk of damaging your own machine, so don't be afraid to experiment. You could try better VM software like VMWare or Parallels. You could also try dual booting.

On your host machine, I would recommend completely ditching whatever shell Windows uses these days. Install Cygwin so you can keep practicing BASH commands. And you can also get a package manager, Chocolatey.

u/kecupochren · 1 pointr/computerscience

What’s your background?

Going by some curriculum sounds like a sure way to learn it all properly and in-depth. Though also to get bored easily.

The beauty of being self-taught is that you can learn areas that actually interests you. There are of course fundmentals that you need, for which I recommend the vastly popular and very high quality free course from Harvard - CS50x

Taking it will give you a solid foundation to learn whatever you want by yourself. Whether it’s backend, webdev, mobile apps, data science... maybe even games/graphics, but for those you need deep math knowledge.

Sure there will be gaps here and there but CS50 really does a great job at teaching you where to look. I myself took it 6+ years ago and it was the perfect gateway into this career.

On another note, get this book - Code. It takes you from morse/braile code through logic gateways all the way up to understanding everything (from hardware/logic point) about basic computer.

u/joshi18 · 3 pointsr/computerscience

You are welcome :).
This is one of the best book to learn programming It's freely available and the class at MIT which uses this is here
Peter Norvig's advice
Programming Pearls :
At you can solve questions and get interview calls.
You may also want to brush up your design skills as few interviewers might ask those kind of questions. might be a good place to start.
I think is a good place to look for nicely explained solutions and you can find almost all the questions ever asked in a software engineering interview at

u/yanalex981 · 4 pointsr/computerscience

I taught myself bits in high school with "C++ for Everyone". Despite its rating, I thought it was good 'cause it has exercises, and I did a lot of them. Works really well for laying foundations. I didn't go through the whole book though, and knowing the language is only part of the battle. You need to know about algorithms and data structures as well. For graphics, trees seem really useful (Binary space partitioning, quadtrees, octrees etc).

After university started, I read parts of "C++ Primer", which was when the language really started making sense to me. You'll get more than enough time to learn the required amount of C++ by next fall, but CG is heavy in math and algorithms. If your CS minor didn't go over them (much), my old algorithms prof wrote a free book specifically for that course.

For using OpenGL, I skimmed the first parts of "OpenGL SuperBible". For general graphics, I've heard good things about "Mathematics for 3D Game Programming and Computer Graphics", and "Real-Time Rendering".

Careful with C++. It may deceptively look like Java, but honestly, trying to write good idiomatic C++ after years of Java took a major paradigm shift

u/tophatmcbabs · 2 pointsr/computerscience

I feel like you're going to learn quite a bit in the course of your degree; however, if you can't wait... I'd recommend this book called Hacking: The Art of Exploitation. The first 70 or so pages are a primer in programming in C. The book then goes into exploit techniques, networking (starting with the OSI model and then going into topics such as sockets, network sniffing, denial of service, port scanning), shell code, countermeasures, and it ends with cryptology.

check it out:

keep in mind: this isn't easy, light reading. you will need to work your way sometimes pretty slowly to get a handle on it. so don't be discouraged. reading dense material is a great skill to have, though, and will surely help you in your studies. although, seeing as how you worked your way through a c++ book, you're probably already pretty good at it.

u/Wittgenstienwasright · 1 pointr/computerscience

I am sorry but that is simply not true. The Admins on this site are quite careful about such things. Without the age of the child it is impossible to provide a suitable answer. At eleven possibly, as I recommended in my DM, perhaps Rpi and surrounding projects as shown on the site, at thirteen, then Python and later on as experience dictates. Please do not berate a fellow father trying to educate people especially for free. Good luck and before your teenage tries anything new, perhaps you can find this physical tome.

The first chapter is about communication.

u/samsmith453 · 1 pointr/computerscience

What interests you about CS? What would you like to build / know / work on?

I would always recommend starting at the very bottom when it comes to learning computer science. Build a knowledge of computing based on what is really happening under the hood, in the hardware. This is the approach I took and it gave me a great foundation, and accelerated my career!

This book is great:

I have just started a youtube series on understanding hardware aimed at beginners which you might find helpful:

u/go3dprintyourself · 2 pointsr/computerscience

this is a great video tutorial for C++ in my opinion (helpls if you have some java or c experience)

This is my data structs and algs book my class used. It basically have full examples of everything you're going to do in Java and has good tips. Big book but easy to parse for information.

Here's a good link to some software that helps visualize algorithms. (I believe this is the right link)

Hopefully those links work.

u/Hydrotechnics · 2 pointsr/computerscience

Yeah you are right. I made the same mistake! Nice catch.


Would love someone to chime in and define the exact difference between the heap and stack.


I learned compilers through a programming language engineered by one of our professors, where he tried to simplify the language so that the most important concepts could be highlighted. His language only utilized a stack, so there is definitely room for some nuance here (regarding real programming languages).


I highly recommend his book on Assembly Language and Computer Architecture Using C++ and Java

As well as his book on Compiler Construction



u/Bozo_The_Brown · 1 pointr/computerscience

Let's convert 65 to A:

01000001 // 65

00110000 // "A" bitmap 8x8 pixels

This can be accomplished in hardware with an EEPROM, similar to the way you implement the 7-segment display in Ben's series. But instead of 4 bits representing a number decoded to 7 bits for the display (4 to 7), this is 7/8 bits representing the char code decoded to 8x8 bits for the display (7/8 to 64).

You could have 8x EEPROMS that each represent a row of output. Feed the same 7/8-bit address (char code) into all of them, and connect the outputs to a grid of lights. This is just for one character.

For a more practical idea, maybe connect the char code output to an arduino that does the decoding and renders on your computer monitor.

Conversion in software follows the same principle, just mapping the char codes to bitmaps. Not something that would be fun at the assembly level XD

Code by Petzold
and N2T for more fun.

u/w3woody · 12 pointsr/computerscience

Read about the topic.


Set yourself little challenges that you work on, or learn a new language/platform/environment. If you're just starting, try different easy programming challenges you find on the 'net. If you've been doing this a while, do something more sophisticated.

The challenges I've set for myself in the recent past include writing a LISP interpreter in C, building a recursive descent parser for a simple language, and implementing different algorithms I've encountered in books like Numerical Recipes and Introduction to Algorithms.

(Yes, I know; you can download libraries that do these things. But there is something to be gained by implementing quicksort in code from the description of the algorithm.)

The trick is to find interesting things and write code which implements them. Generally you won't become a great programmer just by working on the problems you find at work--most programming jobs nowadays consist of fixing code (a different skill from writing code) and involve implementing the same design patterns for the same kind of code over and over again.


When I have free time I cast about for interesting new things to learn. The last big task I set for myself was to learn how to write code for the new iPhone when it came out back in 2008. I had no idea that this would change the course of my career for the next 9 years.

u/NeonSpaceCandy · 2 pointsr/computerscience

Learn how to Google for the resources that are already available to you. Be comfortable using the command line, pick your favorite IDE (VS Code is my favorite), learn on your own, develop your own projects (could possibly lead you to research opportunity), lead in university projects, outside of class time attend meetups with professionals already in the industry.

I tend to agree with the notion that college will only be as valuable as the amount of effort you put in to learn. The college degree is just the baseline for the lowest common denominator.

Eventually when it comes time for the interviewing process, you should definitely review Cracking the Code. To truly set yourself apart in addition to the CS workload, do the above mentioned.

u/Pandasmical · 11 pointsr/computerscience

I enjoyed this one!
Code: The Hidden Language of Computer Hardware and Software

Here is someone else's detailed review on it

"Charles Petzold a does an outstanding job of explaining the basic workings of a computer. His story begins with a description of various ways of coding information including Braille, Morse code, and binary code. He then describes the development of hardware beginning with a description of the development of telegraph and relays. This leads into the development of transistors and logic gates and switches. Boolean logic is described and numerous electrical circuits are diagramed showing the electrical implementation of Boolean logic. The book describes circuits to add and subtract binary numbers. The development of hexadecimal code is described. Memory circuits are assembled by stringing logic gates together. Two basic microprocessors are described - the Intel 8080 and the Motorola 6800. Machine language, assembly language, and some higher level software languages are covered. There is a chapter on operating systems. This book provides a very nice historical perspective on the development of computers. It is entertaining and only rarely bogs down in technical detail."

u/idmontie · 1 pointr/computerscience

There are many branches in Computer Science to get into and there are many different types of programming you can do. Web development is pretty easy, or maybe try modding your favorite game? Mobile applications are pretty popular.

If you give me a general idea of something you would like to do, I can point you in the right direction of programming languages and skills you should learn.

Just a note: learning different languages is easy if you have a solid foundation in algorithms and data structures. I would recommend reading Introduction to Algorithms right off of the bat. It might be a little too advanced for you if you are coming in with absolutely no experience in programming or CS, but maybe after you get your feet wet a little, you can look into it. Or check out this free ebook on data structure and algorithms.

EDIT: changed the recommended ebook.

u/drkwok2 · 5 pointsr/computerscience

Hey when I studied for the exam this book and this guy are extremely helpful, he also does free YouTube lectures, good luck!

u/NothingWasDelivered · 1 pointr/computerscience

If you want a good, understandable explanation of this, read [Code]( Code (Developer Best Practices) by Charles Petzold by Charles Petzold. He basically walks you through building a CPU from the ground up.

It's an excellent laypersons explanation of how computers work at a very fundamental level. How you can use relays (and transistors, their analog) to read 1's and 0's and make decisions based on that. From there you get to machine language (physically encoded into the chip), and everything above that is basically abstraction.

u/tcron22 · 4 pointsr/computerscience

My girlfriend got me Cracking the Coding Interview my sophomore year of college.

It showed me what to expect in future technical interviews, and gave me something to look forward to. It's not and end all, be all by any means, but it's a good starting point. Eventually he should look into leetcode for these sorts of things, but this book was recommended to me early on, and I really enjoyed it.

u/wannabeproprogrammer · 3 pointsr/computerscience

Computer processors have historically been in powers of 2 in terms of instruction sets because of boolean logic and how it relates to binary numbers. If you were building a very rudimentary computer, i.e a circuit which is just on and off then you can say that the circuit only represents 2 states. This can be encoded as just 0 or 1. In fact this is what transistors do, they hold either an on or off state. Now let's say you want to represent more than two states? How would you go about that with what you already have? Well you introduce another transistor. Now you can represent 4 states. This is done following the same logic as before, so these 4 states can be 00, 01, 10, 11, where each digit corresponds to the on or off state of one of the transistors. In fact you can repeat this pattern ad-infinitum and keep adding more and more on-off holding transistors. What you'll find is when you do this, is that the number of states that your rudimentary CPU can hold will always correspond to the number of memory units that can be accessed at any time. This will be 2\^N hence the 32-bit and 64 bit numbers which are powers of two. The 32 and 64 correspond to the number of unique states that can represent a 0 or a 1 or an off or on, or rather the memory that can be accessed at any time.


Now in modern CPU's this can get a lot more complicated in terms of architecture as in reality CPU's may have million of transistors and have multi-cores but are still considered 32-bit or 64-bit. In reality the 32-bit and 64-bit in this context relates to the instruction set architecture of the CPU. This relates to the format of instructions that the CPU handles to perform operations i.e. in a 32 bit architecture, the CPU will handle instructions of 32 bits long which determine whether you're accessing memory, writing a value, triggering an interrupt signal and so on. If you really want to understand how CPU's work I recommend reading this book. It explains how CPU's work from a very rudimentary base all the way up to how machine code translates to actual CPU instructions. Hope this helped.

u/InvalidGuest · 7 pointsr/computerscience

I'd recommend this one:

It's very enjoyable to read and definitely increases one's understanding of how computer conceptually function. Petzold also makes it very easy to understand what he is saying in his explanations.

u/cluedit · 3 pointsr/computerscience

I really liked the chapter that teaches C in Hacking: The Art of Exploitation, second edition because it also goes over the assembled instructions your CPU is executing and that helps build an understanding of how memory corruption exploits work. Seeing as you're interested in security, that might be a useful path to take.

Note that modern operating systems and compilers have protection against these basic exploitation techniques so they won't work out of the box on a modern machine. You can disable those protections on just about any linux distribution and the book comes with a live linux cd.

u/CS_Student19 · 8 pointsr/computerscience

Tough call. I mean it sounds like you're setup pretty comfortably, so you don't really need any material goods. That's a great place to be.

Perhaps instead of some gift that can be purchased and wrapped in a box, you could do something else.

This might give you some ideas or perhaps they could find something unique, like an autographed copy of "Intro to Algorithms". I'm really just throwing stuff against the wall at this point, but maybe it might spark an idea.

u/FranciscoSilva · 8 pointsr/computerscience

Well, for AI, you should prepare for a world of math, math, math, along with computer science and programming (obviously). Understanding an historic vision of A.I. is also important, so I would consider starting to read something like this particular book: Artificial Intelligence: A Modern Approach! This a college-level A.I. book, so be patient if there are things you don't fully understand at first. Work hard and you can do anything you set your mind to!

u/fff1891 · 2 pointsr/computerscience

Some schools don't cover much in the way of discrete math, formal languages, automata, or proofs... at least not very rigorously. My opinion here is colored by my own experience (and subsequent disappointment, but thats another story), and I'm sure most schools sort of exist on a spectrum. YMMV.

Some books that come to mind (might not be to surprising if you spend a lot of time on CS forums):

[Introduction to the Theory of Computation](

CLRS Introduction to Algorithms


I think it's interesting to look at the history of computer science-- read about Bertrand Russel, David Hilbert, the Vienna Circle, Alonzo Church and his students (Alan Turing was one). Computer Science as an academic discipline was kind of born from the questions mathematicians and philosophers were trying to ask in the early 20th century. It's just as much about language as it is about mathematics. I could probably write a wall of text on the topic, but I'll just leave it at that. :)

u/MoxMono · 2 pointsr/computerscience

If you want a really good basic grasp of the concepts, CODE by Charles Petzold is a great read.

u/gfawke5 · 1 pointr/computerscience

I recommend you take a look at this book. It builds a computer from scratch, and the author has made it extremely easy to follow. You could even apply what you learn there on a physics sandbox and make your own alu/cpu.
Hope this helps.

u/macemoth · 1 pointr/computerscience

Here's a PDF which I used as reference and which covers most concepts:


For more depth, this book is often seen as "the bible" of this topic:


If you're looking for exercises, this could be a good resource (especially designing Turing Machines is a thing of practice):


If primitive recursive functions are also relevant for you, I can strongly recommend this video to you:

u/Daersk · 12 pointsr/computerscience

I started to teach myself C, and this book has been an unbelievable resource. It starts pretty basic, but it gets into the meat of C pretty quickly.

u/mech_eng_lewis · 1 pointr/computerscience

Read this book:

It goes from learning to count in binary to writing flip-flops, adding circuits, muxes, comparators, shift register etc. There's hardly any maths you just need to know basic algebra and how to add and multiply. The book teaches you the rest.

If you like hardware you'll love this book.

I'm an Electronic Engineering student AMA.

u/MrNetTek · 3 pointsr/computerscience

CS is almost pure math, especially beyond the freshman year. You can learn to code with almost no advanced math. So, what's up with that?

Numerous---everyday---apps are actually very simple coding, which do not require much math. This lures people who code into thinking math is not required in programming. That is a false assumption. This is the rub...anything advanced in technology requires equally advanced mathematics. AI, machine learning, data science, robotics, graph theory, geometric modeling, parallel architectures, electronics, telecom transmissions, cryptography, etc., etc., etc., all require advanced mathematics skills. The list goes on forever.

You'll never be a great programmer without at least a strong foundation in discrete mathematics (maybe you'll be a elementary app coder or maybe you'll be a low-level developer). Anyone saying you don't need math in CS is wrong. Anyone saying CS is easy is mistaken. For those that claim all you need is 3rd or 4th grade math, are 3rd or 4th grade coders. At least 1/3 of people drop out of computer science degrees---stating it was just too difficult.

I suggest to everyone to pick up The Art of Programming, by Knuth (and/or Introduction to Algorithms, from MIT Press). Come back and tell us if you think CS is hard, and...if math is required in programming. Find a quiet corner to cry in....the books are as intense, as they are inspirational.

My advice? Take a few discrete mathematics courses. You may have a job one day that requires you to know the cost of nodes in a tree, based upon the mathematics of recursion and exact powers: Example - That isn't 3rd grade math. Stare at this gem for a while:

The good news live in the best possible era to learn CS. Millions of resources are at your disposal. You just need to be dedicated.


u/Ikor_Genorio · 2 pointsr/computerscience

This book. It is one of the most famous books on Algorithms and Datastructures. Has good exercises, but I am not sure about the solutions, though I am sure you can find solutions for them on the internet.

u/mogeb · 1 pointr/computerscience

There's this book called "Cracking the coding interview" which is very popular. I actually had questions straight out of this book while interviewing for some companies. On Amazon:

u/ZenBound · 2 pointsr/computerscience

I found Think Like a Programmer to be very helpful. The book uses c++ as it's main language and has a lot of varying exercises.

Here you go

u/dlp211 · 1 pointr/computerscience

This is the Intro to CS course at Stanford. It is IMHO one of the best online courses available. It is where I got my start with programming. After you watch/do this course, purchase and read Data Structures and Algorithms in Java

That should be more than enough to get you through the summer and be very prepared for the fall term. And don't get hung up on languages, you will find that once you learn one, you can very easily pick up most others.

Does not pertain to functional languages and paradigms, but pay attention in math and these won't be hard to pick up either.

u/terryducks · 2 pointsr/computerscience

Start with this book CODE

It lays the groundwork to understand how everything works. From numbering systems to digital gates to how a computer works.

If you liked that, great continue on. If not, CS may not be the right spot for you.

CS is algorithms and problem solving. It's working in teams and communicating. It's writing. It's dealing with complexity and decomposing it to very simple steps that the "idiot computer" can do.

i've spent 20+ years as a code slinger.

u/chocotaco1981 · 2 pointsr/computerscience

it's good for getting your foot in the door as a basic repair tech or helpdesk.

AFAIK Mike Meyer's book has been, and still is, the gold standard for books:

u/j6keey · 1 pointr/computerscience

In terms of AI, I used this text for one of my AI/machine learning topics. Would recommend Artificial-Intelligence-Modern-Approach

Some other suggested readings from that topic:

Introduction Data Mining

Artificial Intelligence

u/noah_guy · 2 pointsr/computerscience

For algorithms and runtime I would recommend the CLRS textbook

u/vitalijzad · 4 pointsr/computerscience

About Algorithms, a great book is Introduction to Algorithms by Cormen et al.

About programming I like PHP 5 Power Programming by Andi Gutmans, Stig Bakken, Derick Rethans. I know that it is old, but newer books aren't that good.

u/urnlint · 2 pointsr/computerscience

I do not read textbooks as a hobby like some people seem to, but this book seems to have a large chunk of my 5 years of college (yeah for a bachelor) into a single book. Code