Best computer science books according to redditors

We found 9,284 Reddit comments discussing the best computer science books. We ranked the 1,900 resulting products by number of redditors who mentioned them. Here are the top 20.

Next page


AI & machine learning books
Systems analysis & design books
Cybernetics books
Information theory books
Computer simulation books
Human-computer interaction books

Top Reddit comments about Computer Science:

u/ilknish · 482 pointsr/learnprogramming

Code: The Hidden Language of Computer Hardware and Software.
It may be a bit more lower level than you're looking for, but it'd be a great foundation to build off of.

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/_a9o_ · 188 pointsr/cscareerquestions

Refactoring: Improving the design of existing code

Design Patterns

Working Effectively with legacy code

Clean Code

How to be a programmer

Then there are language specific books which are really good. I think if you read the above, slowly over time, you'll be in a great place. Don't think you need to read them all before you start.

u/HeterosexualMail · 187 pointsr/programming

We did something similar as well. The labs were tons of fun. I remember having to run a couple dozen lines of code through the CPU cache on a test once, including some sneakery of using code as data at one point. I do appreciate having done it, but I'm not sure how much practical lasting value that really contributed.

That said, for those who are interested in this there is The Elements of Computing Systems: Building a Modern Computer from First Principles, more commonly known as "NAND to Tetris".

Petzold's Code is excellent as well.

Edit: Actually, while I've suggested those two let me throw Computer Systems: A Programmer's Perspective into the mix. It's a book we used across two courses and I really enjoyed it. We used the 2nd edition (and I have no issue recommending people get a cheaper, used copy of that), but there is a 3rd edition now. Being a proper text book it's stupidly priced (you can get Knuth's 4 book box set for $30 more), but it's a good book.

Anyone have suggestions similar to that Computer Systems's text? I've always wanted to revisit/re-read it, but could always used a different perspective.

u/Dab_on_the_Devil · 156 pointsr/2meirl4meirl

It's 'cause the internet has shifted the capacity of our brains away from deep focus and towards shallow multitasking. It's why we do shit like close Reddit on our computers then pull out our phones and open Reddit again without thinking about it. If you're really curious to learn more about it, try to stay focused long enough and read The Shallows; If you're really interested in pushing back then look into meditation.

u/TheAmazingSausage · 128 pointsr/androiddev

Android team lead here, I've been working with Android commercially since 2009 (before Android 2.0 was released) and have worked at, or done work for, some big companies (Mozilla, Intel, Google, HTC...). I was in a very similar situation to you in that I was a web development and was bored, I'd been playing with Android in my spare time; I got my first break by volunteering to do an android app at the company I worked for, and went from permanent employee to contractor fairly quickly after that and have been doing it ever since.

First thing to say is that if you can get your currently company to pay you to learn android and stay with them, that's a win win for both parties (you get to learn something new without a drop in salary and don't have to interview and they don't lose a good member of staff).

In terms of moving company, I don't know where you are based, but here in the UK I often see junior Android contract roles coming up for £200-300 a day. Failing that it's just a case of applying for lots of poisitions and really knowing your stuff.

What I would look for in a junior is to have read, understood and put in to practice Clean Code ( and Design Patterns ( I would expect you to have a good understanding of basic Java and OOP; a working understanding of MVP or MVVM (,; understand threading; know about all the major parts of Android (Services, Broadcast receviers, Activities, Fragments etc); know how to write a custom view; be able to efficiently design a layout in XML and correctly apply styles and themes; understand the support libraries - what they contain, why they exist and what they are used for (and also when you don't need them); understand the difference between unit testing and integration testing and know what makes for a good test; the Gradle build system is a really nice way of defining your project build - knowing the fundamentals is essential.

A few of the main libraries I'd expect you to know and have used would be OkHttp (, Retrofit (, Butterknife (, Picasso ( or some other image loading library, GSON ( or Moshi ( or some other json parsing library

If you want to level up then there are loads of advanced topics surrounding Android. Any of these following topics will take a while to learn, but will be worth it and will look good in interviews and on you CV:

u/Any0nymouse · 125 pointsr/HowToHack

Actually, start with some programming, then move on to "The Art of Exploitation" it's the best book on "hacking" I've ever used...

u/falcojr · 103 pointsr/programming

If you're really serious about learning, I HIGHLY recommend the book Code: The Hidden Language of Computer Hardware and Software. It's basically a book that 'builds' a computer from the ground up, starting with simple morse code type stuff through the wire, and each chapter just keeps building until you get to assembly and some higher level language stuff at the end. You do have to think through (or glaze over) some stuff in a few chapters, but it's a very eye opening book.

Edit: Grammar

u/CrazedToCraze · 98 pointsr/ProgrammerHumor

+1, don't just circle jerk and pretend you're above learning patterns before you even understand why they exist. They can be abused, but they exist for good reasons.

I strongly recommend going over Head First Design Patterns to anyone interested.

u/BullockHouse · 95 pointsr/MachineLearning

I mean, only if you think we're tens of thousands of years away from powerful, general-purpose software agents. If you survey actual experts, they're pretty uncertain (and vulnerable to framing effects) but in general they think less than a century is pretty plausible.

So it's closer to somebody looking at the foundational research in nuclear physics and going "hey guys, this is going to be a real fucking problem at some point."

Which is pretty much what Einstein did (and started the Manhattan project and a pretty significant intelligence operation against the development of a German nuclear weapon).

EDIT: Also, if anyone's interested, the same blogger made a rundown of the opinions of lumaries in the field on AI risk in general. Opinions seem to be split, but there are plenty of bright people who know their shit who take the topic seriously. For those who aren't familiar with the topic and think everyone's just watched too much bad sci-fi, I recommend Bostrom.

u/PM_ME_YOUR_MAKEFILE · 75 pointsr/learnprogramming

CODE by Charles Petzold is the book to read to understand computers at a base level. It literally starts at a single bit and moves all the way up the stack. I cannot recommend this book enough for someone starting out.

u/koeningyou666 · 73 pointsr/netsecstudents

In my opinion; every book in this bundle is a bag of shit.

Here's a list of reputable books, again in my opinion (All links are Non-Affiliate Links):

Web Hacking:

The Web Hackers Handbook (Link)


Network Security Assessment (Link)

Please Note: The examples in the book are dated (even though it's been updated to v3), but this book is the best for learning Infrastructure Testing Methodology.


Hacking: The Art of Exploitation (Link)

Grey Hat Hacking (Link)


Hacking Exposed: Linux (I don't have a link to a specific book as there are many editions / revisions for this book. Please read the reviews for the edition you want to purchase)


I recommend the online course "Metaspliot Unleashed" (Link) as opposed to buying the book (Link).


The man pages. The book (Link) is a great reference and looks great on the bookshelf. The reality is, using Nmap is like baking a cake. There are too many variables involved in running the perfect portscan, every environment is different and as such will require tweaking to run efficiently.

Malware Analysis:

Practical Malware Analysis (Link)

The book is old, but the methodology is rock solid.

Programming / Scripting:

Python: Automate the Boring Stuff (Link)

Hope that helps.

u/d4ntr0n · 72 pointsr/cscareerquestions

Introduction To Algorithms is kind of the gold standard. It's heavily detailed, well written, and I'm pretty sure they put the word "Introduction" in there as a joke(it's 1292 pages).

u/Lhopital_rules · 64 pointsr/AskScienceDiscussion

Here's my rough list of textbook recommendations. There are a ton of Dover paperbacks that I didn't put on here, since they're not as widely used, but they are really great and really cheap.

Amazon search for Dover Books on mathematics

There's also this great list of undergraduate books in math that has become sort of famous:

Pre-Calculus / Problem-Solving

u/LateBroccoli · 64 pointsr/compsci

Long answer is here

Short answer is "stop whining and learn while you still can"


Someone who didn't

u/Magical_Gravy · 61 pointsr/badcode

My bad.

In Object Oriented Programming (OOP), there are lots of design patterns that end up getting repeated all over the place. You might have run in to the factory pattern, or perhaps the builder pattern?

If you can understand and notice these patterns, it means you can re-use old code more effectively, because code to handle a pattern in one place is probably very similar to code to handle a pattern in another.

In addition, if you're discussing a problem with somebody, it means you can refer to the patterns by name as a sort of shorthand notation for "put it together like this". Saying "use a decorator" is a lot quicker and easier than describing what exactly "a decorator" is from scratch every time.

The "Gang of Four" are four Computer Scientists who were among the first few to notice that these patterns kept popping up, and wrote a pretty well known book describing about 20 of the most common ones.

In this specific instance, the builder pattern would probably have proved useful. Rather than having a single, monolithic constructor, you create a separate "builder" class.

Character chararacter = new Character(xx, yy, life, kpph, kpyl, kvin, krak, kgr, kptgr, kbb, havepph, havepyl, havevin, haverak, haveya, isevented, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, IE)

Can become

Character character = Character.builder()
.initialCoordinates(x1, y1)

This is waaayyy more readable (especially if you're assigning values as arguments, rather than named values. If you ever called createFrom(...) with a string of numbers, it'd be very difficult to work out which number was what), and a lot easier to lay out properly. It also means you can gather arguments for creation gradually over time rather than all at once.

Also looking more closely, and as /u/PM_ME_YOUR_HIGHFIVE pointed out, they're not actually using objects at all, which would be a good place to start.

u/srnull · 54 pointsr/programming

Sorry to see this getting downvoted. Read the about page to get an idea of why /u/r00nk made the page.

I have to agree with one of the other comments that it is way too terse at the moment. I remember when we learnt about e.g. d-latches in school and it was a lot more magical and hard to wrap your head around at first then the page gives credit for. That and, or, and xor gates can be built up from just nand gates (the only logic gate properly explained) is also glossed over. Either go over it, or don't show the interiors of the other logic gates.

The interactive stuff is really neat. Good work on that.

Edit: If anyone reading wants to learn this stuff in more detail, two good books are

u/Little_darthy · 49 pointsr/programming

Edit: I didn't realize the link was just the first chapter. If you really liked it, I do suggest purchasing it. You can find it all online for free, but I do highly recommend just having this book. It's a fun read.


Here's an excerpt that I really love right from the beginning of the book.

>>All programmers are optimists. Perhaps this modern sorcery especially
attracts those who believe in happy endings and fairy godmothers.
Perhaps the hundreds of nitty frustrations drive away all
but those who habitually focus on the end goal. Perhaps it is
merely that computers are young, programmers are younger, and
the young are always optimists. But however the selection process
works, the result is indisputable: "This time it will surely run," or
"I just found the last bug."

Here's a link to a Physical copy [on Amazon] ( if you want it.


edit: Bonus Dilbert Comic

u/Hodorgasm · 44 pointsr/cpp
u/Nezteb · 43 pointsr/compsci

Some book recommendations:

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/indrora · 42 pointsr/programming

I think one of the most profound articles I read about just what makes a computer "work" is Brian Kernighan's article, "What an educated person should know about computers". It's a decade old now and was developed into a book of similar name. (Amazon link)

Another was sitting down and reading Code: the hidden language of computing (Amazon link) and actually walking through it. The book is coming up on 20 years old, but Petzold (who has taught many a developer how to do fancy tricks with their silicon) really sat down and wrote a book that anyone could understand and come away from feeling better off and more knowledgeable about the way our world works. This is the book I refer new programmers and old knitting circle nannies to read when they ask how a computer works.

u/greentide008 · 42 pointsr/compsci
u/TroyDowling · 41 pointsr/physicsgifs

If you mean near the anode of the battery between the two humps of wire, I don't think so. Looks like the reflection on the hump whizzing by the camera real fast. However, in an inductive load like a motor, if not handled, you can expect to see sparks when the circuit is broken.


u/Shuank · 40 pointsr/argentina

Creo que mucha gente se confunde ser autodidacta con hacer algun cursito de como hacer una web y darle con eso.
Para llegar a cierto nivel, tenes que aprender computer science, teoria y trabajar en cosas que te permitan aplicar esa teoria.
Tenes que saber ver un algoritmo y poder calcular la complejidad, tenes que entender que son las patrones de diseño y cuando conviene aplicar tal o cual.

Tenes que entender como funciona OOP, pero tambien tenes que aprender algun lenguaje funcional, te va a hacer un programador más rico.

Tenes que entender de Unit Testing, automated testing, Integration testing.

Los dos libros que más me ayudaron cuando empecé en computer science son :

Y ir codeando mientras vas leyendo y aplicando las cosas es fundamental.

Me parece que la diferencia entre ser autodidacta es que no tenés esa vara minima que te da la facultad, asi que depende de vos que tan crack queres ser y si estas dispuesto a poner el laburo y a aprender cosas constantemente.
La información esta en internet o Amazon, no hay ningún secreto.

u/myfavoriteanimal · 40 pointsr/compsci

Code, by Charles Petzold

Here it is on Amazon.

u/jaimeandresb · 38 pointsr/compsci
u/rusty_shaklefurd · 37 pointsr/Cyberpunk

A central concept in cyberpunk and hacker culture is the idea of planned obsolescence: Corporations can make more money if they get you to buy their products multiple times instead of just once. This leads to a world where everything is discarded and the wealth gap is very clear between the people who have the new and the people who have the old.

The fact of the matter is that DNA is not our friend. Humans were built to spread our seed and be destroyed. We are a tool that DNA uses to extend it's own life. The human body is amazing in many ways, but it's amazing like a disposable razor is amazing. There's no mechanism to prevent cancer, no mechanism to prevent the development of back problems, and no mechanism to prevent it from withering away like a rotten fruit when it's purpose of reproduction has been served.

The implementation of transhumanism might be flawed, but so are all human endeavors. That's what cyberpunk is about: Figuring out how to deal with a world ruled by technology. Sometimes it doesn't go as smoothly as we imagine. The message of transhumanism is still clear, though: DNA doesn't own this planet any more, we do, and the name of the game is going to stop being reproduction and start being the enjoyment of existence.

Since you seem to be basing your understanding almost entirely on fiction, let me recommend some reading

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/NorthwestWolf · 37 pointsr/programming

Along those same lines I can recommend: The Elements of Computing Systems. With the book as a guide you build a whole computer, starting with NOR to build the basic logic gates, and finishing by writing a simple OS.

u/veryreasonable · 35 pointsr/RationalPsychonaut

As one of the people who commented on that thread, I feel the need to respond to this as rationally as humanly possible.

For starters, let's clear up the difference between fractal mathematics, fractal woo, and what Douglas Hofstadter might call fractal analogy.

  1. From the wiki - Fractal Mathematics would be the study of "natural phenomena or a mathematical sets that exhibits repeating patterns that display at every scale" as well as the study of self similarity and iterated functions. While it has grown complex and vast, the studies of fractals and their geometry started out as literally what you say it isn't: people asking questions about self-similarity in nature and asking how to describe it mathematically.

  2. Fractal Woo would be, as OP said:

    >“Everything big is just like everything small!” they exclaim, “the universe is self-similar!”

    ...and then using such logic to thereby justify whatever silly energy-Reiki-mystical-connectedness-telepathy-de-jour they want.

  3. Fractal Analogy (my term, but run with it) would be seeing patterns in the world which are, indeed, self similar, as tons of stuff in nature is. This includes plant and animal system, as well as consciousness and human experience. The reason I mention Douglas Hofstadter is that he is a PhD physicist who literally used fractal mathematics to predict some pretty nifty real world stuff 35 years before it was confirmed - but Mr. Hofstadter is also an incredibly enjoyable author who muses at length about cognitive science and AI research, often using the analogy of self-similar shapes to help describe what we understand of consciousness in a way that most layman readers can understand. Even if you are not a very capable mathematician, I highly recommend his Godel Escher Bach, which uses fractals and loads of other creative stuff to help conceptualize how the "mind" arises from the brain.

    As well, Chaos Theory - the study of how immensely complex patterns emerge from seemingly simple preconditions - is full of fractal mathematics. Given that the universe is absolutely packed with iterated functions and self-similarity almost everywhere we look, I think you can absolutely take the point of view that the universe is fractal in nature, especially when you are in a self-induced state where your brain makes a lot of connections you might normally overlook or not even bother to think about.

    My point is that discussing things in the universe as self-similar is useful to mathematicians and non-mathematicians alike; using the word "fractal" to describe natural systems that exhibit those familiar patterns might not be perfectly correct, but it's not itself offensive or an affront to reasonable discourse. I manage a business; so what's your problem if I visualize the structure of my company as a fern leaf with departments and employees as branches off the main stem? What would be the issues of discussing how incredible human cellular morphology really is with my biologist roommate, and citing some cool research someone decided to do about fractal geometry in the way our bodies build themselves?

    EDIT: OP's edit makes it more clear his statements were more about irrational folk seeing the universe as a single continuous fractal (that would be the "fractal woo"), and that he is not denying the existence of fractal-like patterns in nature, or that using fractal models can be useful in understanding phenomena. Sorry for any confusion and thanks for the discussion!

    EDIT2: /u/ombortron commented pretty well in regards to the utility of the concept of fractals in scientific discourse and otherwise:

    >The universe itself doesn't have to be a fractal for fractals to be important.

    >Fractals are quite common in our reality, and as a result, that means they are an important facet of reality, and as such they are a legitimate and common topic of discussion amongst people, and this is particularly true of people who do psychedelics.

    >Does this mean the universe is 100% fractal in nature? No.

u/d4m45t4 · 35 pointsr/programming
u/underwatr_cheestrain · 34 pointsr/javascript

Get your man pants on and pick up a copy of CLRS.

u/chuwiki · 33 pointsr/Python

I'd recommend this book. It's really nice for beginners :D

u/RhoTheory · 33 pointsr/MachineLearning

Grad school for machine learning is pretty vague, so here's some general resources I think would be good for an incoming CS grad student or undergraduate CS researcher with a focus on deep learning. In my opinion, the courses you mentioned you've done should be a sufficient foundation to dive into deep learning, but these resources cover some foundational stuff as well.

  • Kaggle is for machine learning in general. It provides datasets and hardware. It has some nice tutorials and you can look at what other people did.
  • Google has an online crash course on Machine Learning.
  • Hands-On Machine Learning with Scikit-learn and Tensorflow is a great book for diving into machine learning with little background. The O'Reilly books tend to be pretty good.
  • MIT Intro to Deep Learning provides a good theoretical basis for deep learning specifically.
  • MIT Intro to AI. This is my favorite online lecture series of all time. It provides a solid foundation in all the common methods for AI, from neural nets to support vector machines and the like.
  • Tensorflow is a common framework for deep learning and provides good tutorials.
  • Scikit-learn is a framework for machine learning in python. It'd be a good idea to familiarize yourself with it and the algorithms it provides. The link is to a bunch of examples.
  • Stanford's deep learning tutorial provides a more mathematical approach to deep learning than the others I've mentioned--which basic vector calc, linear algebra, and stats should be able to handle.
  • 3Blue1Brown is a math youtuber that animates visual intuitions behind many rather high-level concepts. He has a short series on the math of neural networks.
  • If you are going to be dealing with hardware for machine learning at all, this paper is the gold standard for everything you'd need to know. Actually, even if you aren't dealing with the hardware, I'd recommend you look at the seconds on software. It is fairly high level, however, so don't be discouraged if you don't get some of it.
  • Chris Olah's Blog is amazing. His posts vary from explanations of complex topics very intuitively to actual research papers. I recommend "Neural Networks, Manifolds, and Topology".
u/geek_on_two_wheels · 33 pointsr/csharp
u/zorfbee · 32 pointsr/artificial

Reading some books would be a good idea.

u/jhartikainen · 32 pointsr/cscareerquestions

fwiw, bare minimum working code is often a good idea if we're talking about the amount of code to do some task :)

Design patterns are most useful in that they help you start recognizing patterns in your own code, and they show you a number of common patterns which can be useful - but it's good to keep in mind that you shouldn't force a design pattern somewhere just because it's a design pattern.

Anyway, the Design Patterns book is good, and so is Head First Design Patterns.

u/wall_time · 32 pointsr/programming

Charles Petzold also wrote Code: The Hidden Language of Computer Hardware and Software. It's a great book. I'm sure most of the people browsing this subreddit will already understand most of what is in the book (or have read it already) but fantastic read nonetheless.

u/jesseguarascia · 31 pointsr/gamedev

I think your major problem here is that you want the "why not"s instead of the "why"s. A good programmer can look at a chunk of code and determine "why" the programmer is doing certain things. These pre-extising code blocks that people refer to are given because you should be able to read through it and interpret what's going on and why. The questions you most likely ask at the "interpreting" stage isn't "why" but instead "why that way and not this way?"

Really, when it comes down to it, the answer as to that question for a lot of things in engine programming (or just programming in general) is that it's what the lead designer or lead programmer thought was the best idea.

For instance: How do you want to store your array of tiles? As integers representing tile indexes in a tile set? As separate Tile class instances in a vector array containing vector arrays of Tile instances? As a hashmap indexed using characters to grab a tile? etc. There's a million ways to handle each and every part of an engine, it all comes down to what design patterns and what theories you think are the best for what you need your engine to do.

I suggest reading up on some of the design patterns in here (actual link in the sidebar) and here. They're a great way to start understanding the multitudes of ways of handling different ideas in your engine! Reading up on pre-existing theory or seeing pre-existing pseudo-code is fine and dandy, but sometimes you have to reinvent the wheel. Sometimes, for the most part you can follow a lot of design patterns that already exist.

P.S. For a great tutorial on loading tile maps and working with them in your game, lazyfoo's got you covered (it's in C++ but can easily be adapted for other languages) Here

u/FunkyCannaHigh · 30 pointsr/MrRobot

Excellent questions! If you are a CS grad you are ahead of the game. However, it all depends on what you want to do. I suggested learning programming/CS principles for two reasons:

  1. The more you understand how computers, code, compliers, software, stacks, memory randomization, CPU protection rings, and the such work the better you are at hacking. You can find novel ways to get into systems and exploit them, etc.

  2. You can write basic tools on the fly. It is amazing the tools you can create with a few lines of code when you have access to nothing but a GCC compiler in a *nix environment.

    If you want to find zero day exploits, yes learn how low level languages work. It would be very helpful in that case.

    Otherwise, Learn python (or whatever is popular at the time) to write your own exploit tools....or to modify existing ones.

    If you want to be apart of a red team learning lower level languages could make you a better exploiter. However, IMO, I would start with just learning the basics of hacking.

    These two books are old but they are absolute standards for anyone starting off:


    Also, learn as much as you can on how windows/Linux/virtual machines (and containers) work. The more you know about how an OS works the easier it is to exploit.

    Learn to exploit, there are a ton of free sites to help you learn:

    Learn CTF challenges:

    When you are able to hack take part in real challenges:

    Then start your career with a RESPECTED CERT, OSCP:

    The OSCP is no joke and it is a timed, 24 hour cert test. Yes, you read that right, 24 hours.

    Unless you want a government gig stay away from C|EH, it is a joke cert in the community. Again, unless you need to work for a gov agency

    Finally, and I cannot stress this enough.....LEARN CLOUD COMPUTING!!! It is here to stay and on-prem systems are dying a slow death. It will change how you exploit systems and how software is engineered/deployed.

u/majordyson · 29 pointsr/MachineLearning

Having done an MEng at Oxford where I dabbled in ML, the 3 key texts that came up as references in a lot of lectures were these:

Pattern Recognition and Machine Learning (Information Science and Statistics) (Information Science and Statistics)

Machine Learning: A Probabilistic Perspective (Adaptive Computation and Machine Learning Series)

(Pretty sure Murphy was one of our lecturers actually?)

Bayesian Reasoning and Machine Learning

There were ofc others, and plenty of other sources and references too, but you can't go buying dozens of text books, not least cuz they would repeat the same things.
If you need some general maths reading too then pretty much all the useful (non specialist) maths we used for 4 years is all in this:
Advanced Engineering Mathematics

u/JonKalb · 28 pointsr/cpp

Modern C++ (C++11 or later) books are not nearly as plentiful as those for Classic C++, but there are a few notables.

Bjarne's college text may be what you are looking for:

Programming: Principles and Practice Using C++

It is aimed at engineers, which makes it less general, but might be good for you.

Of course his general intro is also updated to C++11.

The C++ Programming Language

This is aimed at experienced systems programmers, so it may be a bit heavy for students, which makes the Primer (that you mentioned attractive).

C++ Primer

Be certain to get the 5th edition.

Of Scott's books only the latest is Modern.

Effective Modern C++

This is less an introduction for students than for Journeymen (Journeypeople?) programmers.

For just plain good programming style consider Ivan's book.

Functional Programming in C++

Don't be put off by "Functional." This style of programming will make your students excellent programmers.

There are some modern books of high quality that are niche.

The ultimate guide to templates:
C++ Templates

The ultimate guide to concurrency:
C++ Concurrency in Action

Some library options:

Despite its name, this is mostly reference. A very good reference.
The C++ Standard Library: A Tutorial and Reference (2nd Edition)

Arthur's book covers C++17, which makes it one of the most modern on this list:
Mastering the C++17 STL: Make full use of the standard library components in C++17

To what extent are you teaching C++ and to what extent are you teaching programing?

Good luck and have fun!

u/hooj · 28 pointsr/explainlikeimfive

The whole subject is a bit too complicated and a bit too deep for a short ELI5, but I'll give a stab at the gist of it.

The reason why computers work (at least in the vein of your question) is very similar to the reason why we have language -- written, spoken, etc.

What you're reading right at this very moment is a complex system (language) simplified to symbols on the screen. The very fact that you can read these words and attain meaning from them means that each sentence, each word, and each letter represent a sort of code that you can understand.

If we take an apple for example, there are many other ways to say that in different languages. Manzana. Pomme. Apfel. And so on. Codes -- some symbol maps to some concept.

In the context of computers, well, they can only "understand" binary. Ones and zeros. On and off. Well, that's okay, because we can map those ones and zeros to codes that we (humans) care about. Like 101010111 could represent "apple" if we wanted it to.

So we build these physical circuits that either have power or don't (on and off) and we can abstract that to 1's (power flowing through that circuit) and 0's (no power flowing through it). This way, we can build physical chips that give us basic building blocks (basic instructions it can do) that we can leverage in order to ultimately make programs, display stuff, play sounds, etc. And the way we communicate that to the computer is via the language it can understand, binary.

In other words, in a basic sense, we can pass the processor binary, and it should be able to interpret that as a command. The length of the binary, and what it should contain can vary from chip to chip. But lets say our basic chip can do basic math. We might pass it a binary number: 0001001000110100 but it might be able to slice it up as 0001 | 0010 | 0011 | 0100 -- so the first four, 0001, might map to an "add" command. The next four, 0010, might map to a memory location that holds a number. The third group of four might be the number to add it to. The last group might be where to put it. Using variables, it might look like:

c = a + b. Where "c" is 0100, "a" is 0010, "b" is 0011, and the "+" (addition operator) is 0001.

From there, those basic instructions, we can layer abstractions. If I tell you to take out the trash, that's a pretty basic statement. If I were to detail all the steps needed to do that, it would get a lot longer -- take the lid off the can, pull the bag up, tie the bag, go to the big garbage can, open the lid, put the trash in. Right? Well, if I tell you to take out the trash, it rolls up all those sub actions needed to do the task into one simple command.

In programming, it's not all that different. We layer abstractions to a point where we can call immense functionality with relatively little code. Some of that code might control the video signal being sent to the screen. Some of that code might control the logic behind an app or a game. All of the code though, is getting turned into 1's and 0's and processed by your cpu in order to make the computer do what is asked.

If you want to learn more, I highly recommend Code by Charles Petzold for a much more in depth but still layman friendly explanation of all this.

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/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/Lericsui · 26 pointsr/learnprogramming

"Introduction to Algorithms"by Cormen Is for me the most important one.

The "Dragon" book is maybe antoher one I would recommend, although it is a little bit more practical (it's about language and compiler design basically). It will also force you to do some coding, which is good.

Concrete Mathematics by Knuth and Graham (you should know these names) is good for mathematical basics.

Modern Operating Systems by Tennenbaum is a little dated, but I guess anyone should still read it.

SICP(although married to a language) teaches very very good fundamentals.

Be aware that the stuff in the books above is independent of the language you choose (or the book chooses) to outline the material.

u/bpikmin · 26 pointsr/programming

I highly recommend the book Code. I read it in middle school and it was absolutely fascinating. Pretty short too.

u/soundcult · 26 pointsr/synthesizers

Hey! I can relate exactly to where your'e coming from. I, some years ago, decided I wanted to get into building synths. I ended up getting a job at a pedal company and have spent more time learning to build and repair pedals than synths. I don't work there anymore, but it gave me a lot of perspective into the field as we also made euro-rack modules.

First up: I don't want to scare you off from this, but just want to give you a realistic perspective so that you go into this knowing what you are getting into. Making synths is hard and it's expensive. As far as electronic projects go, making a synthesizer is up there on the list. I've repaired powerplant turbine controller circuitboards that were simpler than some of the synths I've owned. This isn't to say, "don't do it!" but, expect to learn a lot of fundamental and intermediate stuff before you ever have something like a fully-featured synth that you built in your hands.

It's also expensive. A cheap synth prototype is going to cost a couple hundred bucks, easy, while a more fully-featured prototype could cost into the thousands to produce, and that's just to build one working prototype. If you want to make a run of products you're going to need money up front, and not a small amount. So, just be prepared for that inevitability.

One final note is that my perspective is broad (digital and analog) but is rooted in analog electronics because that's where I started. This isn't the only path you can take to get to where you want to go but honestly in my opinion, even if you're going to go mostly digital later, you need to understand analog.

If you have never messed with electronics much before I highly recommend the Make: Electronics book. I'm a hands-on person and this was the most effective book I found that let me study electronics fundamentals the way I wanted to; by making stuff! No matter which direction you go on (digital, analog, hybrid, DSP, SID, etc) you're going to want to know how to pick the right resistor, or how to pop an LED into a circuit, and this book will teach you that.

Solid follow-up books from there are Make: More Electronics, Practical Electronics for Inventors, How To Diagnose and Fix Everything Electronic, and The Art of Electronics. All of these books are good books that touch on different concepts you will find useful, so I encourage you to look through them and decide for yourself which of these interests you.

Around this same time, I'd encourage you to start getting into kits. Honestly, before you build anything synth, I'm going to recommend you build some pedals. Effects pedals are fun and rewarding to build without being too hard. Start with a distortion circuit and work your way up from there. Once you can build a delay pedal without freaking out, move on to euro-rack kits, or other synth kits. While you're building these kits, don't just build them, play with the circuits! Try swapping components where you think you can, or adding features. One of my first kits was a distortion pedal with a single knob, but by the time I was done tweaking on it it had five knobs and two toggle switches!

Once you're feeling somewhat comfortable with electronics, then you can dive into the holy grail of analog synth design: Make: Analog Synthesizers this amazing book was written by the brilliant Ray Wilson who recently passed away. His life's goal was to bring the art of building analog synths into the hands of anyone who wanted to learn, and there is no better place to receive his great wisdom than this book. You should also check out his website Music From Outer Space along the way, but the book covers so much more than his website.

If you make through most or all of those resources you are going to be well-equipped to take on a career in synth-building! I'm personally still on that last step (trying to find the time to tackle Make: Analog Synthesizers) but hope within the next year or two to get that under my belt and start diving in deep myself. It's been a fun journey of learning and discovery and I wouldn't trade the skills I've gained in electronics for much.

Hope this helps, good luck!

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/cronin1024 · 25 pointsr/programming

Thank you all for your responses! I have compiled a list of books mentioned by at least three different people below. Since some books have abbreviations (SICP) or colloquial names (Dragon Book), not to mention the occasional omission of a starting "a" or "the" this was done by hand and as a result it may contain errors.

edit: This list is now books mentioned by at least three people (was two) and contains posts up to icepack's.

edit: Updated with links to These are not affiliate - Amazon was picked because they provide the most uniform way to compare books.

edit: Updated up to redline6561

u/feketegy · 25 pointsr/PHP

Every quality software should have tests. So...

Read the unit tests / features tests first. Those will show you how a specific piece of the code works.


  1. Play with composer packages.
  2. Learn about PHP SPL
  3. Learn about design patterns and beyond
  4. Learn TDD, setup PHPUnit, Behat, Mink, PHPSpec
  5. Read PHP The Right Way
  6. Learn about clean code, EBI, DCI and how to put MVC on a shorter leash here: and here and check out the #cleancode IRC channel on freenode
  7. Read a couple of books like: PHP Objects, Patterns and Practice or Code Complete or Clean Code or The Pragmatic Programmer or The Mythical Man-Month
  8. Start an open-source project or contribute to one

    There are a lot to learn and if you really like programming you will never stop learning.

u/CapableCounteroffer · 25 pointsr/learnprogramming

You can get a degree or you can teach yourself

The above resource is pretty good in outlining the major topics that all CS programs cover, but I would change some of their textbook and class recommendations.

I would replace the programming book/course with CS for all

Algorithms I would recommend sedgewick which is also available as a website or clrs for a more in depth review.

Those two topics will give you a very solid background. For what you want to do computer architecture, networking, operating systems, math, languages and compilers, and distributed systems aren't as important. If you wanted to expand your abilities as a programmer then you should explore those topics.

As for databases, for your purposes you may not need to learn so much how databases work as opposed to how to query databases. For this you need to learn SQL.

This should give you all the background you need in CS, now its time to start building applications. You'll probably hit roadblocks and need to research how to accomplish certain tasks, but with the above background that should be very doable.

u/the_omega99 · 24 pointsr/programming

>Also what is this documentation? It's crazy expensive. Why would I want it?

It's the standard. Unless you're a compiler writer or a huge language nerd, you probably have no use for the standard.

You'd still want to learn from typical books, such as The C++ Programming Language (by the language's creator). You'd have to wait for them to be updated, though. The finished standard is very new, so you can expect a bit of a wait for many books to be updated. Granted, it's been a WIP for some time, and there's already some books available (such as Effective Modern C++) and compilers already support a number of the latest features (at least Clang and GCC do; Visual Studio tends to be behind).

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/EricHerboso · 23 pointsr/westworld

Asimov's books went even farther than that. Don't read if you don't want to be spoiled on his most famous scifi series.

[Spoiler](#s "Because Law 1 had the robots take care of humans, the first AIs decided to go out and commit genocide on every alien species in the universe, just so they couldn't compete with humans in the far future.")

AI safety is hard. Thankfully, if you care about actually doing good in real life, there are organizations out there working on this kind of thing. Machine Intelligence Research Institute does research on friendly AI problems; the Center for Applied Rationality promotes increasing the sanity waterline in order to increase awareness of the unfriendly AI problem; the Future for Humanity Institute works on several existential risks, including AI safety.

If you want to learn more about this topic in real life, not just in fiction, then I highly recommend Nick Bostrom's Superintelligence, a book that goes into detail on these issues while still remaining readable by laymen.

u/in0pinatus · 23 pointsr/programming

I admire your dogged adherence to being wrong in every particular. It takes a special brand of stubborn contrarianism to quote someone's badly edited notes as a primary source and then followup by a claim that this is best possible research.

However, outside in the real world, Alan Kay writes extensively and authoritatively here and in his numerous contributions on Hacker News quite aside from publications spanning decades.

And an awful lot of people agree with his definition. The introduction of the classic Design Patterns defines objects as an encapsulated package that only responds to messages. People who teach OO programming readily quote Mr Kay's definition. The Ruby programming language is fundamentally based upon it, and before you shout "but Ruby has classes" note that Ruby classes are actually themselves objects, for which the new message happens to do something particular by convention. And so on; the point being that Alan Kay's definition is super influential, which is why the idea that Erlang is the most object-oriented language is not a new proposition.

u/devilbunny · 23 pointsr/explainlikeimfive

That's a pretty interesting course. I've read the book and done exercises up until you actually have to start building the CPU.

However, I would strongly recommend reading Charles Petzold's CODE first. It's a little less technical, but explains the general concepts much better than nand2tetris.

u/__LikesPi · 23 pointsr/learnprogramming

Algorithms are language agnostic but certain books are not. I recommend Introduction to Algorithms which is language agnostic and accompanied by lectures here. But there is also Algorithms by Robert Sedgewick which is in Java and accompanies these lectures and The Algorithm Design Manual which is language agnostic.

u/abstractifier · 22 pointsr/learnprogramming

I'm sort of in the same boat as you, except with an aero and physics background rather than EE. My approach has been pretty similar to yours--I found the textbooks used by my alma mater, compared to texts recommended by MIT OCW and some other universities, looked at a few lists of recommended texts, and looked through similar questions on Reddit. I found most areas have multiple good texts, and also spent some time deciding which ones looked more applicable to me. That said, I'm admittedly someone who rather enjoys and learns well from textbooks compared to lectures, and that's not the case for everyone.

Here's what I gathered. If any more knowledgeable CS guys have suggestions/corrections, please let me know.

u/teknobo · 22 pointsr/programming

Even though this seems to be just aggregating some Stack Overflow answers into blogspam, I'll bite.

> Two lines of code is too many

If you're seriously going to complain about one extra line of code in a method, I don't see this ending well.

> If it's not native, it's not really programming

Semantics. Even if you don't call it programming, you'd damn well better know those things if you want to use them. SQL, Java, and any other VM-based language may not qualify as "programming" by this definition, but they're still damn useful.

> The "while" construct should be removed from all programming languages. (In favor of "Repeat...Until")

Semantics again. There is no functional difference between the two, and I would argue that while is actually preferable since it puts the looping condition right there on the same line, instead of having to skip to the end of the block to find out if you even entered the block in the first place.

> Copy/pasting is not an anti-pattern.

No, it's not, and it's been proven. I'm having a hard time finding the peer-reviewed study on copy/paste programming right now, but basically, it's been shown to save a lot of time as long as you're using it properly.

Where the hatred for it comes in is that, like GOTO, if you use it too often, you'll probably end up using it wrong.

> Developing on .NET is not programming, it's just stitching together other people's code

A reiteration of his 2nd point, but honestly, a huge amount of working as a professional programmer -- hell, almost the definition of working in a team -- is stitching together other people's code. There's nothing wrong with that, and it's hardly controversial.

> The use of try/catch exception handling is worse than the use of simple return codes and associated common messaging structures to ferry useful error messages.

This has been getting debated a lot in go-lang circles, but the general consensus seems to be that unless you're working in an embedded environment (or some other highly-constrained environment), you're probably better off with try/catch.

> Test constantly

Test-Driven Development is something that I personally agree with, and truthfully has become a very popular practice among Rails people. I don't see how that would qualify it as being controversial.

That said, certain studies have shown evidence that TDD is not as effective as many seem to believe.

> Object Oriented Programming is absolutely the worst thing that's ever happened to the field of software engineering.

I've heard this claim semi-often. It seems to mostly come from people having worked with languages that claim to be OO but constantly make exceptions to the rules, like Java, C++, or Python. In fact, the author specifically calls out Java.

Try Smalltalk or Ruby and you'll come to see that OOP done right is actually quite wonderful.

> C (or C++) should be the first programming language

Debatable, but certainly not controversial by any stretch of the imagination.

> Classes should fit on the screen.

How big is your screen? I can fit any class definition on a 64" monitor.

Some classes simply must be large. It is an unavoidable fact that certain things are simply more complex to model than others. This point isn't controversial, it's just asinine.

> Making invisible characters syntactically significant in python was a bad idea

This again? Is it really a controversial opinion if it's been something non-Python programmers have been whining about for decades? Because as far as I can tell, people whine about it for about the first five minutes of Python coding, and then give up because they would've been indenting anyway.

It can cause bugs when transferring code between computers, I'll give them that. Otherwise, it's Python demanding good formatting, something that you should be demanding from everyone on your team anyways.

My main regret with Python is that I haven't found a good tool that auto-formats everything (a la "gofmt").

But otherwise, Python's indentation requirements are so in line with common indentation in almost every programming language that proper indentation comes naturally to more or less everyone. In how many programming languages that you regularly use do you not format your conditional, looping, class/method, or exception blocks?

> Singletons are not evil

It's not controversial to agree with Design Patterns. That book is more or less the undisputed truth on the subject, and it thinks the Singleton pattern is fine and dandy.

u/darawk · 22 pointsr/compsci

Godel Escher and Bach is precisely what you're looking for.

u/biochromatic · 22 pointsr/Futurology

> instant access to knowledge and infinite diversions ought to change brain connections

I just want to give a shoutout the The Shallows. It's a book that goes into detail on how new technology changes the way people think (including changing the connections in brains as you mentioned).

> Change mustn't mean in a bad way though.

This is a frequent topic in the book as well. There are things that people lose when they adopt new technologies, and there are things that people gain. Basically all technological advances have caused humanity to both lose something and gain something. For example, our ancestors may have been better at remembering things or had a better sense of direction compared to us. We would be better at assimilating many facts in a short period of time compared to our ancestors though.

u/SUOfficial · 21 pointsr/Futurology

This is SO important. We should be doing this faster than China.

A branch of artificial intelligence is that of breeding and gene editing. Selectively selecting for genetic intelligence could lead to rapid advances in human intelligence. In 'Superintelligence: Paths, Dangers, Strategies', the most recent book by Oxford professor Nick Bostrum, as well as his paper 'Embryo Selection for Cognitive Enhancement', the case is made for very simple advances in IQ by selecting certain embryos for genetic attributes or even, in this case, breeding for them, and the payoff in terms of raw intelligence could be staggering.

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/reddilada · 21 pointsr/learnprogramming
u/Ispamm · 21 pointsr/androiddev

Don't give up just yet, keep looking.
Do you have a portfolio? if not try to work on a project of your own so you can have something to show.
And if you are considering improving your java skills try work with libraries like:

u/MyrddinE · 21 pointsr/programming

Gödel, Escher, Bach: An Eternal Golden Braid

This book is not exactly a programming book... maybe... kinda. It teaches no practical programming language. It explains no useful design patterns. It does not deal with any practical computer applications. And yet had I never would have really gotten into programming had I not read it long ago. Written in the late 70's, it's still relevant today.

u/DucBlangis · 20 pointsr/netsecstudents

Here is a "curriculum" of sorts I would suggest, as it's fairly close to how I learned:

  1. Programming. Definitely learn "C" first as all of the Exploitation and Assembly courses below assume you know C: The bible is pretty much Dennis Richie and Kernighan's "The C Programming Language", and here is the .pdf (this book is from 1988, I don't think anyone would mind). I actually prefer Kochan's book "Programming in C" which is very beginner freindly and was written in 2004 rather than 1988 making the language a little more "up to date" and accessible. There are plenty of "C Programming" tutorials on YouTube that you can use in conjunction with either of the aforementioned books as well. After learning C than you can try out some other languages. I personally suggest Python as it is very beginner friendly and is well documented. Ruby isn't a bad choice either.

  2. Architecture and Computer basics:
    Generally you'll probably want to look into IA-32 and the best starting point is the Intel Architecture manual itself, the .pdf can be found here (pdf link).
    Because of the depth of that .pdf I would suggest using it mainly as a reference guide while studying "Computer Systems: A Programmers Perspective" and "Secrets of Reverse Engineering".

  3. Operating Systems: Choose which you want to dig into: Linux or Windows, and put the effort into one of them, you can come back to the other later. I would probably suggest Linux unless you are planning on specializing in Malware Analysis, in which case I would suggest Windows. Linux: No Starch's "How Linux Works" is a great beginner resource as is their "Linux Command Line" book. I would also check out "Understanding the Linux Kernel" (that's a .pdf link). For Windows you can follow the Windows Programming wiki here or you can buy the book "Windows System Programming". The Windows Internals books are generally highly regarded, I didn't learn from them I use them more as a reference so I an't really speak to how well they would teach a "beginner".

  4. Assembly: You can't do much better than OpenSecurityTraining's "Introductory Intel x86: Architecture, Assembly, Applications, & Alliteration" class lectures from Xeno Kovah, found here. The book "Secrets of Reverse Engineering" has a very beginner friendly introduction to Assembly as does "Hacking: The Art of Exploitation".

  5. Exploitation: OpenSecurityTraining also has a great video series for Introduction to Exploits. "Hacking: The Art of Exploitation" is a really, really good book that is completely self-contained and will walk you through the basics of assembly. The author does introduce you to C and some basic principles of Linux but I would definitely suggest learning the basics of C and Linux command line first as his teaching style is pretty "hard and fast".

  6. Specialized fields such as Cryptology and Malware Analysis.

    Of course if you just want to do "pentesting/vuln assessment" in which you rely more on toolsets (for example, Nmap>Nessus>Metasploit) structured around a methodology/framework than you may want to look into one of the PACKT books on Kali or backtrack, get familiar with the tools you will use such as Nmap and Wireshark, and learn basic Networking (a simple CompTIA Networking+ book will be a good enough start). I personally did not go this route nor would I recommend it as it generally shys away from the foundations and seems to me to be settling for becoming comfortable with tools that abstract you from the real "meat" of exploitation and all the things that make NetSec great, fun and challenging in the first place. But everyone is different and it's really more of a personal choice. (By the way, I'm not suggesting this is "lame" or anything, it was just not for me.)

    *edited a name out

u/Philipp · 20 pointsr/Futurology

Here's a fantastic book on the subject: Superintelligence.

u/delarhi · 20 pointsr/cpp

I guess I'm going to go ahead and be "that guy".

Don't aim to work with a specific language.

I feel you should reframe your goal to be a "problem solver" that knows how to pick and use various tools to solve a problem. C++ may be one of those tools. Maybe C. Maybe Python. Maybe Java. You want to develop your skill set to be flexible enough to adopt the right tool for a job. Now, that's not to say you can't be a language expert. Language experts are very valuable and becoming one is a perfectly reasonable goal. That said, I think you'll find that you have many more opportunities when you remain flexible.

With that out of the way, I would say good next steps for continued C++ mastery are to read and understand Scott Meyers' excellent books:

u/shivasprogeny · 20 pointsr/learnprogramming

How deep do you want to go? Code: The Hidden Language of Computer Hardware and Software goes all the way from binary to computer code.

If you don't really care about the hardware, you might start dabbling in assembly on a Raspberry PI.

u/neutronfish · 20 pointsr/cscareerquestions

One book that helped me a lot while starting out and which I highly recommend to any new student of computer science is Code: The Hidden Language of Computer Hardware by Charles Petzold, which starts out as a general interest book about the history of computing and then very quickly ratchets up into how modern computers, compilers, operating systems, and hardware drivers are built. You basically have to learn some discrete math and assembly language just to follow along, and by the end you have a really good idea of what happens under the hood when you run your programs and why.

u/MrBushido2318 · 20 pointsr/gamedev

You have a long journey ahead of you, but here goes :D


C++ Primer: One of the better introductory books.

The C++ Standard Template Library: A Tutorial and Reference: Goes over the standard template library in fantastic detail, a must if you're going to be spending a lot of time writing C++.

The C++ Programming Language: Now that you have a good idea of how C++ is used, it's time to go over it again. TCPPL is written by the language's creator and is intended as an introductory book for experienced programmers. That said I think it's best read once you're already comfortable with the language so that you can full appreciate his nuggets of wisdom.


Modern C++ Design: Covers how to write reusable C++ code and common design patterns. You can definitely have started game programming by the time you read this book, however it's definitely something you should have on your reading list.

C++ Templates: Touches on some similar material as Modern C++ Design, but will help you get to grips with C++ Template programming and how to write reusable code.

Effective C++: Practical advise about C++ do's and dont's. Again, this isn't mandatory knowledge for gamedev, but it's advice is definitely invaluable.

Design Patterns: Teaches you commonly used design patterns. Especially useful if you're working as part of a team as it gives you a common set of names for design patterns.


C++ Concurrency in Action: Don't be put off by the fact I've put this as an "advanced" topic, it's more that you will get more benefit out of knowing the other subjects first. Concurrency in C++11 is pretty easy and this book is a fantastic guide for learning how its done.

Graphics Programming

OpenGL: A surprisingly well written specification in that it's pretty easy to understand! While it's probably not the best resource for learning OpenGL, it's definitely worth looking at. [edit: Mix it in with and arcsynthesis's tutorials for practical examples and you're off to a good start!]

OpenGL Superbible: The OpenGL superbible is one of the best ways to learn modern OpenGL. Sadly this isn't saying much, in fact the only other book appears to be the "Orange Book", however my sources indicate that is terrible. So you're just going to have suck it up and learn from the OGL Superbible![edit: in retrospect, just stick to free tutorials I've linked above. You'll learn more from them, and be less confused by what is 3rd party code supplied by the book. Substitute the "rendering" techniques you would learn from a 3d book with a good 3d math book and realtime rendering (links below)]

Essential Mathematics for Game Programmers or 3D Math Primer for Graphics and Game Development: 3D programming involves a lot of math, these books cover topics that OpenGL/DirectX books tend to rush over.

Realtime Rendering: A graphics library independent explanation of a number of modern graphical techniques, very useful with teaching you inventive ways to use your newly found 3d graphical talents!

u/KernlPanik · 20 pointsr/learnprogramming

I'm a ~10 year sysadmin that has decided to rebuild my software dev skills that I haven't used since college. Here's what I did to reawaken that part of my brain:

  1. Harvard's CS50. I figured an entry level college course would be "beneath me" but it was a great experience and I learned a surprising amount. It's very entertaining as well so that made the "simple" parts fun to do as well.

  2. Read CODE by Charles Petzold. Great insight into the nuts and bolts of how computers work. Read through it on my lunch breaks while taking CS50 in the evenings.

  3. Read and do the problems in C Primer Plus. This is a great book for learning how to write in C, which is the basis for all modern languages and is still widely used today. Great starter book for anyone who wants to learn to program.

    3.5) After going through the last chapters of C Primer Plus, I realized that some of my math skills were not up to par, so I took this MOOC from MIT to supplement that. No idea if that's something you need.

  4. Here comes the fun one: The Structure and Interpretation of Computer Programs, aka The Wizard Book. This book is more about how to design software in general, and it is pretty difficult. That being said, if you can get through it then you have the chops to do this professionally.
u/I_make_things · 20 pointsr/AskReddit

Godel Escher Bach

It's ultimately about the self-referential nature of consciousness, but it explores so many fascinating concepts that I couldn't even begin to do it justice

u/jschm · 19 pointsr/compsci

AIMA. A real treasure trove!

u/cybrbeast · 19 pointsr/Futurology

This was originally posted as an image but got deleted for IMO in this case, the irrelevant reason that picture posts are not allowed, though this was all about the text. We had an interesting discussion going:

I'll just post my relevant contributions to the original to maybe get things started.


And it's not like he's saying this based on his opinion after a thorough study online like you or I could do. No, he has access to the real state of the art:

> Musk was an early investor in AI firm DeepMind, which was later acquired by Google, and in March made an investment San Francisco-based Vicarious, another company working to improve machine intelligence.

> Speaking to US news channel CNBC, Musk explained that his investments were, "not from the standpoint of actually trying to make any investment return… I like to just keep an eye on what's going on with artificial intelligence. I think there is potentially a dangerous outcome there."

*Also I love it that Elon isn't afraid to speak his mind like this. I think it might well be PR or the boards of his companies that reigned him in here. Also in television interviews he is so open and honest, too bad he didn't speak those words there.


I'm currently reading Superintelligence which is mentioned in the article and by Musk. One of the ways he describes an unstoppable scenario is that the AI seems to function perfectly and is super friendly and helpful.

However on the side it's developing micro-factories which can assemble from a specifically coded string of DNA (this is already possible to a limited extent). These factories then use their coded instructions to multiply and spread and then start building enormous amount of nanobots.

Once critical mass and spread is reached they could instantly wipe out humanity through some kind of poison/infection. The AI isn't physical, but the only thing it needs in this case is to place an order to a DNA printing service (they exist) and then mail it to someone it has manipulated into adding water, nutrients, and releasing the DNA nanofactory.

If the AI explodes in intelligence as predicted in some scenarios this could be set up within weeks/months of it becoming aware. We would have nearly no chance of catching this in time. Bostrom gives the caveat that this was only a viable scenario he could dream up, the super intelligence should by definition be able to make much more ingenious methods.

u/chronographer · 19 pointsr/Foodforthought

For background, I understand that Elon's views are informed by this book (among others, no doubt): Nick Bostrom: Superintelligence.

It's a dense read, but talks about AI and how it might emerge and behave. (I haven't finished the book, so can't say more than that).

Edit: fixed up punctuation from mobile posting. See below for more detail.

u/DoISmellBurning · 19 pointsr/compsci

Cormen is your friend.

Core text for the algorithms course I did as an undergrad - I highly recommend it.

u/tenpairsofsocks · 18 pointsr/learnprogramming

Taking a course will definitely help and I have a few book suggestions.

Intro to Algorithm
This is pretty much the holy grail on algorithms, used in many college CS courses.

Skiena's Algorithm Design
My personal favorite. Combines his Ph.D experience with real world problems.

u/ZeljkoS · 18 pointsr/philosophy

Author here. Let me start:

First software company I founded develops software components for other programmers:

Our customers include NASA, MS, Intel, and US Navy:

Second company I co-founded screens programmers before interviews:

We are used by Paypal and Ebay, among others.

I finished computer science at University of Zagreb.

I high school, I won 1st place at national computer science competition in 1997. Because of that I attended Central European Olympiad in Informatics, where I got a bronze medal:

I have also been part of Croatian team at IOI in Capetown:

Here is my Linkedin profile:

I don't work in AI, I got the idea while reading Peter Norvig's book:

Hope I changed your mind about how certain you can be about something just based on the first feeling. My about page was one click away.

Although I really know programming and sell my software to thousands of companies, I have to admit I don't see how that makes my article more or less credible. It is a philosophical text, not text about software. I think you made "Appeal to Authority" logical fallacy:

Every article should be judged by its arguments, not the credibility of the author.

u/dud3z · 18 pointsr/blackhat

The dark side has lot of facets, it depends on what you want to achieve.

If you are already working on web applications and web in general, then you may want to start with the Web Application Hackers Handbook by Dafydd Stuttard and Marcus Pinto.

This is a very valid book and with your existent knowledge it will be a very interesting read: i may also advise you to read The Tangled Web by Michal Zalewski, this instead will give you a very in-depth look of browsers' quirks and their inner working, quirks you'll learn to exploit.. for science!

Then there is the world of binary reverse engineering and exploitation, my preferred literature on this is Hacking: the art of exploitation: keep in mind that the techniques there may be outdated, but the reasoning and much of the concepts are still valid. It's a very specific book with very detailed information and you are required to know a bit of assembler, C and very low-level stuff.

Happy hunting and good luck!

u/bmathew5 · 18 pointsr/learnprogramming

Design Patterns by the gang of four. It is the essence of designing software architecture. It describes very common designs that have been tested time and time again, however it is broad and you have to specify your requirements but it is an amazing starting point.

(ps it actually is similar to design problems in civil architecture identified by Christopher Alexander. A Pattern Language (1977) & A Timeless Way of Building(1979).)

It really opens doors to how you should approach and choose the correct design. It's not language specific. The book however does have C++ examples

u/myrrlyn · 18 pointsr/learnprogramming

This book is an excellent primer for a bottom-up look into how computers as machines function.

This is my textbook from the class where we built a CPU. I greatly enjoy it, and it also starts at the bottom and works up excellently.

For OS development, I am following Philipp Opperman's excellent blog series on writing a simple OS in Rust, at

And as always Wikipedia walks and Reddit meanders fill in the gaps lol.

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/totemcatcher · 18 pointsr/linux
  • CODE: The Hidden Language of Computer Hardware and Software by Charles Petzold

    A ground up approach to understanding digital processing and transmission in a broad sense. I only recommend this book if you are looking for an intrinsic understanding of computing rather than merely a handle on using a particular programming language or operating system. By the end of the book you should have a handle on actually building your own computer, however it's actually an excellent "first book" for anyone interested in computing.
u/JustBesideTheWindow · 18 pointsr/HowToHack
u/DeliveryNinja · 18 pointsr/learnprogramming

You mention you have a very experienced team around you, this is your best resource. When I started my first coding job, the people around me really helped me become a much better developer. Ask for advice when you are stuck, think about best practices and sit with them and do the code reviews together. If they are writing good code then use their code as a guide for your own. You will soon learn the skills for yourself and realise that it's not as daunting as it seems as long as you can code basic programs. Something you can do to get a better feel for how your basic programs create something larger is to get them to walk you through the architecture.

One thing I did when I started was ask my team leader where I could improve and he recommended me some books. Have a look at head first design patterns, clean coder and growing-object-oriented-software. These are Java based but are applicable to any language.

u/sallen35 · 18 pointsr/C_Programming

I'll suggest you for the Stanford Algorithm Part 1 and Part 2 on Coursera and its free while doing you'll get some assignment also and after the completion ,it will provide you a certificate .Here is my list of Online Courses to learn data structures and algorithms. It is sorted according to quality (in my opinion) :

u/TaylorHu · 18 pointsr/learnprogramming

I love this book:

It's a great read without being too math heavy. That combined with the fact that it has a great associated booksite, a Coursera course, and a couple of followup books by the same author that do go into the more mathy aspect of it, if you're so inclined, make it a great introduction to the world of Algorithms.

u/Ken_Obiwan · 17 pointsr/MachineLearning

>The swipe at Andrew Ng is off the mark and tasteless

Meh, it's on about the same level he brought the conversation to. (Oxford professor writes a carefully-argued 350-page book; Ng apparently doesn't see the need to read it and dismisses news coverage of the book with a vague analogy.)

>Yudkowsky and the LessWrong cult have contributed nothing tangible to the fields of AI and machine learning

Well, at least it's consistent with their position that making public contributions to the field of AI may not actually be a good idea :)

It's not like Yudkowsky is somehow unaware that not having an active AI project makes him uncool, here's him writing about the point at which he realized his approach to AI was wrong and he needed to focus on safety:

>And I knew I had to finally update. To actually change what I planned to do, to change what I was doing now, to do something different instead.

>I knew I had to stop.

>Halt, melt, and catch fire.

>Say, "I'm not ready." Say, "I don't know how to do this yet."

>These are terribly difficult words to say, in the field of AGI. Both the lay audience and your fellow AGI researchers are interested in code, projects with programmers in play. Failing that, they may give you some credit for saying, "I'm ready to write code, just give me the funding."

>Say, "I'm not ready to write code," and your status drops like a depleted uranium balloon.

And if you wanna go the ad hominem route (referring to Less Wrong as a "cult" despite the fact that virtually no one who's interacted with the community in real life seems to think it's a cult), I'll leave you with this ad hominem attack on mainstream AI researchers from Upton Sinclair: "It is difficult to get a man to understand something, when his salary depends on his not understanding it."

u/Cohesionless · 17 pointsr/cscareerquestions

The resource seems very extensive such that it should suffice you plenty to be a good software engineer. I hope you don't get exhausted from it. I understand that some people can "hack" the technical interview process by memorizing a plethora of computer science and software engineering knowledge, but I hope you pay great attention to the important theoretical topics.

If you want a list of books to read over the summer to build a strong computer science and software engineering foundation, then I recommend to read the following:

  • Introduction to Algorithms, 3rd Edition: A lot of people do not like this classic book because it is very theoretical, very mathematical, and very abstract, but I think that is its greatest strength. I find a lot of algorithms books either focus too much about how to implement an algorithm in a certain language or it underplays the theoretical foundation of the algorithm such that their readers can only recite the algorithms to their interviewers. This book forced me to think algorithmically to be able to design my own algorithms from all the techniques and concepts learned to solve very diverse problems.

  • Design Patterns: Elements of Reusable Object-Oriented Software, 1st Edition: This is the original book on object-oriented design patterns. There are other more accessible books to read for this topic, but this is a classic. I don't mind if you replace this book with another.

  • Clean Code: A Handbook of Agile Software Craftsmanship, 1st Edition: This book is the classic book that teaches software engineer how to write clean code. A lot of best practices in software engineering is derived from this book.

  • Java Concurrency in Practice, 1st Edition: As a software engineer, you need to understand concurrent programming. These days there are various great concurrency abstractions, but I believe everyone should know how to use low-level threads and locks.

  • The Architecture of Open Source Applications: This website features 4 volumes of books available to purchase or to read online for free. It's content focuses on over 75 case studies of widely used open-source projects often written by the creators of said project about the design decisions and the like that went into creating their popular projects. It is inspired by this statement: "Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters."

  • Patterns of Enterprise Application Architecture, 1st Edition: This is a good read to start learning how to architect large applications.

    The general theme of this list of books is to teach a hierarchy of abstract solutions, techniques, patterns, heuristics, and advice which can be applied to all fields in software engineering to solve a wide variety of problems. I believe a great software engineer should never be blocked by the availability of tools. Tools come and go, so I hope software engineers have strong problem solving skills, trained in computer science theory, to be the person who can create the next big tools to solve their problems. Nonetheless, a software engineer should not reinvent the wheel by recreating solutions to well-solved problems, but I think a great software engineer can be the person to invent the wheel when problems are not well-solved by the industry.

    P.S. It's also a lot of fun being able to create the tools everyone uses; I had a lot of fun by implementing Promises and Futures for a programming language or writing my own implementation of Cassandra, a distributed database.
u/mohabaks · 17 pointsr/unixporn

Thanks ;). Not so skilled on that and my advice might be misleading; though I got a background in cs:This would be my suggestion for someone beginning.

u/Afro-Ninja · 17 pointsr/explainlikeimfive

It doesn't "know." Any logical operation (especially basic math calculations) can be broken down into binary digits, and a single binary digit (bit) can be represented as the presence or absence of electricity.

It's almost how if you were to build a sequence of pipes and valves, and pour water into the opening, the water would end up flowing through the same way each time. The pipes don't "know" where the water goes, it just happens.

A computer does the same thing but on a tiny scale with tiny electric pulses travelling through sequences of thousands of gates all connected to each other. Imagine that the buttons you hit on a calculator slightly change how the valves open and close. (or which opening to dump the water into) You hit enter, the water is poured, and the result shows on screen.

fair warning: I am not a hardware guy so this explanation is probably not 100% accurate.
If you have more interest in the subject I HIGHLY recommend reading this book:

u/Spasnof · 17 pointsr/learnprogramming

Awesome book Code , really helps you understand from a bottom up perspective. Super approachable without a CS background and does not need a computer in front of you to appreciate. Highly recommended.

u/Ruple · 17 pointsr/EngineeringStudents

>I have some questions about courses andsubjects for computer engineering ( Software Engineering)

CE and SWE are....a little different so I'll just talk to both a little bit.

CE is closer to Electrical Engineering specializing in Computers so you'd take more hardware oriented courses. Most CE curriculums [I've seen] take you through Circuit Theory, Electronics, Digital Systems, Signal Processing, Computer Organization (aka CPU design), Computer Networks, Embedded Systems, etc.

SWE is closer to applied computer science and is more about building applications and the software development process. So you'd start going through a lot of the early Comp Sci courses (Intro to Programming, Language Processors, Data Structures and Algorithms, Operating Systems, etc.) then you'd start leaning towards topics more closely related to building an actual piece of software like Software Project Management or Quality Assurance.

>Are they any books that you recommend to a complete noob ? Internet links ?

Who reads books?

u/Lapompaelpompei · 17 pointsr/learnprogramming

There are many courses on the internet. Coursera, Udemy, etc.. I recommend you to read at least a book about it. It really helps you to understand the logic and complexity. For data structures, I also recommend you to implement them by your self.

This is a very good book:

This is the full MIT course:

I strongly recommend you to follow the course and read the book.

u/chrndr · 17 pointsr/HPMOR

I wrote a quick script to search the full text of HPMOR and return everything italicized and in title case, which I think got most of the books mentioned in the text:

Book title|Author|Mentioned in chapter(s)|Links|Notes
Encyclopaedia Britannica| |7|Wikipedia|Encyclopaedia
Financial Times| |7|Wikipedia|Newspaper
The Feynman Lectures on Physics|Richard P. Feynman|8|Wikipedia|Full text is available online here
Judgment Under Uncertainty: Heuristics and Biases|Amos Tversky|8|Amazon|
Language in Thought and Action|S.I. Hayakawa|8|Amazon Wikipedia |
Influence: Science and Practice|Robert B. Cialdini|8|Wikipedia|Textbook. See also Influence: The Psychology of Persuasion
Rational Choice in an Uncertain World: The Psychology of Judgment and Decision Making|Reid Hastie and Robyn Dawes|8|Amazon |Textbook
Godel, Escher, Bach|Douglas Hofstadter|8, 22|Amazon Wikipedia|
A Step Farther Out|Jerry Pournelle|8|Amazon|
The Lord of the Rings|J.R.R. Tolkien|17|Wikipedia|
Atlas Shrugged|Ayn Rand|20, 98|Wikipedia|
Chimpanzee Politics|Frans de Waal|24|Amazon|
Thinking Physics: Understandable Practical Reality|Lewis Carroll Epstein|35, 102|Amazon|
Second Foundation|Isaac Asimov|86|Wikipedia|Third novel in the Foundation Series
Childcraft: A Guide For Parents| |91|Amazon|Not useful if your child has a mysterious dark side

Also, this probably isn't technically what the OP was asking, but since the script returned fictional titles along with real ones, I went ahead and included them too:

Book title|Mentioned in chapter(s)
The Quibbler|6, 27, 38, 63, 72, 86
Hogwarts: A History|8, 73, 79
Modern Magical History|8
Magical Theory|16
Intermediate Potion Making|17
Occlumency: The Hidden Arte|21
Daily Prophet|22, 25, 26, 27, 35, 38, 53, 69, 77, 84, 86, 108
Magical Mnemonics|29
The Skeptical Wizard|29
Vegetable Cunning|48
Beauxbatons: A History|63
Moste Potente Potions|78
Toronto Magical Tribune|86
New Zealand Spellcrafter's Diurnal Notice|86
American Mage|86

As others mentioned, TVTropes has a virtually-exhaustive list of allusions to other works, which includes books that aren't explicitly named in the text, like Ender's Game

u/Tandrial · 17 pointsr/compsci

You might want to start by looking here :
It's an "online class" based on this book
They start with simple logical units (In the first chapter you'll build NOT, AND, OR, XOR from NAND) and end with Tetris.

To get from transitors to NAND check this out

u/sandsmark · 16 pointsr/artificial is what I (and probably most others) would recommend as an introductory book.

u/hwillis · 16 pointsr/Physics

This is some kind of weird gatekeeping where AI keeps being redefined until it just means adult human intelligence. I have a textbook that literally has artificial intelligence in the title.

u/_Skeith · 16 pointsr/AskNetsec

Hey man! I work as Security Analyst - about a year away from graduating with my Bachelors.

I suggest you pick up the CompTIA Security+ Certification, as well as start learning the basics of Networks and how they function. Learn ports and protocols, as well as how IDS/IPS/Firewalls function. This will get you an entry level role as a Jr Analyst. I suggest you use [](Professor Messers Security+ Videos) This will teach you the basics of security work, networking concepts, threats, etc.

At the same time start listening to podcasts like Paul's Security Weekly, Down the Security Rabbit Hole, etc. As well as start reading blogs on hacking to get a feel for whats done.

Get a home lab and learn a few tools like Wireshark and Nmap for basic Security Analyst work - to learn how packets work, how they are structured, and how to scan pc's for ports and services. At the same time, focus on learning about threats and vulnerabilities (which are covered in security+).

If you want to get into PenTesting then you need a wide range of knowledge. Pick up and learn a few languages (master the basics and understand what the code does and how to read/interpret it). You need to know: PHP, HTML, SQL, Python (or Ruby), and a basic language like C, or Java.

If you want to dig deeper into PenTesting then start reading:

Good way to get into the Kali Distro and learn how to run Metasploit against vulnerable VM's.

Take a look at for books, and vulnerable VM's to practice on. is also a good place with tons of videos on Ethical Hacking, Post Exploitation, Python for Security, Metasploit, etc.

Pick up some books such as

The Hacker Playbook 2: Practical Guide To Penetration Testing

Hacking: The Art of Exploitation

Black Hat Python: Python Programming for Hackers and Pentesters

Rtfm: Red Team Field Manual

The Hackers Playbook and The Art of Exploitation are great resources to get you started and take you step by step on pen testing that will allow you to alter explore the endless possibilities.

Also a good list of resources that you can learn more about security:

Getting Started in Information Security

Pentester Labs

Awesome InfoSec

Awesome Pentest

Overall experience and certification are what will get you into the door faster. Most employers will look for experience, but if they see you have motivation to learn and the drive to do so, then they might take you. Certifications also are big in the infosec field, as they get you past HR. And having a home lab and doing side projects in security also reflects well.

u/Rinnve · 16 pointsr/learnpython

You should read this book. The best explanation of how computers work I know of.

u/My_6th_Throwaway · 16 pointsr/INTP

American amazon link

u/LunchNap · 16 pointsr/compsci

Here's your bible:
Introduction to Algorithms, 3rd Edition (The MIT Press)

u/borski · 15 pointsr/netsec

Two good books I'd recommend for getting started in exploitation:

u/latetodata · 15 pointsr/learnmachinelearning

I personally really benefitted from Jose Portilla's udemy class on python for Data Science: It deals with the machine learning algorithms at a pretty basic level but he does a good job overviewing things and this course personally gave me more confidence. He also wrote a helpful overview for how to become a data scientist:

Additionally, I found this podcast episode from Chris Albon helpful:

Finally, I have just started going through Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems and I love it. It's very easy to read and applicable:

Hope this helps.

u/UnlikelyToBeEaten · 15 pointsr/math

Disclaimer: I only have a masters in maths, and I've just started working as a programmer.

Here are topics I enjoyed and would recommend

  • At least basic programming. I've heard that if you are interested in mathematics,you may be especially interested in the Haskel language.
  • Mathematical Logic and Meta-mathematics, some (very basic) model-theory. Personally, I also found set theory and the proof of the independence of the Axiom of Choice from the Zermelo-Fraenkel axioms incredibly interesting. The stuff from Gödel, Escher, Bach.
  • Probability theory and Bayesian statistics, along with some basic information theory and theory of complexity / entropy.
  • Basic category theory (though it's a hard subject to learn if you don't have some advanced algebra to motivate why things are done the way they are. It also took me about three or four tries before I finally started understanding it, and after that I found it quite beautiful. Your mileage may vary).
  • EDIT: Also, Knuth's Concrete Mathematics. The book is a very good source on the topic.
u/therascalking13 · 15 pointsr/wow

There's a very popular management book about just this topic.

u/tracekill · 15 pointsr/books

Nicholas Carr's book The Shallows talks about this at length. It's backed up by some pretty solid science and does an excellent job tracing the history of the written word, and its relationship with our physiology and consciousness, up to the modern age. The book is biased by the "Baby Boomers are inherently less vapid than Millennials" mentality but it's definitely worth a read.

u/ethraax · 15 pointsr/programming

Introduction to Algorithms is an absolutely fantastic book. I've read it through a couple times. It's very well written and they have plenty of descriptive diagrams to help you intuitively grasp the different algorithms.

u/jacobolus · 14 pointsr/math

I take it you want something small enough to fit inside a hollowed-out bible or romance novel, so you can hide your secrets from nosy neighbors?

u/goodbyegalaxy · 14 pointsr/hardware

Code: The Hidden Language of Computer Hardware and Software

As the title implies, it's not just about hardware, it goes into how software is written for hardware as well. But it's a really cool book, takes you from the very basics of circuitry (a battery, a light bulb, and wire) in the first chapter, and building only on things taught in the book gets you to a fully working computer.

u/Manitcor · 14 pointsr/dotnet

There are some key concepts you want to get down if you really want to make the most of .NET

  • OO design and basic patterns
    Design patterns are used over and over again in OO based systems. A good understanding of what they are for, and how they tend to be used will be helpful when trying to understand key framework extensions and 3d party libraries. I like to point people at Head First Design Patterns. The opinions on design patterns in this book are a bit dated and the examples use Java syntax but they are all relevant to the .NET world and will go a long way to understanding how class names and object structures are used in OO systems.

    IMO One of the biggest concepts you'll need to understand in OO currently is the Inversion of Control pattern (also referred to as dependency injection) and the frameworks that provide it. Most modern .NET applications leverage some kind of dependency injection to simplify development and make unit testing and porting of classes easier.

    NOTE: I understand many folks in the PHP world feel that PHP is a full OO system. While they have made strides in this area it is not a fully typed OO system. It's a procedural system twisted to provide some OO features.

  • Syntax
    This is easy, just review MSDN docs and samples. The biggest different you will see in the .NET world is a different opinion in general on casing of object and method names.

  • Frameworks
    This is the part that seems the most overwhelming IMO. The language itself is fairly easy but understanding the huge amount of 1st and 3rd party libraries, frameworks and tools can be daunting. Since you come from the PHP world I am going to assume you are most interested in web based applications. What I would recommend is to pick a set of tools for your web stack and learn them. Once you understand the key pieces of a web application and how they interact you can start picking and choosing different components to meet your needs. I am going to suggest you start with the following stack to get started with a web application, this is the same stack I use for most of my clients making smaller functional websites or simple content driven systems.

  • .NET 4 (you can do 3.5 but really just go with the latest)
  • Core Web App - MVC (3 or 4)
  • Dependency Injection - Unity 2.0 or 2.1
  • Data access - Entity Framework
  • Application Security - .NET Membership Provider (there is a newer slightly better framework by MS but I cannot recall the name at the moment)
  • Consuming 3rd party services - WCF
  • Exposing your own services REST - MVC (since you are already using it for pages)
  • Exposing your own services using multiple protocols/data formats - WCF
  • XML Processing - Linq and Lambda's. Also be aware of XmlTextReader and XmlTextWriter for targeted high speed forward-only processing.
  • Configuration management - build in web.config with CSD for complex configuration structures beyond what appsettings can provide.

    Key Concepts for Modern .NET Apps

  • Generics
  • Lambdas
  • Linq
  • Closures
  • dynamic typing
  • threading

    Some basic tools to help you:

  • dotpeak - provides detailed assembly information and some decompilation.
  • Assembly binding log viewer - helps troubleshoot dependencies by logging internal CLR calls to dependent libraries.
  • MSBuild - Build management and orchrstarion. This is the system used internally by Visual Studio for building projects. It's a command line tool so you can build projects even without visual studio. A basic understanding of MSBuild makes it fairly easy to use any IDE or text editor you like for .NET development. I do however like VS2010 or 2012 as it goes a long way in helping you code and understand .net.

    Edit: Now with more links.
u/osirisx11 · 14 pointsr/math

If you like stuff like this you may be interested in my favorite book: Godel, Echer, Bach: The Eternal Golden Braid:

Edit: Also see the great MIT course with video lectures:

u/ThirdEncounter · 14 pointsr/programming
u/hell_onn_wheel · 13 pointsr/Python

Good on you for looking to grow yourself as a professional! The best folks I've worked with are still working on professional development, even 10-20 years in to their profession.

Programming languages can be thought of as tools. Python, say, is a screwdriver. You can learn everything there is about screwdrivers, but this only gets you so far.

To build something you need a good blueprint. For this you can study objected oriented design (OOD) and programming (OOP). Once you have the basics, take a look at design patterns like the Gang of Four. This book is a good resource to learn about much of the above

What parts do you specify for your blueprint? How do they go together? Study up on abstract data types (ADTs) and algorithms that manipulate those data types. This is the definitive book on algorithms, it does take some work to get through it, but it is worth the work. (Side note, this is the book Google expects you to master before interviewing)

How do you run your code? You may want to study general operating system concepts if you want to know how your code interacts with the system on which it is running. Want to go even deeper with code performance? Take a look at computer architecture Another topic that should be covered is computer networking, as many applications these days don't work without a network.

What are some good practices to follow while writing your code? Two books that are widely recommended are Code Complete and Pragmatic Programmer. Though they cover a very wide range (everything from organizational hacks to unit testing to user design) of topics, it wouldn't hurt to check out Code Complete at the least, as it gives great tips on organizing functions and classes, modules and programs.

All these techniques and technologies are just bits and pieces you put together with your programming language. You'll likely need to learn about other tools, other languages, debuggers and linters and optimizers, the list is endless. What helps light the path ahead is finding a mentor, someone that is well steeped in the craft, and is willing to show you how they work. This is best done in person, watching someone design and code. Also spend some time reading the code of others (GitHub is a great place for this) and interacting with them on public mailing lists and IRC channels. I hang out on Hacker News to hear about the latest tools and technologies (many posts to /r/programming come from Hacker News). See if there are any local programming clubs or talks that you can join, it'd be a great forum to find yourself a mentor.

Lots of stuff here, happy to answer questions, but hope it's enough to get you started. Oh, yeah, the books, they're expensive but hopefully you can get your boss to buy them for you. It's in his/her best interest, as well as yours!

u/elliotbot · 13 pointsr/cscareerquestions

> I was wondering if a DS course was necessary to do well on Leetcode problems


u/steamywords · 13 pointsr/Futurology

This does nothing to address the difficulty of the control issue. He's basically just saying we'll figure it out before we get AI, don't worry about it.

SuperIntelligence actually spells out why control is so hard. None of those points are touched even generally. He's Director of Engineer at Google, which actually created an AI ethics board because an AI company they bought was afraid that the tech could lead to the end of the human species, yet none of that is even briefly mentioned.

There is very good reason to be cautious around developing an intellect that can match ours, never mind rapidly exceed it. I don't see the necessity for repeated calls to let our guard down.

u/cookenmeth · 13 pointsr/HowToHack

There’s a book called, “Hacking: The Art of Exploitation,” that includes a lot of assembly.

u/expedient · 13 pointsr/programming

Not a video, but Code: The Hidden Language of Computers by Charles Petzold is really great.

u/JamesKerti · 13 pointsr/ProtonMail

I don't work for ProtonMail but as someone who worked as a part of a development team, I feel like I have something to contribute to this discussion.

Getting the Bridge done as quickly as possible isn't simply a question of throwing as many people as they can at the problem.

First, it's an established fact in the software world that shoving more programmers at a project can actually make things worse, rather than better.

Secondly, not every developer brings the same thing to the table and has the same expertise.

The ProtonMail web interface uses one technology.
The encryption itself uses another, plus an even deeper level of theoretical understandings.
ProtonVPN is a completely different technology.

To stick with the house analogy, suggesting that building ProtonVPN means the Bridge isn't a priority is like suggesting that the plumbing in the house must not be a priority because you aren't pulling the carpenters off their jobs to help get the plumbing done as soon as possible.

u/roo-ster · 13 pointsr/sysadmin

This was famously used by the lead manager of the IBM OS360 development project, to explain why adding more programmers wouldn't make it possible to deliver the OS, sooner.

[Edit: For anyone who's interested, he wrote a book called The Mythical Man-Month on this exact topic.]

u/Insindur · 13 pointsr/csharp

First off, well done on getting one of your first apps out there. It's always a daunting step, especially when you're a beginner.

Some general things that will help you improve your current design and any other app you choose to create going forward:

  • Learn about SOLID programming principles. I won't go into too much detail because there is a wealth of resources out there to explain the basics better than I ever could such as this. Once you understand what each of the letters in the acronym means, you can use it as a framework to assess your own design.
  • Design patterns can also be a valuable tool for a developer (though use with caution, if not used properly they can make your application needlessly complex). This site has some simple examples available specific to C#, but you might want to check out some material on object-oriented design first to get a better understanding of WHY we use patterns in the first place. The Head First series is quite a beginner friendly option in this regard Book 1 Book 2.
  • Take a look through the official Microsoft C# guidelines, I noticed a few instances where you could improve the readability of the code based on their checklist (using implicitly typed variables with the var keyword where applicable, using string interpolation etc, using auto-implemented properties for your classes, meaningful variable names etc).
  • Look up DRY (Don't repeat yourself), and KISS (Keep it simple, stupid), it will help you write shorter, clearer methods. I can see a few places in your code where you could decompose certain operations into separate methods.
  • Treat user-input as an unpredictable spawn of Satan that it is: using decimal.TryParse(...) instead of Convert.ToDecimal(...), try...catch blocks, you always want to validate user-input as far as humanly possible.
  • BONUS TIP (though some may disagree with me here): try ReSharper out, it will give you valuable suggestions while coding that you can otherwise miss. Even after 8 years of experience with C#, it helps me out tremendously.
u/drzowie · 13 pointsr/AskPhysics

Reductionism is important, but pure reductionism denies the existence of emergent phenomena (phenomena that depend on collective behavior of many simpler things). A very enjoyable book that covers this and many other topics at a popularly-accessible level is
Gödel, Escher, Bach: an Eternal Golden Braid. First published in the late 1970s, GEB is still delightfully fresh and exciting although a few minor elements are dated (e.g. computers now can beat humans at chess).

u/LongUsername · 13 pointsr/compsci

I'd second unplugging completely: no computer, TV, electronics. If you insist on doing something CS related, Godel, Escher, Bach comes highly recommended.

u/roland23 · 13 pointsr/learnprogramming

The more significant differences between CS graduates and self taught programmers are algorithm design, important coding practices, and a lot of the mathematics.

Books on coding practices exist, but vary in various corporations or programming languages.

I highly recommend MITs book on algorithm design, to some it is considered the bible of all algorithm design.

As others have mentioned, Khan Academy is a great place to start for the mathematics. Particularly CALC I, II, Linear Algebra I, II, Discrete Math I, II.

It also couldn't hurt to look into some theory of computation topics (countability, turing machines, etc.)

u/captainAwesomePants · 13 pointsr/learnprogramming

The big thing you're missing is theory. You have taught yourself to be a programmer, which is great, but you haven't learned any computer science, which is a branch of math focused on whether problems can be solved and how difficult they are to solve. This is likely not particularly applicable to your day to day programming career, but when people start throwing around Big-O notation, it's useful to know what they're talking about. Also it can occasionally help you recognize that certain problems as fundamentally impossible, such as detecting whether a program will run forever or eventually halt.

The second major thing you're missing is formal algorithms training. That means that there are a bunch of useful techniques that you may not know about that may come up from time to time.

The main downside of missing out on these two things is that job interviews, especially for big programmer companies like Google and Facebook, focus heavily on them, especially algorithms. If you don't know that a hash table lookup starts at O(1) but devolves to O(N) in the worst case because of hash collisions, you may have trouble getting a job there.

The rest of what you missed was mostly either crap (UML!) or general breadth stuff that is good to know but not critical (learn how operating systems work, write a compiler, write a TCP networking stack, write a 3D renderer, etc).

I think the best way to deal with the gap is to take a Coursera course on algorithms (there's one starting next month). But that's my learning style. Another alternative would be to pick up a definitive algorithms textbook ( ) and just start reading.

u/1_________________11 · 12 pointsr/Futurology

Just gonna drop this gem here.

Doesn't have to be skynet level smart to fuck shit up. Also once its self modifying it's a whole other ballgame.

u/unovasa · 12 pointsr/programming

I really enjoyed Concrete Mathematics by Graham, Knuth, & Patashnik

u/babyfacebrain666 · 12 pointsr/learnpython

On the flip side I kind of envy you for your confidence in the underlying math... that shit is melting my brain currently.

Check out great starter book for basic python programming with more of an emphasis on just making a basic program vs the underlying data structures or algorithms. Anyone who says they don't still use these programs or an improved version of one is lying lol

For Machine Learning stuffs: the current cause of my brain melting.

If you don't like the idea of a textbook: (this is EXTENSIVE I've been working on it on-off for like a year)

u/EraZ3712 · 12 pointsr/cpp_questions

Books are still the best way to learn C++! C++ Primer, 5th Ed. covers all the basics of C++11 from functions and standard library usage to OOP and templates. Effective C++ reinforces good practices and idiomatic C++ that, despite being written for C++98, is just as relevent today as it was then, some of its contents even more so than ever before. Then Effective Modern C++ then does the same for C++11 and C++14 features, building on top of what C++ Primer covers about C++11 and introducing the subtle changes brought about by C++14. This is my primary recommendation for learning modern C++ from the ground up.

But we live in the internet age! Best make use of it! So many wonderful talks from conferences such as CppCon, C++Now, Meeting C++, ACCU and Code::Dive are all available for public viewing. With regards to modern C++, Herb Sutter's CppCon 2014 Back to the Basics! Essentials of Modern C++ Style and CppCon 2016 Leak-Freedom in C++... By Default are great videos to watch. For more specific topics, here is a list of videos that I've seen and personally found engaging, educational, and worth my time to watch (multiple times!):

  • The Exception Situation for exception handling,
  • rand() Considered Harmful and What C++ Programmers Need to Know about Header <random> for random number generation,
  • Everything You Ever Wanted to Know About Move Semantic (and then some) for move semantics (by one of the authors of the proposal that introduced it!),
  • Modern Template Metaprogramming: A Compendium for template metaprogramming,
  • Lambdas from First Principles: A Whirlwind Tour of C++ for lambda expressions (this one is very good!), and
  • Type Deduction and Why You Care for auto and decltype(auto) (I miss Scott :'( ).

    There are also shows such as CppChat and CppCast where interesting events, projects, papers, and people related to C++ are brought up and discussed. There are so many interesting blogs to read!

    And there is always people on IRC (##c++, ##c++-basic, and ##c++-general) and the Cpplang Slack Channel for live updates, discussions, debates, questions, answers, and/or just plain fun with a group of people that ranges from complete noobs who are learning the basics, to committee members and library authors whose names are known across the community. If you ever have a question or need help, these are the places to go and ask (/r/cpp_questions is nice too! :P ).

    And finally, links to videos, blog posts, articles, papers, interesting Stack Overflow questions, almost everything mentioned above is constantly being shared at and on /r/cpp. Subscribe to both to get a constant stream of links to anything and everything about C++.

    Edit: as for C++17 material, the standard is not technically completed/published yet, but that hasn't stopped the community from creating material about it! This paper lists all the changes from C++14 to C++17, with links to relevant papers, and this Git repo provides a simple "then, and now" comparisons of the major changes to the language. Talks describing the changes in breadth and in depth have been given at conferences, and blog posts have been written for a more textual description of the changes. C++17 is not a major update like C++11 was to C++98, but full of fixes, conveniences, more language flexibility and utility, and new toys to play with! If you have a solid foundation in C++11, C++14 and in turn C++17 should be relatively easy to pick up compared to the shift from classic (C++98) to modern C++.

    TL;DR Learn C++11 the best you can. Once you are comfortable with C++11, the transition to C++14 will feel natural, and C++17 will be waiting just around the corner.
u/MirrorLake · 12 pointsr/learnprogramming

"Code" by Charles Petzold, if anyone wants the link.

u/frenchst · 12 pointsr/cscareerquestions

Three CS fundamental books in the order I'd suggest someone read them if they don't have a background in CS.

u/sbsmith · 12 pointsr/gamedev

Hi PizzaPartify,
I believe that different companies/teams will place emphasis on different skills. When I was helping to hire software engineers for EA's motion capture studio, I liked to see candidates who showed a strong aptitude for engineering code to be maintainable. For me, this meant a familiarity with design patterns and software development processes (like Test Driven Development or Extreme Programming). In my department, much of our code was in C++ and Python. However, other departments would use languages like Java, C# or ActionScript - depending on the project.

It would be helpful to know what role you are applying to.

To answer your specific questions:

  1. If you're already familiar with C++, I would highly recommend reading Effective C++ by Scott Meyers ( Every C++ developer should read this.

    Regardless of the language you're working in, I would also recommend Design Patterns by the gang of four (

    A game-specific recommendation is Game Engine Architecture by Jason Gregory ( It doesn't matter if you intend to write an engine or not, it is immensely helpful to understand how they work.

    I own all of the Game Programming Gems books but use them more as a reference library. The books above will be more helpful right now.

  2. I worked with Unity only briefly to prototype a game, so I can't really comment here.

  3. This is tricky. I think you will need to find a passion project in C++ so that you will just naturally learn more about the language. And speaking of passion: you need to really want the job you are applying for. I have seen qualified developers miss out on jobs because you could tell they were just looking for anything (rather than really being enthusiastic about the position).

    I hope that helps.
u/FeepingCreature · 12 pointsr/starbound

I think this is the problem:

this is what you thought you were saying:

> I think "months" is an exaggeration and I think a lot can be picked up by just reading existing docs.

this is what people thought you were saying:

> I think I know better than The Mythical Man-Month. A new programmer can jump right in at 100% without requiring any instruction or support.

this is what you were actually saying

> I don't buy that new programmers need to be taught existing code...

I mean dude, come on. Either you're backpedalling now or you suck at expressing yourself.

u/ryzic · 12 pointsr/electronics

Sparkfun has some great tutorials, but they might be a little advanced for your level. I suggest trying to find a kit that does something interesting (adafruit and sparkfun have some of these). When you run into something you don't know, google it.


u/dev_bry · 12 pointsr/learnprogramming

You've already done the first step: admitting that college can only teach the fundamentals while the rest of the things you need to know, you will learn while working.

With that out of the way, here's the next step: apply the Joel Test to your new employer.

If it gets an 11 or 12, you'll be fine. Find a senior developer there to mentor you and you'll be a decent software engineer in 1 - 2 years.

Otherwise, while you might learn a lot of new stuff in your first job, they might be inadequate, outdated, or outright incorrect. In this case, plan an exit strategy ASAP so that you can leave to another company that has a much higher score in the Joel Test. In this fast paced software industry, it makes no sense to spend 5 years in a company where you'd only get to grow the same amount as another guy who just spent 6 months in a better company.

Next step: read. No, not those "Teach yourself [insert language that will be deprecated in 2 years] in 24 hours" books - find the books that teach software engineering, lessons that don't get outdated. Here's the usual suggestions:

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/IQBoosterShot · 12 pointsr/books

Ironically, your solution may lay within the pages of The Shallows: What the Internet Is Doing to Our Brains by Nicholas Carr. The author describes how his undying love for books seemed to fade, how picking up and getting into a book seemed much more difficult than before and how distracted he felt he'd become.

This book resonated with me. I am a book lover yet I found myself losing my desire to spend time with a book. I would pick one up and I'd feel my mind start to wander or I'd feel fidgety before the end of a page.

There is a solution. I restructured my approach to the use of the internet and I'm glad to say that I'm reading like a champ again. All the joy and fun is back.

u/admorobo · 12 pointsr/getdisciplined

For anyone interested in the book, it's actually called The Shallows: What The Internet is Doing to our Brains. I read it last year and it made me realize how much of my media consumption is essentially wasted on things like Facebook and yes, even Reddit. I resolved to read more and use the internet less, which has definitely resulted in some good habits forming and some bad ones being broken. I started a reading challenge on Goodreads in January with a goal of reading 30 books this year, and I'm already nearly halfway there in Mid-March.

I personally need to read from paper books. Kindle screens, even the paperink ones, still distract my brain. I need to feel the weight of the book, the flip of the page. Reading for me is both a tactile and intellectual experience.

u/Prcrstntr · 12 pointsr/cscareerquestions
  1. Get the book Introduction to Algorithms. You can find a pdf online.

  2. Read it, and try to program and understand the simpler algorithms: Do the sorting algorithms first, and then go for the binary tree algorithms.
u/wrelam · 12 pointsr/C_Programming

C Interfaces and Implementations has some decent advice for designing C programs. This is also a skill which you 'll develop with time (e.g. over your entire career) so don't worry too much about figuring it out immediately; it requires experience. As you work on various projects you'll get a sense for what works and what doesn't so that over time you'll have developed strategies for solving particular types of problems.

OOP concepts are still valid even though C may not have ways to necessarily implement them within the language proper. Object-Oriented Software Construction is a fantastic book for learning OOP concepts. As your C experience grows, you'll begin to see ways of implementing some of those design strategies with C, even though it's not an OO language.

Knowing when to use what type of data structure can also aid in simplifying your code base. The standard book for this is CLRS, but for C specific implementations and advice, see Algorithms in C.

u/v3nturetheworld · 12 pointsr/cscareerquestions

well depends on what you want to learn. Do you only want to do webdev stuff or learn a ton about CS concepts? I'm going to answer in terms of learning CS stuff, but first here's a page on how to go from knowing nothing to knowing a wide range and depth of CS topics: you do this, you'll be a grade A software engineer!

OK, moving on. First the basics which it sounds like you've got covered.

  1. understand basic programming concepts (conditions, loops, functions)
  2. learn a programming language pretty well, it doesn't matter what language. Being good at and Understanding CS concepts does not involve mastering a single language... once you get the concepts any language will be easy to learn... It sounds like you know some Javascript (not my personal recommendation for learning CS concepts), personally I'd recommend Python (easy syntax, great resources, wide use, etc..)

    OK, now where it sounds you stand. Learning the Advanced stuff.

  3. Algorithms: The bread and butter of programming. There are many resources out there, if you want to buy a book, the gold standard is "Intro to Algorithms, 3rd edition ". Other than that, I'd suggest just the relevant Wikipedia article for algorithms. Take the pseudocode and implement it yourself in your language of choice. Understand what the algorithm is doing. Compare it to similar algorithms, understand why/when it's better or worse.

  4. OK, now that you've got that done, you can start making more complicated stuff. Come up with some silly or interesting real world examples to practice with. I suggest at this point learning more about Object Oriented Programming... learn about Classes, class structure, generics (this all varies by language). Practice, practice, practice. 4 hours of coding a day if your not doing anything else, spend the rest researching/reading.

  5. Learn how to use Unix/Linux. it's good for you(tm)

  6. optional but cool: Learn about Computers structures and how operating systems work, bonus points if you want to build a basic OS from scratch (this requires learning a systems language like C/C++/Rust and some assembly).

    anywhoooo that's kind of an overview/recommendation... feel free to ask any more questions/clarifications/suggestions for resources.
u/asdff01 · 11 pointsr/AskComputerScience

The book that allowed me to do this is the legendary "Gang of Four" Design Patterns book. Code examples are in C++ and it was written a while ago, but is still recommended as a fantastic resource for learning how to design software well.

There is also the SOLID principles, for object oriented design.

u/nonkeymn · 11 pointsr/learnprogramming

leet code is a great place for practice problems

For algorithms this book is great

Also, if you are looking for a software engineering role you will also need to brush up on high level design like this video:

u/NondeterministSystem · 11 pointsr/worldnews

A scenario where such an AI becomes arbitrarily intelligent and capable of interacting with the outside world isn't beyond the realm of consideration. If it's smart enough to outplan us, a superintelligent Go engine of the future whose primary function is "become better at Go" might cover the world in computer processors. Needless to say, that would be a hostile environment for us...though I imagine such a machine would be frightfully good at Go.

If you're interested in (much) more along these lines, I'd recommend Superintelligence: Paths, Dangers, Strategies by Nick Bostrom. I got it as an audio book, and it's thought provoking.

u/RepliesWhenAngry · 11 pointsr/worldnews

Very good point- I'm currently reading (or trying to read...) this book:

I think you'd like it also.

u/nopX0f · 11 pointsr/HowToHack

Go through "Hacking: The Art of Exploitation" by Jon Erickson and learn the skills as needed. When you can make it (and I mean not just do the examples, but understand the how and why in each example) through his book you should have some good base knowledge and an idea what subjects you enjoy, pursue them in that order after that.

amazon link to book

edit formating

u/finitedimensions · 11 pointsr/datascience

I glanced at "Hands-On Machine Learning with Scikit-Learn and TensorFlow" by Aurelien Geron and thought it is quite good. But I have not had a chance to read it deeply yet.


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/SkepticalMartian · 11 pointsr/PHP

Beginner and Novice are the same thing. It sounds like you're trying to transition of Beginner to Intermediate.

You really should stop trying to write your own framework for the moment, and start using a mature framework. Good frameworks aren't trivial to write, and generally require an expert level of knowledge to write well.

The thing with a framework is that it helps remove you from a lot of boilerplate code - that is, common code everyone would normally need for any give web project. The easiest way for you to bridge the gap is to begin using and understanding code that is better than yours. Don't reinvent the wheel until you understand how to make a better wheel.

Design patterns are everywhere in good code. The trick is to recognize when a design pattern is being used, and to understand why it's being used. In order to help with this, it's commonly recommended to read Design Patterns: Elements of Reusable Object-Oriented Software. This is a book every programmer should own regardless of the language they use.

u/faintdeception · 11 pointsr/learnprogramming

The amount of planning you have to do scales with the complexity of the project.

Professors drill the importance of planning, documentation and unit testing into students because it is extremely important and once you start your career if you're a poor planner it's going to come back to haunt you.

However, when you're working on a simple project that's not intended for public release you don't have to go overboard with docs unless you just want to practice.

My own process usually starts with me jotting down an idea; I find that writing it out helps me to get a better grasp on the overall feasibility.

Once I'm satisfied that I actually have something I can implement I'll diagram the flow of the application, and maybe do some wire-frames.

I usually find that this is enough of a launching pad for a simple personal project.

Professional projects are a different ballgame, because as I said, the amount of planning you have to do scales with the complexity and size of the project. It's in the professional environment that all of the things your professors are teaching you will become really important.

So, to answer what I think was your question,

>So how does one end up with 20 classes connected with each other perfectly and a build file that set everything up working flawlessly with unit test methods that check every aspect of the application?

This comes about more in the implementation phase than the planning phase. I've heard it said that in war "no plan survives contact with the enemy" and you'll find this to be true in software development as well. Even when you plan really well you'll sometimes have to go back to the drawing board and come up with a new plan, but that's just part of the process.

Some books that I recommend on the topic are Hackers and Painters - Paul Grahm and I think every software dev should have a copy of Design Patterns

The former is a collection of essays that might give you some useful perspective on the process of writing software.

The latter is more of a reference book, but it's helpful to become familiar with the patterns covered in the book so that you don't find yourself re-inventing the wheel every time you begin a new project.

As for the other part of your question (apologies for addressing them out of order)

>My new "bottleneck" writing code is the structure. I end up having huge classes with way to many public methods. I might as well just write a script with everything in one file. Almost anyway.. I try to write OO, but I often get lazy and just end up with not very elegant systems I would say.

Don't be lazy, because as you're already seeing, it comes back to bite you in the ass.

As you're writing your code you have to be mindful of the complexity of the project as it grows around you, and you have to periodically take a step back and look at what you've created, and re-organize it. This kind of goes back to what I was saying earlier about no plan surviving enemy contact.

So when you find yourself creating a new class that you hadn't thought about, be mindful of where you put it.

Should you create a new file (yes, of course you should), new folder?

Do you have a bunch of similar classes doing the same thing? Should they inherit from one another?

Be especially mindful of copy and pasting from one are of your code to another, generally speaking if you're doing this you should probably be writing a function, or using inheritance.

It's up to you as the developer to make sure your project is organized, and now-a-days it's really easy to learn how to best organize code by looking through other peoples projects on github, so there's really no excuse for it.

Hope that helps, good luck.

u/mooshoes · 11 pointsr/IWantToLearn

I'd recommend you start with the book "Code", which handles just this progression:

From there, investigate operating system development. The Minix OS is very well documented.

u/SouthernArrowwood · 11 pointsr/learnprogramming

From what I understand they're a way to structure your code to solve specific problems. An example would be a combination of the Factory pattern and the Component pattern as a way to use data driven design to create "things" in your world (I have enemy Bob, Bob.txt/Bob.xml/Bob.whatever has all the information to create Bob. The "factory reads in this info, and then handles creating the entity and components.)

If you'd like to learn more there's the gang of 4 book Design Patterns: Elements of Reusable Object-Oriented Software, and for a focus on design patterns in games I liked

u/toastisme · 11 pointsr/IWantToLearn

A similar question was posted on Quora not long ago, and the main recommendation was Code by Charles Petzold:

Having subsequently read the book I think it's a fantastic introduction, and goes through everything from the importance of binary code and applying Boolean logic to circuits, to the details of the inner workings of the first microprocessors, and all in an interesting and engaging way.

u/Zokleen · 11 pointsr/Denmark

Et godt sted at starte er bogen “The mythical Man-month” af Fred Brooks.

IT-projektledelse er på mange måneder ikke anderledes end projektledelse generelt, men der kræves en væsentlig forståelse for, at opgaverne som oftest kan være enormt komplekse af natur.

Du vil derfor opleve, af din aller aller største hurdle ikke er dit team, som står for eksekveringen, men dine interessenter (aka stakeholder management). Uden at smøre unødigt tykt på stereotyperne, så er det de færreste “projektsponsorer” eller lign interessenter fra forretningssiden, som egentlig har bare en snært af sans for hvorfor IT/softwareudvikling er svært at tids/budget-estimere.

Et klassisk eksempel:

  • Chef: “Jamen det er jo bare en lille knap, hvor svært kan det være..!”
  • Projektleder: “Ok, trækker vejret dybt og finder whiteboard markeren frem ... lad mig forklare det igen....”
  • Chef: “ej det behøver du ikke. Jeg har allerede lovet det til kunden at vi har det klart i næste uge”

    Udfordring nummer 2 er, at din interessenter/ resten af forretningen stort ser altid lever i en “waterfall” verden, også selvom I kører agile eller lign. metoder.

    Dvs, at I som team ofte kan føle jer enormt klemt af, at den eksterne verden ikke forstår eller gider spille med indenfor jeres best practices. (Men det lyder fedt for virksomheden at proklamere “vi er agile”).

    Anyway, det skal siges at jeg til dagligt arbejder med product management, så det er lang tid siden jeg har levet i en “project-only” verden.

    Edit: typos
u/roodammy44 · 11 pointsr/cscareerquestions

I can't believe noone has mentioned The Mythical Man Month yet. If nothing else, it will help you give better time estimates for your work.

u/lookatmetype · 11 pointsr/AdviceAnimals

Yea, understand this book cover to cover and you'll get any silicon valley job easily.

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/ajh2148 · 11 pointsr/computerscience

I’d personally recommend Andrew Ng’s course if you’re just starting. This will give you practical and guided experience to tensorflow using jupyter notebooks.

If it’s books you really want I found the following of great use in my studies but they are quite theoretical and framework agnostic publications. Will help explain the theory though:

Deep Learning (Adaptive Computation and Machine Learning Series)

Reinforcement Learning: An Introduction (Adaptive Computation and Machine Learning series)

Pattern Recognition and Machine Learning (Information Science and Statistics) (Information Science and Statistics)

Machine Learning: A Probabilistic Perspective (Adaptive Computation and Machine Learning series)

u/fazzone · 11 pointsr/programming

Meh, these sort of definitional quibbles annoy me. What is the point of manufacturing a distinction such as this that pretty much exists solely as a "gotcha"? The fundamental idea at work is that you're re-using the answers to subproblems in order to computer the answer to the big problem. As long as you've got that idea down, what's the huge philosophical difference in the order that the subproblems are computed? I'm not saying that the distinction is invalid - there is an difference for sure - just not of great importance. In fact, if I were explaining it, I'd introduce DP as a particularly clean form of memoization -- one where you have spent effort to formulate an algorithm in a way that guarantees all subproblems are solved before their solutions are required in the next tier of problems.

I'm not 100% sure, but I think I remember Introduction to Algorithms explaining it this way. They may also have gone for taxonomy where memoization is the specific mechanism of storing results of previously-solved problems and dynamic programming is the application of such to algorithms (thus there would be top-down dynamic programming and bottom-up dynamic programming).

Edit: syntax (changed "computed in" to "computed")

u/Jumballaya · 10 pointsr/FreeCodeCamp

> Felt pretty good about myself.. until I got to the algorithm section.

This is VERY normal. These are hard math concepts that take everyone a little bit to get used to. The only way you will learn these concepts is by implementing them, over and over and over and over and over.

> I would say I was getting stuck probably about half the time and would turn to read-search-ask method.

If this were not the case, then there would be no need to learn. I am a web developer and I look up the most inane shit on a daily basis because it is something that I either have never used/implemented or something I rarely use/implement (my big one here is PHP's array functions, I can never remember if the array comes before the callback or not with array_map() but I remember that it is the exact opposite of array_filter() and array_reduce()). Embrace this, build your Google-fu because you will always need it.

> A lot of times I was missing some small operator (code error) or somewhat minor step in the thought process, other times I would be lost entirely. Basically I wasn't thinking about how to implement my code well enough, imo.

This is 100% normal. Have you ever heard of a code review? This is where other developers review your code before it goes live. The point of this is that you cannot be 100% perfect with your code, maybe you forgot a semicolon or maybe your code is tough to read, that is what the code review process is like. I write code in iterations to make sure that I never 'get in too deep' and the fear of removing code sets in, each of these phases I go through a mini code review to see what is working at what isn't. I ALWAYS find some half-baked logic in my first few iterations before I really get into it and over the last couple years I find that I need fewer and fewer iterations and that I am able to get a better 'big picture.'

Don't be afraid to scrap some code and go back at it, this is your education and only you know when you understand the material. I have a bajillion abandoned side projects and so does every developer that I know.


  1. Keep coding, it is the only way you are going to get better, for real.
  2. Read other people's code. This is where I learn all my cool tricks; Anytime I find a cool project/library/framework I hit up github and read through as much of the source as I can stomach. You will be surprised at how much you learn about the parts of a project that AREN'T code like documentation, contributing, comment styles, things that seem secondary when first learning to program.
  3. Design patterns, paradigms, data structures, algorithms. I wouldn't suggest going head-on with this stuff yet, but don't be afraid of it. Design Patterns Book (Gang of Four) - This is a very highly suggested book, though the examples are in C++
  4. Learn another language. The largest increases in my JS knowledge have come from learning another language and bringing back that language's way of thinking into JS. I would suggest Python because it is stupid-easy to jump in and start making cool stuff, but any language will do. Python, Java, C#, PHP, Elixir, Ruby, C++ and Go are a handful I can think of that will aid in employment as well as teach you new ways of thinking about JS.
  5. Talk to developers, go to meetups, scour github for misspellings in documentation and contribute. Anything that you can do to get a free mentor will be an AMAZING boon for you


  6. Project Euler - Looking for something to code? Here is around 600 different problems to solve. I am pretty sure some of the FCC algorithms were taken from Project Euler as it is a very good resource.
  7. Eloquent JavaScript - A great resource, though, a little dated
  8. You Don't Know JS - Another great resource on the JavaScript language. I reread through these books every once in a while.
  9. Professor Frisby's Mostly Adequate Guide to Functional Programming - Great primer on functional programming with JavaScript
  10. Rosetta Code - Algorithm reference across many languages, though, the coding style for each tends to be a mess it is a good getting-started reference.
  11. 2017 Frontend Handbook - This is great for figuring out what to learn next when you get to that point where you don't know what to learn next.

    I did FCC up through the frontend section, I started my web dev career path in 2014 and picked up FCC in mid 2015 right before getting a job in web development. The most important part of FCC is that you are coding, getting practice and making mistakes, TONS of mistakes. Just keep it up, don't get burned out and remember that it is about your education, not how many challenges you complete. Code and read and read code.
u/aMonkeyRidingABadger · 10 pointsr/learnprogramming

I would emphasize the end of /u/razeal113's post. Don't reinvent the wheel. Learn from those who came before you by studying common algorithms.

MIT's algorithms course, 6.006, is a good introduction to the concepts that are important to analyzing and applying algorithms and it also introduces many important algorithms. You can watch the lectures and access the course material for free.

If reading is your thing, I like Skiena's Algorithm Design Manual. It's not too dense and has war stories where you can read about how the algorithms have been used to solve real problems.

Whatever your goal with programming is, there's a good chance that it won't involve inventing new algorithms; instead, nearly everything you do will involve recognizing how to apply and/or adapt an algorithm you already know to the problem you're trying to solve. The more algorithms you already know, and the more comfortable you are with them, the easier it will be to recognize and apply.

u/lukeprog · 10 pointsr/Futurology

Our co-founder Eliezer Yudkowsky invented the entire approach called "Friendly AI," and you can read our original research on our research page. It's interesting to note that in the leading textbook on AI (Russell & Norvig), a discussion of our work on Friendly AI and intelligence explosion scenarios dominates the section on AI safety (in ch. 26), while the entire "mainstream" field of "machine ethics" isn't mentioned at all.

u/sanedave · 10 pointsr/learnprogramming

Three books I have been using:

The Definitive Guide to How Computers Do Math

Web page here:

Assembly Language Step-by-Step: Programming with Linux

Hacking: The Art of Exploitation, 2nd Edition

The first uses a virtual machine running on Windows, with 5 registers, 65K of virtual memory, a debugger, and will give you a good basic understanding of what is going on. The second book uses Intel X86 on Linux, and gives a solid foundation of the most used instructions. The third book is just good.

Other favorites of mine include "The Art of Debugging" by Norm Matloff (google for his excellent web page) and "Professional Assembly Language" by Richard Blum.

Have fun!

u/thetafferboy · 10 pointsr/artificial

From the comments below from /u/Buck-Nasty /u/Jadeyard /u/CyberByte /u/Ken_Obiwan

For those that haven't read it, I can't recommend Superintelligence: Paths, Dangers, Strategies highly enough. It talks about various estimates from experts and really draws the conclusion that, even at the most conservative estimates, it's something we really need to start planning for as it's very likely we'll only get one shot at it.

The time between human-level intelligence and super-intelligence is likely to be very short, if systems can self-improve.

The book brings up some fascinating possible scenarios based around our own crippling flaws, such as we can't even accurately describe our own values to an AI. Anyway, highly recommended :)

u/beardog108 · 10 pointsr/hacking

One thing good to learn is social engineering, as its one of the most common threats faced by basically everyone. If you learn how malicious social engineers think (and how they combine knowledge with tech based hacking), you can defend against them better. I enjoyed Unmasking the Social Engineer.

Also, if you're not experienced with low level systems, you should read The Art of Exploitation.

u/chromaticgliss · 10 pointsr/AskComputerScience

Caclulus track is typically required. Linear algebra is pretty useful (and often required). If you really wanna go into CS specific maths.... pick up a book on Discrete Math and give it a go. If you want to be really hardcore, pickup Concrete Mathematics ... good luck, hard book.

Honestly, you're probably better off spending that time learning a programming language. Specifically, whatever language your school teaches mostly. Math in a CS bachelor isn't very intense until you get into senior/graduate level courses.

u/madebyollin · 10 pointsr/MachineLearning

The Bostrom book is the go-to reference for the sort of ai risk arguments that Musk and others endorse. Elon has previously linked to this WaitBuyWhy post summarizing the argument from the book, so I would read that if you're curious.

(Not that I agree with any of it, but linking since you asked)

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/redditEnergy · 10 pointsr/cpp

Here are several ways to get yourself started.

  • Read about the c++ core guidelines and Scott Meyer's Effective c++ book
  • The best way to read them without getting really bored or overwhelmed
    • Is 2 ways (Also this is my opinion)

  • Read the table of contents for each
    • Honestly just doing this is a valid tactic. Often when I'm bored I'll crack open the book/guidelines and browse the table of contents and be like "WOAH", "WHAT", "HUH"
  • Turn up ALL the warnings + more
    • I work in Visual Studio almost exclusively so check W4 and then combine it with Resharper (Google "resharper c++")
      You can use clang intelligence thanks to resharper to pick up on even more errors that will tell you that you should be using modern c++ practices. And if you use these flags
    • *,-cppcoreguidelines-*,-cppcoreguidelines-*,-google-*
    • clang -Wall -Wextra -Weverything -Wno-c++98-compat -Weffc++
      • Feel free to look these up / add more
    • You'll slowly start learning some modern c++ via just Visual Studio or Resharper or Clang yelling at you.
    • Also learning this way you can look up with resharper or with google why the thing you are doing is wrong / not modern.

  • Extra advice
    • Often you can just google "how to do X in modern c++"
    • Example "How to do random in modern c++"
      • And the top answer will generally get you someone saying something about <random>
      • From here based on the quality of the answer either trust them, or go find better documentation from either the above resources or from here:
    • Look at other languages like Rust, Go, Jai
      • Example rust generics have better error messages than c++
      • How do you do this in c++?
      • Well the answer is in c++ 20
      • I'll let you explore
      • But my main point is that by looking at new languages you can learn more about modern c++ by asking yourself "Can I do this in c++?". Often the answer is yes but the syntax is gross or in a newer standard. But better that is a heck of a lot better than nothing!
u/remembertosmilebot · 10 pointsr/learnprogramming

Did you know Amazon will donate a portion of every purchase if you shop by going to instead? Over $50,000,000 has been raised for charity - all you need to do is change the URL!

Here are your smile-ified links:


^^i'm ^^a ^^friendly bot

u/Grazfather · 10 pointsr/engineering

Anyone who likes this stuff should really read code. The author goes from tin-can phones to building a computer, in language anyone could follow.

u/Monguce · 10 pointsr/askscience

This is a really great book about the topic. It's much simpler than you might think but kind of tricky to explain unless you know a bit of back ground. The book costs less than a tenner and will give you a while different appreciation of how computers work. Well worth a read even if it starts out seeing rather simple.

u/amenkhet · 10 pointsr/IWantToLearn
u/jmagic88 · 10 pointsr/learnprogramming
u/kqr · 10 pointsr/learnprogramming

If you are willing to sacrifice the "language" requirement, you could go for something like Introduction to Algorithms which will definitely make you a better programmer, regardless of your field. It contains, directly or indirectly, the solutions to 95% of the problems you'll encounter, and gives you the tools to deal with the last 5%.

u/auctorel · 10 pointsr/csharp

An alternative to the gang of 4 book which is easier to digest is the head first guide

Head First Design Patterns

u/c_d_u_b · 10 pointsr/AskHistorians

Computer scientist here... I'm not a "real" mathematician but I do have a good bit of education and practical experience with some specific fields of like probability, information theory, statistics, logic, combinatorics, and set theory. The vast majority of mathematics, though, I'm only interested in as a hobby. I've never gone much beyond calculus in the standard track of math education, so I to enjoy reading "layman's terms" material about math. Here's some stuff I've enjoyed.

Fermat's Enigma This book covers the history of a famous problem that looks very simple, yet it took several hundred years to resolve. In so doing it gives layman's terms overviews of many mathematical concepts in a manner very similar to jfredett here. It's very readable, and for me at least, it also made the study of mathematics feel even more like an exciting search for beautiful, profound truth.

Logicomix: An Epic Search for Truth I've been told this book contains some inaccuracies, but I'm including it because I think it's such a cool idea. It's a graphic novelization (seriously, a graphic novel about a logician) of the life of Bertrand Russell, who was deeply involved in some of the last great ideas before Godel's Incompleteness Theorem came along and changed everything. This isn't as much about the math as it is about the people, but I still found it enjoyable when I read it a few years ago, and it helped spark my own interest in mathematics.

Lots of people also love Godel Escher Bach. I haven't read it yet so I can't really comment on it, but it seems to be a common element of everybody's favorite books about math.

u/distantocean · 10 pointsr/exchristian

That's one of my favorite popular science books, so it's wonderful to hear you're getting so much out of it. It really is a fascinating topic, and it's sad that so many Christians close themselves off to it solely to protect their religious beliefs (though as you discovered, it's good for those religious beliefs that they do).

As a companion to the book you might enjoy the Stated Clearly series of videos, which break down evolution very simply (and they're made by an ex-Christian whose education about evolution was part of his reason for leaving the religion). You might also like Coyne's blog, though these days it's more about his personal views than it is about evolution (but some searching on the site will bring up interesting things he's written on a whole host of religious topics from Adam and Eve to "ground of being" theology). He does also have another book you might like (Faith Versus Fact: Why Science and Religion are Incompatible), though I only read part of it since I was familiar with much of it from his blog.

> If you guys have any other book recommendations along these lines, I'm all ears!

You should definitely read The Selfish Gene by Richard Dawkins, if only because it's a classic (and widely misrepresented/misunderstood). A little farther afield, one of my favorite popular science books of all time is The Language Instinct by Steven Pinker, which looks at human language as an evolved ability. Pinker's primary area of academic expertise is child language acquisition, so he's the most in his element in that book.

If you're interested in neuroscience and the brain you could read How the Mind Works (also by Pinker) or The Tell-Tale Brain by V. S. Ramachandran, both of which are wide-ranging and accessibly written. I'd also recommend Thinking, Fast and Slow by psychologist Daniel Kahneman. Evolution gets a lot of attention in ex-Christian circles, but books like these are highly underrated as antidotes to Christian indoctrination -- nothing cures magical thinking about the "soul", consciousness and so on as much as learning how the brain and the mind actually work.

If you're interested in more general/philosophical works that touch on similar themes, Douglas R. Hofstadter's Gödel, Escher, Bach made a huge impression on me (years ago). You might also like The Mind's I by Hofstadter and Daniel Dennett, which is a collection of philosophical essays along with commentaries. Books like these will get you thinking about the true mysteries of life, the universe and everything -- the kind of mysteries that have such sterile and unsatisfying "answers" within Christianity and other mythologies.

Don't worry about the past -- just be happy you're learning about all of this now. You've got plenty of life ahead of you to make up for any lost time. Have fun!

u/ThomasMarkov · 10 pointsr/math

Gödel, Escher, Bach: An Eternal Golden Braid by Douglas R. Hofstadter is perhaps the most thought provoking book I have ever read. It unifies music, art, and mathematics and will simply blow your mind.

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/DoorsofPerceptron · 10 pointsr/MachineLearning

For a maths heavy book, I'd go with Bishop's Pattern recognition and Machine Learning.

Check out the reviews here:

u/RecoverPasswordBot · 10 pointsr/cscareerquestions

For those interested, Coursera is hosting an Algorithms course taught by Kevin Wayne and Robert Sedgewick, authors of a fairly well received Algorithms book.

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/vorpal_potato · 10 pointsr/csMajors

I learned most of what I know from Robert Sedgewick, whose prose is exceeded in clarity only by his diagrams:

Steve Skiena is also excellent, and writes a bit more accessibly:

You can usually find these on the shelves of a university library.

u/Taffaz · 10 pointsr/compsci

The other guys are right that they are multiplexers.

Check out The Elements of Computing Systems if you really want to learn from the ground up. I've just started reading it and after the second chapter you have to figure out how to make an ALU using logic gates made in the previous chapters from a NAND gate including 16 bit multiplexers.

Amazon Link

Book Website

u/last_useful_man · 9 pointsr/learnprogramming

Wat? No-one's mentioned ('Questions' at the top of the page)? Go there and find Amazon's, and many other companies' interview questions. Research the things you don't know, limber up on the variety. It'll be overwhelming, but it's what you need.

Oh, and one recommendation for an algorithms book is Steve Skiena's Algorithm Design Manual. It covers the basics, but goes into /some/ of the more esoteric data structures (and dynamic programmng) as well.

u/galahadredgrave · 9 pointsr/ArtificialInteligence

I'm just beginning this journey myself, so judge what I say accordingly.

Artificial Intelligence: A Modern Approach seems to be the most popular textbook.

This article has some seemingly good advice, though it seems to be geared more toward Machine Learning (ML) than AI in general.

I think you'll want to learn a programming language. The above article recommends Python as it is well suited to ML.

There is (was?) a free online course on ML from Stanford by Andrew Ng. I started to take it a couple years ago but never finished. It is very accessible. The lectures appear to be on YouTube.

Grokking Algorithms is a highly regarded book on algorithms.

Make a free Amazon Web Services account and start playing with Sagemaker.

There really is no well defined path to learning AI, in my opinion. It is a highly interdisciplinary endeavor that will require you to be a self-starting autodidact. It's very exciting though. There is still plenty of new ground to be broken. Some might argue it is difficult for the little guy to compete with big labs at the big tech companies with their ungodly amounts of data to feed their AI, but I am optimistic.

u/0b_101010 · 9 pointsr/learnprogramming

Hi! I recommend the following books:

u/SomeIrishGuy · 9 pointsr/IWantToLearn

Artificial Intelligence: A Modern Approach is a commonly used introductory textbook.

u/bluecoffee · 9 pointsr/algorithms

Skiena's Algorithm Design Manual. CLRS is the other typical recommendation, but I found Skiena to be much more readable.

u/emtuls · 9 pointsr/netsec

Hey /u/Xerack! I'm the original author of the post linked here.

Appreciate the feedback! If you think I could clarify anything better, please let me know.

As far as resources for Reverse Engineering, I can provide you with a baseline that I would recommend starting with.

x86 Assembly:

If you don't know assembly language at all, this list of videos was where I picked up a decent amount of x86 assembly language.

A few good books would be:

  • Hacking: The Art of Exploitation I am a huge advocate for this book. I learned a lot from this and have read it multiple times. It is written very well and teaches someone with no experience how to do C programming and assembly. This is mainly a book for learning exploitation/vulnerability research, but that can play hand and hand with Reverse Engineering. It will show you the assembly language break down of basic exploits and this can help you with RE.

  • Practical Reverse Engineering I read through the beginning of this book and it gave me some good foundations of understanding memory and computer architecture for RE along with assembly of course

  • Secrets of Reverse Engineering This book is a bit in depth, but the beginning gives another good foundation for Comp Architecture and assembly stuff.

  • The IDA Pro Book Haven't personally read this book yet, but I have been told it is the defacto standard for learning IDA Pro, and it has examples you can learn from.

    Hands On:

  • Legend of Random Very useful hands on with tutorials. Mainly based on cracking, but that requires reverse engineering. Highly recommend this!

  • Lenas Tutorials Again, another awesome hands on tutorial, mostly based on cracking as well.

  • Crackmes These are more of challenges once you start to have a little understanding down


    Tons of courses on youtube. I learn well from visual, so I recommend these youtube videos:

  • Basic Dynamic Analysis
  • Real World Decompilation There are a few videos to this series and he disassembles a game, definitely nice to learn from.

    Beyond that, Google will always be your friend, and /r/reverseengineering. I also have a bunch of material for Malware RE, but that's a bit different than Software RE, though it is relatable.
u/VelveteenAmbush · 9 pointsr/MachineLearning

> I can't help but cringe every time he assumes that self-improvement is so easy for machines so that once it becomes possible at all, AI skyrockets into superintelligence in a matter of weeks.

He doesn't assume it, he concludes it after discussing the topic in depth.

Pages 75-94 of his book. Preview available via Amazon.

u/starkprod · 9 pointsr/worldnews

The whole terminator / skynet scenario isnt what they are afraid of either. If you would like to know more on the subject matter, I would suggest reading "Superintelligence" by Nick Bostrom. This paints a pretty good picture of the problem with AI.

TL/DR of parts of the book

1: It is stupidly difficult to design an AI that has the same frame of reference as humans. There are many reasons for this, well described in the book. In short, we humans have values such as good and bad, a machine is unlikely to share ours and might aim for success over failiure, without regard to what we would call bad side-effects.

2: This leads to many scenarios where you tell an AI to do a thing, and it does just that, but in a way that will harm humans, not as a means or an end, just as a biproduct. Harm is a broad term. Not needing to kill us, but re-routing all available power to a specific calculation would have serious ramafications for anything using electricity. Using all available resources to create more computers or electricity will also be a big problem for human existance or society as we currently know it. Suggest to read a summary here:

3 Since 1 and 2 are difficult, its difficult to create reliable safeguards. There is a lot of theory on how to build them, but all in all, they are not easy to do, and whats worse, you often have no idea of knowing that they work until they fail.

4 Since 3 is difficult, corporations or governments might not investigate fully if they have managed to take nececary precautions since they will then maybe fall back in the race of developing said AI. Increasing the risk of a catastropic failure.

5 A self improving general AI will be able to do so in a extremely rapid pace.

6 Combine all of the above and we get the likelyhood of a non zero chance that we develop an AI that we cannot understand (or understands us, or might not care about us for that matter) that we have no way of stopping. Said AI may be doing all in its power to help us with what we are asking of it, and as a byproduct of doing just that, might turn the planet into a giant solarpanel. It is not saying that this is the default outcome, however it is likely. The thing is, if it does, its non-reversible. And currently, we are not sure how to prevent such a scenario.

Terminator scenario extremely unlikely. What ppl are afraid of are that we might just fuck up because "we are not building skynet, we are making an intelligent paperclip counter!" without realizing that there are big dangers even in this extremely simple scenario.

u/pm_me-your_tits-plz · 9 pointsr/learnpython

I haven't read it myself, but it has been recommended to me.

Edit: PM me if you want a free copy(have it in epub, mobi and pdf)
EDIT: I stand corrected, I was thinking of another book that was azw3 format.

u/akmark · 9 pointsr/programming

I'll recommend Code, even though it isn't specifically theoretical. However, it does go over how code (semaphore, morse code) evolved over time. From someone who does program this is about a 'human' a book as they come which could fit exactly what you are looking for.

u/McFuckyeah · 9 pointsr/askscience

This is the book you want to read. It walks you through every bit of how a CPU works, in an incredibly approachable way. (If you can understand a light switch, you can understand this book.)

u/edwilli222 · 9 pointsr/AskProgramming

This is kind of a weird one but I’d suggest Code. Very non-technical, no programming, but cool history and fundamentals.
Code: The Hidden Language of Computer Hardware and Software - Code: The Hidden Language of Computer Hardware and Software

u/Newt_Hoenikker · 9 pointsr/C_Programming

C and C++ are pretty different nowadays depending on your standard. "Game engine" is a pretty generic descriptor, because you can build game engines in a lot of different ways depending on your needs for the genre and how all-encompassing your engine needs to be, so I'm going to ask you a few questions about specifics in regards to your experience which might help to flesh out where you can start your search.

  • How are you with Data Structures? Algorithms? Which are you familiar with? How extensively have you used them? CLRS is a decent starting point with pretty broad coverage and good descriptions.

  • What about Design Patterns? Which ones? How much? They're not so much applicable in C, but C++ and other OOP languages are lousy with them. My university was way too into this book, but it wasn't bad; bonus all the examples are in C++.

  • How portable is your code, generally? What's your programming environment like? Windows? Mac? Linux? *BSD? Games are usually Windows oriented, but there's a lot that C/++ can do aside from that, and IMHO the best way to learn systems programming is with C and a Unix-like OS.

  • What is it exactly that you want to accomplish with your code? A broader engine? A more portable engine? Something not game related? In my experience learning for the sake of learning is great and all, but I lack drive without a concrete goal I'm working toward.

    Hope this helps.
u/NotAGeologist · 9 pointsr/computerscience
u/weasler · 9 pointsr/compsci

Code is an absolute classic.

u/ActionHotdog · 9 pointsr/cscareerquestions

Knowing a giant list of programming languages is really overrated. Instead, focus on learning new programming concepts.

Sometimes that can mean learning a new language, but not always. Some examples:

  • Design patterns! There's so many and while a lot of them are pretty niche, it's always helpful to be able to identify what someone else's code is doing, or identify when a give problem can be partially solved using one. The Gang of Four is the go-to book for this area.

  • On the other end, anti-patterns. Being able to identify (and fix) poor design choices that can cause maintainability problems later is really valuable.

  • Memory management. Java/C# handle most of it for you, but understanding what's happening under the covers is crucial for making design decisions (i.e., how much garbage needs to be collected as a result of using this API versus a different one?). C/C++ is the king of this area, so you could use this as a reason to learn a new language.

  • Functional programming (Scheme, Lisp). It's really different from imperative (Java, C#, C++) programming.

  • Advanced features of languages that you already know. Generics, operator overloading, etc. You might know many of these, but I doubt you know all of them.

    And regarding your concern of it being harder to learn new languages later, you'll only really have that problem when learning a vastly different language (such as Scheme when compared to your C#). Once you know one language in the same "family", a lot of knowledge carries over.
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/dhobsd · 9 pointsr/askscience

Hooray, a question I can answer!

One of the problems here is that the question is worded backwards. Binary doesn't combine to give us programming languages. So the answer to your question is somewhat to the contrary: programming languages were invented to ease the tedium of interfacing using binary codes. (Though it was still arguably tedious to work on e.g. punched cards.) Early interfaces to programming machines in binary took the form of "front panels" with switches, where a user would program one or several instructions at a time (depending on the complexity of the machine and the front panel interface), using the switches to signify the actual binary representation for the processor functions they desired to write.

Understanding how this works requires a deeper understanding of processors and computer design. I will only give a very high level overview of this (and others have discussed it briefly), but you can find a much more layperson accessible explanation in the wonderful book Code: The Hidden Language of Hardware and Software. This book explains Boolean logic, logic gates, arithmetic logic units (ALUs) and more, in a very accessible way.

Basically, logic gates can be combined in a number of ways to create different "components" of a computer, but in the field of programming languages, we're really talking about the CPU, which allows us to run code to interface with the other components in the system. Each implementation of a processor has a different set of instructions, known as its machine code. This code, at its most basic level, is a series of "on" or "off" electrical events (in reality, it is not "on" and "off" but high and low voltages). Thus, different combinations of voltages instruct a CPU to do different things, depending on its implementation. This is why some of the earliest computers had switch-interfaces on the front panel: you were directly controlling the flow of electricity into memory, and then telling the processor to start executing those codes by "reading" from the memory.

It's not hard to see how programming like this would be tedious. One could easily write a book to configure a machine to solve a simple problem, and someone reading that book could easily input the code improperly.

So eventually as interfacing with the machine became easier, we got other ways of programming them. What is commonly referred to as "assembly language" or "assembler" is a processor-specific language that contains mnemonics for every binary sequence the processor can execute. In an assembly language, there is a 1:1 correlation between what is coded, and what the processor actually executes. This was far easier than programming with flip-switches (or even by writing the binary code by hand), because it is much easier for a human to remember mnemonics and word-like constructs than it is to associate numbers with these concepts.

Still, programming in assembly languages can be difficult. You have to know a lot about the processor. You need to know what side-effects a particular instruction has. You don't have easy access to constructs like loops. You can't easily work with complex datatypes that are simply explained in other languages -- you are working directly with the processor and the attached memory. So other languages have been invented to make this easier. One of the most famous of these languages, a language called "C," presents a very small core language -- so it is relatively easy to learn -- but allows you to express concepts that are quite tedious to express in assembler. As time has gone on, computers have obviously become much faster, and we've created and embraced many languages that further and further abstract any knowledge about the hardware they are running on. Indeed, many modern languages are not compiled to machine code, but instead are interpreted by a compiled binary.

The trend here tends to be making it easier for people to come into the field and get things done fast. Early programming was hard, tedious. Programming today can be very simple, fun and rewarding. But these languages didn't spring out of binary code: they were developed specifically to avoid it.

TL;DR: People keep inventing programming languages because they think programming certain things in other ones is too hard.

u/beaverjacket · 9 pointsr/AskReddit

This book is a very good explanation of how computers work. It starts with explaining electromechanical switches, and how you can turn a couple switches into a logic gate. Then, it shows how you can put logic gates together to do arithmetic. It goes on like that until you reach programmable computers.

u/IamAlbertHofmann · 9 pointsr/learnprogramming

here you go

It's the 'hidden language', not 'secret'. Sorry about that.

u/Scripto23 · 9 pointsr/arduino

If you only get one book get Make: Electronics. I was in your position not that long ago, and after getting this book I am now able to build any circuit I need. This book is great and I'll leave it at that.

u/mysticreddit · 9 pointsr/gamedev

Actually, it's a bit of both.

Problems / Criticism of GoF

1. The GoF was written in the era of "OOP is a silver bullet" and single-threaded programs by academics who were generally clueless about the importance of understanding data transforms, data caches, instruction caches, and minimizing cache misses. See: Pitfalls of Object Oriented Programming of how you get massive speedups just by understanding cache usage and re-arranging the data.

2. One of the problem with the GoF methodology is when people turn it into a religion. People start trying to apply design patterns to everything even when it isn't needed and you end up with this over-engineered, bloated, slow, clusterfuck of code.

3. Programmers who focus on performance have also been pretty vocal about "cargo cult programming" and design patterns:

  • Christer Ericson who wrote the phenomenal Real Time Collisision Detection had this to say about design patterns:

    > The “Design Patterns” book is one of the worst programming books ever. Yes, really. I’m 100% dead serious when I say that I think it has set (and will continue to set) the progress of software development back by decades. Why?! Let me offer up a parable; I will call it “The Plank.”

  • Mike Acton, the father of "Data Orientated Design" also agrees when he quoted Eric at a C++ convention:

    > "Design patterns are spoonfed material for brainless programmers incapable of independent thought, who will be resolved to producing code as mediocre as the design patterns they use to create it with."

    4. While abstraction can be a nice way to solve a problem there are ALWAYS trade-offs. The flexibility of abstraction is that you generally tend to lose efficiency. Blinding applying a design pattern means you aren't thinking about the performance issues. In today's age of multi-core software this is a huge disadvantage compared to your competitors.

    And while Ericson and Acton tend to throw the baby out with the bathwater they are speaking from years of experience of writing fast, simple code. This ISN'T an appeal to authority as they aren't just some armchair academics -- they have demonstrated they have understand HOW to write FAST code. Their experience also matches what I've seen.

    5. Another problem is that changing the hardware changes the problem. GoF doesn't take this into account.

    6. Very rarely does OOP "perfectly" model the problem. GoF ignores this.

    7. Another part of the problem is that OOP is NOT scalable. OOP has a design fallacy that "one is the common case." This is almost never the case. The common case is usually you have multiple objects. Again GoF ignores for the most part. They take a stab at it with the Flyweight Design Pattern but that isn't scale when you REALLY do have many, mutable objects such as the particles of a particle system.

    And while I am not as adamant as Ericson or Acton about being "anti-design-patterns" they DO have a point -- not understanding the strengths AND weaknesses of an algorithm makes for a poor programmer IMHO. Remember, there are THREE ways to optimize:

  • Micro-optimizations, aka Bit Twiddling Hacks
  • Algorithms -- using a better O(n) algorithm
  • Macro-optimization, aka Data-Orientated Design -- minimizing cache misses.

    Go ahead and use design patterns for your tools. But for engine/games DoD will usually solve the problem simple and faster then misapplying and blindly applying a design pattern.


    Lastly the problem of complexity was summarized by Fred Brooks in The Mythical Man-Month

    > "Show me your flowcharts (source code), and conceal your tables (domain model), and I shall continue to be mystified;
    > show me your tables (domain model) and I won't usually need your flowcharts (source code): they'll be obvious."

    A more modern colloquialism would read:

    > Show me your code and I'll have to see your data,
    > Show me your data and I won't have to see your code.

    The secret to high performance is NOT the algorithm but to focuse on HOW the data is transformed. i.e. The first rule of optimization is:

    Know Thy Data

u/okmkz · 9 pointsr/java

> Look for a book on object oriented programming

For this I recommend both Head First Java and then follow that up with Head First Design Patterns.

u/gavlois1 · 9 pointsr/FreeCodeCamp

It depends on how much programming experience you have. If FreeCodeCamp is all you've done and have only worked with JavaScript, then I think that CS50 would be worth going through. For the first few lectures, he goes material which uses C and talks about low-level memory management and how many things work under the hood. While this isn't necessary to the daily work of a web developer, it is still good to write code while being conscious of what's happening under the hood through all those abstractions.

As /u/artotal said in his reply, learning the fundamentals of data structures and basic algorithms and complexity really go a long way. I don't think CS50 goes very in-depth with regards to this, but there's a few different sources you could learn from. You could go the hands-on route and hop straight onto sites like HackerRank and Kattis and start working your way up the problem ladders if you already have some basic familiarity. If learning from scratch, FreeCodeCamp has a nice set of videos on their YouTube channel talking about different data structures implemented in JS.

As for general progression after FreeCodeCamp, keep building projects. I'm not sure how far you're into the curriculum, but it's quite long and it's got many projects even in the curriculum if you do both front and back end curriculums. With your currently existing projects, go back and see if you can make improvements to any of them. Maybe try and move them off of Codepen (if you did them there) and to your own personal portfolio site. Refine your portfolio page and have links to your projects, your Github, resume, etc. You can have free hosting through Github Pages and you should be able to host all the front end projects there. For Node projects, you can try hosting them through Heroku, or see about free hosting through Google Cloud or get trial credits on AWS or Digital Ocean.

I hope this gave you a general idea of how to progress. Choose what you want to do depending on your immediate goal. Looking for a job? Polish that resume, get your portfolio site and projects up and running, maybe get a domain name for it. Go on HackerRank and LeetCode and practice some common interview problems. Have a bit of free learning time? Dive into the fundamentals of CS. Consider taking a look at some of the tried and true CS textbooks like this one (I'm sure that with some Googling you can find links to a pdf of it for free).

u/ssimunic · 9 pointsr/learnprogramming

Yes, there is also Head First Design Patterns which is also very good.

u/akevinclark · 9 pointsr/AskProgramming

These are great suggestions. The three books I typically give devs early (that fit in well with the two presented here) are:

Refactoring by Martin Fowler

This is a list of patterns of common refactoring a and how to do them safely. It’ll help you recognize transforms you need to make in your code as it changes.

The Pragmatic Programmer by Dave Thomas and Andy Hunt

This is a great guidebook for how to get better at being a software engineer. Essential read.

And while there are lots of options for design patterns books...

Head First Design Patterns was the one that helped me internalize them. Even if you aren’t writing much (or any) Java, the method of teaching is hugely valuable.

u/xunlyn85 · 9 pointsr/csharp

I generally agree, but the problem with patterns is some folks try to shoehorn everything into a pattern sometimes turning something simple into something more complex than it needs to be.


I find that following SOLID with YAGNI at the back of your mind tends to be what seems to work best for me

Along the lines of patterns: I'd recommend Head First Design Patterns

u/s32 · 9 pointsr/jobs

That being said, some websites simply aren't going to be enough. Codeacademy is awesome, but don't expect to learn algorithms from it; you probably would want to pick up a copy of CLRS and do the MIT course

u/sleepingsquirrel · 9 pointsr/ECE
u/SharmaK · 9 pointsr/books

For some physics :
Penrose - Road to Reality

Gleick - Chaos

Some math/philosophy :
Hofstadter - Godel, Escher, Bach: An Eternal Golden Braid

Anything early by Dawkins if you want to avoid the atheist stuff though his latest is good too.

Anything by Robert Wright for the evolution of human morality.

Pinker for language and the Mind.

Matt Ridley for more biology.

u/stonedead78 · 9 pointsr/IWantToLearn

Read this book: Gödel, Escher, Bach: An Eternal Golden Braid at least 3 times, and take your time.

u/metahGVA · 9 pointsr/learnprogramming

Introduction to Algorithms is probably the best book if you want to go deep in algorithms eventually.

Cracking the coding interview book is also a great repository of "must-have" concepts for CS.

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/DoUHearThePeopleSing · 9 pointsr/ethereum

Did you read any mathematical papers, are you familiar with university-level math, or with computer science?

What might help you get familiar with this style of writing is Concrete Mathematics ( ), or Introduction to Algorithms by Cormen ( ).

The first book is more about math, but it's a nice and fun read. And it will make you familiar with math notations. The other book is about algorithms and data structures - difficult to read, but once you get through the first chapters, reading things the Yellow Paper should be much easier. Protip with Cormen - skip the proofs at first :)

Most developers, even the ones familiar with architecture and design patterns, aren't familiar with the theoretical/mathematical groundwork behind all this.

In other words: the paper is written for computer scientists, not developers really. Many excellent developers are shit computer scientists and vice versa.

u/jimmy0x52 · 9 pointsr/TrueReddit

This was an extremely fascinating read. I've felt this way for a while about social networks and it was part of the reason I finally got off Facebook after so many years.

One clear indication of this I saw frequently was the fact that no one called someone on their birthday any more (or even texted). I was seeing parents even wishing their children Happy Birthday or family members just liking another Happy Birthday post. This kind of impersonal interaction always bugged me.

This article has some great points in it and I hope there is a lot further research put into it. There are a few books cited, and a few others I found related. I've ordered ALL of them and plan to read them all as this is a really fascinating subject for me (a person who was born at the beginning of this era and has become an adult in it with two children who are going to grow up and have to adapt to this).

Books referenced:

You Are Not a Gadget - a Manifesto

Alone Together: Why We Expect More From Technology and Less From Eachother

And one related:

The Shallows: What the Internet is Doing to Our Brains

u/TehLittleOne · 9 pointsr/learnprogramming

My suggestion is always to start with Python. It's a very high level language and it's very easy to learn. In fact, Python recently became the most popular language to teach beginners. I know you wanted to learn Java, but there are several things about it that make it not so great for beginners, as well as several things about Python that make it good for beginners (ask why if you're interested, but it may be a bit technical). As a programmer, you will likely learn a dozen or more languages (I've learned over a dozen in school), so saving Java for a bit later isn't really an issue. You'll find in programming that a lot of the important things apply to most languages, so learning these allow you to apply them to new languages quite easily. My university now uses this book in the first year computer science courses.

Get yourself situated with a free GitHub account. GitHub is my favourite version control. If you have a student email you can get a free private repository (so others can't see your stuff). If you don't have a student email to use to get one, you can still make a free account, but it will be public. What that means is that anyone who navigates to your account can see all your code. Since you're just starting out, it shouldn't matter if people browse your code, there's not much to see since it's just you going through the basics. GitHub has a tutorial for new users and also has a user-friendly client that makes it all really simple. You can save the more complex stuff for later until you're comfortable.

Once you've gone through Python and learned a bit, it's time to get into some of the language-independent things. Introduction to Algorithms is an amazing textbook. The authors are some of the most well respected people in the field and I've used it in school in more than one course. You can go through this at any time. I recommend you programming some of the things (they provide some code as well), and perhaps trying this stuff in Java might be a good segway from Python to Java.

u/siddboots · 9 pointsr/statistics

It is hard to provide a "comprehensive" view, because there's so much disperate material in so many different fields that draw upon probability theory.

Feller is an approachable classic that covers all of the main results in traditional probability theory. It certainly feels a little dated, but it is full of the deep central limit insights that are rarely explained in full in other texts. Feller is rigorous, but keeps applications at the center of the discussion, and doesn't dwell too much on the measure-theoretical / axiomatic side of things. If you are more interested in the modern mathematical theory of probability, try Probability with Martingales.

On the other hand, if you don't care at all about abstract mathematical insights, and just want to be able to use probabilty theory directly for every-day applications, then I would skip both of the above, and look into Bayesian probabilistic modelling. Try Gelman, et. al..

Of course, there's also machine learning. It draws on a lot of probability theory, but often teaches it in a very different way to a traditional probability class. For a start, there is much more emphasis on multivariate models, so linear algebra is much more central. (Bishop is a good text).

u/shaggorama · 8 pointsr/learnpython

Starts in January:

EDIT: In case you can't wait a month (which according to /u/sovietmudkipz is apparently a completely unreasonable amount of time to wait for a free college course), check out this textbook: it's my understanding that it's basically the gold-standard for intro-AI education.

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/kgtx · 8 pointsr/lowlevel

OSDev -

Kernel programming -


Hacking the Art of Exploitation - This is a fun book that has a lot to do with programming in C, exploring memory and disassembly.

Practical Reverse Engineering - this is a very informative and short book which is pretty close to the metal in regards to memory and all that but is strongly focused on its namesake so I wouldn't get it if it's not your thing.

LittleOS Book - like 76 pages on building your own OS (also free!).

u/VorpalAuroch · 8 pointsr/artificial

Sotala and Yampolskiy, Bostrom's book, Infinitely descending sequence... by Fallenstein is a really interesting, clever solution to a piece of the puzzle. I'm not sure what you're looking for, particularly; everyone currently working on the question is pretty invested in it, because it's still coming in from the fringe, so it's all going to be people you'll denounce as "not credible".

u/grumpy_youngMan · 8 pointsr/movies

I like the premise that man creates something that chooses to destroy it in the end. A lot of AI experts raise this as one of the biggest concerns of artificial intelligence. A book called Super Intelligence [0] goes into this. Even Elon Musk, everyone's go to innovative tech thinker, recommends this book as caution against over-doing it with AI.

That being said, everything else was really a let down to me. They just brushed over the fact that David killed all the engineers? Why was the crew so damn stupid and careless? They went to a new planet, breathed the air, interacted with the vegetation, didn't think about quarantining the sick people...I refuse to believe that the 2nd in command would allow the crew to be this bad in ways that are obvious.

The material seems to be too stretched out when we don't need it to be (e.g. existential debate between 2 robots), and then its just thrown at us when I would prefer more detail (david killing all the engineers, understanding the engineers).


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/fisat · 8 pointsr/MachineLearning

Read Hands on Machine Learning with Scikit-learn and Tensorflow. This book is awesome.

u/RedSpikeyThing · 8 pointsr/programming

Concrete Mathematics by Graham, Knuth and Patashnik is a great start to almost all of those topics.

u/lightforce3 · 8 pointsr/tech

What you seem to be asking is "how do computers work?" At any rate, the interaction of hardware and software is fundamental to any computer system, whether it's your fitness band or your cell phone or a supercomputer or the computer in your car engine or The Next Big Thing.

How that works is a really, really big question. Rather than attempt to answer it, I'll suggest you check out the book Code by Charles Petzold. It explains how computer hardware and software work, starting with basic electrical circuits and building up layer by layer until you're running an operating system and application software. That might seem like a lot to cover, but Code does it simply and cleanly, in a way that just about anybody can digest and understand.

u/codeificus · 8 pointsr/programming

The 86 stands for the instruction set for the cpu. Basically, every chip designed in the world accepts input and output, but in different ways (different numbers of connections, ordering). All of those chips have more or less backwards compatibility with regard to that, so it makes it easier for others to develop around that.

So there is a meaning conveyed, though it probably isn't important to you if you aren't developing hardware or writing assembly.

I strongly recommend Code by Charles Petzold which explains the origins of these chipsets. Basically Intel put out the 8080 in 1974 which was an 8-bit processor, then the 8086 in 1978 was a 16-bit processor, so they just ran with the number scheme (6 for 16 bit). The "80" from 8080 probably came from IBM punchcards which were used for the US census (since the 1920s!), which is actually how IBM started, basically as the child of Herman Hollerith who built automated tabulating machines in the late 19th century. Also this is to blame for the 80-character terminal convention. Blame IBM.

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/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/herpington · 8 pointsr/learnprogramming

These are all good points.

With respect to Design Patterns, I feel that the holy grail is Design Patterns - Elements of Reusable Object-Oriented Software by Gamma et al.

u/prego_no_pao · 8 pointsr/portugal

acabei de ler o Code (1999). É uma boa introdução ao funcionamento de um computador baseada na sua evolução na história.

u/MrPhantomZz · 8 pointsr/6thForm

Could read a book based on your interests in computer science, e.g. AI, Machine Learning, data science etc.

A good book that I recently picked up was
[Code: The Hidden Language of Computer Hardware and Software by Charles Petzold] (

u/munificent · 8 pointsr/ruby

One of the things we can do to make our lives harder in software engineering is muddle terminology. It adds needless friction to our job if when you say "flernb" you're referring to a widget but when I use say it, I'm talking about a whozit.

In low level code, we're pretty good about sticking to the first term that was coined for something. If you have a series of objects, each with a reference to the next, you'll probably call it a "linked list", just like I would.

But when it comes to higher-level architecture and design, names get a lot messier. Fortunately, some dudes wrote a book that tries to be the beginning of a taxonomy for architecture. Ultimately, the names they pick are arbitrary, but if we all agree to stick to them, then they become concretely useful.

What the author describes here is not a proxy. A proxy is a local object that represents a distant one, usually on another machine or process. It's not a very common part outside of distributed systems.

The author created an adapter.

u/Daganar · 8 pointsr/programming

For anyone interested in this kinda stuff I would really recommend "Code: The hidden language of computer hardware and software"

u/rafuzo2 · 8 pointsr/androiddev

Here's a rough outline, from high level to low(ish):

  • Fundamentals of Object Oriented Programming. Understand basic concepts like inheritance and encapsulation and why you'd use them. Any book with these words in the title/subtitle should be able to get you the basics, pull a highly-rated book off Amazon for recommendations.

  • (This is optional but highly recommended) Learn basic design patterns such as those presented in the Gang of Four book. These aren't required for writing Android apps but the more you understand about patterns the more it'll help you later on. You don't need to master this stuff at the outset so just read at your leisure.

  • Learn Eclipse. It's a big subject and for seasoned veterans the various components can be confusing, but you should know how to use an Integrated Development Environment regardless.

  • Follow the tutorials that VersalEszett mentioned.

    Extra Credit
  • Get an account on Github and understand how Git works. It's free unless you want private repos. Google around, find android development projects that are public, clone the repos and walk through the code - retype it line by line if you need to. Try to figure out why things are broken out the way they are.

    That will get you started but there's tons more. The best thing you can do is write code and read code and be patient.
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/Zaemz · 8 pointsr/programming

This is awesome! I've been slowly getting more and more interested in hardware, and this is something I would absolutely love to do. I just don't know where to start.

I've been reading a couple of books about learning lower level stuff, and planned on working my way up.

I'd really like to get out of webdev and into low-level programming, or even hardware design and implementation. There's sooooo goddamn much to learn, that I doubt I'll be ready without getting a BS in Comp. Engineering, and maybe a master's as well.

(I'm absolutely a beginner, and if anyone is interested in the books I've been reading, these are they:

  1. Code by Charles Petzold

  2. The The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan and Shimon Schocken

  3. Computers as Components by Marilyn Wolf)
u/LongShlongSilvrPants · 8 pointsr/cscareerquestions

Head First Design Patterns: A Brain-Friendly Guide

A relatively unique methodology of approaching design patterns (using Java examples). Understanding design patterns will transform both you and your code.

EDIT: Adding my comment below to my comment here for better visibility and description of the book:
> It can absolutely be read as an introductory book! I would recommend going into the book having a foundation in an OO language, such as Java or C++.

> This was the "textbook" we used in my Object-Oriented Design course; however, the great part about this book is that it reads more as a "narrative" than a traditional textbook. I definitely think this is the best book for learning about design patterns. The GoF book should be used as a reference, after you understand them better.

> All I can say is do not judge a book by its cover, and in this case I mean it literally. I think they are trying to be ironically cool by using stock photos on the cover and within the book. It seems odd to be reading through a "serious" book that look like that, but believe me when I say it will be an eye-opening experience.

u/phao · 8 pointsr/cscareerquestions

The best way I know how is by solving problems yourself and looking at good solutions of others.

You could consider going back to "fundamentals".

Most programming courses, IMO, don't have nearly as many exercises I think they should have. Some books are particularly good on their exercises list, for example K&R2, SICP, and TC++PL. Deitel's has long exercises lists, but I don't think they're particularly challenging.

There are some algorithms/DS books which focus on the sort of problem solving which is about finding solutions to problems in context (not always a "realistic" one). Like the "Programming Challenges" book. In a book like that, a problem won't be presented in a simple abstract form, like "write an algorithm to sort numbers". It'll be inside some context, like a word problem. And to solve that "word problem", you'll have to find out which traditional CS problems you could solve/combine to get the solution. Sometimes, you'll just have to roll something on your own. Like a new algorithm for the problem at hand. In general, this helps you work out your reduction skills, for once. It also helps you spotting applications to those classical CS problems, like graph traversal, finding shortest plath, and so forth.

Most algorithms/DS books though will present problems in a pretty abstract context. Like Cormen's.

I think, however, people don't give enough credit to the potential of doing the exercises on the books I've mentioned in the beginning.

Some books I think are worth reading which also have good exercises:

u/lbkulinski · 8 pointsr/C_Programming

I am a big fan of Introduction to Algorithms. It covers a lot of content, and does it well!

u/rockinghigh · 8 pointsr/leetcode

You're essentially asking for a computer science class on algorithms. I would recommend:

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/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/help_me_will · 8 pointsr/actuary

Against The God: the remarkable story of Risk- Outlines the history of probability theory and risk assessment through the centuries

When Genius Failed - A narrative of the spectacular fall of Long Term Capital Management, a hedge fund which had on its board both Myron Scholes AND Robert Merton (you will recall them from MFE)

Black Swan/ Antifragility- A former quant discusses the nature of risk in these controversial and philosophical books. Some parts of this book are actually called out and shamed in McDonald's Derivative Markets, one or the both of them are worth reading

Godel, Escher, Bach- Very dense look into recursive patterns in mathematics and the arts. While not actuarial, it's obviously very mathematical, a must read.

Endurance- This was recommended to me by a pure mathematics professor. Again, not actuarial, but more about the nature of perseverance though problem solving(sound familiar). It's about Shakleton's famous voyage to the south pole.

u/enzlbtyn · 8 pointsr/cpp

I'm a bit confused on your background with CS. You are you are aspiring to become a machine-learning researcher, yet evidently it doesn't seem like you have much of a background in CS which is why you're asking I assume. In any case, I'd recommend reading books on C++ and books on data structures/algorithms separately.

For algorithms/DS I recommend The Algorithm Design Manual and Introduction to Algorithms (commonly referred to as CLRS). Recommended books for C++ are on

If you want to learn machine learning concepts and algorithms then I recommend some books on artificial intelligence and machine learning. To start with, Artificial Intelligence: A Modern Approach
then ISL. And/or potentially some associated MOOC courses, I recommend Learning from Data it's a really good course which teaches you fundamentals in machine learning such as learning theory and asks questions for why you can learn and etc.

In general, with all these books, you could possibly learn C++ by implementing their exercises or specific algorithms. Some examples would be basic CS related things binary search, sorting algorithms, heaps/priority queues and their associated implementations in the standard library. Then specific to Machine Learning you could implement decision trees and as an extension AdaBoost, a perceptron or a more generic neural network, and the list goes on.

u/fathermocker · 8 pointsr/DoesAnybodyElse

This is the subject of the book "The Shallows", by Nicholas Carr. I don't completely agree with the guy, but it's thought provoking at least.

Ninja edit: Wait, I just saw the irony of recommending a book.

u/leeeroyjenkins · 8 pointsr/cscareerquestions

I won't directly link to a PDF version of it, but it's out there...

u/sick_anon · 8 pointsr/algorithms

I suggest you to not waste too much time reading 15 different books on algorithms or spreading on 15 different resources (YT videos, online courses, forums, tutorials, etc.). Stick to 1 or 2 good books (try Introduction to Algorithms and, if you're completely new to algorithms, and have no idea what are they and what is their role in computer science and science in general, I recommend book by same author that could make a good preparation to previous book; it's called Algorithms Unlocked ) and start applying that knowledge in the run (solving problems). Remember: don't waste time on hundreds of resources; they may be great and offer some really high quality information about topic, but you just don't have time to go through all of them. Good luck!

u/unacceptablePenguin · 8 pointsr/UniversityOfHouston

Introduction to Algorithms, 3rd Edition (MIT Press)

That's probably the best book for data structures and algorithms out there. It's somewhat pricey but I use it all the time even for work things. You can probably find a free PDF with some digging. Look at the chapters in the Data Structures section particularly the elementary structure and hash map. The trees aren't covered in this course I believe.

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/Lord_Illidan · 8 pointsr/compsci

You will want this book sooner rather than later too.
CLRS - Introduction to Algorithms

u/forseti_ · 8 pointsr/java

Its not advertised but it uses Java for the examples.

u/complich8 · 8 pointsr/AskComputerScience

I don't think you'll find just one -- computer science is too broad, even in the scope of what you're asking for.

You can probably find a reasonably readable algorithms book that'll introduce things like Big-O, Big-theta, Big-omega, graphs, trees, etc. Some of that bleeds into the "data structures" topic area (and vice-versa). This one is highly-regarded, but I couldn't say whether it's "for you" or not -- it's a bit textbooky.

u/lebski88 · 8 pointsr/programming

The link to the book is;

or uk amazon

the title is Elements of Computing Systems: Building a Modern Computer from First Principles.

It looks like a really interesting book. Shame I have banned myself from buying books until I get through some more of the ones sitting on my shelf.

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/cemremengu · 7 pointsr/csharp

Those who want more detailed info on these should check the Design Patterns book by GOF


u/dear_glob_why · 7 pointsr/javascript

There's more than a single design pattern for applications. Recommended reading:

u/krat · 7 pointsr/compsci

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

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

u/fj333 · 7 pointsr/cscareerquestions

Correct! I did not do every question in EPI because there are a lot. But I did probably at least 1/3 of them evenly distributed throughout the book, following a guide in the front on which ones were most important.

Equally important in my prep was The Algorithm Design Manual which I learned of here. It really changed the way I thought about a lot of fundamental data structures and algorithms, and helped me see how many real world problems require graph algorithms to solve.

Finally, I read a LOT of firsthand interview reports from GlassDoor for the company I was targeting.

All in all I spent a couple hours a day for nearly 4 months on interview prep. Before that I'd only had one interview, at a company I didn't care much about, and I bombed it. After those 4 months, I interviewed for my dream job and got it. I don't know that I nailed it, I probably just passed by a hair. But it was enough. Was I overprepared? I dunno. But I was at least prepared enough, which is all that mattered. :-)

u/tylerjames · 7 pointsr/movies

It's even more interesting if you don't just think him as the standard insane genius trope, but realize that he is probably genuinely disturbed and conflicted about what he's created and what to do with it.

Trying not to be spoiler-y here for people who haven't seen the movie but there are probably a lot of practical and metaphysical questions weighing on him. Is an AI truly a conscious creature? Does it have wants? If so, what would an AI want? Given that its social manipulation, long-game planning, and deception abilities are off the charts how could we ever be sure that what it told us was the truth? Does it have any moral considerations toward humans? How would we ever be able to contain it if we needed to? And if it is a conscious creature worthy of moral consideration then what are the moral ramifications of everything he's done with it so far?

Really interesting stuff. For those inclined I recommend checking out the book Superintelligence by Nick Bostrom as it explores these themes in depth.

u/stillnotking · 7 pointsr/atheism

This illustrates why we need to be careful with AI. A superintelligent AI given the directive to maximize human happiness might just stick electrodes in everyone's pleasure centers, or start an intensive, mandatory breeding program, because more humans = more happiness. It might be fully aware that that's not what we meant, but it's what we said...

(Yeah, I'm reading Nick Bostrom's book.)

u/SADISTICBLUE · 7 pointsr/Malware

+1 for mentioning malwareunicorns Reverse Engineering Malware 101 course. I'm pretty excited about starting that after I'm done with some Powershell stuff.

Books for: /u/Kreator333 and /u/curiousdoggo


  • The C Programming Language (2nd Edition) - K&R is fine for fundementals.

  • Pointers on C the sections on pointers are phenomenal. The author explains them in great depth with lots of examples.

  • TBH I haven't learned C++ yet but this definitive guide/list looks promising.


  • Hacking The Art of Exploitation 2nd Edition. Mainly the chapter on programming which pretty much has everything you need. It can get you started with C and ASM and how they compare by stepping through examples using GDB, etc.. Read this if you really want to hit the ground running and then jump into those other books you mentioned OP.

    Also OP while your learning the basics here do as many examples as you can. Don't just read it and assume you know everything. For C you can try coding a bunch of classical ciphers and for ASM, debug the assembly of simple programs in gdb. (check out godbolt) or try coding a echo client/server in Nasm.
u/nexxai · 7 pointsr/OpenAI

I couldn't have said it better myself. I read Superintelligence by Nick Bostrom (which is an insanely good read by the way) earlier this year and was becoming more and more worried that there was no one stepping up to the plate to spearhead a movement like this, at least nothing of this magnitude. To know that people like Elon Musk, Reid Hoffman, and Ilya Sutskever are behind this gives me hope that maybe we can emerge on the other side of the intelligence explosion relatively unscathed.

u/EricTboneJackson · 7 pointsr/videos

> The protagonist ship crew aren't real people, they're ones and zeros that Daily created. He is torturing them, no doubt, but it's indistinguishable in many ways from what we do to NPCs in computer games now, just more advanced.

You miss the point of the episode, and presumably of several Black Mirror episodes, if you don't grant than "ones and zeros" can be genuinely conscious.

Roger Ebert famously made the same mistake when reviewing A.I. The entire premise of the movie is that its protagonist, an android named David, is not only conscious and self aware, but experiences emotions just as humans do. Failing to accept that premise, which is careful established in the first scene of the movie, Ebert proceeds to simply not get the movie. He sees an "advanced NPC" where he should be seeing a lonely little boy who happens to be implemented in silicon: "A thinking machine cannot think. All it can do is run programs that may be sophisticated enough for it to fool us by seeming to think. [..] the movie intends his wait to be poignant but for me, it was a case of a looping computer program -- not a cause for tears, but a case for rebooting."

The fact is, you -- your thoughts and emotions -- are produced by perfectly ordinary physics in your brain. We have no reason to believe that we won't be able to someday build machines that do exactly as the brain does. From both a neuroscience, computer science, and physics perspective, we know of nothing that would prevent this, and we're getting close enough now that the potential existential crisis has been talked about lately by a lot of really smart people.

But that's moot, because even if you don't accept that this is possible, it's a fundamental premise of that episode. One of my favorite Ray Bradbury stories involves humans who have crash landed on Mercury. In that story, this causes the human life cycle to accelerate such that we are born, grow to maturity, get old and die, in 8 days. This is obviously not a scientifically plausible premise, but that doesn't matter. It's the setup for the story. It's how that world works, and a logically coherent story, consistent with that world, emerges from that premise.

In this episode, Daily has created AI that can think and feel, just as we do. That's the premise. But he has them captive. He can create and destroy them at will, torture them in unimaginable ways, and that's the major point of the episode. We're on the cusp as a species of actually being able to do this. Not in the glamorized way shown in the episode (at least not at first), where digital minds also have digital bodies and perfect digital worlds where they can basically behave just like humans, but in ways that are potentially much more horrifying.

Imagine that we create the first digital mind by accident, and because of computer speeds, it lives out a subjective 10,000 years in total isolation, with no sensory input, going completely mad before we even figure out what we've done. Imagine that we perfect making digital minds and conscript them to do all our thinking labor for us, as slaves that we boot in a fresh state every morning and reset every night. Imagine that we can have pet minds, as in this episode, and you start to see the dark potential that it speaks to so entertainingly.

Further reading: Superintelligence, but Nick Bostrom (Oxford professor).

> we turn against Daily even though in the end he really is just a creep doing creepy (but legal) things

We turn against him because he's doing flat out evil things. It's completely irrelevant that it's legal. If we see a film of someone whipping their slaves in the 1700s, we turn against them, too, despite the fact that what they're doing is legal. "Legal" does not equal "moral", not in the past, not today, and not in the future.

u/darkardengeno · 7 pointsr/singularity

>Like Elon Musk on AI. There's zero difference between them, they are both ignoramuses spewing bullshit on a subject they know nothing about.

There's at least one difference: Carrey is wrong about vaccines, Musk is right about AI. As it happens, that's the only difference I care about.

> there have been two deaths already

Are you joking? There were almost 30 thousand Model S's on the road in 2017. During that same year 40 thousand people in the US died in car crashes. The Model S is probably the safest car ever made but the only perfectly safe car is one that no one ever drives. Two deaths out of that sample is pretty good, though perhaps not excellent.

Out of curiosity, what are your qualifications to be speaking so strongly on AI? What experts do you read in the field that offer dissenting opinions from Musk, Bostrum, Hinton, or Tegmark? Or, for that matter, everyone that signed this letter?

u/GenesisTK · 7 pointsr/uwaterloo
I'll give you a brief about the book: It's really dense and probably will take you a while to get through just a couple of pages, however, the book introduces a lot of interesting and difficult concepts that you'd definitely see if you pursue the field.
Is a Free book available online and is for a real beginner, basically, if you have little to no mathematical background. I will however say something, in Chapter 6, when he talks about group theory, he doesn't really explain it at all (at that point, it would be wise to branch into some good pure math text on group and ring theory).
This is a fantastic book when it comes to self studying, afaik, the first 12 chapters are a good base for combinatorics and counting in general.
I've heard fantastic reviews about the book and how the topics relate to Math 2 3/4 9. Although I've never actually used the book myself, from the Table of Contents, it appears like it's a basic introduction to counting (a lot lighter than the other books).

Regarding whether or not you can find them online, you certainly can for all of them, the question is whether legally or not. These are all fairly famous books and you shouldn't have trouble getting any one of them. I'm certain you can study Combinatorics without statistics (at least, at a basic level), however, I'm not sure if you can study it without at least a little probability knowledge. I'd recommend going through at least the first couple of chapters of Feller's introduction to Probability Theory and it's Applications. He writes really well and it's fun to read his books.

u/Robin_Banx · 7 pointsr/datascience

Almost the exact same trajectory as you - graduated with a psych degree, learned a lot of stats and experiment design, then did the Coursera ML course.

Reading this book is probably the biggest thing that took me from knowing there to doing well in interviews (before that it was just scattered projects): A second edition is coming out pretty soon, so watch out for that.

If I were doing it today, this is probably the best material out there: It starts from scratch and gives you an amazing tour of Pandas. Author's also working on a practical Machine Learning book.

u/bixmix · 7 pointsr/VoxelGameDev

Steps to build your own engine from scratch with no knowledge:

  1. Math:
  2. Programming:
  3. Intro Language:
  4. C++ Language (Reference Books):
  5. OpenGL Intro:
  6. OpenGL Reference:
  7. Scour the internet for voxel info

    Note: Most people who decide to put together a voxel engine take about 2 years from inception. At the end of the two years, they will have a library they could use to create a game. They've also already made it through the first 4 steps when they start.

    Without a degree program to solidify the concepts, I suspect that the first 4 steps will take at least 2-3 years: about 10-20 hours per week each week.
u/silveryRain · 7 pointsr/cpp

It's a book. Books are instruments that record, analyse, summarise, organise, debate and explain information; that are illustrated, non-illustrated, hardbound, paperback, jacketed, non-jacketed; with foreword, introduction, table of contents, index; that are intended for the enlightenment, understanding, enrichment, enhancement and education of the human brain through sensory route of vision - sometimes touch.

u/-Claymore- · 7 pointsr/cpp_questions

C++ is a very complete language withs lots of details. But that doesn't mean you need to know everything.

Don't overuse every feature just to show off. Start with the simple things. Class management, templates creation (the simple ones), data structures and the most important, smart pointers.

Don't go after manual memory management. That's old school and it is only usefull in very specific cases and applications (high performance computing and games). Learn to use smart pointers and you will stay safe, away from the segfault Hell.

Learn to use the STL templates. Lists, Vectores, the good stuff. They have been developed by highly skilled people and has taken years of beating by professionals. Use them whenever you can. It will make your life easier when debugging and make your program easier to port between different archs.

There are great books out there. Effective Modern C++ is one of my favorites.

u/deiphiz · 7 pointsr/learnprogramming

Okay, I'm gonna plug this in here. I hope this doesn't get buried because when I saw someone asking about low level stuff here, I couldn't help but make this recommendation.

For anyone that wants to learn more about low level computer stuff such as assembly code should read the book Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. I've been reading it recently and I'm really glad I picked it up. It really delves into how a computer really works, like how languages relate to the circuits on a board.

So yeah, /u/DEVi4TION, I recommend picking this up if you wanna know about more stuff like this. Then maybe try your hand at actual 6502 programming later :P

u/Tefferi · 7 pointsr/JobFair

Two things: The coursework from my CS degree, and reading books about software engineering.

I've spoken in other places about the former, and for the latter, I recommend The Pragmatic Programmer, Code Complete, and Design Patterns: Elements of Reusable Object-Oriented Software

u/ZukoBestGirl · 7 pointsr/ProgrammerHumor

And you could check stack overflow for question on general programming books. I would always go for a general concept functional programming over how to functional programming in haskell.

But I'll be perfectly honest, I'm a victim of the curse of knowledge so I honestly don't know how one should start. What I do remember is that I had huge problems with syntax (how do I tell language X to do a for (Employee e in employeeList), how do you write a switch and stuff, why would I ever need a ternary operator, and like that.

But once you master the basics of how to write x, y and z in your preferred language, you absolutely need to understand design patterns, you absolutely need to understand how code is supposed to be written, you absolutely need to understand data structures, you absolutely need to understand inheritance and polymorphism, you absolutely need to understand lambdas and functional programming.

Then you can get to the more "neat" stuff like the benefits of having immutables, and "job specific stuff" like how to solve race conditions in threading; sockets and web communication, etc.

u/unknowngp · 7 pointsr/AskComputerScience

>I want to be able to understand how computers work

Code: The Hidden Language of Computer Hardware and Software

I was on the search for the same as you a couple of weeks ago and people recommended the book above. I just recently started reading it but hopefully someone who has read it can chime in with their opinion.

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/ArmenShimoon · 7 pointsr/csharp

They seem a like reasonable starting point I think. Repetition is the mother of mastery, the more books the better (in addition to applying what is learned).

Since Mosh is calling out learning fundamentals as important to becoming a good C# developers, I would personally also recommend some general (non C# specific books) too for who are starting out in software development:

  1. Design Patterns (Amazon) - also known as the "Gang of Four" Design Patterns, it was originally published in 1994 and is still relevant today. When people talk about design patterns, they're referring to the book more often then not.

  2. Soft Skills (Amazon) - Not a book on programming actually... it's a software developers life manual. The reason I like this book is it covers the other parts of the life of a developer that I haven't seen covered anywhere else. Everything from learning strategies, time management, career advice, and even some health and fitness. It was an enjoyable read and I think other developers would enjoy it too.

  3. The Passionate Programmer (Amazon) It's been a while since I've read this one, but I remember it giving decent advice for building a career in software development. Not to be confused with The Pragmatic Programmer (Amazon) which should be read at some point too.

    There's a ton more, but those are a few that stood out to me. Essentially the more the merrier in my opinion - books, courses, videos, tutorials, and so on. The books I'm recommending here focus on adopting the developer mindset and being successful at it. That's part of the puzzle.

    The other part is understanding the technical details including the programming language and frameworks you intend to use.

    And finally, for learning about C#, I do highly recommend Mosh's videos/courses (some are free on YouTube, others available on Udemy). He's got a unique ability to explain things clearly and simply in a way that beginners can pick up quickly.

    What I'd do is check out his free content first, and if you agree his style is ideal for learning, an investment in one of his courses is well worth it since he'll cover a lot more breadth and depth on each of the topics and they're organized into a super consumable package rather than scouring the internet for various topics.
u/mrcleaver · 7 pointsr/java

Learn by experience and by reading is probably the way to go. The gang of four's design patterns is still the de-facto standard:

I really love this book for Java design patterns though, fun to read and really informative:

Then it's a matter of knowing when and where to apply them, which is a harder problem and just an experience thing I'd say.

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/yoho139 · 7 pointsr/ProgrammerHumor

From wikipedia, and I highly recommend this book as reference material.

u/leashertine · 7 pointsr/BdsmDIY

I don't know any video series, but this is the book series I recommend to new makers:


Make Electronics

Useful Companion Reference:

Encyclopedia of Electronic Components Volume 1

Encyclopedia of Electronic Components Volume 2

Bonus Points Reference:

Encyclopedia of Electronic Components Volume 3

Between those books and YouTube you'll be squared away for 99% of anything you would typically build at home. I say that as an engineer with work experience designing electronics.

u/mr_wowtrousers · 7 pointsr/IWantToLearn

I am going through this book:

Make: Electronics (Learning by Discovery)

Beginner like you and it is pretty easy to follow along with. Great explanations.

u/tnecniv · 7 pointsr/arduino

Make: Electronics is a fantastic book for the hardware side of things. It does not use the Arduino (it only briefly touches on microcontrollers at the end), but it will give you a solid foundation to whicht you can easily apply the Arduino.

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/dakboy · 7 pointsr/programming

LWRellim is exactly right.

Tomorrow morning, go to your local library or bookstore and find this book. You don't have to read the whole thing right away, but if you can spend the afternoon with it at least, it's worthwhile.

Chapter 11 especially is appropriate here, where you're in the position of "flushing it all down the proverbial crapper." Plan to Throw One Away One can also use a line from The Matrix - everyone falls the first time.

I'm not going to say that every software project bombs the first time around. That's definitely not the case. But many times, especially on your first custom programming experience, no matter how well you think you understand what needs to be built, you will paint yourself into corners and discover all kinds of stuff that you had never considered before you started to build the first version.

Depending on where you are in the project, and how things have been put together, you may have to literally toss everything. In your case, you might be able to salvage some UI bits, but your new developer will probably redo everything else.

u/sorryateyourbagel · 7 pointsr/ECE

I have a EE undergrad degree and work as a software developer (mostly web development).

Best advice is to code as much as possible. I second @jewdai's recommendation to study data structures and algorithms -> learning these will give you a solid toolset for solving problems (w/ code) in the future. The bible for data structures and algorithms is:

You should investigate what type of industry you're interested in. If you're interested in signal processing, check out companies that specialize in that area (I guarantee they need software developers).

Best chance for getting an entry level position would be one where you can leverage your EE expertise, but spend most of your time programming (it's the only way to get better). Working on an embedded system (e.g. firmware) might be a good fit because you need solid EE knowledge as well as software skills.

I would also leverage my alumni network; talk to your classmates fellow grads who are in software now. Get their advice and network; those connections can lead to jobs (or at least interviews at their companies).

Best of luck!

u/DeadZombie9 · 7 pointsr/umanitoba

Books aren't required for first-year CS (they aren't needed for other years either).

Here is the online version of the book they use in COMP 1010. They will give you a link for the COMP 1020 book when you take the course but I'm not gonna look around for it.

General advice for any CS students: A good algorithms book is very handy. I recommend investing in this one. It's gonna be useful throughout your undergrad degree and probably afterward too.

u/crwcomposer · 7 pointsr/compsci

His algorithms class probably used this textbook, but if they didn't, it's pretty much a standard:

Don't be deceived by the title, it's more than just an introduction. As the description on Amazon states:

>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness.

u/Adenverd · 7 pointsr/programming

Preface: I'm not being condescending, I know a lot of incredible programmers who never attended a computer science class.

To be honest, this is the sort of stuff you learn about in a computer science degree program (though this would probably fit better in a graduate degree than an undergrad). If it really interests you, you should look into it.

If that's not a really viable option, I can't recommend this book on algorithms highly enough. It talks about runtime, scaling, data structures and graphs, etc. Truly fascinating stuff.

u/both-shoes-off · 7 pointsr/csharp

Google "c# github projects for beginners". Theres a whole bunch of interesting stuff out there. You could also download/fork a github repo and try to extend a project, or build on top of it.

I think this repo has been posted here before, but learning design patterns is really useful prior to designing something from ground up.

Here's a good beginner's book on design patterns.

u/egben · 7 pointsr/science
u/PsychedelicFrontier · 7 pointsr/RationalPsychonaut

What a great question, and an interesting example. For those confused by OP's example, check out Gödel's Incompleteness Theorem on Wiki. Better yet, read the insightful and very trippy Pulitzer Prize winning book, Gödel, Escher, Bach. Gödel's theorem is a bit abstract but it was both a monumental and surprising discovery. It's not just mathematical -- it's meta-mathematical, in that it reveals the limitations inherent to any mathematical framework or system. From wiki:

>The first incompleteness theorem states that no consistent system of capable of proving all truths about the relations of the natural numbers (arithmetic). For any such system, there will always be statements about the natural numbers that are true, but that are unprovable within the system. The second incompleteness theorem, an extension of the first, shows that such a system cannot demonstrate its own consistency.

I'll point out an obvious one, though it's more to do with the aesthetics of the psychedelic experience rather than insights or ideas. Psychedelic hallucinations tend to be geometric, with lattices, grids, spirals, and perhaps most intriguing of all, fractals. All these are geometric forms that can be rigorously defined and analyzed by math. Fractals are especially fascinating because they exhibit self-similarity at every scale, appear sometimes in nature (for example, coastlines), and look extremely trippy. (Seriously, just look at these zoom-ins of the Mandelbrot set, discovered in 1978.)

u/Mythiees · 7 pointsr/todayilearned

I don't follow?

At some point we started asking questions about the world. There came a time where 'something' emerged in us and we started questioning the world around us.

Questions are investigations about how the world (and here 'world' is everything in the immediate environment) works. This leads to 'what if' scenarios, equivalencies 'is this thing like the other?' and sets 'I belong to the group called 'men', she belongs to the group called 'women'. In the group called 'women' there is the subset of 'women' that are my offspring. Godel, Escher, Bach yourself on sets and other concepts.

So, we learned how to ask questions and the answers to those questions lead to more questions. All this leads to the internet and us meeting. Our interaction is the result of an unbroken chain of questions that has brought us from the savanna all the way to here. Think about that.

u/HarlequinNight · 7 pointsr/math

You would love Godel Escher Bach by Douglas R Hofstadter. It won the pullitzer prize and is basically just a really good popular math/computer science/art book. But a really excellent jumping off point. Yes it lacks mathematical rigor (of course) but if you are a bright clever person who likes these things, its a must read just for exposure to the inter-connectivity of all of these topics in a very artistic and philosophical way. But be prepared for computer code, musical staff notation, DNA sequences, paintings, and poetry (all themed around Godel, Escher and Bach).

u/Salyangoz · 7 pointsr/Turkey

ilk olarak kolay gelsin.

Stanford ve MIT'in online course'lari var itunes university'de ordan bakmaya basla istersen.

Internetten egitimini sevdigin okullarin syllabus'unu alip ordaki kitaplardan calismaya baslayabilirsin zaman kaybetmemek icin. Istersen sana sirali kendi transcriptimdeki dersleri PM olarak atabilirim.

Okulundan aldigin .edu emailini cogu programi bedava kullanmak icin kullanabilirsin. (github inanilmaz bi pack veriyor, %100 suistimal etmeni tavsiye ederim)

Kitap oku ve bol bol kod yaz. Boktan olsa, bozuk olsa bile yaz. Kagit kalemle de yazmaya cekinme (is basvurularinda seni beyaz tahtaya cikaracaklar malesef debugger/syntax checker olmicak)

aklima gelen standart kitaplardan en onde su geliyor:

  • Introduction to algorithms : facebook ve google direk bu kitap icinden soru soruyor ise alimlarda. Cogu ilk basta cok zor gelebilir, korkuya gerek yok, 2 sayfayi 3 gunde falan yapiyorsan cok iyi.

  • Bilgisayar temel bilgileri icin de Computer Organization

    Eger lise bilgilerinden korkuyorsan cok inanilmaz bi matematik yok (sektorune gore degisebilir tabi). Lineer Cebir (image processing/game-development vs.) ve Olasilik (AI, Machine learning, data analysis vs.) bilgilerini tazele. Eger machine learning falan yapmak istiyorsan ilerde olasilik bilginin guclu olmasi gerek.

    Cok net bi cizgi izlemene gerek yok. Gerektikce ogrenme politikasi benden yana cikti su ana kadar ama bu tartisilir.

    baska bisi olursa cevap vermeye calisirim.
u/alphaglosined · 7 pointsr/csharp

I would recommend not looking for C# specific books. Language specific books tend to get out-dated very fast and won't be as high of quality.

For this reason you want books like and


I'm personally in the market for data structure books, sadly its a slippery slope when you already have a few.

u/shobble · 7 pointsr/books

In Search Of Schrodinger's Cat by John Gribbin is a very readable physics and quantum physics history sketch. Might be slightly dated now, although I can't think of anything directly contradicted by recent work. Then again, I'm not actually a physicist :)

The Quark and the Jaguar is quite a bit more complicated, but still quite accessible to the layperson and has a lot of interesting stuff.

Slightly less sciency, more maths/logic/computation is Gödel, Escher, Bach: An Eternal Golden Braid

A Guinea Pig's History of Biology is pretty much what the title says, although there's an awful lot about fruit-flies too. Quite a good review of the history of biological experimentation, especially genetics.

H2O: A Biography of Water from a previous editor of Nature, covers water across a variety of fields. The second half of the book is mostly a rant about cold fusion and homoeopathy though, from what I recall, but the first half makes up for it.

Most general-audience things by Richard Feynman are well worth the read. He's got some great physics lectures, and his autobiography (Surely You're Joking, Mr Feynman?) is fun, but more for the anecdotes than the science.

Those are off the top of my head. If its something in a particular field, I might have some other ideas I'm currently forgetting.

u/reddit_user_---_---_ · 7 pointsr/webdev

I'm assuming you are looking for generic algo and data struct taught in college:

Look up a university syllabus online, see the name of data structures, learn and implement them in whatever programming language. Same for algorithm, follow some syllebus, learn an algorithm, implement it. For more theory/math pick up a book, follow one of many mooc or find some university course's slides to work with.

I just did a quick search to make sure it is possible to find syllabuses, here's one of them I found for DS:

Here's one for algo:

For book, my uni used this for DS: (good)

For algo: (overrated, old and confusing, find something better if you can)

u/justanothercactus · 7 pointsr/DesignPorn

You might like this [book] (ödel, Escher, Bach: An Eternal Golden Braid, the cover has an even better whatever you call that effect/illusion.

u/gerundpu · 7 pointsr/philosophy

Yes, and if you want to follow this deeper into the context of consciousness, check out this book: GEB

There's a series of chapters discussing the localization of brain functions. The author discusses a study on rat brains, in which maze-running rats had significant portions of their brains removed, and were allowed to heal. Most rats were still able to re-learn the maze.

u/williamfwm · 7 pointsr/technology

>The next generation of algorithms or smart application of the old ones could create even more upheaval

What, specifically, should we regulate, and how? An algorithm is just a set of steps that produces a correct answer to a problem. Which algorithms do you propose we regulate, and what should the regulations be? Should I go to jail if I implement a C++ solution of the map-coloring problem in a college classroom? Are there whole chapters of the classic CLRS textbook that should be banned from the curriculum?

A vague reference to "the next generation of algorithms" is hand-wavy, and suggests a fundamental misunderstanding of what algorithms are and how they apply to AI.

There is no algorithm that is going to just switch on one day and take over the world. That makes as much sense as worrying that the Pythagorean Theorem will wake up tomorrow and become SkyNet.

u/megaicemage · 7 pointsr/learnprogramming

Someone else can probably point you to an actual resource, but here are my two cents.

Data Structures and Algorithms is a topic that you don't pick a specific language to learn in. All of the topics covered in algorithms are applicable to all languages, so it's usually a good idea to have a pretty good knowledge of the inner workings of your language of choice. Given this information, the textbook that my class used and it sounds like many other classes also use is Introduction to algorithms

u/BreakOpen · 7 pointsr/OrthodoxChristianity

I have a similar problem to yours, but it centers more on social media than the internet as a whole. Between random memes, constant political posts/debates, and the generally atheist/anti-religious tones of everything I read, it can be very discouraging and distracting. Particularly if I waste valuable time going down the rabbit hole of comments. Taking breaks from social media has been helpful to me, and it's timely that you've posted this, because I'm considering doing so again.

Related to this, I recommend a great book called The Shallows: What The Internet Is Doing To Our Brains which dives into how the habit of quickly scrolling for small bites of info and moving on can damage our attention spans. Like how people put "TL;DR" at the end of posts because readers get turned off by "walls of text".

Prayers and best wishes to you on regaining your digital footing.

u/Verdonkeremaand · 7 pointsr/GetMotivated

Thanks, I share your feeling. The first time I visited this subreddit I was looking for similar posts. I wondered how people could combine Reddit with their busy life or how they would be able to indeed create stuff by at the same time consuming so much. I could not find any of this idea at that time and I just kept surfing until a few months ago when I started frequenting Reddit less and less.

In the meantime I did not stop thinking about it, read The Shallows by Nicholas Carr and wondered how people could combine all this easy, distracting input (Reddit, Facebook, just surfing in general) with bigger things that require no distractions or 'alone time', like reading, learning a new language, or in your case hoolahooping with fire. My conclusion was that you can't. If you want to go for it, you just have to go for it.

Of course you can combine Reddit with taking a test, but you can not combine it with finishing cum laude. I also realised though that this does not count for most people, they can combine these things, but they do not have the intention to become the new Einstein. It is a whole different discussion if this should even be a personal goal, but my idea was that these new Einsteins are so into the achieving of their dream that this would be really hard to combine with the great entertainment part of the internet and our society. It requires an opt-out, you will have to be an einzelganger at some times and that is exactly what what internet tries to prevent.

You worded this very well in your statement and I agree wholeheartedly. As you can see I'm still on Reddit but not for long. The past few months when I paid Reddit a visit I noticed that the lesser frequency of my visits also made me see the content better. And although I'm subscribed to a whole lot of interesting subreddits and described from all these fun things, I still noticed that I did not need all of this. It gave me a sense of passivity that I should not want in my life.

Nevertheless there are a lot pro-arguments to this website and I see that as well. Because I'm living in the Netherlands, I do not necessarily have to suffer some of the ills that the United States is made of. I can really understand that you need some inspiration of sanity if you live in a small conservative town where everyone is the personal friend of Jesus. So yeah, Reddit should inspire you, but maybe more as in a caravanserai. You meet a lot of new and interesting people, have a good night's sleep and travel on. Staying there also means that you will not arrive at your destination.

The people who say that you should do everything in moderation do not see that this is really hard for some people, but these are the same people that will give you some of the most interesting stuff. They can immerse themselves, lose themselves in Reddit or alike, but if they learn to use this energy in a more enduring way they can use it to write books, build houses or govern countries (just some examples).

In my view it works just like torrents. You have the seeders, who make things. They put in the effort. They show themselves once they finish their product. Their creations will surprise or disappoint. Then, there are the leechers. They wait. They need the seeders and they will criticize or praise the products of the seeder. Most of the time a seeder also leeches, but a lot of leechers tend to forget that they can also be seeders.

TL;DR: Reddit should inspire you, but maybe more as in a caravanserai. You meet a lot of new and interesting people, have a good night's sleep and travel on. Staying there also means that you will not arrive at your destination. Just like torrents, the society consists of seeders and leechers. The OP decided he wanted to be a seeder, I as well.

u/zman0900 · 7 pointsr/cscareerquestions

More than likely, your textbook will be Intro to Algorithms. Find yourself a copy and start reading. Even if the class uses something else, it's a great reference to have around.

u/g051051 · 7 pointsr/learnprogramming

Algorithms by Sedgwick and Wayne.

u/lordnikkon · 7 pointsr/cscareerquestions

This is a great book for computer fundamentals that you should just read if you have any interest in computer science. But realistically you will not use much from this book in the real world. It is something to read to understand how things work.

You will get a lot more useful things out of a book like Intro to algorithms than SICP. The biggest thing i find self taught devs lack is an understanding of data structures. They know how to code and write solutions but dont know which data structure is efficient or why. They may learn by trial an error that one data structure is better for certain task but dont know why. If you are able to understand how the standard collections library for most major languages work you will be ahead of most devs

u/Bayequentist · 7 pointsr/algorithms

You should read CLRS from cover to cover.

u/hungry4pie · 6 pointsr/programming

No no, he's Anti-AI: A Modern Approach

u/IWantToBreakFI · 6 pointsr/financialindependence

Make sure you study algorithms! As a hiring manager the biggest differentiator I see between successful self-taught people and unsuccessful ones is that the successful people care about and learn about algorithm & data structure design.

Sure with a language like Java you'll be dealing with the nitty gritty less because it's managed, but it's still incredibly useful and applicable, and will make you a better developer to work with.

Personally, I love this book:

It also has really great interview prep questions when you're getting to that stage.

u/s3ddd · 6 pointsr/netsec

wartex8 mentioned it, but I can't speak about Hacking: The Art of Exploitation highly enough...

u/Murgolash · 6 pointsr/hacking

I may add the book.

Hacking: The Art of Exploitation

u/rojobuffalo · 6 pointsr/Futurology

He is amazingly articulate on this subject, probably more so than anyone. I really enjoyed his book Superintelligence.

u/welshfargo · 6 pointsr/compsci

Discrete math and this textbook.

u/gineton2 · 6 pointsr/ComputerEngineering

For a gentle introduction, CODE: The Hidden Language of Computer Hardware and Software is a really pleasant read. It works its way up gradually, so maybe not the best fit for a physics student or someone who already understands the fundamentals. For someone new to the subject it's a great fit, however. Otherwise I see Patterson and Hennessy recommended.

u/com2kid · 6 pointsr/learnprogramming

Read Code by Petzold

You'll have a far greater understanding of how things work at a basic level than everyone else.

u/boojit · 6 pointsr/explainlikeimfive

Related, this is a very good book about computing that happens to cover the history of the braille system in some detail. If you click on the "look inside" preview bit, and go to Chapter 3, most of the information relevant to your question is covered in these preview pages.

u/Shadowhawk109 · 6 pointsr/learnprogramming

MVC is just a paradigm. Implementations differ from language to language, and some languages have better support than others, but yeah, just a paradigm.

Look into Design Patterns by the (in)famous "Gang of Four" for more information about this.

I will say this -- most experience I have with C# backends leads to great usage of databinding between model and view regardless of application platform (WPF, Windows Forms, even some ASP.NET). And I'm pretty impressed with the support of other design structures that C# and Visual Studio offer with the help of NuGet (looking at you, Angular).

u/obeleh · 6 pointsr/compsci

Perhaps offtopic but... Some books you should read regardless of CompSci branch

u/JAPH · 6 pointsr/learnprogramming

Introduction to Algorithms by CLRS. Used in almost every algorithms class I've heard of, and a great reference book. It's about 1300 pages, so don't try to read straight through it.

C Programming Language by K&R. This is a C programmer's Bible.

Design Patterns by the Gang of Four

This is a little more of a topic book, but The Art of UNIX Programming by Raymond.

These are all either pretty common, or almost essential. You'll probably see these in your curriculum anyway, and you should. These are a good cornerstone.

u/KingEsoteric · 6 pointsr/AskMen

Small employment gaps are no big deal. Over six months people may ask, but it's all in how you answer. I'm not sure why you feel like you're unmarketable having worked in the industry for two years, but do know a lot of the postings - especially junior postings - are inflated. I've seen one that asked for three years of experience with Visual Studio 2019. If you're halfway there, shoot your shot.

As a junior dev, the expectations are low. All I'd expect you to know is how to get code up and running that I don't have to tear down for the good of the company. Be able to read your language and solve simple problems. The biggest thing I look for in a junior dev is if I can give them some piece of of the software to write while I'm not looking and feel that you're mostly there when I come back to check. Apply for appropriate positions and don't fudge your experience. Enthusiasm and eagerness to learn go a long way. Don't be a know-it-all from your position.

Decide what kind of role you'd prefer, and start the process of brushing up on that. Use the job postings that represent the jobs you want as direction on what you need to learn. If the role you really want is too far, get a job doing what you know to pay for your education in the role you want.

As a front-end developer, you're going to want to learn a Javascript toolchain and one modern framework to start. Npm and Node.js are the backbone of what you do. If you want to switch, learn what juniors do in that paradigm. Do know that the Javascript world is fast-paced and fad-based, so if you miss a wave, wait two years and the next one will be coming around for you to hop on.

Personal projects are a good idea, just make them meaningful by using the proper setup (not just some bullshit hack job) or address an interesting problem. You're going to want to get it up on a personal repository that you can put a link to right on your resume and job site (Indeed, Dice, Glassdoor, Linkedin) posting. Be able to speak to every decision you made, even if it was a bad one. Your personal project doesn't have to be spotless or even completely done, it just has to be yours, it should be able to execute, and you should show some decent decision making. A mod for a game, a contribution to open source, a personal thing that has some use-case or whatever.

Get experience with related technologies. Start to learn one step before and beyond the one you're a specialist in. For example, you're a junior front-end dev. Learn a little about backend work, and learn about deployments. Learn about the experience of your fellow team members as they try to integrate your work with Git, build with Jenkins or AWS Code Build, and containerize with Docker. Think about the pain points you face in architecture, code, building, and deploying; think about how you'd solve them or if you can't, keep an eye on solutions as you go. Know the differences between elements of your chosen sphere.

Higher level concepts like SOLID principles,Design Patterns, and Refactoring Patterns are more goals than expectations, but you should take a look at them now and at least be able to speak to at least one of them somewhat. With limited time, prefer Design Patterns. You don't want to walk into an interview where someone asks you about how you use design patterns and you've never heard of them. Even if they'll accept that, you still won't feel good about it.

Look up some materials on coding challenges, as some companies give coding quizzes. I just had an interview with a guy that touted 10+ years of experience but couldn't read from a file given an hour.

If you feel like you're going to be let go due to performance, get ahead of that and ask your supervisor how you're doing or what you need to do to grow. If you feel like you're going to be let go due to a restructuring you can't affect, you have two options: get to know other teams so you can maybe hop on their project later, or just save your money and get to work on some of the stuff above each weekend until the axe falls. You're a junior dev. You're not expected to be perfect, but you should come in a teachable state - some foundation with programming, a willingness to learn, a willingness to figure things out, and the ability to take direction.

u/Rikkety · 6 pointsr/AskComputerScience

Check out The Annotated Turing by Charles Petzold. It's Turing's paper on the Entscheidungsproblem which introduces Turing Machines, annotated with a lot of background information and some stuff about Turing's career. Very interesting stuff.

I can also recommend Code, by the same author which describes how a computer works from basic principles. It's doesn't have a lot of material on Turing, but it's certainly an interesting read for anyone interested in Comp Sci.

u/armchair_viking · 6 pointsr/smashbros

"Code" by Charles Petzold is a great book that does that. Starts with a simple flashlight switch, and builds on that example until you have a working processor.

Code: The Hidden Language of Computer Hardware and Software

u/yoodenvranx · 6 pointsr/de

Falls du wissen willst wie eine CPU funktioniert und was Assembler ist und vor allem wo das alles her kommt und warum es funktioniert, dann kann ichdir Charles Petzold - Code: The Hidden Language empfehlen. Er fängt mit einfachen Morsesignalen an, leitet dann Logikgatter her und am Ende des Buches hast eine eine funktionerende CPU.

u/novembersierra · 6 pointsr/cscareerquestions

Code: The Hidden Language of Computer Hardware and Software

This book starts with flashlights and Morse code and Braille, goes to telegraphs and electricity, works it way up to Boolean logic gate circuits (still using the components from telegraphs!) and then goes all the way to programming languages and computer graphics.

u/Omnipotent0 · 6 pointsr/educationalgifs

This is the best video on the subject I've ever seen.
Of you want to learn more I very very very strongly recommend this book.

u/tech-ninja · 6 pointsr/ProgrammerHumor

Depends what you want to learn. Some of my favorites are

  • Code by Charles Petzold if you want to know how your computer works under the hood.

  • Peopleware if you want to learn how to manage knowledge workers.

  • Clean Code by Uncle Bob if you want to learn about good practices and program structure. Impressive content, covers much more than I expected.

  • Don't Make Me Think if you want to learn about usability.

  • Algorithms by Robert Sedgewick if you want to learn about DS & algorithms.

  • The Art of UNIX Programming by Eric S. Raymond if you want to learn about the unix philosophy. Lots of hidden gems in there. Have you ever heard: write programs that do one thing and do it well; don't tune for speed until you've measured; imagine all this knowledge distilled to you in one book.

    This a good list to get you started :) most of my favorite books are not language specific.
u/JavaJosh94 · 6 pointsr/learnprogramming

While data structures and algorithms are important, don't forget design patterns!

Design Patterns: Elements of Reusable Object-Oriented Software

u/developero · 6 pointsr/learnprogramming

Code is a great book that helped me understand programming on an abstract level

u/EughEugh · 6 pointsr/programming

There are several good books on designing good software:

Code Complete

Design Patterns


u/FattyBurgerBoy · 6 pointsr/webdev

The book, Head First Design Patterns, is actually pretty good.

You could also read the book that started it all, Design Patterns: Elements of Reusable Object-Oriented Software. Although good, it is a dull read - I had to force myself to get through it.

Martin Fowler is also really good, in particular, I thoroughly enjoyed his book Patterns of Enterprise Architecture.

If you want more of an MS/.NET slant of things, you should also check out Dino Esposito. I really enjoyed his book Microsoft .NET: Architecting Applications for the Enterprise.

My recommendation would be to start with the Head First book first, as this will give you a good overview of the major design patterns.

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/gingenhagen · 6 pointsr/programming

Try this book: Code, which is a bottom-up approach. Depending on how rigorous your college CS curriculum was, it'll be either a good review of your college classes or mind-blowing, but I think that the approach that the book takes is really great.

u/bhrgunatha · 6 pointsr/AskComputerScience

A famous artefact of early computing is the boot-strapping process where the goal is a self-hosting compiler - which lets you write the compiler for a new language in the new langauge. However to get to that point a lot of earlier innovations were needed.

Take all of this with a pinch of salt - the order and the details may be wildly inaccurate, but the overall ideas viewed from afar give an idea of how we got to the point that we can choose our own language to write a compiler for another language..

To start with, raw binary values had to be set in order to define and run a program. Those raw binary values represent instructions that tell the hardwaer what to do and data that the program needed to operate. This is now usually referred to as machine code.

At first you would enter values into computer storage using switches.

Since that's so tedious and error prone, puched cards were developed along with the necessary hardware to read them so you could represent lots of values that could be read toagether. They had their own problems but it was a step forward from switches.

After some time symbolic instructions were defined as a shortcut for several machine code instructions - now usually called assembly language. For example put the value 8 and store it into a memory location 58 could be written as ST 8, [58]. This might take 3 machine code instructions, one represents the store instruction, one the value 8 and one the location 58. Since now assembly language could be written down it was easier to understand what the computer is being instructed to do. Naturally someone had the bright idea to make that automatic so that for example you could write down the instructions by hand, then create punched cards representing those instructions, convert them to machines code and then run the program. The conversion from the symbolic instructions to machines code was handled by a program called an assembler - people still write programs in assembly code and use assemblers today.

The next logical step is to make the symbolic instructions more useful and less aimed at the mundane, physical processes that tells the computer exactly how to operate and more friendly for people to represent ideas. This is really the birth of programming languages. Since programming languages allowed you to do more abstract things symbolically - like saving the current instructions location, branching off to another part of the same program to return later, the conversion to machine code became more complex.Those programs are called compilers.

Compilers allow you to write more useful programs - for example the first program that allowed you to connected a keyboard that lets you enter numbers and characters, one connected to a device to print numbers and characters, then later to display them on another device like a screen. From there you are quite free to write other programs. More languages and their compilers developed that were more suitable to represent more abstract ideas like variables, procedure and functions.

During the whole process both hardware - the physical elctronic machines and devices and software, the instructions to get the machines to do useful work - were both developed and that process still continues.

There's a wonderful book called Code by Charles Petzold that details all of these developments, but actually researched and accurate.

u/nobody102 · 6 pointsr/AskElectronics

There are plenty of tutorials on the net - I would also recommend this book -

u/MrInvisibility13 · 6 pointsr/wow

more employees = more code = more complex codebase = more bugs.

This is a useful book for understanding what's happening here:

u/Gusfoo · 6 pointsr/startups


But that aside, you should always throw away version 1. You now know far, far more about the reality of the situation than you did when you built your MVP.

Also. Go and read The Mythical Man Month.

u/TheDarkIn1978 · 6 pointsr/electronic_cigarette

If anyone is interested, this book is pretty great for amateur hobbyists like a lot of us here.

u/AMagill · 6 pointsr/engineering

Doesn't quite sound like what you're describing, but The Mythical Man Month is the book I've most often heard described as absolutely essential for understanding problems with managing software projects.

u/smysnk · 6 pointsr/java

While you said books haven't helped, give this one a try:

This website is pretty good also:

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/WaxenDeMario · 6 pointsr/cscareerquestions

Yes! Also, quite honestly I don't know that many CS majors who took linear algebra at my school for whatever reason.

Where do you get started?

  • If you're the type of person who likes an organized class to learn concepts, consider checking out coursera or other similar websites which offer free online learning courses! Check out their CS offerings and start from the intro.

  • I must be known for spamming this SR with this, but check out CLRS, it pretty much contains most of the "CS math" you need to know for algorithms. As well as pretty much all you need to know about Algorithms and Data Structures for any basic job.

  • REALLY make sure you understand your Algorithms and Data Structures, nearly every interview for a basic position centers around these topics. As well as some others, depending on the company: Bit manipulation, multi-threading, TCP/IP, etc.

  • You want to learn some mainstream language as a lot of other people mentioned: C++, Java, C#, Python are a few that come to mind (though there are more like Ruby!). Side Note: Some people have differing opinions on whether C++ is good to learn as a first language. I don't know C# (but from its apparent similarity to Java) I would say C++ is probably the most difficult language to learn of the four I listed, but I feel that it also provides the most flexibility, because once you understand C++ it's easier to trainsition from C++ to Java, than say Java to C++ (similar for the other languages).

  • Practice! Start working on some Project Euler problems, or other practice problems. Bonus: Someone in another thread mentioned that they made a blog post for each problem they solved and explained every one of their design decisions. This seemed like a bit over the top, but it really is a good practice for an interview and a job! You can even put a link to this on your resume to share.

  • Find an Open Source to contribute to, come up with your own projects and post them on your github! This can show off your skills to a potential employer!

    Bonus for programming:

  • When coding alone it's easy to get lost and start "hashing" together code. When you get to big projects, you'll find that this causes a lot of problems (and when working with other people it can cause even more). Some things to keep in mind when coding:

  • Make sure your code is maintainable.

  • Make sure your code is scalable.

  • Test, test, test!

    Maintainable kinda means that your code is easy to test, easy to comprehend (by others) and easy to modify. Read up on different design patterns to learn more about this.

    Scalable is something you'll learn more about later, but basically it's kind of thinking about whether your code will be "good" enough to handle a lot of users (how fast is it how much memory will it take up)

    Testing is very important when coding. You want to try to write small pieces of code then test it (i.e.: make sure it works).

    All three of these things show up a lot in interviews, and if you can relate why you made your code the way you did to one of these three points (or something else) you should be pretty well off :D

    How do I land an interview?

  • In your resume make sure to list any CS projects you want to mention, a link to your website (if you have one) or to other work. As well as Operating Systems you're familiar with (Linux is a big plus, but not absolutely necessary), IDE's you're familiar with (things like Eclipse, Visual Studios), and Languages you know. If you can, make sure to relate those three bullets to your project and work somehow to reiterate your experience with each language.

  • A lot of recruiting is done on-campus, but there are other options, like applying online or even better...

  • Network your way in. This gets your resume through the massive HR screen

  • Edit, edit, edit (ask friends who are in the industry).

    How do I study for an Interview?

    Typcially, an interview will have you and the interviewer. The interviewer will first ask questions about you, what you're majoring in. And then maybe ask questions about your previous projects, and then he'll throw you a programming problem. Sometimes these can just be questions like "Which is faster: quicksort or mergsort?" or something like that, but other times they'll have you code something. If the interview is online, this will either mean you'll need to tell them the code you're writing or you'll code online on some collabarative envirionment (i.e.: you type the code online). If it's in-person they may have you write on a whiteboard. There are other formats of interviews as well, so make sure to research. Typically, for most larger companies, they won't care what language you code in (hopefully though it's mainstream!), but if you don't code in a language which they use, they may test you later for proficiency in one of their languages.

  • As I mentioned before, Algorithms and Data Structures are usually go-to's for interviews, but other topics may come up so check out the req's for each job specifically.

  • It may have been a while at this point since you studied your material, to brush up on interview questions, Cracking the Code Interview is a great book to brush up on your topics for an interview, it also has some resume advice, etc. if you choose to follow it.

  • Be sure to practice talking out loud while you're coding, as this can help you during interviews. If you're stuck but your thought process is good an interviewer can help push you in the right direction.

  • If you struggle with interviews, try having a friend who you know has experience and having him ask questions, better yet if you know a friend at the company, ask him to mock interview you.

  • If you have time ALWAYS make sure you run test cases through your code mentally, and mention the test you're running and what it's supposed to catch (expected behavior) to your interviewer! If you have time and choose to ignore these, it can give the interviewer a wrong impression :\ (it also makes you look really good if you come up with all the boundary cases)

    Sorry, not sure if this helps or not!
    Good luck!
u/salamanderoil · 6 pointsr/AskComputerScience

It depends on what you already know.


Do you have any prior programming experience? If not, start there. My no. 1 recommendation here would be Allen B. Downey's free Think Python book. Others might come along and recommend something like SICP, which is a good book, but perhaps a bit hard for an absolute beginner. Downey also has a version of his book that uses Java, so if you know for a fact that this is the language your introductory programming class will be using, then that could be a better option (Python is a simpler language, which makes it easier for you to focus on the actual concepts rather than the language itself, but if you know that you'll be using Java, you might as well kill two birds with one stone).


If you do have prior programming experience, you have all sorts of options:

  • You could learn a functional language, like a Lisp (Clojure, Racket, Scheme, LFE, ...) or something in the (extended) ML family (Standard ML, OCaml, F#, Haskell, Elm, ...).
  • Or, you could go the other way and learn something low-level, like C. You could even learn about C and Lisp at the same time by building your own.
  • Or learn a logic programming language, like Prolog.
  • Or, if you really want to understand object-oriented programming (and how languages like Java managed to stuff it up), you could learn Smalltalk.
  • If you don't know what a unit test is or how to write one, you should learn.
  • Learn about data structures and algorithms. As a CS student, you'll be learning about them at some stage anyway, so there's no harm in starting early. Some people might recommended CLRS for this, but for someone just starting out, I'd recommend something a bit friendlier, such as this series of videos from Princeton (presented by Robert Sedgewick, author of one of the most popular books on the subject). If you'd prefer a book, this free one from Allen B. Downey (who also wrote the introductory programming text I recommended earleir) looks quite good.
  • Work your way through NAND2Tetris. It will take way longer than a month, but it will definitely set you apart from the rest of the class. Even if you don't do this now, you should definitely plan to do it at some point.
  • Learn about databases. Again, you'll have to study them eventually, so why not start early? You could start by trying to build something that uses a database, like a simple todo utility.


    Regardless of whether or not you have programmed before, I would also recommend doing the following:

  • Learn some basic Unix skills. It doesn't have to be too much – just enough to be able to sit down at the command line and have a vague idea of what you're doing is fine for now. You'll learn more as you use it more. That said, if you really want to dive in and learn how everything works, then something like How Linux Works could be a good read.
  • Learn some discrete mathematics. As a CS student, you'll be required to learn it at some stage – it's the mathematical backbone of CS, much like calculus is to physics – so you might as well start early. This free, book-length set of notes from MIT is very well-regarded (but don't expect to get through it all in a month!). There is also a set of video lectures if you prefer. If you're keen on learning functional programming, another option could be to integrate that with your discrete maths studies by reading Thomas VanDrunen's Discrete Mathematics and Functional Programming (if the physical book is a bit expensive for you, there's also a cheaper ebook version available).
  • For bonus points: learn to use either Vim or Emacs. There probably isn't a massive practical advantage to using these this early in your career (although they could certainly come in handy later), but if other students see you writing code in one of them, you'll look like an absolute badass. Your teachers will probably be quietly impressed, too.


    if you have any questions about my above suggestions, let me know, and I'll see if I can point you in the right direction.


    Good luck!
u/TranshumanWarrior · 6 pointsr/slatestarcodex

> I think that more people will be deterred by a focus on AI safety. It's worse for EA if people think "These people are weird nuts" than "These people are somewhat liberal."

But raw amount of support is not the objective that EA is supposed to be trying to maximize. If that support comes at the cost of making EA into a subset of left-wing political activism, and if an ever increasing proportion of EA stuff gets funneled into social justice and all the standard left-wing culture war causes, then we will be left with a movement that is EA in name only.

AI safety is not as far-out as it was 10 years ago. If someone looks at AI safety and people who support it - such as Stephen Hawking, Elon Musk, Bill Gates, Nick Bostrom and the guy who co-wrote the textbook on AI - and are turned off by it because they think it is crazy, well maybe they have been successfully filtered out as people not possessing the required level of rationality to be beneficial to the movement? I wouldn't have made this argument even 5 years ago actually, because AI risk looked so superficially dodgy even though the arguments are sound.

u/ladiesngentlemenplz · 6 pointsr/askphilosophy

The Scharff and Dusek reader has been mentioned, but I'd like to put a plug in for the Kaplan reader as well.

The following are also worth checking out...

Peter Paul Verbeek's What Things Do (this is my "if you only read one book about Phil Tech, read this book" book)

Michel Callon's "The Sociology of an Actor-Network"

Don Ihde's Technology and the Lifeworld

Andy Feenberg's Questioning Technology

Albert Borgman's Technology and the Character of Contemporary Life

Martin Heidegger's "The Question Concerning Technology"

Lewis Mumford's Technics and Civilization

Jacques Ellul's The Technological Society

Langdon Winner's "Do Artifacts Have Politics" and The Whale and the Reactor

Hans Jonas' "Technology and Responsibility"

Sunstein and Thaler's Nudge

Neil Postman's Amusing Ourselves to Death

Nicholas Carr's The Shallows and The Glass Cage

u/subtextual · 6 pointsr/Neuropsychology

You might take a look at Nicholas Carr's 2011 book The Shallows: What the Internet is Doing to our Brain. The same author also has a new book out on the effects of automation in general on the human brain. Carr's 2011 book was a finalist for the Pulitzer, though it's not without it's detractors -- at the very least, it cites a lot of research and should give you some background on some of the major researchers and ideas in the field. BTW, I think the field is called Human-Computer Interaction (and that's what Amazon calls books on this topic), though HCI also covers making computers and technology easier for people to use.

u/this_shit · 6 pointsr/philadelphia

It's a scary validation of all the technological-dystopian theories like The Shallows. I used to be much more dismissive of the idea that facebook/media bubbles/instant gratification was hurting society.

But here we are.

u/ForeignStudentUS · 6 pointsr/greece, και παρες όσες περισσότερες δουλείες μπορείς. Βιβλια που μπορεις να διαβασεις:

Αν δεν ξέρεις κάτι google it. Η Ελλάδα έχει μεγάλες προοπτικές ανάπτυξης και πολύ καλό βιοτικό επίπεδο. Αν καταφέρεις και κάνεις κάτι μπορείς να βγάλεις καλά λεφτά κάνοντας εξαγωγές. Έχουμε υψηλό μορφωτικό επίπεδο σε συνδυασμό με το χαμηλό κόστος βιοτικού επιπέδου είναι θέμα χρόνου μέχρι να αρχίσουμε να εξάγουμε competitively priced τεχνολογία.

Αν εχεις ποιο συγκεκριμενη ερωτηση πες μου

u/Gaff_Tape · 6 pointsr/ECE

Not sure about EE-related topics, but for CE you're almost guaranteed to use these textbooks:

u/hvidgaard · 6 pointsr/learnprogramming

I can't really point you to anything online, but this book is one of the best on the subject. If you work your way trough that book, you will know more than most CS undergrads do about algorithms and data structures.

It's also a must have if you're implementing your own data structures every now and then.

u/bcarson · 6 pointsr/compsci

I'm a pure math guy but Algorithms by Sedgewick & Wayne is one of the best textbooks I've ever read.

u/theootz · 6 pointsr/cscareerquestions

TL;DR Improve yourself, invest in your future, don't worry about the the books listed at bottom, and practice!

Few months ago I royally fucked up an interview at Microsoft. A really simple question. But I had no experience doing coding on paper instead of a computer.

I spent a lot of time studying various books and paper coding to make sure it wouldn't happen again.

I then had an interview for another (in my mind at the time) dream job. I did fine for all the phone interviews and they flew me over to the west coast for an in person interview for the day. I did well for the first bit until they started pulling out dynamic programming and integer programming questions on me and expecting me. Once again something I didn't prepare for, and f'd up. Didn't get this job either. For the longest time I was really hard on myself at fucking up on both these interviews one after another. Especially this second one since a lot more was riding on it than just the job (another story).

But then I decided I didn't want to have this sort of experience again and expected better of myself. I made myself further improve and brush up on all those concepts as well. Did a few mock interviews with friends, spent some time working on interview type questions on both the computer and on paper. A month or two later I started interviewing again. By this point I was an interviewing machine - and I'm now able to do just about anything thrown at me. I've had my choice of employers and until just recently, was in the situation where I had so many offers I didn't know which one I wanted most. I'll be heading to silicon valley soon at one of the top tech companies in the world with a fantastic offer considering I just graduated.

The point is - learn from the mistakes and improve yourself. I realize you don't want to be that guy spending heaps of time coding outside of work or whatever... but this is an investment in yourself and your career. Do it once, and then just brush up on your skills from time to time. Get into the interviewing mindset and just rock them so you can have your choice of job - and then you can go about your thing once you have the job locked. The up front investment will be worth it!

Things that helped me:

  • - practiced a lot of questions on here
  • - another great site for questions
  • Cracking the Coding Interview More help on questions, but also some great insights into the interview process for the larger tech companies and many hints and tips on how to go about solving the more complex problems
  • Code Complete A great book for helping you to refresh or learn about software design
  • Eternally Confuzzled Great resource to learn how to think about common data structures and algorithms

    Having trouble with Algorithm design/analysis? These are some of the go-to books for that:

  • The Algorithm Design Manual Probably the defacto for learning about algorithm design and analysis
  • Introduction to Algorithms A great book with many different algorithms and data structures to learn about
  • Algorithm Design A great book if you want to dive deeper into more complex subjects like graph theory, dynamic programming, search algorithms, etc.. etc..
u/win7dev · 6 pointsr/IAmA

>What would be the best way to prepare for these types of interviews? What sources/books did you use to study data structures and algorithms?

Get a friend and have them run you through practice interviews. Lots of them. Get used to writing code on a whiteboard, because it's different from writing code in an IDE.

For algorithm practice, I bought Introduction to Algorithms and Programming Pearls. I also did a lot of research online to find out the kind of interview questions to expect. (Ignore the brainteaser questions; Microsoft doesn't do them any more.)

For the most part, just hit the books, study hard, and write lots of code on a whiteboard. This article by Steve Yegge really nails it, I think.

u/solen-skiner · 6 pointsr/learnprogramming

Check out TECS, its the definite course on that. You start with logic gates and build your way up to an ALU, then a CPU, an assambler, a compiler, an OS and a game :)

u/manbetrayedbyhismind · 6 pointsr/gamedev

Introduction to Algorithms. It's a great reference book for me now.

u/Obie-two · 5 pointsr/learnprogramming

the book is just called "Design Patterns?"

u/invictus08 · 5 pointsr/cscareerquestions

I will suggest start with Head first design pattern. That will gradually build your intuition about good software design. And it’s more fun to read compared to GoF imo. On top of that, there are Youtube videos by a guy named Christopher Okhravi on design patterns. Since I understand much better with videos (along with text book) because of my attention deficiency, they really helped me.

Apart from that, follow tech blogs of Netflix, Google, AWS, Uber etc. They are treasure troves.

Also, as /u/ibsulon mentined, Clean Code for writing good quality code, Programming Pearls and Pragmatic Programmer etc. Effective java and Doug Lea's book on concurrent programming - really helpful.

u/-jp- · 5 pointsr/java

Learning JavaScript is pretty good advice since it's useful in its own right, but honestly any company that expects a Jr. Java developer to have any kinda deep insight is being just unreasonable, and probably isn't a very good place to work. Everybody starts somewhere, Java developers included.

That said, for anyone wanting to learn design patterns, I suggest the classic GoF book: Design Patterns: Elements of Reusable Object-Oriented Software.



Promise me if you read it you won't use Visitor for anything ever.

u/gtani · 5 pointsr/algorithms

That book has reviewed excellent reviews This is the standard text, CLR or CLRS

What you're describing is probably what most people think of as machine learning, data science/mining, and has as much to do with computational efficiencies as it does algorithms' intrinsic behavior.

Also, What programming languages do you know?

Maybe if you look at a cheat sheet and some ML texts (Murphy, Bishop, Barber), those would help (also AIMA by Norvig/Russell)

u/10_6 · 5 pointsr/learnprogramming

Some books that could help you practice algorithms and coding challenges are:

  1. Elements of Programming Interviews

  2. The Algorithm Design Manual

  3. Cracking the Coding Interview

    If you want some actual practice solving challenges with some guidance and/or help, I'd recommend Coderbyte which provides solutions to the problems along with the ability to view other user solutions so you can learn how others solve the same challenges. This article might help you find some other coding challenge websites as well.
u/BoobDetective · 5 pointsr/hacking

Buy it, read it, understand it. Skip nothing, and suck it in!

Good? Now go to town on Blowfish at

u/Pardon_my_dyxlesia · 5 pointsr/hacking

I was personally recommended by my mentor Hacking: The Art of Exploitation, and The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws
Also some companions sent me some readings on index articles. I'm not so sure of the titles, but just browse around.

u/khazarboy123 · 5 pointsr/CrusaderKings

Ok I actually understand this, because I took Computer Systems and had to read This is awesome.

u/toptrool · 5 pointsr/math
u/Neophyte- · 5 pointsr/CryptoTechnology

nope, humans can barely do it. you need general artificial intelligence first, then if it progressed to super artificial intelligence then yes.

if youre interested in what im talking about read these two articles. second article is where it gets good. but you need to read both.

more heavy reading

u/equinox932 · 5 pointsr/Romania

Vezi si, au 4 cursuri foarte bune. Apoi si asta e bun. Hugo Larochelle avea un curs de retele neuronale, un pic mai vechi.

La carti as adauga si The Hundred Page Machine Learning Book si asta , probabil cea mai buna carte practica, da asteapta editia a 2a, cu tensorflow 2.0, are tf.keras.layers, sequential model, practic tf 2 include keras si scapi de kkturile alea de sessions. Asa, si ar mai fi si asta, asta si asta. Nu pierde timp cu cartea lui Bengio de deep learning, e o mizerie superficiala. Spor la invatat si sa vedem cat mai multi romani cu articole pe ML si DL!

u/Thought_Ninja · 5 pointsr/learnprogramming

If you want to dig deep into the theoretical of programming, and help build a good foundation for OOP, patterns, and algorithm design, check out Concrete Mathematics: A Foundation for Computer Science. It is honestly the best textbook I have ever come across.

From there, if you're feeling really ambitious in studying algorithms, check out The Art of Computer Programming, but I should warn you, it is very dense and can be hard to understand even for accomplished developers.

Beyond that, I suggest checking out The Odin Project. It covers a variety of languages and frameworks including Ruby On Rails, which is pretty standard in app development these days. They have a lot of great references and side material. It's basically a "go at your own pace" open source coding boot-camp.

> Like I said, this is for me. I hate just being told "do this" and having no concept of why. I want to understand why I'm doing it, the implications for doing it "this way".

This... This is the mindset that will carry you and eventually make you stand out as an exceptional programmer. Learning how to do something might land you a job, but knowing how it works makes you an invaluable asset to any employer.

As long as you are passionate about learning the material, you will pick it up over time.

>This is where I realized that I was doing this wrong, at least for me. I'd be on codeabbey and know what I wanted to do, but not how. I realized that I needed to be building larger things to be working with oop concepts. I really felt I was missing a lot of "base" information.

Awesome observation. Doing studying and doing drills both have an important role in the learning process, but there are other forms of practice to include in order to reinforce the material in a meaningful way. Ruby Rogues Podcast has a great group discussion about how to learn that I highly suggest you give a listen.

Personally, I learn best by throwing myself into a project where I am in wayyy over my head. By struggling through problems, scrupulously tearing through documentation and examples, I learn a lot more of the why than the how at the end of the day.

I learned Javascript, jQuery, and AJAX by building a templating & ecommerce framework. I started out with little to no knowledge or understanding of how JS worked, and was forced to restart a number of times as I began to see what was good and what was not, but now I feel very comfortable working with it.

Find a problem, and solve it, because Computer Science is, really, just the art of problem solving.

Best of luck, and most importantly, have fun :D

u/NaturalDisplay · 5 pointsr/algotrading

Another great book for me was Hands-on Machine Learning with scikit learn and TensorFlow. This one I think is where I started to get some intuition on what some of the ML algo's were actually doing, and he provides lots of material on algorithm tuning.

u/silverforest · 5 pointsr/IWantToLearn

Engineer here. The Navier–Stokes equations are expressed using vector calculus.

I'd just point you to books. I highly recommend actually doing the exercises at the end of each chapter.

John Bird - Engineering Mathematics

This is a good book that doesn't assume that you've completed GCSE mathematics. It brings you up to scratch to a level of mathematics I'd expect a first year undergraduate to have. Yes, it starts with fractions. A large chunk of it is geometry and calculus, though it does touch on some statistics and matrices and complex algebra on the way there.
It ends with you being able to solve basic separable 1ˢᵗ order ODEs.

Kreyszig - Advanced Engineering Mathematics

Higher-order ODEs, Linear Algebra, Vector Calculus, PDEs, Complex Analysis, Fourier. Oh, and linear programming and optimization.

There's a recommended study guide and order in the introduction.

Knuth - Concrete Mathematics

Just thought I'd include this here, since you're a programmer. Touches on some continuous and some discrete mathematics essential for computer science.

u/realfizzbuzzed · 5 pointsr/learnprogramming

For language specific stuff like c++ I'd suggest: as a pretty good quick review. Going through c++ primer (or whatever book you learned C++ from) and just touching on all the topics that you don't remember can help a lot.

What helped me with design patterns is head first design patterns. Even though that book seems very 'intro' it has helped me pass all the design pattern question I've ever gotten. I think just visitor, singleton and MVC are the most popular interview design patterns. The more canonical 'gang of four' book would be: this.

For just practice tech interview problems that you'll see on silicon valley, big4 tech interviews, the most popular site is probably leetcode (hackerrank, or top coder or even codewars are pretty good sources too). The most popular book (as mentioned many times) is Cracking the coding interview.

Just grinding out problems on leetcode, you'll probably learn enough to pass most tech interviews after about 100-200 questions (if you've never done this before, less if you have).

Before/during your leetcode practice I've written a series of tech interview tips to help you check on your fundamentals (you can check it out at I try to go over the questions I see people failing most often. I'm also trying to help readers so would love to help you if you run into problems.

I also think you should ask the recruiter the style of interview you'll be having. If you are on the whiteboard then you should practice on it before hand (whiteboard interview tips here.

u/TemplateRex · 5 pointsr/cpp

Books: First A Tour of C++ and then Effective Modern C++. Website: (it features many blogs, conference announcements, Stackoverflow questions regarding C++11/14).

u/eric_weinstein · 5 pointsr/learnprogramming

Seconding The Pragmatic Programmer and Cracking the Coding Interview. I'd also recommend:

  • Code Complete: verbose and somewhat self-congratulatory, but extremely good.
  • The Mythical Man-Month: a little dated and weirdly religious at times, but has great insights into how software problems are actually people problems and how large projects are (mis)managed.
  • Design Patterns: a.k.a. the Gang of Four book. This one's a classic.
  • Pro Git: you mentioned version control systems. IMHO, you should learn Git if you don't know it, and this book is a great resource.

    If you let us know which languages you primarily write, I can probably recommend some good language-specific titles, too.
u/thatsnotgravity · 5 pointsr/learnprogramming

Pragmatic Programmer, Clean Code, and Head First Design Patterns come to mind right away. They're 3 of my favorites.

There's also Design Patterns by the Gang of Four. That's a lot more dense IMO than Head First, but it's fantastic material.

Since you're looking to jump ship and start interviewing, take a look at Cracking the Coding Interview. That will prepare you for any questions you run into during the process.

It's probably also worth brushing up on Algorithms and Data structures.

u/proverbialbunny · 5 pointsr/algotrading

Scott Meyers made Effective Modern C++ which has a lot of changes in the language documented and documented well. If you're proficient in C++ I highly recommend checking it out. (Or watch:

The big one is ownership semantics leading to smart pointers.

The general rule of thumb is you should never use a raw pointer, except when you're not transferring ownership. Also, consider weak_ptr, and references, always references.

SFINAE in class, really? I'm impressed. Use constexpr if instead when you can (90% of the time). SFINAE should really only be used for firmware and library engineers and is on its way out, if concepts ever get finished.

Metaprogramming in C++? More like dark magic, taking advantage of C++17 plus SFINAE. No, I think you mean meta template programming, most likely. Meta template programming has been replaced with constexpr if as well. Don't do it, unless you like pranking your coworkers. You can write meta template programming to crashes IDEs when they try to read the file.

>data structure/algorithms (arrays/linked lists/trees/maps/stacks/queues/searching/sorting/graph searches and efficiency considerations)

That's more data structures than algorithms. I personally think algorithms are more important, but I digress:

std::deque is important, and no it's not a doubly linked-list. All the different hash and tree structures like std::unordered_multiset are super helpful to know, even if you never use them. Understanding sets and tuples too. None of this is specifically modern C++, except that most of these data types didn't exist or were incomplete 'till C++11. cppreference is super helpful and imho should be used regularly.

Oh and C++ has a whole slew of algorithm functions and classes now. Check them out on cppreference, but imho they're not super helpful like they are in Python or R. Really, learning how to make an algorithm is more important.

Oh, I've been rambling about old stuff. Okay back to modern: the different kinds of bracket initializations are important. Previously initialization had a lot of () in it, so auto foo = Bar(0);, should that be a () or a {}? Looking at it I can tell you it most likely should be auto foo = Bar{0}; but it's not a guarantee. I'd have to look at Bar's source code to verify.

There are modern idioms that should be considered, like aaa or almost always auto, and should be followed when possible and reasonable to do so.

Lets see, what else.. nullptr instead of NULL. A lot of the pre processor can be replaced with constexpr and constexpr if.

Ranges is definitely worth learning but that's a C++20ism. std::expected is super helpful to know but that's a C++20ism as well. (Just to know there are more ways to handle exceptions and which to use.)

They teach perfect forwarding in classes you go to? What classes are you taking? That's impressive. I'd say std::move is super important to know and understand, but it's a given if you understand ownership semantics.

Oh, there are new keywords. default and delete should be used liberally when creating a new class, in conjunction with the 0,3,5 idiom. override is important on the inheritance front, and imho should be enforced using a compiler flag.

Oh! Threading and file handling have had a complete over hall. Now C++ does it instead of using the OS' libraries. Threading is a bit of a sinkhole and should be known inside and out if you're working on your own project. If the project is large enough the framework should handle all of the threading for you. Otherwise, it is important. (eg, lockfree programming is kind of important in most situations.)

And of course lambdas. Super useful. No more void *. I can't believe I almost forgot them. Pass code around, not variables.

RVO is important when considering ownership semantics. Basically, don't std::move on return unless necessary. Don't return a pointer or a reference unless necessary.

Gosh there was something else..

Let's see, inheritance isn't taught right in any book or class I've seen. There is a prerequisite of understanding how to make types. This is important for quant work, because you'll probably be using custom types everywhere. Learning how to make them in C++ is important, not just use them, because it builds the prerequisite conceptual understanding for multiple inheritance.

Inheritance in Haskell terms is subtyping or abstract typing. Abstract classes (not necessarily fully abstract, just not concrete) are a type of class, sometimes called a subtype or abstract type. Inheritance isn't just for gluing code together. It's for having types of classes, or categories of classes. This is something understood on a senior level, but because it is so difficult to understand modern languages tend to just ban multiple inheritance out right. C++ has it, so understanding the thought process to not doing it right, but thinking about it right, is important.

I'm sure there is more. Oh, there is a new syntax Herb Sutter has been pushing which is pretty great, if the whole code base has it. .... and I can't find the video. The skinny is int foo(double bar) becomes auto foo(double bar) -> int. The philosophy is the function name should be as far as possible to the left hand side to make code more readable, because types can get stupidly long sometimes. The C++98 equiv, which thankfully most of the code bases I've worked on do:

foo(double bar)

Oh and std::variant combined with constexpr replaces unions.

Basically, if it's in C there is a C++ equiv. Use that instead. The exception is native types, and functions. Even loops have changed to range based for loops eg for(auto it : foo) and with std::for_each, though C style loops are still useful and used sometimes. Oh and structs are still around and can be popular, but std::variant or std::all might be a better option depending on what you're doing.

And the most important saved for last. Read learn it, love it. For example, checkout F.15. Super helpful. This is official, so you can use it for coding disputes and what not.

phew \>.\<

u/Franku-Senpai · 5 pointsr/cpp_questions

If you haven't read these books already, what are you doing, go and read them now.

Effective C++

More Effective C++

Effective STL

Effective Modern C++

u/charlesbukowksi · 5 pointsr/learnprogramming

I liked it. I would also recommend reading CODE:

Between MIT's Python course, CS50 and that you'll have an excellent grounding in CS

u/robertcrowther · 5 pointsr/programming
  1. He's not the author
  2. The book was published in 1994
  3. Java was first released in 1995
u/tolos · 5 pointsr/IWantToLearn

First, there are two requests: one from your title, and one from your description. The request from your title is a bit easier, though I'm afraid I won't be able to answer it satisfactorily. As far a real world example, that may be a bit harder because modern CPUs are pretty complicated. (When I was learning computer architecture at university, we never really discussed how an intel or AMD cpu worked -- just learned about the MSP430 and a couple of hypothetical CPUs. If you really want to see how a real CPU works, I'd suggest looking into a microprocessor to get started.)

A quick and dirty summary for MIPS CPU datapath Computer Organization and Design 4th ed page 315:

  1. The Program Counter (PC) loads the next instruction
  2. PC is incremented
  3. Instruction is parsed and the correct registers are loaded
  4. Registers are fed into ALU if necessary or
  5. Registers are passed into data memory (for read/write)
  6. Results from ALU/data memory are loaded back into registers
  7. next instruction

    Note that the MIPS example doesn't use pipe-lining, which generally makes things a bit faster. And there's only one code path executing. And there's no look ahead. Which isn't the case for modern CPUs.

    For further reading I highly recommend Code by Charles Petzold. I think it helped prepare me before going to college (for computer engineering).

    For video learning, a quick google search shows some videos that would probably be helpful (I haven't watched any of these).

    Sorry for the rushed response, I can expand on this more later if there's interest.
u/AlSweigart · 5 pointsr/learnprogramming

Patternson's Computer Architecture: A Quantitative Approach was a pretty good book. I remember mostly teaching myself from that textbook since the prof I had wasn't a great lecturer.

You can probably find a PDF of it online easily enough.

EDIT: If you want a reasonable sized book instead of a big textbook, I'd recommend reading Petzold's Code, it's a fun read.

u/sh0rug0ru · 5 pointsr/java

Read lots of code and read books to get multiple viewpoints. This is a deep topic which will require more than superficial online reading.

Check this out.

Books I have found useful:

u/el3r9 · 5 pointsr/explainlikeimfive

I would this in a top level comment but it’s against the rules of the sub to do so, but OP can check out this book, called “Code” is a great, truly ELI5 intro to computers. If someone is interested they can check it out.

u/ttutisani · 5 pointsr/softwarearchitecture

My blog about software architecture: (may not be for very beginners but I hope that it's able to communicate important topics).

I'd also suggest reading the classic book about design patterns (a.k.a. Gang of Four):

There are several good thought leaders in this direction, specifically Martin Fowler ( and Eric Evans (he does not write much online, but his book is great - all about modeling properly):


I'm big on modeling, objects, etc. so reply back if any questions.

u/ewiethoff · 5 pointsr/books

Petzold's Code: The Hidden Language of Computer Hardware and Software. Fascinating book about logic gates, character encoding, and so on.

u/Not0K · 5 pointsr/learnpython

If you would like a really in-depth explanation, check out Code.

u/xbrandnew99 · 5 pointsr/Frontend

Design Patterns: Elements of Reusable Object-Oriented Software doesn't use JS for it's examples, but is highly regarded in learning design patterns.

Also, Mastering JavaScript Design Patterns is pretty good, and if I recall correctly, is modeled after the first book I mentioned. Heads up, there is a more up to date 2nd edition of this book available (linked version is 1st edition)

u/cyberbemon · 5 pointsr/hardware

This is a great start, as it explains and goes into great detail regarding cpu/gpu architectures: Computer Architecture, Fifth Edition: A Quantitative Approach

Another one that goes to low level is: Code: The Hidden Language of Computer Hardware and Software

>"He starts with basic principles of language and logic and then demonstrates how they can be embodied by electrical circuits, and these principles give him an opening to describe in principle how computers work mechanically without requiring very much technical knowledge"


u/pogotc · 5 pointsr/PHP

A good place to start might be learning some of the common design patterns, these are common solutions that have been found to work over and over. The standard book for learning them is this one:

It's not a PHP book but the patterns it covers can be used in any language, there's also loads of stuff on Wikipedia around them:

Learning how to approach a programming problem is at the heart of being a good programmer and it's something you'll always be able to improve on (I'm still learning after 15 years of programming) so I would recommend a combination of trying to read as many programming books as you can, asking for help on StackOverflow when you need it, looking through well written open source code to see how those guys approach problems and above all else, practice, practice, practice.

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/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/addcn · 5 pointsr/explainlikeimfive

All of these answers answer your question on a general level, but I would really recommend reading Code: The Hidden Language of Computer Hardware and Software by Charles Petzold for a deeper understanding. He talks about how the first computers were built and how they were programmed, and he does it in a way that's understandable even to a person that doesn't know a thing about computers.

u/umib0zu · 5 pointsr/AskComputerScience

You should probably start with this book called Code and work your way up from there. It's actually pretty hard to find a single book that describes the history and the concepts, and even if you did find one, most of the topics would be hard to grasp on a first read. Code is usually a great starter book and might give you a few pieces of what your looking for. After you finish it, maybe check out a software book and dive into some of the concepts.

u/joshrulzz · 5 pointsr/programming

> Computer science is about building things like engineering but without the luxury of a toolbox and components taken from the physical world. No one has worked out reliable and effective procedures for building large pieces of software as the engineers have done for physical project.

At first, I started to take issue with this statement because of software patterns. But I he means more than this. The author's points were thus:

  • Engineering components exist in the real world - No one expects a widget to break the laws of physics.
  • Engineering components interact in more predictable ways - In the real world, separate subsystems are really separate.
  • Engineering has fewer fundamental midcourse design changes - Waterfall process works because people don't demand mid-course changes as much.

    IMHO, the author's points are a human problem, not an engineering problem. In point 1, a project manager didn't set expectations for a client. In point 2, developers did not use tools that exist. Buffer-overrun protection DOES exist (his example), and other technologies help modularize software properly. Hell, cohesion and coupling are among the core software design principles. In point 3, again, a project manager did not properly set expectations for the client. PM technologies like agile methods have been developed to fight this. Further, because software is much newer to the human knowledge collective, it's less well understood. When it has been around for as long as architecture and machines, clients will have better expectations of the process.

    In all, it sounds like his experience with software has not been true engineering rather than modern software development techniques.
u/CharlieBlix · 5 pointsr/askscience

You should give this book a read Code: The hidden Language Of Computer Hardware and Software By Charles Petzold

It does a great job of explaining how it all works. Loved it and I don't know how to program (Yet).

u/caryy · 5 pointsr/learnprogramming

In addition to Code Complete 2, which, while very dense, is a compendium of wonderful coding knowledge... I recommend Clean Code by Robert C. Martin.

One of the best books on concurrency that I've ever read is definitely Java Concurrency In Practice it's (obviously) written with Java in mind, but most of the concepts map rather easily to constructs in other languages as well.

The standard for design patterns is still probably Design Patterns (colloquially "Gang of Four")... but I've heard good things about Head First Design Patterns as well, despite the really stupid cover.

u/Nition · 5 pointsr/gamedev

Not specifically game-related, but the great classic Design Patterns: Elements of Reusable Object-Oriented Software is really well written, and it's patterns are as applicable to game design as they are for anything else.

You do say you're an experienced programmer though, so you may already know many of the basic general design patterns in there (or you may have read the book even).

u/Tip_of_the_hat · 5 pointsr/learnprogramming

It really depends on your use case. A good starting point (I'm assuming architecture in software) would be to read Design Patterns by Group of Four. It uses C++ for it's examples and is quite a dense read, but is worth the read.

u/DrAmbulanceDriver · 5 pointsr/learnprogramming

I'm assuming you just want to learn the basic information about how computers work and the principles behind programming them, right?

In that case, I'd recommend Code by Charles Petzold

Are you looking to actually learn how to program and write code in a specific language? If so, then I'd recommend Automate the Boring Stuff with Python by Al Sweigart. It covers the basic principles of writing functions and how computer logic works, and you'll actually be able to apply it to some practical uses. And since its Python, it'll run on a lot of different platforms. If you like it, you may want to get into working with the Raspberry Pi. Javascript is another good language to start with, but as a book, I really like this one.

If you already know a bit about programming, and just want a general reference book, then Computer Science Illuminated by Dale and Lewis is pretty good.

u/joeswindell · 5 pointsr/gamedev

I'll start off with some titles that might not be so apparent:

Unexpected Fundamentals

These 2 books provide much needed information about making reusable patterns and objects. These are life saving things! They are not language dependent. You need to know how to do these patterns, and it shouldn't be too hard to figure out how to implement them in your chosen language.

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/atommclain · 5 pointsr/apple

For the 'computers in general' side of things: Code: The Hidden Language of Computer Hardware and Software

u/Zidanet · 5 pointsr/dogecoin

You should read The Mythical Man Month. It's quite a good explanation of why throwing money and manpower at software does not fix problems and can significantly increase delay.

There's nothing wrong with a small development team using an agile development method.

u/Mattakinz · 5 pointsr/compsci
u/jonride · 5 pointsr/askscience

If you're interested to learn the basic physicality of a computer, I'd recommend checking out a book by Charles Petzold: "Code: The Hidden Language of Computer Hardware and Software."

It's easy to read and provides a lot of insight into how circuitry embodies and propagates information!

u/AccidentalBirth · 5 pointsr/breadboard

You can try /r/electronics, /r/askelectronics, /r/EngineeringStudents, /r/engineering and /r/arduino too, in case this doesn't receive much attention. This is a pretty small subreddit, with very few subscribers. You'll have much more luck in those subreddits (the first two are very good for these types of questions).

This book would be perfect for you. Heck, I'm in my fourth year of electrical engineering, and I love that book. I'm sure you can find a free version somewhere, but I won't link you to that. It truly is an exceptional book that really teaches you about these things. Highly recommended and well worth the money. You'll have to make some purchases before each chapter, nothing too expensive. Just stop wasting money on alcohol or drugs and spend it on something that will benefit you in the future, something more relevant to education haha.

Seriously, that book will explain to you like you're five. It is great. And if you have any questions about the contents of it, you can google it, ask someone on the subreddits, or PM me for information.

Mind if I ask where you live? And what inspires you to be an engineer? What are some of your favorite classes in school? Tell me more about you.

I must say, your approach is a very good one. I can already tell you're a highly motivated person. You have a good attitude.

Edit: Some people are suggesting you start with arduino. But I really recommend you start with reading, and the basic tools (breadboard, components, etc). Although arduino can be basic, it involves coding as well, something you're likely not familiar with. Just get the book, and I promise you'll be satisfied.

u/NowTheyTellMe · 5 pointsr/UCI

So this is what I would consider the "Core" reading list for anyone interested in programming games. None of this is really game specific though. These are just the fundamentals you need in order to be an effective Software Engineer.

Learn about...

C++ syntax: Programming: Principles and Practice Using C++ by Bjarne Stroustrup

Software Engineering: Code Complete by Steve McConnell

C++ gems: Effective C++ by Scott Meyer

Software Teams: The Mythical Man-Month by Frederick P. Brooks Jr.

Why we love Joel: Joel on Software by Joel Spolsky

Problem Solving: The Pragmatic Programmer by Andrew Hunt

Common Code Solutions: Head First Design Patterns by Eric Freeman

Pearls!: Programming Pearls by Jon Bentley

I'll do a supplemental on this in a few days that dives into specific topics related to engine development. All of this is generic enough that it will help you regardless of what you do. You'll notice that very little here is actually language specific. Almost all of this is about the art of making software and process of working with a team. These 8 books alone will make you think about making software in a whole new way.

u/tsjr · 5 pointsr/GlobalOffensive

Programming team size doesn't directly relate to its productivity or efficiency. Recommended reading:

u/riking27 · 5 pointsr/linux

I think this is the book you want: Mythical Man-Month

u/dmcassel72 · 5 pointsr/cscareerquestions

I'll quibble with the "easy to read" part. As a reference, to look up one individual pattern and learn how to use it, I agree with you. As a cover-to-cover book to learn why patterns are important and how they relate to each other, I prefer Head's Up Design Patterns. I find it much more readable (source: I read it cover to cover, after having had the GoF book on my self for years and only reading bits and pieces).

My suggestion to anyone interested in design patterns is to read the Head's Up book, then have the GoF as a reference.

... none of which helps OP for his upcoming interview. :)

u/jaymo3141 · 5 pointsr/dotnet

E-commerce is where it's at my man. E-commerce is straight forward. It's a store where you buy stuff. Real simple. However, the backend architecture is a bit more involved. You have to handle things like Databases, Queues, Cacheing, Error Logging, Load balancing, etc. If you want to be a mid-level back end dev you really need to understand the basics of Service-Oriented Architecture (SOA). You should also be familiar with CI/CD Pipelines and docker containers. Try looking into some open source e-commerce platforms:

Also you need a strong understanding of Object Oriented Programming (OOP). So you'll need to understand S.O.L.I.D principles very well. Of the SOLID principles, you should focus heavily on the 'D' which stands for Dependency Inversion.

Lastly, in any decent back-end interview, they'll ask you about design patterns. I'd recommend "Head First Design Patterns" ( )

Hope that helps!

u/throwaway_veneto · 5 pointsr/italy

Per gli algoritmi, questo è un mattone ma dopo anni lo uso ancora all'occorrenza (tipo spiaccicare piccolo-medi roditori).

u/illbeinmybunk · 5 pointsr/learnprogramming

I find the Head First Design Patterns book to be really helpful. The code samples are in Java, but for the most part the examples are very readable even if you're not familiar with the language. Most of the good stuff is in the explanations, as opposed to the specific implementations shown in the code samples.

u/AmaDaden · 5 pointsr/compsci

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

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

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

u/endre86 · 5 pointsr/learnjava

That is a lousy professor. You want to learn more? Nope, don't think so.

You could find open source projects that are written in java. Or maybe check out the source code for OpenJDK (library implementation).

But better yet, pick up a book. You have the popular book Clean Code by R. C. Martin that covers how to write clean and maintainable code. Or maybe the book Head first: Design Patterns by that covers common designs used to make adaptable and reusable code.

But your professor has one point. You should not get lost into code design when still learning the basics. So remember to focus on what you learn in class! :)

u/videoj · 5 pointsr/learnprogramming

Data structures and Algorithms Write code to impleement every (or even most) and you'll be well preparped.

Design and Testing here.

Programming Languages here.

Also look for an open source project that needs help and provides you with experience in one or more of these areas (or start your own). Code is always a good way of showing you know something.

u/SuperConductiveRabbi · 5 pointsr/INTP

Here's the inevitable recommendation for Gödel, Escher, Bach (Amazon page, so you can see the reviews).


>Twenty years after it topped the bestseller charts, Douglas R. Hofstadter's Gödel, Escher, Bach: An Eternal Golden Braid is still something of a marvel. Besides being a profound and entertaining meditation on human thought and creativity, this book looks at the surprising points of contact between the music of Bach, the artwork of Escher, and the mathematics of Gödel. It also looks at the prospects for computers and artificial intelligence (AI) for mimicking human thought. For the general reader and the computer techie alike, this book still sets a standard for thinking about the future of computers and their relation to the way we think.

>Hofstadter's great achievement in Gödel, Escher, Bach was making abstruse mathematical topics (like undecidability, recursion, and 'strange loops') accessible and remarkably entertaining. Borrowing a page from Lewis Carroll (who might well have been a fan of this book), each chapter presents dialogue between the Tortoise and Achilles, as well as other characters who dramatize concepts discussed later in more detail. Allusions to Bach's music (centering on his Musical Offering) and Escher's continually paradoxical artwork are plentiful here.

It may be strange, but during the biology and nature-of-thought-related sections of GEB I decided to read the neurology chapters of Gray's Anatomy (no, not Grey's Anatomy). It's pretty heady and slows you down quite a bit, but it results in a really interesting mix of deep biological knowledge about the structure of neurons and functioning of the nervous system with GEB's higher-level, cognition-focused discussion.

Note that that's the 40th, British edition of Gray's Anatomy. There are cheaper ones if you don't need the most up-to-date version, including leather-bound reprints of the classic 1901 American reprint. I doubt the old versions have much accurate information about neurology, however.

u/yourparadigm · 5 pointsr/philosophy
u/sockmeistr · 5 pointsr/programming

Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein

ISBN 978-0-262-03384-8

One of the few truely good Computer Science books.

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/1337_Mrs_Roberts · 5 pointsr/suggestmeabook

Hofstadter's Gödel, Escher, Bach

If you like things a bit more prose-y, try Pirsig's Zen and the Art of Motorcycle Maintenance

u/resisttheurge · 5 pointsr/

It becomes useful to replace concepts such as equivalence relations (and other relations) with symbols in order to facilitate understanding, actually. I'm sure you've used the =, <, >, the greater-than-or-equal-to, or the less-than-or-equal-to symbols before. These symbols allow those that read equations, definitions, or proofs to quickly and unambiguously understand what is being discussed. If you end up studying higher math for a while, you become familiar and comfortable with this style of notation.

Interestingly, notation like this and the thought process it represents is important in understanding the structure of mathematical logic, forms a large part of the basis of automata theory (aka why you're able to enjoy complex technology, like computers), and may hold key insights into the nature of consciousness and sentience itself.

If you've got the stomach for the notation, wide worlds of fascinating information await!

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/remotelyqueued · 5 pointsr/learnprogramming

I like this book on algorithms

u/fajitaman · 5 pointsr/NoFap

The Shallows: What the Internet is Doing To Our Brains

I think NoFap is really just a niche part of a bigger drive to get away from the internet (or at least use it differently), and I completely agree with all of it. The internet (if used without taking precautions) and porn both change the physical structures of our brains in ways that preclude having a fulfilling life with longterm satisfaction. Fortunately our brains are very plastic and it's not too late to fix them.

I've tried quitting the internet cold turkey, and it's haaaaaard. The problem is that it's a global addiction that's deeply intertwined with our social and work lives. You can't really get away from it without totally alienating yourself, so quitting all of the internet is not viable. It's very difficult to draw the line between useful or necessary internet usage and bad internet usage, so moderating your own internet usage can be tough.

Here's my attempt at drawing that line, though:

  • If you're using the internet for data acquisition or communication, you're using it right.
  • If you're using the internet for education or entertainment, you're using it wrong.

    Obviously education and entertainment are important, but the internet is just not the place to do it. With respect to education, the internet will promote distractedness and a habit of multitasking, and ultimately your learning will suffer (the book I mentioned focuses on this). If you want to learn, try to use the internet to find books, and then use those books to learn (or take a class, etc).

    There are, of course, certain things you can learn only through the internet. Tutorials, for example, are online, as is the vast majority of modern journalism. You need to be careful with either of these. When it comes to reading the news, I like to use my tablet and the Pulse application, and I'm only subscribed to longer-form journalism like the type you'd see in The Atlantic. When it comes to tutorials, do whatever you can to not open additional browser tabs. In either case, you should at the very least read these things like you would read a book. Don't allow yourself to get distracted by hyperlinks, and if some topic confuses you, usually it's okay to just ignore it (or mark it) and press on, rather than try to immediately learn about this other topic through outside sources.

    As for entertainment, that's something you can do in real life with real people (or again, with more reading, which is always healthy). Entertainment online is a process of overstimulation and isolation. Porn falls into this, but so do videogames and even mindlessly clicking pictures on reddit. In general, if you get on the internet without a clear purpose, you will probably be using it for entertainment, so always try to tell yourself why you're getting online before you do it.

    The first good use for the internet is data acquisition, by which I mean it's a good place to go to find a fact or set of facts. For example, if you want to go see a movie it makes perfect sense to get on the internet and look up movie times. In these situations, you'll get online, find the information you want, and then quit.

    Communication is a bit iffier, and maybe it should come with its own set of restrictions. Email and social networking are great, insofar as we don't use them for entertainment. I don't really suffer from this problem, but when I get on facebook it becomes pretty clear that many people are sort of addicted to self-posts and being heard. This might be absolutely fine for all I know (you could liken it to journaling), so for now I'm going to just assume that social networking, love or hate, is something we're going to have to live with if we want to partake in the 21st century.

    This might warrant its own post, since I've got quite a bit to say on it (I've kept most of it inside my head, so it might be totally rubbish for anyone else as far as I know).

u/slashcom · 5 pointsr/compsci

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

u/NicolasGuacamole · 5 pointsr/MLQuestions

A good textbook will do you wonders. Get one that is fairly general and includes exercises. Do the exercises. This will be hard, but it'll make you learn an enormous amount faster.

My personal favourite book is Christopher Bishop's Pattern Recognition and Machine Learning. It's very comprehensive, has a decent amount of maths as well as good examples and illustrations. The exercises are difficult and numerous.

That being said, it is entirely Machine Learning. You mention wanting to learn about 'AI' so potentially you may want to look at a different book for some grounding in the wider more classical field of AI than just Machine Learning. For this I'd recommend Russel and Norvig's [AI: A Modern Approach]( Intelligence-Modern-Approach-Global/dp/1292153962). It has a good intro which you can use to understand the structure and history of the field more generally, and following on from that has a load of content in various areas such as search, logic, planning, probabilistic reasoning, Machine Learning, natural language processing, etc. It also has exercises, but I've never done them so I can't comment much on them.

These two books, if you were to study them deeply would give you at least close to a graduate level of understanding. You may have to step back and drill down into mathematical foundations if you're serious about doing exercises in Bishop's book.

On top of this, there are many really good video series on youtube for times when you want to do more passive learning. I must say though, that this should not be where most of your attention rests.

Here are some of my favourite relevant playlists on YouTube, ordered in roughly difficulty / relevance. Loosely start at the top, but don't be afraid to jump around. Some are only very tenuously related, but in my opinion they all have some value.

Gilbert Strang - Linear Algebra

Gilbert Strang - Calculus Overview

Andrew Ng - Machine Learning (Gentle coursera version)

Mathematical Monk - Machine Learning

Mathematical Monk - Probability

Mathematical Monk - Information Theory

Andrew Ng - Machine Learning (Full Stanford Course)

Ali Ghodsi - Data Visualisation (Unsupervised Learning)

Nando de Freitas - Deep Learning

The late great David MacKay - Information Theory

Berkeley Deep Unsupervised Learning

Geoff Hinton - Neural Networks for ML

Stephen Boyd - Convex Optimisation

Frederic Schuller - Winter School on Gravity and Light

Frederic Schuller - Geometrical Anatomy of Theoretical Physics

Yaser Abu-Mostafa - Machine Learning (statistical learning)

Daniel Cremers - Multiple View Geometry

u/effernand · 5 pointsr/learnmachinelearning

When I started on the field I took the famous course on Coursera by Andrew Ng. It helped to grasp the major concepts in (classical) ML, though it really lacked on mathematical profundity (truth be told, it was not really meant for that).

That said, I took a course on edX, which covered things in a little more depth. As I was getting deeper into the theory, things became more clear. I have also read some books, such as,

  • Neural Networks, by Simon Haikin,
  • Elements of Statistical Learning, by Hastie, Tibshirani and Friedman
  • Pattern Recognition and Machine Learning, by Bishop

    All these books have their own approach to Machine Learning, and particularly I think it is important that you have a good understanding on Machine Learning, and its impacts on various fields (signal processing, for instance) before jumping into Deep Learning. Before almost three years of major dedication in studying the field, I feel like I can walk a little by myself.

    Now, as a begginer in Deep Learning, things are a little bit different. I would like to make a few points:

  • If you have a good base on maths and Machine Learning, the algorithms used in Deep Learning will be more straightforward, as some of them are simply an extension of previous attempts.
  • The practical part in Machine Learning seems a little bit childish with respect to Deep Learning. When I programmed Machine Learning models, I usually had small datasets, and algorithms who could run in a simple CPU.
  • As you begin to work with Deep Learning, you will need to master a framework of your choice, which will yield issues about data usage (most datasets do not fit into memory), GPU/memory management. For instance, if you don't handle your data well, it becomes a bottleneck that slows down your code. So, when compared with simple numpy + matplotlib applications, tensorflow API's + tensorboard visualizations can be tough.

    So, to summarize, you need to start with simple, boring things until you can be an independent user of ML methods. THEN you can think about state-of-the-art problems to solve with cutting-edge frameworks and APIs.
u/cmd_bat · 5 pointsr/learnprogramming
u/salihzain35 · 5 pointsr/learnprogramming

I’m taking Data Structures and Algorithms right now. It’s definitely not an easy class so it’s very ok to struggle. I’m not sure which language are you guys using, but if you’re using Java, then this is an amazing book that starts from the basics!

On the other hand, you have to build things by your hand in order to understand them. Don’t worry about how quick you get the concepts, it’s ok to meditate on them. After all, what took scientists years to build is not supposed to be understood in an hour. Take your time and good luck!

u/146throw213 · 5 pointsr/SJSU

doesnt matter, what you learn in that class @SJSU wont be enough

pick up

90% of your interview questions in the future for internships/jobs rely on this class


u/opensourcedev · 5 pointsr/compsci

You could go through the projects in:

The Elements of Computing Systems

I think I learned more about Computer Science from these projects than many of the books I've read.
The projects are made for self study and include:

Designing the hardware for a basic computer

Building an assembler for your hardware

Building a compiler for an object oriented language

Building a virtual machine to run programs

u/MexicanJesusJuan · 5 pointsr/compsci

That edition is just out of print. Here's a link to a much cheaper copy.

u/AStudyInScarlet · 5 pointsr/UIUC

I have an internship lined up, but I'm really excited to be learning outside of that too. You should check out The Elements of Computing Systems by Nisan and Schocken. I'm going to be working through this book throughout spring semester and the summer. I think it will provide a foundation for every low-level part of CS and help fill in some gaps that I'm missing.

If you're excited about web dev, you could make a website with Ruby on Rails, Django, Flask, Node, Meteor, etc. There's always another good web framework that you could learn.

If you're into system programming, programming languages, or compilers, there are tons of great tutorials and guides online. I'm currently working through Learn C: Build Your Own Lisp. I'm really looking forward to doing Implementing a Language with LLVM. If you didn't already know, LLVM was started here!

If you haven't finished core math yet, there's Linear Algebra on Khanacademy. I think Salman Khan is one of the best teachers I've had. The videos are very concise and very clear. There's also a great series on ML on YouTube. It explains the theoretical underpinnings of the algorithms, but doesn't really show how to use them. If you want to use them, your best bet is the Python library scikit-learn.

For reverse engineering, here's a fantastic challenge site, and here's a good book that you can view online.

There's so much to do, and not enough time to do it! If you constantly work on a few things, little by little, it will all start to accumulate. Good luck and have fun this summer!

u/Doriphor · 5 pointsr/computerscience

I would personally recommend this book. (There’s also an associated coursework available at EdX I believe? You can also check out the book’s site at

u/CaptainCaffeine · 5 pointsr/EmuDev

If you're trying to get into the emulator development scene, my recommendation would be to start writing an emulator for a simple system (such as the Game Boy or NES). I, too, wanted to read computer architecture books before I started my own emulator, and it turned out to be a huge waste of time. I already knew 80%+ of the material in the early chapters, but I insisted on slogging through anyway. But when I'm doing boring stuff like that, I make terrible progress on anything.

Maybe you and I learn differently, but to learn efficiently I need some kind of direction to keep me motivated and moving along. Sifting though pages and pages of dense textbook material without an end goal or a particular concept I'm trying to understand, and instead hoping that I'll just absorb general information, doesn't work out. Much of what you read won't stick with you, and you'll space out a lot (or at least I did).

Once I started actually working on my Game Boy emulator, my productivity shot through the roof. I was making so much more progress in learning and programming when I had actual, tangible goals to achieve. So, if you have the programming ability, start doing that sooner rather than later and you'll learn what you need to know as you move along. Start by emulating the memory, then the cpu, then the rest of the stuff. If you're actually interested, I can provide you with some links to help you get started.

Also if you've already taken an intro to digital design course, then you won't learn anything from

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/beeff · 5 pointsr/hardware

The first thing you have to realize is that computers are the most complex system ever produced by humans. Not only the multiple levels of hardware, but also the large complex software systems required to even just start it up in windows.

The core design idea is that every layer of hardware and software on a computer is a form of translation, changing one formal language into another.

At the very bottom are the laws of physics, which allows us to arrange semi-conductors and other materials to build a small device (a transistor) that encodes negated AND logic on wires that carry electric impulses. Making large circuits of exclusively NAND gates allows you to create any complex computer logic you want. In theory you can use whatever you want that encodes such logic, you can make a computer that works with billiard balls. Transistors are just the current most economic way of building one.

The layer above just the bare circuits is the design of your circuits. You cannot just wire them arbitrarily, there are physical and economic limits. The RAM modules stuck in your motherboard are a design tradeoff. DRAM allows engineers to use less transistors for every encoded bit, but access is slower. The multiple levels of 'caches' on your CPU are also RAM, but encoding every bit with 8 or more transistors for absolute speed. Early on it was thus seen as economically interesting to design different modules separately and have them communicate in some way.

> So, I want to know all about the CPU, RAM

A certain design became popular in the 1950's: the Von Neumann architecture. This is a simple design for a computer with roughly three modules: control, arithmetic and memory. A computer program is basically a language, with its own formal words and verbs. All those words and verbs are somewhere in the memory module of the computer. A specific memory location will always hold the next instruction or verb that the computer has to process. The control module thus continuously retrieves the next instruction, that instruction will ... well instruct the control module what it needs to do. Typically an instruction will make the control module put some words in memory and kick the arithmetic module into action that will transform those words into something else.
Over the years with miniaturization, more and more discrete modules were added to the control chip to make it go faster. We call this now typically the CPU, but it's really a lot of multiple integrated modules that are really good at doing one thing.

> how the computer (software?) communicates with those components.

How do the multiple components communicate with each other? By sending electric signal over wires. How does it know to send what signals? Software controls what signals are sent over what wires. When a company makes a computer component, it will include drivers, which are basically pieces of software that control how it communicates with the CPU and the rest of your computer. This is true for the GPU, your hard-drive, audio chip and every component on your motherboard. A lot of modules communicate through a known protocol, such as the BIOS on your motherboard that starts up your computer. Others are company secrets or just too complex to make standard.

> and GPU, how they work; can use the GPU? Are the streaming units kind of like CPU cores?

The GPU is still essentially a computer, but had a completely different architecture or design to start out with. First up, everything a GPU does can be done by a CPU. For many years, it did. The only reason companies like 3dfx started selling discrete GPU modules is speed. By taking advantage of the specific way graphics are computed, GPU companies were able to design chips that could complete graphics computations a lot faster than the CPU. At first GPUs were basically tasks that were done in software baked into circuits. You push it data and poke some information that triggers certain graphics operations, but you had no arbitrary programs made from instructions like you have on the CPU. NVIDIA introduced programmable shaders on the Geforce 3 in 2001, which were basically little programs that could only use certain limited instructions. The restrictions on those programs grew less and less, and companies started adding more and more of those little processors that could execute those programs. These days there is only a limited amount of fixed-hardware functionality left on GPUs. They have basically become like a massively parallel CPU, only the design tradeoffs are completely different.

CPU vs GPU. In its more basic form, CPUs are made for fast reaction and fast sequential running. GPUs are slow lumbering beasts, but can do many task at once, as long as those tasks don't need to cooperate too much. Using an analogy, when you need to move a thousand boxes, a CPU is a nimble sprinter that will run really fast back and forth for each box, the GPU is a big fat professional mover that will load everything on a lorry and move only once.

Obviously, I'm lying here. Everything is grossly simplified because reality is so much more complex. The basics can be really simple: A CPU talks to a CPU using wires. Similarly, your GPU or CPU talks to your screen using electric wires. That is probably not the insight you were looking for though. But it is on very basic principles that a computer is built up, through layers of abstraction in both hardware and software. Some layers are simply unknown to use, we don't really know how NVIDIA makes your CPU talk to your GPU. You sometimes don't want to know, as long as there is a common language or interface that shields you from the gritty details.

If you want to know essentially how computers work, look through the recommendations in this thread. I would just want to add to that list Elements of Computing Systems for hardware and Structure and Interpretation of Computer Programs for software.

u/a_bearded_man · 4 pointsr/AskEngineers

That is an incredibly broad question. Without knowing what you've already studied, it's hard to recommend things. Most of the aerospace and mechanical engineers I know use pre-packaged programs rather than writing their own scripts, etc.

Artificial intelligence might be the best one, though. Russel and Norvig is the standard textbook:

The plus side to learning about AI is that it is not really programming intensive - it's logic and statistics intensive.

If you want to go the programming route, it gets a little hairier. The reason is that advanced systems designs will take a lot of initial classes just to get you to a level where you are comfortable programming and can then think about design and program flow.

Take an intro course. I learned programming with C / C++ and Matlab. Recommend those since it's easier to blow your foot off when programming. Once you understand how to design programs, what functions are, how program control can be passed off, move over into Python (much easier to pick up and run with and much better supported).

You might also benefit from a databases or Big Data class due to the amount of data generated from an aircraft.

Regular expressions and scripting is another option. But that's good for anyone.

u/Shark_Kicker · 4 pointsr/javascript

FFS... just stop. This is NOT a Mediator Pattern

Three articles that are either partially or completely wrong in three days? Just. Stop. Go get this book... read it... then try again.

You can't just "invent" patterns and name them after existing patterns because you named one of your objects "mediator".

A Mediator Pattern in JS explained by someone who knows what he's talking about

u/ZioYuri78 · 4 pointsr/unrealengine

I have the first edition and yes, it worth a read, keep in mind that it explain how game engines works and not how to make a game engine.

After reading it you will not be a master with UE4 but you will undertstand why UE4 do things in a certain way.

Another book you have to read (and is mentioned in your link) is the Game Programming Patterns book, i have the physical copy and it is awesome, read it after the GoF Design Patterns book, is a masterpiece combo.


Also two sites i want to suggest:

Learning Modern 3D Graphics Programming, is a great tutorial about OpenGL basics.

The Book of Shaders, great to learn how shaders works.

u/illithoid · 4 pointsr/salesforce

I'll be honest with you, I don't think Head First Java would be a good choice, however DO READ Clean Code. I also suggest Design Patterns: Elements of Reusable Object-Oriented Software and Working Effectively with Legacy Code. The first is a classic MUST READ for anyone in software development. It present numerous challenges that most of us will face when developing solutions, and gives you the design patterns you will need to solve them. The second is great for learning how to fix your predecessors shitty code, you'll need this one. If you haven't already, look up Bob Buzzard and Andy Fawcett. These two guys are my favorite SFDC Dev Bloggers. I also suggest watching any Salesforce Webinar that has anything to do with code, especially security stuff.

Practice makes perfect, except for us there is no perfect, just better. Know your best practices and live by them. With everything you do ask how can I make it better? Faster? More efficient? Do I even need code, or will Workflow/Process Builder/Flow do? How can I write code, so that an Admin can customize it without any code?

> Based on code reviews--my code is pretty good, with good logic and pretty well laid out.

This is actually VERY important, having good logic is obviously crucial, but being well laid out is a kind of hidden requirement with code. You or somebody else will eventually need to maintain your code, if it's laid out well it should hopefully be easy to read and maintain.

When you write code do your best to incorporate declarative features so that further customization can be done without code (I know I said this earlier, but I think it's important). Need to write some code that uses an arbitrary set of fields, consider using Field Sets. An Admin can add/remove them without code. Maybe use a Custom Setting, or Custom Metadata to map fields to values.

Learn how to use Describe calls for everything. Need to write some code that catches dupes and merges them? Don't hard code the values, then nobody will be able to remove or add fields without updating code. Instead use Describe calls, now you get every field on the object forever. Need to remove a field from an object no problem. Need to add a field to an object no problem. Does your losing record have child records that need to be reparented? Don't hard code, use Describe calls to get all sObjects with a Child Relationship. Use Describe to find out if it can be directly reparented or if it needs to be clones (CampaignMembers can't reparent a LeadId to a new Lead. You MUST clone and add the new Lead Id).

How much do you know about HTML? CSS? JavaScript? JQuery? Visualforce? Learn 'em. Lightning is coming, and these are going to be more important than ever (except maybe Jquery).

Practice, practice, practice. One coding assignment per month isn't that bad, but if you get some work done early and you have an hour or two to spare, work on a side project. Can you think of something in your company that could be automated, spin up a Dev Org and give it a shot. Maybe your Sales people could use a new VF page for entering information just a little quicker.

Always seek to improve your code. Always seek new ideas and better ways of doing things.

Trailhead is good, do all the coding ones you can find, it's more practice!

u/koderpat · 4 pointsr/learnprogramming
u/soundslikeponies · 4 pointsr/programming

You can always read books. Textbooks are much better to read when you're free to browse and pick out whichever ones you like. You can get a surprising amount of reading done just by reading on the bus, on the can, and whenever you've got nothing better to do.

A popular stack overflow answer has a pretty good list. You can preview the introduction of most books on amazon.

People like to champion the internet as "oh, you can learn anything on the internet!" Which is true. But you can learn it much faster and better from a book (generally speaking).

Books provide a long format which has a chance to build upon itself. Also, everything is collected in one place for easy access. More developers ought to sit down and read good books.

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/nanojava · 4 pointsr/cscareerquestions

Most of the design patterns introduce by GOF (gang of four) is still applicable today. Buy and read this book

u/magus517707 · 4 pointsr/learnprogramming

Everyone keeps mentioning programming language resources, but I have yet to see any one mention any algorithm sources. Honestly learn how to develop algorithms, they are language agnostic. And you can practice them on paper. Good luck on your endeavor.

I haven't read this yet, but have heard good things.

u/anon35202 · 4 pointsr/artificial

Does someone have a copy of the leaked self driving car code and post it on github?

Heck, even a reasonable implementation of Thrun's Simultaneous localization and mapping algorithm and embedded A star all wrapped in the AI code would be nice.

He talks about it in Chapter 25 section 3 of:

He describes it in:

But he only describes how you would implement it, he doesn't hand out the finished code.


u/knaveofdiamonds · 4 pointsr/programming

It depends exactly what you're looking for, but I'd strongly recommend The Algorithm Design Manual by Skiena ( ).

It focuses much more on intuitive explanations rather than spending time on proofs, is very readable and has a solid reference section covering over a hundred different algorithms with further references. See Steve Yegge's writeup of the book at (number 6).

Cormen et al. is good as well, but a bit dry compared to the above book, and with a much heavier focus on the proof side of things.

u/MITranger · 4 pointsr/learnprogramming

I really like /u/razeal113 's comment. That's a good algorithm for finding a good algorithm. Starting out with brute force isn't necessarily bad, as it at least gives you a jumping board to start optimizing. The only thing I would add is to increase your knowledge and toolbelt. You can gain a lot of inspiration and learn "how to think" by learning, analyzing, applying, and modifying all the awesome algorithms already out there. Here are some resources:


u/Birkal · 4 pointsr/UCSD
u/Soupy333 · 4 pointsr/Fitness

If you're interested in this stuff (and just getting started), then I highly recommend this book -

When you're ready to go deeper, then this one is even better

That second book is a little older, but all of its algorithms/techniques are still relevant today.

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/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/Artaxerxes3rd · 4 pointsr/Futurology

Stuart Russell, the man who literally wrote the book on AI, is concerned.

Plenty of prestigious people on the cutting edge of the research in the field are concerned.

Just because you've only heard the household-name-level famous people talk about it, it doesn't mean that the genuine, in-the-thick-of-it experts aren't concerned either.

As for the 10~20 years figure, you're right that it is unlikely that AI will be made in that timeframe. However, the claim was merely that it is possible to create with enough resources in that timeframe, which I think is reasonable. Since you care about what the experts think, here is a summary of the best information we have about when they think this will happen.

>Median estimates for when there will be a 10% chance of human-level AI are all in the 2020s (from seven surveys).

>Median estimates for when there will be a 50% chance of human-level AI range between 2035 and 2050 (from seven surveys)

AI: A Modern Approach is the best textbook on AI by far

u/twystoffer · 4 pointsr/HowToHack

Given your background as a programmer, I would recommend starting with SQL exploits. You need to have at least a working knowledge in how programs and script work, and it gives you the framework for understand how to be clever with the existing code logic and how to think outside the box.

If that ends up being too easy or once you get a good handle on that, take a look at metasploit and the exploit database associated with that. Rather than just using the exploits, look at the code and get an idea of how the individual exploits work (which are all the same on the base level: using logic in a creative way the original programmers didn't think of or intend).

As for books, I recommend This One as a primer. It's not exactly up to date, but the theory is sound (giving you a solid foundation on how exploits are made and the thought process behind them).

I really like This One for learning metasploit and getting a further understanding of exploit scripts.

And I just love This Book in general. Once you take a look, you'll see why.

u/YoYossarian · 4 pointsr/technology

Here's one that I just ordered. It comes with a recommendation from Elon Musk as well. This is a subject Kurzweil discusses at length in his books, though his approach is far more optimistic. He avoids the cataclysm by saying humans and AGI will work together as one, but his point basically concedes humanity's destruction if we don't cooperate/merge.

u/eRIPlinuOusI · 4 pointsr/oscp

Plus one for violent python! Blackhat python is a similar book to violent python too that seems good.

If you're coming from a compsci background or have some C knowledge then "Hacking: The art of Exploitation" is a really good one. I found it pretty hard going not knowing absolutely anything, but revisiting it with what I know now, it really does cover a lot of great topics in really good detail. It's really good at explaining the why of things too, whereas a lot of other materials focus on the how it's done only.

u/grub5000 · 4 pointsr/hacking

This is a really good book that teaches about software exploitation.

It also includes some great stuff on networking, cryptography etc.

I'm ~70 pages in and it's been invaluable as just a programming resource (C + Assembly) and I haven't even got to the exploitation section yet.

I'd recommend checking the amazon preview of the contents page to see what else it contains. (Bonus, it comes with a linux livecd to help you replicate all the results in the book)

u/narwi · 4 pointsr/Futurology
u/ForwardParticular · 4 pointsr/learnprogramming

I always liked reading this book. It explains low level concepts well without needing to have a computer in front of me. It definitely has some hands on material but the first 3 chapters or so are solid gold.

u/Shadowslayer881 · 4 pointsr/rpg

Eclipse Phase is a great way to find plot hooks, they're littered in all of the source books. It's also free, so just check it out even if you want to look at pretty pictures.

I'm also reading Superintelligence and that book is basically a section by section deconstruction of why building a Seed AI (a self improving AI, a staple of the sci-fi genre) will end badly.

u/FieryPhoenix7 · 4 pointsr/cscareerquestions

If you're looking to actually learn the stuff, then you will need to get textbooks which are plentiful. But if you're looking to read about the philosophical side of the topic, I suggest you start with Nick Bostrom's Superintelligence.

Oh, and make sure you watch Her and Ex Machina if you haven't already ;)

u/loveleis · 4 pointsr/brasil

Inteligência Artificial é de longe o maior problema da humanidade. O risco dela causar a extinção, ou pior, a criação de quantidades astronômicas de sofrimento é bastante alta, e pouquíssimas pessoas estão se dedicando a solucionar o problema.

A quem se interessar pesquisem por "AI alignment" no Google.

EDIT: Pra quem tiver interesse:

Playlist do numberphile que dá uma introduzida muito boa no tema

TED do Sam Harris sobre o assunto

Pra quem tiver muito interesse no assunto, o livro Superintelligence do pesquisador Nick Bostrom, da University of Oxford é o responsável por "evangelizar" muita gente no assunto, inclusive Elon Musk e Bill Gates (que já comentaram sobre o livro). Mole de achar versão dele em pdf na internet.

u/hoolaboris · 4 pointsr/math

Concrete mathematics by Donald Knuth, Ronald Graham, and Oren Patashnik

u/Noamyoungerm · 4 pointsr/learnprogramming

You can program without math, but you'll run into limits. Even math at a high school level will totally change the way you look at and think about some parts of programming.

This is something that I can attest to personally because I began programming with a 3rd grade math level myself. I can't really say what part math had in my perspective on programming, because I was also in the process of growing out of third grade, but when math finally "clicks" somewhere between high school and college, you learn to tackle these things differently.

You can program without math, but if you know the math you'll have a better understanding of what you're doing. You'll look at some problem you're trying to solve and say "hey, that looks awfully similar to a set of equations, instead of trying to solve them inside my program I should solve them by hand and plug in the solution".

Algebra is the really important one. Calculus also doesn't hurt. Trig is a must only if you see yourself doing anything related to graphics or games in the future. I also highly reccomend Concrete Math, but to understand that text you'll have to have a solid grasp of calculus.

u/WeoDude · 4 pointsr/datascience

I don't have a tutorial for TensorFlow, but Hands on Machine Learning with Scikit-Learn and TensorFlow ( should basically be the bible of machine learning implementation.

XGboost, the best way I learned it, Is through looking at Kaggles.

u/Shmurk · 4 pointsr/programming

Add Concrete Mathematics if you're a maths retard like me.

u/another_math_person · 4 pointsr/learnprogramming

You might use calculus-based tools for some analysis, like if you look at Knuth's Discrete Math text, you'll see discrete integrals, which are certainly grounded in calculus.

As well, if you look at randomized algorithms, you might need to use some nontrivial probability stuff (like Chernoff Bounds - wiki). That isn't directly calculus, but there is a significant portion of useful probability that requires the use of integrals.

All that said, Linear Algebra is probably more useful for programmers (especially if they're doing graphics or games).

u/Continuities · 4 pointsr/javascript

This is a really big question, and not really specific to javascript. Architecting large applications, in my opinion, is kind of an art form. You can learn strategies by reading, but you're not going to get good at it without years of experience. Ideally you learn this stuff while working alongside strong senior developers who know what they're doing.

Read Design Patterns, if you haven't. I'd also recommend Javascript Alongé, but I'm a functional programming crazy.

Build something in a way that feels right, then evaluate what worked and what didn't. Which parts sucked to modify when requirements or assumptions changed? Which parts were hard to understand a month later?

In general, I have a few guidelines:

  1. Definitely use some sort of module system (AMD, or ES6 modules) to aid in encapsulation and prevent global pollution
  2. Keep similar code together and differing code apart.
  3. Keep modules small, and single purpose
  4. Prefer composition over inheritence
  5. If you're doing web stuff, don't be afraid to keep the html, css, and js for specific pieces of UI together. Don't fall into the trap of conflating technology with concerns.
u/Jonny0Than · 4 pointsr/learnprogramming

The "gang of four" book titled Design Patterns is an excellent reference for object-oriented architectures.

Note - this really is more like a reference book than a tutorial or gentle introduction. It's not something you read cover-to-cover.

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/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/fluicpana · 4 pointsr/italy

Per testare le acque velocemente puoi usare (introduce Ruby in modo basico). Anche Coursera, Khan, Udacity e simili hanno corsi introduttivi sulla programmazione.

Mentre se vuoi imparare a programmare, il percorso deve toccare almeno tutte queste tappe, in ordine:

  1. [Computer Organization and Design](

  2. The Structure and Interpretation of Computer Programs

  3. Un buon libro di Assembly

  4. The C programming language

  5. Compillers

  6. Code complete, The practice of programming

  7. Fai finta di aver letto tutto The art of computer programming

  8. Un linguaggio a oggetti, magari Programming Ruby

  9. O/E Python, Dive into Python

  10. Design patterns

  11. Impara un linguaggio funzionale.

    Da qui puoi partire e specializzarti in quello che ti interessa

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/Bizkitgto · 4 pointsr/learnprogramming

The book you are looking for is called Code: The Hidden Language of Computer Hardware and Software by Charles Petzold!

u/CSMastermind · 4 pointsr/learnprogramming

I've posted this before but I'll repost it here:

Now in terms of the question that you ask in the title - this is what I recommend:

Job Interview Prep

  1. Cracking the Coding Interview: 189 Programming Questions and Solutions
  2. Programming Interviews Exposed: Coding Your Way Through the Interview
  3. Introduction to Algorithms
  4. The Algorithm Design Manual
  5. Effective Java
  6. Concurrent Programming in Java™: Design Principles and Pattern
  7. Modern Operating Systems
  8. Programming Pearls
  9. Discrete Mathematics for Computer Scientists

    Junior Software Engineer Reading List

    Read This First

  10. Pragmatic Thinking and Learning: Refactor Your Wetware


  11. Code Complete: A Practical Handbook of Software Construction
  12. Software Estimation: Demystifying the Black Art
  13. Software Engineering: A Practitioner's Approach
  14. Refactoring: Improving the Design of Existing Code
  15. Coder to Developer: Tools and Strategies for Delivering Your Software
  16. Perfect Software: And Other Illusions about Testing
  17. Getting Real: The Smarter, Faster, Easier Way to Build a Successful Web Application

    Understanding Professional Software Environments

  18. Agile Software Development: The Cooperative Game
  19. Software Project Survival Guide
  20. The Best Software Writing I: Selected and Introduced by Joel Spolsky
  21. Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams
  22. Rapid Development: Taming Wild Software Schedules
  23. Peopleware: Productive Projects and Teams


  24. Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency
  25. Against Method
  26. The Passionate Programmer: Creating a Remarkable Career in Software Development


  27. The Mythical Man-Month: Essays on Software Engineering
  28. Computing Calamities: Lessons Learned from Products, Projects, and Companies That Failed
  29. The Deadline: A Novel About Project Management

    Mid Level Software Engineer Reading List

    Read This First

  30. Personal Development for Smart People: The Conscious Pursuit of Personal Growth


  31. The Clean Coder: A Code of Conduct for Professional Programmers
  32. Clean Code: A Handbook of Agile Software Craftsmanship
  33. Solid Code
  34. Code Craft: The Practice of Writing Excellent Code
  35. Software Craftsmanship: The New Imperative
  36. Writing Solid Code

    Software Design

  37. Head First Design Patterns: A Brain-Friendly Guide
  38. Design Patterns: Elements of Reusable Object-Oriented Software
  39. Domain-Driven Design: Tackling Complexity in the Heart of Software
  40. Domain-Driven Design Distilled
  41. Design Patterns Explained: A New Perspective on Object-Oriented Design
  42. Design Patterns in C# - Even though this is specific to C# the pattern can be used in any OO language.
  43. Refactoring to Patterns

    Software Engineering Skill Sets

  44. Building Microservices: Designing Fine-Grained Systems
  45. Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools
  46. NoEstimates: How To Measure Project Progress Without Estimating
  47. Object-Oriented Software Construction
  48. The Art of Software Testing
  49. Release It!: Design and Deploy Production-Ready Software
  50. Working Effectively with Legacy Code
  51. Test Driven Development: By Example


  52. Database System Concepts
  53. Database Management Systems
  54. Foundation for Object / Relational Databases: The Third Manifesto
  55. Refactoring Databases: Evolutionary Database Design
  56. Data Access Patterns: Database Interactions in Object-Oriented Applications

    User Experience

  57. Don't Make Me Think: A Common Sense Approach to Web Usability
  58. The Design of Everyday Things
  59. Programming Collective Intelligence: Building Smart Web 2.0 Applications
  60. User Interface Design for Programmers
  61. GUI Bloopers 2.0: Common User Interface Design Don'ts and Dos


  62. The Productive Programmer
  63. Extreme Programming Explained: Embrace Change
  64. Coders at Work: Reflections on the Craft of Programming
  65. Facts and Fallacies of Software Engineering


  66. Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software
  67. New Turning Omnibus: 66 Excursions in Computer Science
  68. Hacker's Delight
  69. The Alchemist
  70. Masterminds of Programming: Conversations with the Creators of Major Programming Languages
  71. The Information: A History, A Theory, A Flood

    Specialist Skills

    In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.

  72. Peter Norton's Assembly Language Book for the IBM PC
  73. Expert C Programming: Deep C Secrets
  74. Enough Rope to Shoot Yourself in the Foot: Rules for C and C++ Programming
  75. The C++ Programming Language
  76. Effective C++: 55 Specific Ways to Improve Your Programs and Designs
  77. More Effective C++: 35 New Ways to Improve Your Programs and Designs
  78. More Effective C#: 50 Specific Ways to Improve Your C#
  79. CLR via C#
  80. Mr. Bunny's Big Cup o' Java
  81. Thinking in Java
  82. JUnit in Action
  83. Functional Programming in Scala
  84. The Art of Prolog: Advanced Programming Techniques
  85. The Craft of Prolog
  86. Programming Perl: Unmatched Power for Text Processing and Scripting
  87. Dive into Python 3
  88. why's (poignant) guide to Ruby
u/OverQualifried · 4 pointsr/Python

I'm freshening up on Python for work, and these are my materials:

Mastering Python Design Patterns

Learning Python Design Patterns

Fluent Python

Design Patterns: Elements of Reusable Object-Oriented Software

I recommend them to OP.

u/MrAckerman · 4 pointsr/AskProgramming

I really enjoyed Code.

I feel it's a really accessible summary of what is going on under the hood of a computer.

u/-___I---I-___ · 4 pointsr/learnprogramming
  1. topic name: Fundementals, discrete math, algorithms, a good book to start with, there are tons of free courses and lectures on the internet, but you will have to type in the specific search terms

  2. idk

  3. idk
u/autophage · 4 pointsr/IWantToLearn

Lots of people are recommending ways to learn a language, and I just want to pop in to say: most popular languages are much more alike than they are different. Learn any one of them for a few months (until you're no longer looking up references for how to write a for loop or getting confused by the language's comparison operators), then try your hand at a different language.

If you find something hard to grasp in one language, it's probably about equally hard to grasp in another language - so don't just think "Hmm, well, maybe this is easier in other-language" and switch over to that one instead. (There are a few exceptions - for example, you don't have to worry about memory management in Java the same way that you do in C. You can still get memory leaks in Java, but the fact that you've got garbage collection makes memory management on the whole far simpler.)

In terms of getting into hacking - the first step, hands down, is to read this book. It will teach you the really really basic stuff, on a far deeper level than most laymen ever think about, in a very gentle and even fun way. After that, start getting your hands on networking texts, security texts, and just plain writing a lot of code. Get the source to some popular open source projects (Apache, for example) and run it in a debugger, watching how the values change and looking for unexpected things.

u/reflectiveSingleton · 4 pointsr/webdev

I would add design patterns to that list...they are extremely helpful and it essentially what modern frameworks try to put in place.

It's why MVC/etc exists, and if you are fluent in many design patterns then you can mix/match/modify the appropriate one to your current problem set. Also, things like that transfer to non-backend development if you ever decide to go that route.

See books such as Design Patterns: Elements of Reusable Object-Oriented Software - written by the 'gang of four'...and other related and more modern derivatives of this.

u/cjrun · 4 pointsr/cscareerquestions

Everybody's learning style is different. Here are some books I believe to be essential for any novice or pro.

Programming For Dummies. It has a stupid title, but it is well reviewed for good reasons. I read through this beast in three weeks. There is no coding involved, as it is mostly theory, but it covers most of the bases of computer science and programming logic. Looking back, much of it confused me at first read, but the big ideas are all presented here. Reading this during the summer before first semester was a huge boost for me. All of the major computer languages are discussed in the book.

Cracking the Coding Interview. A book meant for veterans trying to get into highly demanding top tech companies, the book is a great introduction to programming paradigms. There are numerous examples of problems in each chapter with answers at the back of the book. The whole thing is in Java, with a short chapter on C++.

Design Patterns. As you learn more about object oriented programming, the concept of design is introduced. This book is the holy grail of software architecture and recommended by many. I would hold off acquiring it until you are certain that CS is where you want to be, it is quite technical. This book follows C++, although a Java version of the patterns exists on

A non-technical book just for fun:
The Innovators is essentially the story of computer science and how it got to present day. It follows the characters, human beings, that were involved each step of the way right up until modern day. Your professors will be impressed that you know who Alan Turing, Grace Hopper, and Charles Babbage were. If only I had been at THE MOTHER OF ALL DEMOS! The actual stories of Microsoft, Apple, The internet, the PC, video games, the space program, etc. On Quiz Up, a trivia app, every other question in the CS category involves names from this book. Read it just to be a real geek that knows where this stuff came from, and the drama/tension that led to innovation. The book is actually really funny at times.

u/p7r · 4 pointsr/NoStupidQuestions

I've taught a lot of people how computers work, or more precisely how to program them. I am sure you can learn too.

First, let's make it fun.

There is a lot of material for people who like the Raspberry Pi out there that is fun and simple. You don't even need to own a Raspberry Pi to understand what they're talking about.

It's fun and simple because it's designed for youngsters who find long/complex books a bit too boring. I think you might enjoy it, because you've said you've found the books you've tried too boring.

Here is a load of magazines about the Pi - on each issue you can click on "Get Issue" and then under the cover "download the PDF" and read it and see if you enjoy that.

Next, have a play with Scratch. It's designed for kids but the exact same concepts are in professional programming languages.

The reason I recommend it is not because I think you are a child, but because it's a lot of fun and makes a lot of the dull and boring bits of programming go away so you can focus on the fun bits.

You have to remember all the things going on inside a computer are basically the things going on in there - just a lot more complex.

If you ever want to learn a programming language that professional developers use, I think you'll like Ruby.

It's very forgiving for new developers, but still lets you do what we would call "production grade" code. It's what I work in most days.

Also, why's poignant guide is quite funny, but you might find it a bit weird and confusing - I know I did the first time I read it. :-)

I also recommend this book to you: Code by Charles Petzoid. The first few chapters don't seem like they're about computers, because they talk about flags and electrical circuits - that's because you need to understand those things first.

If you can read and understand the whole thing you will know more about how computers work than half of the professional software engineers out there. And they're normally quite a clever bunch.

If you find it too difficult, slow down and think. Each paragraph has something in it worth thinking about and letting it mull over in your mind.

IQ is not a measure of how much you can learn, but perhaps how quickly it can see patterns and understand things.

You having a lower IQ than somebody else does not mean you can't see those patterns or understand things, it just means it might take you a little more thinking to get there. I'm sure you will.

If you ever have any questions about computers, I'd love to try and help answer them - feel free to ask me.

u/ckdarby · 4 pointsr/PHP

I have included some links for more information about myself in the original post.

To have a better idea of the type of person I am these are the books within my arms reach right now:

Design Patterns: Elements of Reusable Object-Oriented Software

[Refactoring: Improving the Design of Existing Code](

The Mythical Man-Month

Along with some other ~50 similar books I've read.

u/nattoninja · 4 pointsr/learnprogramming

Code is a really good book that goes into how it all works, from the basics of binary and electrical signals and builds from there. The text is very straightforward and there are lots of good illustrations.

u/j-dev · 4 pointsr/learnprogramming

There are books out there, many of which are unfortunately not language agnostic, that deal with this. What you want to know is the basics of object oriented design and, most importantly, design patterns, which are general answers for recurring object-oriented design challenges. You may have to dabble into languages other than the one(s) you currently use in order to follow along.

u/dr_dalek · 4 pointsr/explainlikeimfive

Take a look at this book: Code The book starts off with a switch and builds a whole computer from there.

u/mwassler · 4 pointsr/webdev

Everyone seems to have good things to say about khan academy's comp sci courses.

A few good lower level books in my opinion are this one which is maybe less technical but a good lower foundation and then From Mathematics to Generic Programming by Alexander Stepanov.

I think your probably just experiencing outliers in your job search. If you keep at it your luck will probably turn around.

u/SaidWayTooMuch · 4 pointsr/slatestarcodex

The Mythical Man Month has been taught in some CS programs for quite a while; definitely has influenced my thinking.

u/rohit275 · 4 pointsr/hardware

I haven't read it, but it looks pretty good. I can personally vouch for this book however:

It's truly amazing. I'm currently an EE PhD student but I had a pretty limited background in digital hardware and computer architecture, and I read most of this book just out of interest a little while ago and frankly learned quite a bit. It's written at a very readable level for anyone with almost no prior knowledge, yet gets technical when it needs to. It's very thorough, but approaches the topics at a wonderful and easy pace with very clear explanations. The author even says you can skip some of the more technical details if they're not of interest to you, and you'll still end up learning quite a lot. The book you posted looks pretty similar, so I'd say it's worth a shot.

u/deaddodo · 4 pointsr/IWantToLearn

The Make books for electronics will get you a decent groundwork for the practical application side of things. Practical Electronics for Inventors will you get you covered on the theory side of things.

u/bautin · 4 pointsr/cscareerquestions

Probably much the same. His book, The Mythical Man-Month, was written in the 70s and given an update in the 90s. The essay, No Silver Bullet, was written in 1986 and included in the anniversary edition of the book.

In the early 00's, it was still highly recommended and I believe one of the books given out when you were hired by Microsoft.

That's because Brooks isn't talking about specifics, he's talking about overall concepts. SCRUM and Agile may be able to mitigate some remaining accidental difficulties, and in some ways, they are influenced by Brooks's works and that of DeMarco and Lister in Peopleware. Trying to reduce the number of communication pathways and reduce turnaround in order to avoid driving towards complexity.

But I think if Brooks were to update the essay to account for SCRUM and Agile, he would still acknowledge that it is still impossible for 9 women to make a baby in a month.

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/mowok · 4 pointsr/learnprogramming

It sounds like design patterns might be useful:

Also, like the other commenters have said, you are mainly breaking up your program into smaller subprograms. However, it is really difficult to decide how exactly to break up your program. This is an entirely separate concern from things like algorithms and requires a different type of thinking. Design patterns, if you use them correctly, save time because you don't have to think up a new solution for every problem. They also make it easier for other people to understand your code, force separation of concerns, and make your program more extensible and modular.

u/Captain · 4 pointsr/programming

> In other disciplines, engineering in particular, there > exist treatises on architecture. This is not the current case in software,

Gee I better throw out all those books on architecture since clearly they don't exist.

We can also ignore Fowler's book, GOF, SICP, and TAOCP since clearly they are treatises on software either.

u/generic__redditor · 4 pointsr/learnprogramming

I'd recommend Head First Design Patterns over the original GoF book because its way less dry.

u/jonsaj · 4 pointsr/ProgrammerHumor

I'd recognize that simuduck reference anywhere. it's Head First Design Patterns. We used this book in a class.

u/DukeBerith · 4 pointsr/PHP

For design patterns, this book helped me a lot when I was fresh.

Don't be fooled by the cover or the content, it is quirky on purpose to help make you remember it.

u/CastigatRidendoMores · 4 pointsr/AskComputerScience

When you start building a large piece of software, it's easy to get to the point where you think "Well this is starting to suck. I wish I had started building it like this instead." Those hard-earned lessons are design patterns. If you use the right one, the code you have in the later parts of the project will be easy to scale, easy to adapt to new requirements, and generally painless compared to how it would be without careful planning. Design patterns exist because the same problems tend to pop up repeatedly, so it's worth learning about them (before you need them).

It's difficult to give a general example because design patterns typically serve to solve involved technical problems you don't encounter until deep in a project. However, if you're looking for a good place to start I recommend checking out the Decorator Pattern. It's relatively easy to understand if you're coming from an OOP background. If you really want to learn them, I recommend checking out Head First's book. There are other good sources explaining them, but a lot of them tend to hurt your brain.

u/Megalox · 4 pointsr/learnprogramming

For the design elements, I definitely recommond Head First Design Patterns

It's a simple to follow book that does a good job of teaching you the patters and principles of OO design

u/morhp · 4 pointsr/javahelp

The Head First series is quite light and fun to read/work through. I'd suggest

followed by

Honestly, not too sure if the first book is that great, as I haven't read it, but the look inside view looks quite good and the reviews aren't too bad. Maybe there are alternatives.

The second book I have read and would highly recommend. You need some basic beginner knowledge about objects and stuff first, though.

Edit: Also if you haven't done it yet, think about setting an IDE up for him (or let him do it himself). Nothing discourages more than having to mess with line numbers in compiler output logs, or get frustrated because you run the wrong class files and so on.

u/scottklarr · 4 pointsr/books
u/jsprogrammer · 4 pointsr/science

If that question interests you you'd probably enjoy Godel, Escher, Bach

u/HazzyPls · 4 pointsr/math
u/isarl · 4 pointsr/AskReddit

If you don't understand why you are getting downvoted, it is due to the difference between the centre for thought and the origin of consciousness. If you don't think there's a difference, go educate yourself; there are many resources. You might try Gödel, Escher, Bach, for starters.

u/tuber · 4 pointsr/atheism

If I understand you correctly, the principle you've stumbled upon was mathematically proven by Kurt Goedel in 1931. I think you would enjoy this book a lot. It won a Pulitzer prize.

u/blablahblah · 4 pointsr/cscareerquestions

This solution requires some knowledge of how C works. A pointer is a number referring to a point in memory (and memory is one continuous blob of data). A C string is just a pointer to a character- you start at the location given and keep reading until you hit a NUL (character 0). C doesn't have a boolean type, so you use 0 is false and anything else is true. Once you understand those things, it's a fairly straightforward answer- you start at the beginning of the string, increment the pointer (you can literally imagine a finger pointed at a specific spot in a container if it helps) until you reach the end of the string (marked by character 0), then swap the character from the front with the character from the back, moving each pointer towards the middle as you go.

Having enough knowledge of C to implement this solution is different than a general knowledge of algorithms. On the C side of things, you could read something like Learn C the Hard Way, or buy a copy of K&R if you just want something to refer to as you practice. On the algorithms side of things. For the algorithms side of things this is a pretty popular textbook on the subject.

u/IllusiveObserver · 4 pointsr/socialism

I am now. I was aware of his famous interview on Crossfire with William Buckley, but I didn't know his politics were expressed in his music.

I've read too much about media ecology to stomach the state of telecommunications as it stands today. While I primarily mentioned the capitalist appropriation of TV in my first comment, I think its much more than that. Even when we adopt socialism and kill advertising, TV must be eliminated as a medium of communication. It is inimical to rational thinking. It is inimical to learning and truly understanding. The way the brain processes information from the medium is inherently insidious.

Similar arguments can be made about computers and the internet. I'm not against telecommunications completely, but I am extremely cautious of new technology. Read these books, and you'll be scared of even touching your phone.

The Shallows

Alone Together

The Digital Divide


The Dumbest Generation

As an engineer who became a socialist in large part because I saw that technology was being used to exploit the people I want to help, I can tell you that the question posed to mankind will be that of our relation to technology. We will already have tackled that problem indirectly when we deal with climate change, but that is really a problem of capitalism. We will have to confront it honestly when capitalism falls.

u/e7hz3r0 · 4 pointsr/cscareerquestions

I haven't been in or done a junior dev interview in a long time so I can't speak to whether most companies ask algorithm questions these days.

What I can say is that many of the mid- and senior-level interviews I've been in do. This means, to me at least, that you should learn this stuff even if you don't get asked it in a junior dev interview.

As as self-taught developer, you have shown that you've got the drive and curiosity to learn a lot of stuff enough to do useful work. That says something. So bravo!

Practicing is a great idea. However, if you're constantly looking at the hints before coming up with your own answer, that's probably not as helpful. It sounds like you should learn more about algorithms as a whole topic.

To shore up your weaknesses with algorithms I'll suggest a few resources that I've come across over the years. Since I went the traditional CS degree route, I haven't used these personally but I know many people who recommend them:

u/joe_the_bartender · 4 pointsr/AskReddit

Fantastic book by Nicolas Carr called "The Shallows" which deals heavily with how technology has influenced how we think, perceive, and retain information. link is here!

*edit link fixed

u/quiltedvino · 4 pointsr/C_S_T

Once you sober up from all that weed, you might want to read this - it's basically a cogent version of what you're talking about here.

u/AndrewRichmo · 4 pointsr/nonfictionbookclub

This is the list I have right now, but I might take something off before tomorrow.

Walden – Henry David Thoreau

The Blind Watchmaker – Richard Dawkins

The Shallows: What The Internet Is Doing To Our Brains – Nicholas Carr

Why Leaders Lie: The Truth About Lying in International Politics – John J. Mearsheimer

Voices from Chernobyl: The Oral History of a Nuclear Disaster – Svetlana Alexievich

u/blackkettle · 4 pointsr/math

take a look at Pattern Recognition an Machine Learning by Bishop,

it's an excellent text, though not for the faint of heart. just the first chapter should provide you with a great answer to your question.

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/Jimbo_029 · 4 pointsr/ECE

Bishop's book Pattern Recognition and Machine Learning is pretty great IMHO, and is considered to be the Bible in ML - although, apparently, it is in competition with Murphy's book Machine Learning: A Probabilistic Approach. Murphy's book is also supposed to be a gentler intro. With an ECE background the math shouldn't be too difficult to get into in either of these books. Depending on your background (i.e. if you've done a bunch of information theory) you might also like MacKay's book Information Theory, Inference and Learning Algorithms. MacKay's book has a free digital version and MacKay's 16 part lecture series based on the books is also available online.

While those books are great, I wouldn't actually recommend just reading through them, but rather using them as references when trying to understand something in particular. I think you're better off watching some lectures to get your toes wet before jumping in the deep end with the books. MacKay's lectures (liked with the book) are great. As are Andrew Ng's that @CatZach mentioned. As @CatZach mentioned Deep Learning has had a big impact on CV so if you find that you need to go that route then you might also want to do Ng's DL course, though unlike the courses this one isn't free :(.

Finally, all of the above recommendations (with the exception of Ng's ML course) are pretty theory driven, so if you are more of a practical person, you might like Fast.AI's free deep learning courses which have very little theory but still manage to give a pretty good intuition for why and how things work! You probably don't need to bother with part 2 since it is more advanced stuff (and will be updated soon anyways so I would try wait for that if you do want to do it :))

Good luck! I am also happy to help with more specific questions!

u/ginger_beer_m · 4 pointsr/dogecoin

If you just try to eyeball patterns from historical charts, I guarantee you will see it because that's just what the brain has evolved to do: spotting patterns well (e.g. Jesus on a toast), even when it's actually due to random chance. That's also why most of the so-called technical 'analysis' are bullshit.

Instead, approach this in a systematic and principled manner. You can try check out this book to get an idea what I'm talking about: Pattern Recognition and Machine Learning. This is the standard grad-level introduction to the field, but might be rather heavy for some. An easier read is this one. You can find the PDF of these books online through some searching or just head to your local library. Approaching the problem from a probabilistic and statistical angle also lets you know the extent of what you can predict and more importantly, what the limitations are and when the approach breaks down -- which happens a lot actually.

TL;DR: predicting patterns is hard. That's why stats is the sexy new job of the century, alongside with 'data science' (hate that term uuurgh).

u/GrowthMindset88 · 4 pointsr/learnprogramming was a great resource for learning web development. I really liked this book by David Herman for more advanced JS techniques: Also if your looking into Algorithms, this is probably THE book your looking for

u/baghiq · 4 pointsr/learnpython

College text books generally will go more in depth into them. They usually also provide proof of correctness as well as Big O and theta analysis.

Algorithms 4th ed is my favorite, the code is in Java but its text and illustrations are fantastic.

u/davidddavidson · 4 pointsr/learnprogramming

Data Structures & Algorithms is usually the second course after Programming 101. Here is a progression (with the books I'd use) I would recommend to get started:

u/_INTER_ · 4 pointsr/java

If you want to get a head start at the college, I'd rather get more fundamental programming knowledge. Get a book about algorithms and datastructures (e.g. this or this, first few Google results pointed me to a PDF).

Well of course practical knowledge is also never bad.

u/G_Remy · 4 pointsr/programming

May be you should read The Elements of Computing Systems: Building a Modern Computer from First Principles. With this book you will learn how to build a computer from scratch. Watch the conference of prof Shimon Schocken at Google here.
My second choice is, of course, Structure and Interpretation of Computer Programs. Videos here

u/dustrider · 4 pointsr/programming

This is a tough one. It's been several years since I've used textbooks so there may be better ones out there, and I can't remember what they were in any case :).

CS is a pretty wide field, and does rely on a lot on mathematics. I don't believe you need the theory to be a business programmer, but I do believe that expanding your knowledge of computing, in any way, will make you more capable as a programmer.

There's a couple of free resources you can use to give you the back ground, MIT's opencoureware is excellent for this, and don't forget wikipedia, seriously don't laugh, but do follow up on the references in a wikipedia article.

from what you're saying it sounds like you're more interested in algorithms than computational theory. So I'll just focus on that:

The MIT course introduction to algorithms looks good, and This also has some videos of the lectures this is the textbook they used.

u/orduz · 4 pointsr/brasil

Não sei se seria complicado demais, mas tem o livro The Elements of Computing Systems: Building a Modern Computer from First Principles (por R$ 99 na amazon).

Ele mostra como construir um "computador", incluindo SO, bootloader, etc, que roda num processador que você também constrói virtualmente. E justamente p/ construir esse processador você parte das portas lógicas mais básicas e vai incrementando.

Não é tão "logic for dummies" mas me parece bem recompensador. (Está na minha wishlist ainda)

u/jappacappa · 4 pointsr/cscareerquestions

Year one of ICT includes DFS, BFS, Dykstra, Bellman-ford, several tree-create and search algorithms, insertion sort for introduction etc... That's very basic stuff.. First year computer science we had red and black binary search trees and everything before that (everything about analysis about them, basically this whole book Introduction-Algorithms

That's basic first year ICT and CS curriculum.. Of course it's a hundred times more advanced after 3-4 years of study.

u/SchrodingersLion · 3 pointsr/math

Gödel, Escher, Bach is a popular one. If you're looking for fiction, then I highly recommend Flatland.

u/casualblair · 3 pointsr/learnprogramming

Skill - if you look at a book and can't even figure out what the topic is about then it's too advanced. EG: Entity Framework - if you don't know what an ORM is or why it would be a good idea to have a DAL then you might want to skip this and come back later.

Find a popular blog or podcast on your topic then browse through their articles and notes. They should be regularly recommending books or sites that are useful. Then take that book and google other sites for it. Find lots? Good book.

And yes, amazon reviews do matter. EG:

4.4 out of 5 stars, only one version ever published, and all the negative reviews are about the kindle version, and it's basically THE book for learning design patterns, even 20 years later.

u/nutrecht · 3 pointsr/java

Although I admire the optimism for a lot of people here I feel they are not being very realistic. Like the mention of using sales experience to 'sell' yourself to employers: it's fine and dandy if you can bullshit your way into a job but if you can't actually deliver you'd be 'let go' within a month.

Learning a language is just one aspect. What's most important is doing actually a ton of programming. So make sure you have at least 3 moderately big projects with good code quality that follow best practices that you can show to employers.

Feel free to hop over onto /r/javahelp to have us review your code and suggest improvements. Being a developer isn't really about languages: it's about turning a customer's problem into a working solution. That's the hard part.

One last tip: for someone without any CS education but who is going into an area where OO skills are a must this book is a must read:

Heck. Showing an employer that you read and understand it and apply it in your projects would give you a huge head up.

u/TNMattH · 3 pointsr/csharp

>Is there any decent books on the GoF stuff?

The GoF book: Design Patterns: Elements of Reusable Object-Oriented Software by "The Gang of Four" (Gamma, Vlissides, Johnson, and Helm)

u/BertilMuth · 3 pointsr/learnjava

It will certainly take time. How long is hard to say. One thing is being exposed to code, and writing code yourself. Another thing is actually collaborating with people that are more experienced - that helped me a lot. An eye opener in my coding journey was the "Gang of Four" design patterns book ( The risk is that you will overdo design patterns at first, but that will hopefully settle :-)

u/YuleTideCamel · 3 pointsr/learnprogramming

Software Architecture is a nebulous term that can mean different things to different people. I'm a software architect and there is no single definition for architecture.

Instead try to get a deep understanding of good programming concepts and patterns, while focusing on ways to scale both your application and resources. Introducing unit testing, continuous integration and industry best practices is a key part of good architecture.

Architecture is also more than just the technical side, it's understanding the business domain and making decisions based on that.

tl;dr figure out what architecture means to your business and find the best way to bring value from a high level.

The following books are good resources:

u/schala09 · 3 pointsr/Seattle

Here's a great article about interviewing at software companies:

I particularly recommend working through the book he recommends:

Not only is it a great book for the kind of thinking that you're expected to do in these interviews, but it also has a number of sample interview problems. You may even recognize some of them from your past interviews.

I can't recommend this book highly enough.

u/Jollyhrothgar · 3 pointsr/learnpython

Just looking for learning, etc? If it's for interview prep, I'd give different recs.

I highly recommend:

u/Brandonthegeek · 3 pointsr/learnjava

You could go down two routes IMO: learn some algorithms and data structures, or start working with a more complex domain.

For the algorithms and data structures, this would be mostly stuff you'd learn in a second semester CS program course. In fact, you can work through some of these classes that are open, like the one at Berkeley. Another option is to pick up a good book; I personally love the Algorithm Design Manual. This will give you a really firm foundation on computation (not just programming in Java). It's also great practice for jobs since most interview questions revolve around these concepts.

For a new domain, I'd recommend Android development, since it's all done in Java. There's tons of documentation and resources for that, and loads to learn outside of just programming in Java. Not to mention you can carry around your work in your pocket and show off to potential employers. Aside from that, you can volunteer for an open source project. Apache has tons of projects in lots of languages.

u/comsci-bro · 3 pointsr/Philippines

Any great places/sites to buy computer science books? I'm looking for the books Introduction to Algorithms and/or The Algorithm Design Manual as supplementary reading for my algo class.

u/chunky_bacon · 3 pointsr/programming

I thought so too, until I discovered The Algorithm Design Manual.

So, what about CLR(S) warrants a new edition?

u/jama211 · 3 pointsr/AdviceAnimals

The algorithm design manual is an incredible resource, check it out!

u/gnuvince · 3 pointsr/programming

I like Skienna; short intro to the theory at the beginning and then it delves into actual algorithms. CLRS is good if you need more theory (e.g. solving recurrences).

u/junglist313 · 3 pointsr/netsec

Read Hacking: The Art of Exploitation

Honestly I could recommend this book for the programming section alone.

u/kcmattparker · 3 pointsr/hacking

This isn't a bad start. It's like ABC's and 123's. After going through this book, then you can begin more in-depth experimentation.

u/ndguardian · 3 pointsr/HowToHack

I know the book Hacking: The Art of Exploitation is often referenced as a book to take you from "I have a little experience" to being a little more comfortable with exploiting system vulnerabilities. Don't know if you have read it yet, but maybe it could help. Though this would likely be more for trying to compromise systems at the OS level rather than cracking specific applications, I imagine the same knowledge could be applied to either case.

u/Kijad · 3 pointsr/sysadmin

One of my favorite definitions of "hacker" comes from one of my favorite technical books - Hacking: The Art of Exploitation.

I just tell people I'm a hacker - it's appropriate if you do pentesting, sysadmin work, IT support, helpdesk, you name it. You run the risk of having people ask about your opinions on Snowden / Wikileaks / the NSA, but for the vast majority people just look mildly terrified and stop bothering you.

u/Smarticu5 · 3 pointsr/HowToHack

Mess around with various programs and operating systems. Learn to program, learn web development, learn scripting languages, learn databasing basics, learn about how networks and computer hardware works. When you have a basic knowledge of any of these areas, see if you actually like them. If you do, learn more of that area. Start to research more of that field, specifically revolving around security. And read. Seriously, find any book on security and read it. "The Art of Exploitation" is an amazing book with a great live CD full of exercises to get you started.

u/LearningHowToHack · 3 pointsr/hacking

This book is great

This youtube channel is also great.

And r/HowToHack

u/JWooferZ · 3 pointsr/netsecstudents

I don't get how you're in a masters program in cybersec without knowing how to code...

Anyway, if you are leaning towards pentesting/networks, as well as black hat python/violent python are what you want to start off, as well as a good book on networking book:

I'm actually confused about what the content of an msc program could be in cybersec if you don't already know how to code.

u/solid7 · 3 pointsr/learnprogramming

With regard to debugging, I would say the major hurdle for me was learning how to deeply inspect and interpret the contents in memory. It's pretty easy to step through a program and see what it's currently doing, but interpreting why it did something it wasn't supposed to do is more challenging. For me, this was a matter of repetitive "learn by doing".

To aid with this, I used gdb as a tool to reverse engineer and write a couple of keygen and serial-cracks for various freemium things randomly downloaded from the internet. This was purely for fun and not connected to my job past learning how to really use gdb. It's not as hard as you might think, though some familiarity with assembly helps. Despite looking like an early 90s bullshit interpretation of computers, this is actually a really great book if you're interested.

As far as testing is concerned, it's not something I had really encountered until my first professional programming job. Testing certainly wasn't taught to me in college. The basics of testing are pretty straight forward. What isn't so straight forward is the skill of writing testable code. It's actually pretty easy to code something up that seems to work but is utterly untestable for a variety of reasons. I think this is the major hurdle when it comes to testing, and a skill I work very hard to teach my junior peers. It just so happens to the case that testable code also tends to be decoupled maintainable code - which is beneficial for obvious reasons.

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/ssingal05 · 3 pointsr/learnpython

Incredibly good book that gets you started with the fundamentals. This is absolutely barebones fundamentals, and you'll cover a lot of shell scripting and just, in general, what is REALLY happening when someone is "hacking" something.

That is probably a little too low level compared to "cloud security". You could try picking up a CISSP book (don't bother taking the actual exam) and just studying that. Learning how data travels from your application to the OS to the network layer to bare metal onto another computer/machine and back up.

u/RFburnt · 3 pointsr/HowToHack

AoE - Hacking - Art of Exploitation

Also AoE comes with a bootable environment (easy enough to VM). So really if you follow the book your asm should be exact. Follow as prescribed until you understand when you can deviate.

u/rainymonday512 · 3 pointsr/cscareerquestions

I've only taken an independent study in theoretical crypto, but I quite enjoyed Hacking: The Art of Exploitation. It starts from assembly and works up through buffer overflows, string format exploitations, and various payloads. Also has some crypto at the end. It's certainly not anything like network security, but it's interesting.

u/wat_waterson · 3 pointsr/netsec

+1 for Gray Hat Hacking, the new edition just came out and I haven't had a chance to pick it up yet. Gray Hat Hacking will teach you the fundamentals of writing exploits from scratch.

The sequel to Gray Hat Hacking would have to be Hacking: The Art of Exploitation

I tried starting at H:AOE and it was just too difficult. Picked up Gray Hat and everything made sense!

u/root_pentester · 3 pointsr/blackhat

No problem. I am by no means an expert in writing code or buffer overflows but I have written several myself and even found a few in the wild which was pretty cool. A lot of people want to jump right in to the fun stuff but find out rather quickly that they are missing the skills to perform those tasks. I always suggest to people to start from the ground up when learning to do anything like this. Before going into buffer overflows you need to learn assembly language. Yes, it can be excellent sleep material but it is certainly a must. Once you get an understand of assembly you should learn basic C++. You don't have to be an expert or even intermediate level just learn the basics of it and be familiar with it. The same goes for assembly. Once you get that writing things like shellcode should be no problem. I'll send you some links for a few books I found very helpful. I own these myself and it helped me tremendously.

Jumping into C++: Alex Allain

Write Great Code: Volume1 Understanding the Machine

Write Great Code: Volume2 Thinking Low-Level, Writing High Level

Reversing: Secrets of Reverse Engineering

Hacking: The Art of Exploitation I used this for an IT Security college course. Professor taught us using this book.

The Shellcoders Handbook This book covers EVERYTHING you need to know about shellcodes and is filled with lots of tips and tricks. I use mostly shells from metasploit to plug in but this goes really deep.


If you have a strong foundation of knowledge and know the material from the ground-up you will be very successful in the future.

One more thing, I recently took and passed the course from Offensive Security to get my OSCP (Offensive Security Certified Professional). I learned more from that class than years in school. It was worth every penny spent on it. You get to VPN in their lab and run your tools using Kali Linux against a LOT of machines ranging from Windows to Linux and find real vulnerabilities of all kinds. They have training videos that you follow along with and a PDF that teaches you all the knowledge you need to be a pentester. Going in I only had my CEH from eccouncil and felt no where close to being a pentester. After this course I knew I was ready. At the end you take a 24-long test to pass. No questions or anything just hands on hacking. You have 24 hrs to hack into a number of machines and then another 24 hours to write a real pentest report like you would give a client. You even write your own buffer overflow in the course and they walk you through step by step in a very clear way. The course may seem a bit pricey but I got to say it was really worth it.

u/cquick97 · 3 pointsr/AskNetsec

Depends on what you want to learn.

Web Application Security?

Exploit Development?

"Pentesting" techniques?

Also check here for tons other of resources.

As for certs, if you are a beginner beginner, then probably stuff like Security+ and Network+. Unlike the guy behind me, I will never get, nor do I really recommend CISSP, unless you are going for strictly blue team (defense) work. I personally enjoy red team (pentesting, etc), so something like OSCP would be more useful.

Like I said in a post above, feel free to PM me with questions. I'm always happy to help others on their quest to learn more about the wide world of infosec :)

u/Ari_Rahikkala · 3 pointsr/Games

I've read a lot on what people have said about AI risk, and so far there have been a few people who have indicated that they have a good understanding of the argument being made, and have proposed counterarguments that display their understanding. There's Russ Roberts who argues that even a superintelligence can't actually go that far in being able to manipulate the world (a reasonably compelling argument IMO, but make sure that when you're thinking "superintelligence" you're actually visualizing something of the proper scale). There's Ben Goertzel who says... quite a lot of things, actually, though what stuck to me the most was that the reward-maximizing view of AI that Nick Bostrom and Eliezer Yudkowsky and others use (and that makes the orthogonality thesis seem so compelling) looks very little like practical AI development as it is done now or expected to ever be done, making it rather suspicious even as an abstract model. There's Robin Hanson who had a lengthy debate with Yudkowsky, but the core of his argument seems to be that there's little evidence that the kind of growth rate that would make an AGI dangerous is actually achievable.

tl;dr: There's a lot of people who understand the AI risk argument and have compelling counterarguments to it. These three are just the ones that have impressed me the most so far.

But you? Well, I'm sorry, I would like to be charitable, but you said it yourself: "But what about TEEEEEEEEEEEEERMINATOR?". You have not noticed that an argument different from what you expect to hear has been made. I'd tell you to go pick up Bostrom's Superintelligence: Paths, Dangers, Strategies or Yudkowsky's Rationality: From AI to Zombies but, well, I've never actually read either of these books, so it would be a bit of an odd recommendation to make (I read the LW sequences when they came out and have never heard anyone mention anything essential in those books that wasn't in the sequences). Oh well. FWIW Goertzel says that Yudkowsky's book is the one that makes the essence of the point clear and doesn't try to weasel out of counterarguments.

(For those who have never heard of any of the names in this post, is a fairly popular comparatively short introduction to the basic idea being talked about. Although, well, I haven't read that one, either. No, seriously, on that side you get the same argument from every source, there's not much point in reading the other people saying the same thing after you've read Yudkowsky.)

u/Terkala · 3 pointsr/suggestmeabook

Superintelligence: Paths, Dangers, and Strategies. The book lays our exactly how (potentially) screwed we are as a species if AI development is not careful. And ways to control a potentially species-endingly-powerful AI.

u/Colt85 · 3 pointsr/artificial

The only book I'm aware of would be this modern classic -

You may find r/controlproblem helpful.

If you find any other books, I'd love to hear about them.

u/ExternalInfluence · 3 pointsr/videos

Not really. We're talking about a machine with an intelligence that makes us look like ants, more capable of us at everything we do, including manipulation of human beings.

u/PostmodernistWoof · 3 pointsr/MachineLearning

+1 for top-down learning approaches. There's so much work going on to democratize use of ML techniques in general software development, that, depending on where you want to go, there's little need to start with the classic theory.

IMHO, the classic ML literature suffers a bit from decades of theorists who never had the computing resources (or the data) to make big practical advances, and it tends to be overly dense and mathematical because that's what they spent their time on.

But really it depends on your goals. Which category do you fall into?

  1. Get a PhD in math, study computer science, get a job as a data scientist at Google (or equivalent) and spend your days reading papers and doing cutting edge Research in the field.

  2. Learn classic and modern ML techniques to apply in your day to day software development work where you have a job title other than "data scientist".

  3. You've heard about Deep Learning and AlphaGo etc. and want to play around with these things and learn more about them without necessarily having a professional goal in mind.

    For #1 the Super Harsh Guide is, well, super harsh, but has good links to the bottom up mathematical approach to the whole thing.

    For #2 you should probably start looking at the classic ML techniques as well as the trendy Deep Learning stuff. You might enjoy:

    as a place to start and immediately start playing around with stuff.

    For #3 any of the TensorFlow getting started tutorials are good, along with all of Martin Görner's machine learning/deep learning/TensorFlow "without a PhD" videos on YouTube. Here's one of the more recent ones:
u/DecisionTreeBeard · 3 pointsr/datascience
u/Jaydii- · 3 pointsr/learnmachinelearning


Not trying to sell anything here, but I've been reading this book :

I think it is a pretty complete book that covers a lot and a good first step into ML.

Plus there are plenty of examples using Python.


u/brandonhotdog · 3 pointsr/videos

My previous video on AI did go into a lot more depth on neural networks but still wasn't enough to build your own. (There's only 2 vids on my channel so far so it's just the other one). I will defiantly consider making a video for my fellow devs on AI but for now you should check out if you want to learn how to implent AI into a Unity3D project. If Unity3D isn't for you then you can read:

Also thanks for the support!

u/raijenki · 3 pointsr/brasil

Olha, não posso falar muito em termos de qualidade dos cursos. O grande lance é o nome que você vai botar no currículo: Estácio é praticamente sinônimo de massificação do ensino superior, o que não gera um destaque para quem te avalia posteriormente. Em compensação, eu não conheço a PUC-MG, mas já ouvi falar na PUC-SP, PUC-RJ e na PUC-RS, que em geral são boas escolas - e provavelmente pensaria o mesmo da PUC-MG. Isso agregaria mais valor para ti.

Sobre o currículo em si:

  • Estácio: O curso é mais forcado em negócios (o que o pessoal chama de "Analytics") do que em Ciência de Dados em si. Disciplinas de "Orientação de Carreira", "Governança Corporativa", "Consultoria", "Desenvolvimento Sustentável", "Finanças Empresarias" dentre outras compõem boa parte do curso e, para mim, são perda de tempo - se quer estudar negócios, vá para uma escola de negócios em um curso de negócios. Não há menção ao aprendizado de Máquina no curso ("Teorias Analíticas Avançadas"? "Tecnologias Avançadas"? Que porra são essas?).
  • PUC-Minas: Diferentemente do acima, o curso é um misto de engenharia de dados com ciência de dados. Você supostamente aprenderá Hadoop, Spark, RDBMS, Python, R, e os algoritmos mais tradicionais. É coisa demais para pouco tempo

    Se eu tivesse que escolher, iria de PUC. Mas quer aprender de verdade? Faça o curso de Machine Learning do Andrew Ng no Coursera e pegue o certificado, vale muito mais do que isso e tem uma hands-on approach. O Andrew é professor de Stanford e tem uma puta didática.

    E se quiser aprender por aprender, compre esse livro: Nova edição sai dia 5 desse mês.
u/Denis_Vo · 3 pointsr/algotrading

I would highly recommend to read the following book

I think it is the best one about ml/dl. Not sure that they already updated the tensorflow examples to tf 2.0 and keras.

And as tensorflow includes keras now, and has perfect pipeline for deploying your model, i think it is the perfect choice. :)

u/johnboy77 · 3 pointsr/Cplusplus

Scott Meyers is good -- check out Effective Modern C++. He has a training course, Overview of the New C++ -- I haven't taken it, but I've seen enough of his stuff to recommend him.

If you want more introductory C++ stuff, look at some of the online courses by Kate Gregory (some free trials available -- which might be good to assess if it's what you're looking for).

Once you get going, I'd recommend Sutter's Mill. In particular, check out his "Elements of Modern C++ style". There are also loads of videos online from CppCon (just google it).

But keep in mind that one limiting factor in your request is the "for C programmers" part. A big part of recent evolution of C++ has been getting rid of the need for core C features like pointers. By keeping the C angle, you may be anchoring yourself to the past.

And if you want to go that route anyway (ie keep the C angle), then there is less harm including some older stuff too. I really liked Bruce Eckel's Thinking in C++, which you can find online for free (it isn't quite ancient or modern).

u/ProvenDantheman · 3 pointsr/Cplusplus

Posting this as a top level comment so people can see this without digging. Here are some of the resources I have used plus additional ones I've found that may be useful:

  • - Goes over the basics, I've personally used this a lot.
  • - Goes more in depth with standard library functionality.
  • udemy - Here's a free C++ udemy course. Udemy is a great resource for learning languages and game engines.
  • Effective Modern C++ - Book - A great book that acts more of a reference to C++ functionality. It also goes over best practices.
  • The C++ Programming Language, 4th Edition - Book - A reference on the C++ programming language.
u/Pattycakes_wcp · 3 pointsr/OSUOnlineCS

At my previous employer (where I was not an engineer but was testing their software), everyone was carrying around this book:
Effective Modern C++

There's also this list you can browse here

u/mohself · 3 pointsr/cpp_questions

I enjoyed reading A Tour of C++ by Bjarne Stroustrup. It is short of 200 pages, recommended by Herb Sutter in one of his CppCon talks as the bare minimum every C++ programmer should now, and touches the basics of modern C++ (up to C++11).

Scott Meyer's books are highly revered in the industry as well, based on what I have fathomed. I am gonna read this next.

u/pozo15 · 3 pointsr/TeamGFB

There is a new version of effective C++ that covers C++11/14:
I would guess that it is still as good and relevant as the older version.

u/elperroborrachotoo · 3 pointsr/cpp

Effective C++ / Effective STL by Scott Myers are a good starting point. They can be hard - if they are not, come back in a few months.

Marshal Cline's C++ FAQ is an assorted collection of everything in small bites. The book makes excellent toilet table material, though you have to piece together yourself the deeper insights that Effective X aims for.

Guru of the Week is a sometimes-dated but very well presented series of questions and answers, aiming at a wide range from beginner to, well, guru. The only drawback is that in C++11 and beyond, it's a bit different, or there are other / easier solutions.
Herb Sutter has started reviving the series

Code Complete gets half-a-recommendation. It is important material about programming in general, but for most people it's just too big. Anyway, the first edition can be acquired for pennies and is "good enough", so in case it doesn't work for you it could keep you warm for half an hour or so (lighter not included).


Other than that: I repeat the recommendation by /u/Heiroglyph to read and try to make sense of other people's code.


Side Note: My recommendations are intentionally non-game-programming related. Reason is^* I had quite a few run-ins with game programmers on Q&A sites and the like, and I'm left with the impression that they have a culture of sticking to their own puddle, but thinking it's the ocean. Certainly, game programming has some very particular problem that need very specific and sometimes awkward solutions, but that's no reason for isolaitonism.

^^*) ^^besides ^^the ^^obvious ^^"I ^^am ^^doing ^^too ^^little ^^game ^^programming ^^to ^^be ^^of ^^use ^^for ^^that"

u/luciano-rg · 3 pointsr/IWantToLearn

For an introduction on how computers work the book "Code" by Charles Petzold is very informative. It starts from rudimentary circuits of blinking lights to the complexity of modern computers. I found this book to close the gap between the concepts of software and hardware.
Amazon link:

u/Xavierxf · 3 pointsr/explainlikeimfive

Code is what helped me wrap my head around this.

You might have to read it a couple times to understand it, but it's really good.

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/randrews · 3 pointsr/csbooks

Code, by Charles Petzold is pretty much exactly what you want.

u/Packet_Ranger · 3 pointsr/askscience

You'd be well served by reading a book called "CODE - the Hidden Language of Computer Hardware". It starts all the way from the simplest electronic circuits, explains how a powered signal amplifier can be turned into an electronic switch (e.g. telegraph relays, and later, transistors), how those switches can be chained together to form logic gates per /u/Corpsiez, how those logic gates can be chained together to form arithmetic units and memory, and finally how to make a simple 8080 CPU and implement ASCII inputs and outputs.

u/anachronic · 3 pointsr/AskNetsec

> I have zero Linux experience. How should I correct this deficiency?

First, install a VM (Oracle OpenBox is free) and download a linux ISO and boot from it. Debian and Ubuntu are two of my favorites. Both are totally free (as are most linux distros). Once installed, start reading some beginner linux tutorials online (or get "Linux In A Nutshell" by O'Reilly).

Just fuck around with it... if you screw something up, blow it away and reinstall (or restore from a previous image)

> Is it necessary? Should I start trying to make Linux my primary OS instead of using windows, or should that come later?

It's not necessary, but will help you learn faster. A lot of security infrastructure runs on Linux and UNIX flavors. It's important to have at least a basic understanding of how a Linux POSIX system works.

> If you can, what are some good books to try to find used or on PDF to learn about cissp and cisa? Should I be going after both? Which should I seek first?

You don't need to worry about taking & passing them until you've been working in the field for at least 3-5 years, but if you can get some used review materials second-hand, it'll give you a rough idea what's out there in the security landscape and what a security professional is expected to know (generally)

CISSP - is more detailed and broader and is good if you're doing security work day-to-day (this is probably what you want)

CISA - is focused on auditing and IT governance and is good if you're an IT Auditor or working in compliance or something (probably not where you're headed)

> What are good books I can use to learn about networking? If you noticed I ask for books a lot its because the only internet I have is when I connect my android to my laptop by pdanet, and service is sketchy at my apartment.

O'Reilly is a reliable publisher of quality tech books. An amazon search for "O'Reilly networking" pull up a bunch. Also, their "in a nutshell" series of books are great reference books for Windows, Linux, Networking, etc... You can probably find older/used copies online for a decent price (check ebay and too)

> How would you recommend learning about encryption? I just subscribed to /r/crypto so I can lurk there. Again, can you point me at some books?

Try "The Code Book" for a very accessible intro to crypto from ancient times thru today

Also, for basics of computer architecture, read "CODE", which is absolutely excellent and shows how computers work from the ground up in VERY accessible writing.

u/Lesabotsy · 3 pointsr/learnprogramming
u/ummonommu · 3 pointsr/technology

Code: The Hidden Language of Computer Hardware and Software

A good read if you want history and understanding binary code, among others. Not exactly about politics, but more on the easy-to-read technical side.

u/Psylock524 · 3 pointsr/compsci
u/wgren · 3 pointsr/dcpu_16_programming

Code: The Hidden Language of Computer Hardware and Software,The Elements of Computing Systems and Inside the Machine were recommended on Hacker News.

I have the last one, I will re-read it over Easter holidays...

u/herky_the_jet · 3 pointsr/math

You might enjoy the book "Code" by Charles Petzold (, in combination with the "nand 2 tetris" course developed by MIT (

u/rekav0k · 3 pointsr/blackhat
u/chunyukuo · 3 pointsr/TranslationStudies

First of all, congrats on the promotion and the learning spirit. I wish more managers had your attitude.

I had a similar situation where I went from in-house linguist to loc manager, and I wonder if my experiences might be of use to you. Like you, I definitely did not describe myself as "into programming." I'm still not into that sort of thing. But learning as much of it as I could had a direct benefit to a lot of my daily tasks, and I would recommend at least giving the more learner-friendly tutorial sites a try.

I finished a lot of modules on and genuinely enjoyed them because they were not particularly difficult and also allowed me automate a lot of things and also gain a deeper understanding of how things work. I went through Learn Python the Hard Way and gained a lot from that, especially since subsequent projects included quite a lot of assets in Python. I went so far as to plow through the first half of Code: The Hidden Language of Computer Hardware and Software (the latter half too arcane for me) and found that quite useful as well, although in hindsight it was a bit overkill.

Even after my department was given an actual programmer to code up solutions for us, I at least was able to understand how a good amount of it worked. Coding aside, a localization manager is the person that the linguists and testers go to when things break, and man do they break a lot. That said, I would also recommend training of some sort in SDL and Kilgray's products if you use them. In my experience as manager, both broke often or were fussy at best.

A few years later, I haven't really read much about code, but I still try to ask developers as many questions as I can about the technical aspects of their products and find it really helpful to follow up on Stack Overflow or just Wikipedia.

Good luck with your new position!

u/katyne · 3 pointsr/learnprogramming

First of all you will never understand everything on the level that you think you want to understand it. That just doesn't happen. Even with an advanced degree, even working for the industry for 10+ years you'll end up specializing in this or that and sort of having some idea about the other things. There's just too much stuff to learn. Those black boxes people talk about - they're called "abstractions", a way to simplify complex details in order to understand a concept. And in the beginning all you'll be doing is trying to understand concepts. When you were learning to drive a car you didn't need to know the very last mechanical detail of its engine, right? You just had an abstract idea of it, you knew you had to put in fuel and turn on ignition and why you had to shift gears and stuff, and that was enough. Same here. First learn to hold the wheel and steer, then choose the field you'd like to specialize in. But it will take you a lifetime to learn everything about everything - and that's if all you'll be doing is learning, not making anything of your own.

If you're like me you still need some introduction to "why" before you start learning "how" I would recommend this book - it's very approachable and sort of encompasses the general topics without going into much detail. Other than that it's hard to say anything because we don't know what your goal is, do you want to work as a web dev, a system programmer, or make games, write for mobile maybe? front end, backend, databases? It's like saying "I want to learn how to sport", well what kind of sport. They're all very different directions of virtually unlimited depth.

u/Triapod · 3 pointsr/askscience

Consider implementing an ALU which does various things like add and subtract and bit shifts. So, you have inputs A and B from your memories and your program instructs the computer to add them. The instruction for "add" is also sent to the ALU. So how does the ALU "change" it's function to add this time and subtract the next? Look at how a multiplexer works. So for a simple implementation, your ALU can compute both A+B and A-B (in parallel using separate logic gates) and then at the end, based on the instruction, select which to output. You can also try to imagine how a multiplexer can be used to implement various boolean operations by thinking about the truth tables :).

So, if we can build the kind of ALU logic above, the key becomes addressable memories (note that addresses are themselves numbers which can be manipulated using ALU). When you compile and run a program, it is loaded into memory. The instruction and data are read and then fed into logic like above.

If you are interested and have the time, the book Code presents the material quite well and accessibly.

u/jimschubert · 3 pointsr/csharp

I recommend starting by teaching some version control basics. Focus on git and quickly cover others like TFS and subversion. You can read Pro Git for free.

If you teach a hardware/software course, CODE is an excellent book.

I also recommend C# in Depth. I would also think it'd be cool to offer points for contributing to StackOverflow or the new open source .NET projects on GitHub.

If you teach design/analysis or other classes focused on architecture, Adaptive Code via C# is pretty good. I'm only a few chapters in, but it discusses Scrum methodology, layering and tiers, as well as how to follow practices for writing great code.

I would also suggest a course on JavaScript. I have had to train too many Junior and Senior developers on how to write JavaScript. It's scary that many web developers don't even understand fundamentals.

u/SevenGlass · 3 pointsr/learnprogramming

Petzold's Code is the book you are looking for.

u/nekochanwork · 3 pointsr/learnprogramming

> I assumed calculus would somehow be the building block of where all computer systems are based.

I'm afraid I don't know what expression "building block of where all computer systems are based" means, but if it helps at all, Petzold's book The Hidden Language of Computer Hardware and Software explains how computers work from the ground up.

If you were to ask me, I would say "building blocks" of computers is Boolean algebra. Boolean algebra can defines simple logic gates, which in turn can be realized physically through circuits and relays. You can combine gates to form simple adders and multipliers; you can feed the output of a relay as an input back into itself to create a flip-flop gate, which can be used to store state; you can set up a relay to disconnect from the circuit as soon as it receives power, and reconnect when there is no power, resulting in a simple oscillator; etc. etc etc.

I'm positive a lot of smart people used calculus to shrink circuits and relays down to solid-state transistors, which in turn implement a von Neumann machine architecture that all modern software depends on. But at the root of it all, the movement of information through your computer is modeled by naive propositional logic and the rules of Boolean algebra.

u/audionautics · 3 pointsr/videos

For the latter half, "the CPU executes instructions", there's a fantastic book called Code: the hidden language of computers, that, through a series of scenarios, takes you all the way from talking with your friend through a string and two tin cans, to flash lights, to morse code, to logic gates, transistors, and finally encoding information in bits and executing it on a CPU.

It's a super fun read.

u/frostmatthew · 3 pointsr/WGU

tl;dr version:

  1. yes
  2. no, but that will be the case at any school

    Quick background to validate the above/below: I was a 30y/o banquet manager when I decided to change careers. I had no prior experience [unless you want to count a single programming class I took in high school] but did get a job in tech support at a medium size startup while I was in school and wrote a couple apps for our department. Just before I graduated I started working at a primarily Google & Mozilla funded non-profit as their sole software engineer. I moved on after a little over two years and am now a software engineer at VMware.

  3. The degree is a huge boost in getting past HR and/or having [good] recruiters work with you. You'll also learn the skills/knowledge necessary to get hired as a developer, which is obviously the more important part - but for the most part this is all stuff you can learn on your own, but you'll greatly reduce the number places that will even give you a phone screen if you don't have a degree [I'm not saying this is how it should be, but this is how it is].

  4. I typed out a lot before remembering New Relic had a great blog post a few months ago about all the stuff you don't learn in school [about software development], ha. So I would highly recommend you not only read it but also try to learn a little on your own (especially regarding SQL and version control) Being a good developer (or good anything) takes time/experience - but knowing what they don't cover in school (and trying to learn it on your own) will help.

    Two books I'd suggest reading are The Pragmatic Programmer and Code: The Hidden Language of Computer Hardware and Software. Pragmatic Programmer is one of those classics that every good dev has read (and follows!). Code is great at giving you some insight into what's actually happening at a lower level - though it gets a bit repetitive/boring about halfway through so don't feel bad about putting it down once you reach that point.

    The best thing you can do to help you land a job is have some open-source side-projects (ideally on GitHub). Doesn't have to be anything major or unique - but it will help a lot for potential employers to see what your code looks like.

u/dwitman · 3 pointsr/learnprogramming

> C.O.D.E

This book?

u/mivfx · 3 pointsr/programming

Yes. The best book i read that explains "computer" from really "ground up" is Charles Petzold' Code. Even my literature-graduate girlfriend understood it.

u/TheAdventMaster · 3 pointsr/learnprogramming

Something like Code: The Hidden Language of Computer Hardware and Software may be up your alley.

So may be From NAND 2 Tetris, a course where you build a computer (hardware architecture, assembler, OS, C-like compiler, and programs to run on the OS / written in the compiler) starting with just NAND.

At the end of the day though, the way things work is like this: Protocols and specifications.

Everything follows the same published IPO (input, processing, output) standards. Stuff is connected to and registers expected values on expected peripherals. The CPU, motherboard, graphics card, wireless modem, etc. all connect in the right, mostly pre-ordained places on the hardware.

In this vein, there's firmware level APIs for then communicating with all of these at the BIOS level. Although as far as I'm aware, "actual" "BIOS" is no longer used. UEFI is instead:

This is what Firmware is / is built on-top of. Operating systems build on top of these. System calls. Operating systems communicate under the hood and expose some number of system calls that perform low-level actions like talking to devices to perform things like file access or network I/O. A lot of this stuff is asynchronous / non-blocking, so the OS or system will then have to respond to an interrupt or continuously check a registry or some other means of getting a response from the device to see if an operation completed and what its result was.

Loading the OS is one thing the BIOS is responsible for. This is through the bootstrapping process. The OSs are located at very specific locations on the partitions. In the past, the only command you had enough room for within BIOS / pre-operating system execution was to load your OS, and then the OS's startup scripts had to do everything else from there.

Once you have an operating system, you can ask the OS to make system calls and invoke low-level API requests to get information about your computer and computer system, such as the file system, networks, connected drives and partitions, etc. These calls are usually exposed via OS-specific APIs (think the win32 API) as well as through a command-line interface the OS provides.

New devices and I/O from/to those devices communicate through firmware, and interrupts, and low-level system calls that are able to communicate with these firmware APIs and respond to them.

Just about anything you can think of - graphics, audio, networking, file systems, other i/o - have published standards and specifications. Some are OS-specific (X windowing system for Linux, DirectX win32 API or GDI on Windows, Quartz on Mac, etc.). Others are vendor-specific but don't seem to be going anywhere (OpenGL, then nVidia vs AMD driver support which varies across operating systems, etc.).

The biggest hardware vendors and specification stakeholders will work with the biggest operating system vendors on their APIs and specifications. It's usually up to device manufacturers to provide OS-compatible drivers along with their devices.

Drivers are again just another specification. Linux has one driver specification. Windows has another. Drivers are a way that the OS allows devices and users to communicate, with the OS as a middle-manager of sorts. Drivers are also often proprietary, allowing device manufacturers to protect their intellectual property while providing free access to use their devices on the OS of your choice.

I'm not an expert in how it all works under the hood, but I found comfort in knowing it's all the same IPO and protocol specifications as the rest of computing. No real hidden surprises, although a lot of deep knowledge and learning sometimes required.

When we get to actually executing programs, the OS doesn't have too much to work with, just the hardware... So the responsibility of slicing up program execution into processes and threads is up to the OS. How that's done depends on the OS, but pretty much every OS supports the concept in some sense.

As far as how programs are multi-tasked, both operating systems and CPUs are pretty smart. Instructions get sent to the chips, batched and divided by them and the computational results placed into to registries and RAM. Again, something I'm not a huge expert in, and it honestly surprised me to find out that the OS is responsible for threading etc. I for some reason always thought this was at the chip level.

When you include libraries (especially system / OS / driver libraries) in your code, you're including copies of or references to OS native functions and definitions to help you reference these underlying OS or system calls to do all the cool things you want to do, like display graphics on the screen, or play audio. This is all possible because of the relationship between OS's and device manufacturers and the common standards between them, as well as the known and standard architectures of programs designed for OS's and programs themselves.

Inter-program compatibility is where many things start to become high level, such as serialization standards like JSON or XML, but not always. There are some low-level things to care about for some programs, such as big- vs little-endian. Or the structure of ASM-level function calls.

And then you have things like bitcode that programs like Java or JavaScript will compile to, which are a system-independent representation of code that most often uses a simple heap or stack to describe things that might instead be registry access or a low-level heap or stack if it had been written in ASM. Again, just more standards, and programs are written according to specifications and know how to interface with these.

The modularity of programming thanks to this IPO model and the fact that everything follows some standards / protocols was a real eye opener for me and made me feel like I understood a lot more about systems. What also helped was not only learning how to follow instructions when setting up things on my computer or in my programs, but learning how to verify that those instructions worked. This included a lot of 'ls' on the command-line and inspecting things in my debugger to ensure my program executed how I expected. These days, some might suggest instead using unit tests or integration tests to do the same.

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/KyleRochi · 3 pointsr/ComputerEngineering

Codecadmy! I recommend python or ruby. They are pretty easy languages to pick up, so you will have a good understanding of programming concepts when you start doing C/C++ or java. Also for digital logic I recommend picking up a copy of [Code](Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. It is by no means a comprehensive guide, but you will be familiar with everything when you take a logic class and while most of the class is trying to figure out what an adder is you will already know and be focusing on how and why it works

u/johnsibly · 3 pointsr/programming

I'd certainly recommended Charles Petzold's "Code" as a source of material:
Great explanations of all the points you mention

u/Great_Lord_Kek · 3 pointsr/EngineeringStudents

If they just explain them as a logic table it makes no sense. looking at them as they perform in a circuit is much more intuitive and clear; i'd recommend a book (it's pretty old at this point) by Charles Petzold called "Code: the hidden language of computer hardware."

That book goes over circuits from the bare bones (lighting up a lightbulb) all the way to latches and RAM arrays. It's not dumbed down either.

u/CaRDiaK · 3 pointsr/learnprogramming

If you're interested in the history then Code by Charles Petzold it's great. It explains how code has existed for hundreds if not thousands of years in many different forms.. He takes you right the way through from people signalling using lights, morse code, relays to modern day processors. What's cool about it is you can just pick it up and put it down which I get the feeling is what you're looking for ;

u/Cogniphile · 3 pointsr/learnprogramming

What is their approximate age?

Highest education level achieved?

Any prior experience in programming or computer science?

What is your budget?

Do you have experience programming?

The hardest part is finding something that is interesting and will keep an inexperienced reader motivated. Otherwise you could throw some undergrad level textbooks at them and they'd come out better than most college students who don't actually study.

I highly suggest you stay away from front-end programming because it will be very frustrating to learn about making interfaces when you can't make an interface. This means stay away from html, css, and such.

One possibility is having the person write programs on paper and forward them to you. You can type them into a pc, check for bugs, and even print out the results to send back.

Also I've had this book recommended but haven't read it myself:

This also might work:

u/emcoffey3 · 3 pointsr/learnprogramming

Definitely take as many web-related classes as possible and at least one database class. The other two focus areas you mentioned are important, but probably not as important as the first two. Maximize your time on learning the important stuff; the other stuff can be learned later.

If you want to learn about UML diagrams, check out Martin Fowler's UML Distilled; it's an easy read and handy as a reference. Likewise, Charles Petzold's Code is one of my favorite hardware-related books.

u/ULICKMAGEE · 3 pointsr/AskEngineers

Honestly just purchase this book it's exactly what you're looking for and will do a far better job than a bunch of condensed replys to your inbox.

It's a really good book.

u/Summerdown · 3 pointsr/askscience

I think this book is exactly what you're looking for. I bought it recently and am now half-way through it, and it's fascinating.

u/pgvoorhees · 3 pointsr/c_language

As /u/Shok3001 said, your course textbook is going to be a good place to start.

As an additional note, it might be really beneficial to know how computers work in general. To this end, read Code by Charles Petzold. Once you see the underlying mechanics of a computer, you will see more easily why things are the way they are in the language and how to manipulate data inside a computer.

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/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/shrapnull · 3 pointsr/programming

For anyone that hasn't read it, [Charles Petzold's "Code"] ( is a great read through the history of computing and programming.

u/lespea · 3 pointsr/programming

I can easily recommend the book Code: The Hidden Language of Computer Hardware and Software ; fascinating stuff!

u/CSHunter33 · 3 pointsr/cscareerquestions

Congrats! I'm on such a programme at the University of Bath in the UK right now. Bath's programme teaches C and Java, with a little Python in some elective modules. There are also theory of computation modules with a bunch of discrete maths in.

If you let me know which specific course you're attending, what your undergrad was, and how technical a career you might want I can give more tailored advice.

I did the following for prep, after researching what modules I'd be taking:

  • MITx's Intro to CS MOOC (amazing)
  • Read and did all exercises from several relevant chapters from a "Discrete Maths for Computing" textbook I got second hand for a fiver (helped a lot in a maths-heavy module)
  • read the oft-recommended book Code (useful for awareness, but not essential, especially since we do no Comp Arch at Bath)
  • did some algorithm challenges at places like and once I had done the Intro to CS MOOC

    Conversion masters are generally very intense so doing prep now and over summer is a great idea. The stuff I listed helped immensely and I would do the same again - perhaps I would switch the MITx MOOC to Harvard's CS50 instead since CS50 has a bigger spread of languages. If I had had more time on my hands, proceeding from here to do a Java MOOC would have been really useful also.

    Working on the Leetcode/Firecode challenges helped a lot for general programming practice, and will also be helpful prep for job hunting later.
u/maredsous10 · 3 pointsr/electronics

Getting Started in Electronics by Forest Mims

Make: Electronics

Lab Manuals for Electronics

Make videos by Collin Cunningham on

Edit: Changed Chris to Collin (I got mixed up)... one guy does Aphex Twin videos and the other does Make videos

u/svaha1728 · 3 pointsr/ECE

You mentioned Arduino, so I'd recommend this book and Make:Electronics

For the more academic side of things I'd recommend, The Art of Electronics Student Manual

u/dasshue · 3 pointsr/AskElectronics

I had a good time with the Make: electronics book. You won’t become an electrical engineer with it, but it covers some good fundamentals, and won’t bore you to death. There are kits available to work your way through all of the projects, which can be easier than sourcing all of the parts a book/or project talks about. And best yet, the kits (two available) will give you a decent assortment to play with when you are done.

Hope this helps!

make: electronics

u/AnalogKid2112 · 3 pointsr/EngineeringStudents

For electronics, Make: Electronics is a great book that introduces components and basic concepts. Each chapter has a parts list so you can buy individual components as you go along or order a kit with everything included. You don't need expensive tools to get started, the cheap stuff is fine.

For programming, check out /r/learnprogramming,, or any of the high rated books on Amazon. Python is recommended for beginners, although if you know what university you are transferring to try and find out what language they use for their intro classes.

And if you want to shell out the cash, you can buy the student version of MATLAB and get started with it. There's a billion Youtube tutorials and books available that walk you through it.

u/momslatin_dadsasian · 3 pointsr/java

I'm super new myself, but I've got this one: and its pretty good so far. Starts you from the very basics.

u/wolface · 3 pointsr/arduino

I think what you are looking for is a book called Make: Electronics

u/CaffeinatedGuy · 3 pointsr/IWantToLearn

I'd pick up the following kit and book. I've had this kit for years, and it's a pretty good intro. The breadboard and external components make it expandable so you can use your own components for experimentation. It also had a lot of IC circuits.

The book will get you playing on your own, and supplement where the kit leaves off.

u/Murloh · 3 pointsr/electronics

I picked up Make: Electronics and so far it has been very insightful. It walks you through doing real world examples while introducing some basic theory. It is all hands on which I like a lot. One caveat is that you need to also purchase all the components and tools. They sell 2 ready made component kits from but you can get the components cheaper utilizing different sources like mouser, jameco, even radio shack.

I also picked up a nerdkit ( and it has been a great intro into microcontrollers. The documentation and support those folks provide are truly second to none. AWESOME community. Once I complete the Make Electronics book, I will be going full steam ahead with seeing how far I can get with MCUs.

And then, it will be on to exploring some robotics for me. If you are like me, be careful that you don't get bogged down with theory only. Back in my teens, I really wanted to explore electronics and read all I could on theory. Which was great and all, but also very very dry. Yes, Ohm's law is critical to know. However, making the leap from theory to practice will be equally as critical and will ensure you see how to really apply the theory you are learning.

u/drivers9001 · 3 pointsr/arduino

Hey don't feel bad if you did. Breaking things is a fine way to learn. (I mean, I'm kind of curious about what the insides of a servo look like in person. Haha.) I was going to link to a book I saw that teaches you electronics by breaking stuff (like the first lesson was to completely burn up an LED haha). But I can't find it.

Oh wait, it was this book after all:

u/wellthatdoesit · 3 pointsr/learnjava

Sure! This is a great desire to have.

Clean Code probably most closely deals with you're specific question. It's very readable, and uses Java for the examples.

But while you're looking for recourses along these lines, you might also take a look at the super thick, bit super good Code Complete:

Lastly, it also sounds like it might be time to start thinking about design patterns - these are ways to implement solutions to common problems in your code using well-established design principles. The "Gang of Four" book is the classic on the topic, but this one offers a more readable introduction I feel:

(Sorry for lack of link formatting, I'm on mobile.)

u/forgetfulcoder · 3 pointsr/learnphp

PHP The Right Way is good.

If you want something for SQL I strongly recommend SQL Antipatterns.

If you want something more abstract, Head First Design Patterns is good. It uses Java in its examples but it applies to PHP too.

u/lookbehindyou2 · 3 pointsr/SoftwareEngineering

Read Head First design patterns and really understand what encapsulation means.

u/pier25 · 3 pointsr/learnprogramming

OOP won't make sense until you understand design patterns. IMO this is the best book you can find to start learning design patterns. It's for Java but you can apply the ideas on any modern language.

u/binary_is_better · 3 pointsr/webdev

I agree about design patterns. They keep you from re-inventing the wheel. I find Head First Design Patterns easier to approach than the gang of four book.

u/Hexorg · 3 pointsr/learnprogramming

I would recommend you reading O'Reilly's Head First: Design Patterns It is oriented for Java, but the patterns are the same in most OO languages. I compiled all the examples in C++ and all was great.

The book essentially teaches you how to write code that is easy to modify later on.

u/SeriousGoose · 3 pointsr/MLPTalentExchange

Design Patterns (Gamma, Helm, Johnson, Vlissides)[aka the Gang of Four] is THE Design Patterns book, but it's a little dry and I don't think it talks about MVC that much. I've gotten about 1/3 of the way through it twice, I just keep getting distracted and forget about it.

Head First Design Patterns has gotten a lot of good reviews and I've head good things about the Head First series of books, but I haven't read any of them myself.

I'm not sure about any online tutorials, but I'm sure they exist.

I taught myself a little about Design Patterns and MVC, but I'm sure I understand them just enough to be dangerous. I'm going to be taking a class this Fall that should talk about Design Patterns more.

u/dalarist · 3 pointsr/java

Hey there! I personally love patterns. I think there are one of the single best things you can learn as a programmer. So here are some resources I have used and was successful with.

u/Neres28 · 3 pointsr/learnprogramming

I'd very much agree with this, but not having read any others I can't recommend them. I have heard that Head First Design Patterns is good.

u/donnfelker · 3 pointsr/androiddev

What books can help you expand your knowledge of design patterns?

u/Hoepla · 3 pointsr/cscareerquestions

While this is an extremely good book, it is old fashioned and uses examples that are difficult to understand if you are working with modern web technology.

If you are programming Java, Head First Design Patterns is a better choice. It contains the same patterns, but it is much easier to understand.

u/ddoomus · 3 pointsr/gamedev

Unfortunately, there's no real fast-track.

That being said, focus on design patterns and algorithms. Understanding and putting design patterns into use is absolutely your best starting place. Knowing and learning new algorithms gets your brain thinking in the right way about any problem you're trying to solve. These two topics on their own can be really pretty dry and boring, but there's only two ways to learn them. The slow way, by trial and error, by experience (which you've been doing). And the boring way, that's slightly faster, study.
Introduction to algorithms is really good, but dry.

Head First: Design Patterns If you've never used a head first book, they're really well done IMO. Just commit yourself to a chapter a day once a week or something, force yourself through it, and you'll learn tons.

Another pro tip, re-write your existing code. When you realize you should've done something differently, fix it. Any time you find yourself copy pasting code, or thinking to yourself, damn, I should've made an abstract class, or a factory, or ... whatever it is, go through the process. In the end, it always comes down to doing. Learning this stuff only comes from doing.

u/mvferrer · 3 pointsr/programming

Have you ever considered reading the SICP book from MIT? You could also try an algorithms book, and brush up on your design patterns.

u/Andrew_Shay · 3 pointsr/learnpython

The book Clean Code will help with improving your code in general.

Head First Design Patterns is great! But in Java. The patterns still apply to Python though.

Here are patterns in Python

u/dohpaz42 · 3 pointsr/PHP

Agreed. There are plenty of resources out there that will help you understand design patterns. If you're new to the concept, I would recommend Head First: Design Patterns, it might be based on Java, but the examples are simple to understand and can mostly apply to PHP as well. When you feel like you've grasped the basic concepts of design patterns, you can move on to more advanced texts, like Martin Fowler's Patterns of Enterprise Design - this is a great reference for a lot of the more common patterns. There is also Refactoring: Improving the Design of Existing Code. These are great investments that will help you with any project you work on, and will help you if you decide to use a framework like Zend which uses design patterns very heavily.

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/bwainwright · 3 pointsr/learnprogramming


I've been a professional programmer for 20 years and I still don't formally know design patterns.

What I mean by "formally" is that I naturally use more basic patterns without even realising it.

However, recently I've moved into software architecture for my company, and am finding that there are more and more reasons to learn and understand patterns, as they help design complex systems.

Definitely focus on programming first. Patterns will come.

Also, a tip - people will always recommend the Gang Of Four book ( for design patterns. And it is the gold standard book for Design Patterns. However, in my opinion, it is an incredibly 'dry' read.

Head First Design Patterns ( is a much better introduction to design patterns for most people.

u/IthinkIthink · 3 pointsr/learnprogramming

I would highly recommend Head First Design Patterns. If there's actually a bookstore near you you can probably just find a copy there and skim it to get what you need for now.

Design Patterns are typically generic, not specific to any particular language.

u/freddieje · 3 pointsr/Unity3D

So kudos to you for wanting to create more manageable code. I will take a look at your class when I get some time and give you some ideas, but for now I recommend this book that helped me immensely: Head First Design Patterns: A Brain-Friendly Guide. It is a fun read and goes over some of the most important patterns in OOP. I had to read each chapter a few times and practice coding solutions for the knowledge to sink in, but what you will learn is amazing. I was able to apply concepts to one of my games when using for instance the Strategy Pattern to swap out flying behaviors super easy and separate code that will change from code that will not change. I will be posting tutorials on this subject in the future at my new Unity Game Dev site:

You can take a look at the book on Amazon here:

u/zoredache · 3 pointsr/learnpython

What you might want to do is pick up a book on design patterns. I am not aware of an good ones specifically aimed, at python though.

Learning the mechanics of doing OOP in python really isn't that hard. Learning how design your objects is the tricky bit. A book on design patterns basically is just a cookbook of things that work. It is about giving you practical examples of when you would use OOP.

Here are a couple books I have on the subject, and have found useful. Reading about design patterns was basically what let me actually understand the point of OOP.

u/Omnicrola · 3 pointsr/java

Not specific to Java, but make yourself familiar with Design Patterns. This book is a bit more approachable, the GoF version is a bit dry, but good.

This is usually one of the first things I give to new programmers where I work.

u/crawly_the_demon · 3 pointsr/neoliberal
u/butchdogt1234 · 3 pointsr/AskReddit

How about Godel, Escher, Bach? I currently have the book and have read a good bit of it. I'd highly recommend it to anyone. As a matter of fact, you should buy it for yourself and use it within your class.

u/ichmusspinkle · 3 pointsr/math

Gödel, Escher, Bach gets recommended a lot, but for good reason. And it has a good layman's explanation of the incompleteness theorems.

u/introspeck · 3 pointsr/eldertrees

First book I recommend to any programmer, no matter what they're working on, is The Pragmatic Programmer. Excellent stuff.

If you don't get a shot at low-level coding at work, get yourself an Arduino kit and just hack away. Apparently the language is similar to / based on the C programming language. I use C every day.

To do well with embedded systems, real-time, device driver, or kernel type stuff, you have to really, really, really, understand what the hardware is doing. I was able to learn gradually because I started programming when there was one CPU and no cache memory. Each hardware operation was straightforward. Now with multi-core CPUs, multi-level cache memory, multiple software threads, it becomes a bit more complex. But something like the Arduino will teach you the basics, and you can build on that.

Every day I have to think asynchronously - any operation can happen any time, and if they share memory or other resources, they can't step on each other. It can get hairy - but it's really fun to reason about and I have a blast.

There's a lot more I'm sure, but get started with some low-level hacking and you can build from there.

If you want to get meta, many of the best programmers I know love Godel, Escher, Bach because it widens your mental horizons. It's not about programming per se, but I found that it helps my programming at a meta level. (and it'll give you a lot to meditate on when you're baked!)

u/higz · 3 pointsr/AskReddit

Gödel, Escher, Bach: An Eternal Golden Braid

I still haven't finished it though, it's demanding and very rewarding when you do understand it.

u/jbigboote · 3 pointsr/programming

I am surprised this book has not been mentioned yet:ödel-Escher-Bach-Eternal-Golden/dp/0465026567/

u/dr_entropy · 3 pointsr/InsightfulQuestions

Douglas Hofstadter talks about something like this in I am a Strange Loop. Here's an interview that talks about it a bit. I recommend reading the book, though you may enjoy it more after reading Godel, Escher, Bach: An Eternal Golden Braid.

u/violinplayer · 3 pointsr/violinist

Jaap Schroder wrote a book detailing his study of the Solo violin works, and he's recorded the concertos as well. That's a good place to begin. There are some really brilliant insights that most students would never consider.

Don't get caught up thinking you are handcuffed and can only imitate an anemic baroque style or a warbly, romantic style. This video is one sort of hybrid, where the soloist and conductor are very aware of performance practice, but modern instruments and techniques are relied upon heavily. Remember that no recordings exits before 1900ish. There's still a lot of personal judgment in a good historically informed performance.

There are many great Bach interpretations, and you should listen to many recordings (Grumiaux is often held in high esteem, and Schroder, as good models) to find out where your preferences lie. You should attempt to play with all sorts of expressive devices (Non vib, lots of decay, faster bow, different bow strokes, bowing patterns, holding the bow higher, gut strings?, baroque bow) and find out what you have to say about Bach. I think any successful interpretation will at least have two major things: a tremendous sense of line (form, rhythm, a large-scale view) and an expressive use of the tone color (bright, warm, deep, thick, feathery, etc.).

Leopold Mozart also wrote a treatise on violin playing. In terms of playing style, he was more familiar with the Baroque than with the music of W.A mozart. He wrote about a sense of "affect" in Baroque music. He wrote that overall, there is one overriding feeling that should come across in Barque works (especially dances and binary form movements.) In the E major Bach, I bet it would be helpful to decide what the "affect" is for each movement. Is there only one, is the narrative single-minded? More simply, come up with something other than "happy" or "sad."

Don't let anyone tell you Bach was a stodgy, strict person. He was ridiculously smart, as shown by his ability to improvise multi-voice fugues. Hofstader wrote eloquently about Bach's puzzles and intellectualism. He was a jokester - the crab canon and the Coffee Cantata or good examples. He was sometimes compensated for his work with large amounts of beer. Bach had somewhere around 20 children, about half of which survived childhood. Bach was a very complex person, with lots of life experience. Don't let a careless caricature influence how you think about his music.

u/PatricioINTP · 3 pointsr/INTP

The most INTP book I know is Godel Escher & Bach, though the second half is harder to get through. The first half more than makes up for it.

Other favs include Frank Herbert’s Dune series and his lesser known semi-stand alone book The Dosadai Experiment. That said, The Golden Age Trilogy by John C Wright is jam packed with sci-fi ideas. If you rather read modern fantasy, look at Night Watch series by Sergei Lukyanenko. Meanwhile as a history buff I also like the Temeraire series by Naomi Novik, where European powers in the Napoleonic era have a draconic Air Force.

Right now I am redoing and continuing the Thursday Next series byJasper Fforde, which combines alt history, sci-fi, British humor, and meta level shenanigans. A must for classic lit fans who don’t mind its wackiness. (Others can’t stand it) I also recently finished a reread of Roadside Picnic, which Stalker movie and game were loosely based on.

Edit: one other. If you want a “Lovecraftian Simulator”, get House of Leaves ASAP. It is less of a book to sit down and read and more of an interactive experience.

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/HeyHesRight · 3 pointsr/math

I too love fun math[s] books! Here are some of my favorites.

The Number Devil:

The Mathematical Magpie:

I echo the GEB recommendation.

The Magic of Math:

Great Feuds in Mathematics:

One Equals Zero (Paradoxes, Fallacies, Surprises):

Genius at Play - Biography of J.H. Conway:

Math Girls (any from this series are fun)

Mathematical Amazements and Surprises:

A Strange Wilderness: The Lives of the Great Mathematicians:

Magnificent Mistakes in Mathematics:


u/senzei · 3 pointsr/

I'd recommend having a read of Godel, Escher, Bach: An Eternal Golden Braid. The book that taught me that consciousness happens somewhere between hormone propogation and the physiological manifestations of our biochemical state.

That and it is just plain good reading.

u/lechnito · 3 pointsr/AskReddit


u/gipp · 3 pointsr/askscience

I'm assuming you're looking for things geared toward a layman audience, and not textbooks. Here's a few of my personal favorites:


Cosmos: You probably know what this is. If not, it is at once a history of science, an overview of the major paradigms of scientific investigation (with some considerable detail), and a discussion of the role of science in the development of human society and the role of humanity in the larger cosmos.

Pale Blue Dot: Similar themes, but with a more specifically astronomical focus.


The Greatest Show on Earth: Dawkins steers (mostly) clear of religious talk here, and sticks to what he really does best: lays out the ideas behind evolution in a manner that is easily digestible, but also highly detailed with a plethora of real-world evidence, and convincing to anyone with even a modicum of willingness to listen.


Godel, Escher, Bach: An Eternal Golden Braid: It seems like I find myself recommending this book at least once a month, but it really does deserve it. It not only lays out an excruciatingly complex argument (Godel's Incompleteness Theorem) in as accessible a way as can be imagined, and explores its consequences in mathematics, computer science, and neuroscience, but is also probably the most entertainingly and clearly written work of non-fiction I've ever encountered.


The Feynman Lectures on Physics: It's everything. Probably the most detailed discussion of physics concepts that you'll find on this list.


Connections: Not exactly what you were asking for, but I love it, so you might too. James Burke traces the history of a dozen or so modern inventions, from ancient times all the way up to the present. Focuses on the unpredictability of technological advancement, and how new developments in one area often unlock advancements in a seemingly separate discipline. There is also a documentary series that goes along with it, which I'd probably recommend over the book. James Burke is a tremendously charismatic narrator and it's one of the best few documentary series I've ever watched. It's available semi-officially on Youtube.

u/lysa_m · 3 pointsr/math
u/iLikeSpegettiWestern · 3 pointsr/cheatatmathhomework

Have you read Gödel, Escher, Bach? There are some great analogies between math, music, art, and other really neat stuff.ödel-Escher-Bach-Eternal-Golden/dp/0465026567

u/actualscientist · 3 pointsr/askscience

The book that kindled my interest in Artificial Intelligence and started my journey toward getting a PhD in Computer Science was Gödel, Escher, Bach: An Eternal Golden Braid. It's not current with respect to the state of the art, but it is a compelling, high-level tour through some of the biq questions in Artificial Intelligence, Cognitive Science, and Computer Science in general.

u/habroptilus · 3 pointsr/suggestmeabook

Uncle Tungsten: Memories of a Chemical Boyhood by Oliver Sacks. Sacks is best known for writing case studies of his patients as a neurologist, such as The Man Who Mistook His Wife For a Hat. Uncle Tungsten is part memoir, part history of and introduction to chemistry. There's nothing quite like it out there.

The Selfish Gene by Richard Dawkins. Dawkins's Twitter antics notwithstanding, this book is an unmissable classic in biology.

Godel, Escher, Bach by Douglas Hofstadter. An ode to consciousness, full of puns, music and metamathematics.

Mind, Body, World by Michael Dawson. This is a textbook, but it's (legally!) available for free online, and it's totally engrossing. The author uses his work in music cognition to introduce the major theories and paradigms of cognitive science and show how there isn't as much separation between them as it seems.

u/voyetra8 · 3 pointsr/AskReddit

To OP: You should read Godel, Escher, Bach: An Eternal Golden Braid by Douglas Hofstadter:

It's a GREAT book. They cover this mental exercise, as well as a ton of others that would likely enjoy.

u/OdwordCollon · 3 pointsr/pics

I'm reminded of this book

u/noveltyimitator · 3 pointsr/atheism

The Eternal Golden Braid

For a collection of simple elements with enough resources and time, emergence of structure occur. Recursion, and the system of seemingly simple neurons can lead to consciousness.

u/philipp_w · 3 pointsr/Showerthoughts

It's sad, isn't it?

But still, there is a lot more to the Internet than just consumption and advertising. Wikipedia has changed how we approach something so boring as an encyclopedia. Stackoverflow is the Q&A site - spawning many more under the StackExchange roof (or maybe you're more a Quora-type?). edX, Coursers, MIT OpenCourseWare and many more make it easier to get access to top-notch information (although you still have to study it yourself).

Google Maps brought cheap navigation to the masses and my be the best tool at our disposal to help the ever-increasing traffic jams.

Facebook has the potential to create diverse communities around the most obscure things.

And then there's Reddit - a plethora of communities of interest culminating into one front page.

The Internet (just like any other medium) is what you make of it.

P.S.: If I may suggest a book on this The Shallows: What the Internet Is Doing to Our Brains.

u/coldfrontin · 3 pointsr/bonnaroo

You just reminded me where I learned this.

u/my_favourite_axe · 3 pointsr/intj

Social media is a good call, but I actually think it's not only that, but browsing in general - it's been very well described in a book called The Shallows: What the Internet Is Doing to Our Brains. I'd recommend to minimise browsing the internet and try to replace it with reading longer texts (yes, it's quite ironic to give this advice on Reddit).

How would you describe your attention span/focus in general?

u/tofapornottofap4 · 3 pointsr/pornfree

I would suggest reading this wonderful wonderful book on internet addiction.

I very strongly associate to this void of porn being filled by other useless stuff on the internet. I also strongly relate to the fact that if I'm wasting time on the internet, it means I'm escaping from something else - usually some difficult work.

I realized that a huge amount of time wasting for me started off from an impulse. For example, I'd just type facebook blindly into the browser. I first used a pop-up kind of plugin for reddit and signed out of my facebook account. This forced me to "agree to see website" or sign in manually into facebook, which made me much more minful of these impulses. Following that, and after I completed reading the above book, I deleted my facebook account and started using only throwaways for certain subs that I was interested in. I still have to deal with youtube however.

As is mentioned in one of the other comments, buying a newspaper or magazine subscription really helps. It's amazing to see how much of deep-reading skills I'd lost due to mindless internet browsing, clickbait headlines and bite-sized memes. I'm also reading a book for a half hour a day before sleeping, but this is hard to enforce too, given netflix.

Thanks actually! While writing this I've become more mindful of what I need to do next :D

u/Dr_Terrible · 3 pointsr/bestof

If you enjoyed the article, Nick Carr wrote a follow-up book called The Shallows which expands greatly on his argument. One of the best books I read last year.

u/G-Brain · 3 pointsr/math

I know nearly nothing about this topic, but I find it extremely interesting and I've done some searching.

Two more lectures:

u/ChristianGeek · 3 pointsr/learnmachinelearning

Amazon links to books mentioned (no affiliate). Warning: A lot of high textbook prices here...look for eBooks and/or used copies of earlier versions:

Introduction to Mathematical Statistics (Hogg, McKean, & Craig)

All of Statistics (Wasserman)

Statistical Inference (Casella & Berger)

Pattern Recognition and Machine Learning (Bishop) (only reasonably priced as an eBook)

Hitchhiker's Guide to Python

u/mr_dick_doge · 3 pointsr/dogecoin

I'm sceptical of Elliot wave analysis. The reason is, I do data analysis at work (although for other domains) , and in any stochastic system, it is easy for a vague model like the EW to fit any kind of patterns in the observed data (i.e. the EW 'model' underfits a lot). Worse because EW is prescriptive and it's basically fitting model by eyes. How well does it fit? Does it offer any meaningful predictive confidence? We don't know. The human brain excels in pattern recognition, so you tend to see patterns wherever you look, this is another reason why many so-called technical 'analysis' methods that try to eyeball patterns is a lot of bullshit.

Instead, an entire field on pattern recognition has been developed on a statistically rigorous background (here's a good book to start with) and applied on many practical problems with much success, e.g. the self-driving car, google translate, siri, etc. For me personally, if I were to try to do price prediction, I'd start with using a neural net or some kind of regression-based method using Gaussian Process or something. Section 4 of this paper seems to provide a decent review of the various methods applicable for price prediction. They would require a lot of tuning, and most likely they won't work well in a market as manipulated as crypto where a lot of the data points are essentially noise.

Having said that, it's fun to hear about 'predictions' where dogecoin will go to the moon :P

TL;DR: predicting the future is hard. Dogecoin will go to the moon.

u/samuelm · 3 pointsr/mlclass

He's talking about the distribution of the error of y not J(or the distribution of the probability of the function y given x). It's explained in the lecture notes, and in page 29(figure 1.16) of Bishop's book there's an illustration that switched on the bulb for me(althought I found the book almost incomprehensible). You can look it using the amazon preview

u/PLLOOOOOP · 3 pointsr/MachineLearning

Is this the Bishop book you guys are talking about?

u/xxxabc123 · 3 pointsr/ProgrammerHumor

I agree with the Amazon review. Unless you need for a class, or learn an advanced topic not available in other places, I wouldn't touch this book ever. There are much easier algorithms books to read such as This book isn't introductory at all as mentioned on Quora by multiple people

And if you've bought this for algorithms interviews preparation, it's better to buy cracking the code interview or similar which has explicit instructions for interview questions.

One more thing to add to the review was the algorithms are written in pseudocode, array indices start with 1 instead of 0, some lines refer to other pages in the book so you can never read a code inside this book sanely.

u/ProbablyRickSantorum · 3 pointsr/gamedev

I own Algorithms (4th Edition) . It's very well explained and uses Java as a base although it's easily readable if you are proficient with any other languages.

u/a_few_benjamins · 3 pointsr/cscareerquestions

Algorithms, 4th Edition and the companion Coursera Course are great if you are already familiar with a mainstream language.

u/jaquino94 · 3 pointsr/algorithms

Algorithms by Robert Sedgewick

Good book with the code written in Java

u/digitizemd · 3 pointsr/algorithms

The Princeton / Coursera algorithms course. It is great. You can find lectures (since the first course finished recently, and the second course is halfway done) here (you need to change the number at the very end. I think it starts at 10).

There is a book that's relatively cheap:

And there's a booksite:

This course is done entirely in Java.

u/emporsteigend · 3 pointsr/compsci

You may have to look up some of the terms in my reply and I apologize but, hey, you'll learn something.

I recommend Python, for the simple reason that Python manages to integrate several paradigms in one programming language (imperative, object-oriented, and functional) and a lot of what you learn with Python will carry over into other languages if you learn it deeply enough. E.g. Python has metaclasses which I believe were originally implemented in an older language called Smalltalk and so when I went over to experiment with Smalltalk (I like the Pharo implementation), it was no sweat understanding the idea of metaclasses.

Python also prepares you to read the kind of pseudocode you'll see on Wikipedia and in a lot of textbooks because Python reads a lot like pseudocode; it is an eminently readable language and actually enforces formatting conventions for clarity.

And should you decide to do a big advanced project, there are very frequently well-developed libraries available immediately available for your purposes, which is not an advantage you will get with some of the more obscure / less-used languages mentioned here.

For example, need to do machine learning? No problem! There's PyBrain.

Need to study complex graphs? No problem! There's NetworkX. (If you live in the United States, it's your taxpayer dollars at work, so enjoy.)

Need to do genetic algorithms? No problem! There's PyEvolve.

There's even a package for proving theorems in logic, FLiP.

Ruby comes recommended for similar reasons and has a purer object-oriented basis but (in my experience) fewer good libraries.

I have to disagree with several recommendations here: Lisp has been recommended in several posts and I have doubts about how much of a better or effective programmer it makes you; the evidence for such a claim is unclear and pretty much all anecdotal. And a lot of it is based on stereotypes about marginally competent enterprise Java programmer-types. Now that a number of programming languages have taken Lisp innovations like garbage collection and lexical closure to heart, there's not that much of an advantage anymore in Lisp. (IMO.) More to the point, I find that neither any implementation of Common Lisp nor Scheme enjoy quite the same support as Python.

For instance, even though Lisp has a reputation for being used widely in artificial intelligence, the AI libraries I can find for Common Lisp are relatively underdeveloped compared to those you can find for Python. For instance, in the case of soft computing methods in AI (which IMO are far more promising than logic-based approaches), between PyBrain and PyML you've got neural networks, SVM, reinforcement learning and more whereas I could only find fledgling projects like cl-machine-learning for Lisp, which apparently hasn't been worked on since 2009. (The Lisp community is notorious for not finishing projects once started.)

If you must use Scheme, I highly recommend Racket because it appears to be the most full-featured Scheme. (That's a major issue with Scheme: the standard specifies very very little and so the differing implementations tend to be kind of incompatible. One says that Scheme suffers from horrible "balkanization".)

Logo was mentioned, too. The NetLogo implementation is good for fast agent-based programming and a few other things (I found it highly useful for writing a Kohonen network implementation because of its inherently spatial character) but Logo as a language is not that great.

Prolog IMO is fucking terrible. Using it is like pulling your own teeth.

Pure functional programming languages like Haskell are kind of wanky as well. It's usually rather difficult to do anything useful with them because they disallow side effects completely but on the other hand, since you're interested in logic and computation, you'll get a lot of exposure to theoretical computer science ideas through these kinds of languages.

Bottom line is with Python you'll probably get more work done faster and have more fun that way too. And that's what counts.

One last note: I don't like SICP. Go on Amazon and look at some of the negative reviews to see what I mean. I can't exactly say what's a good intro to computer science because I'm well past that point now but this guy appears to come warmly recommended:

And when you're a little more advanced, and want to dive into data structure and algorithms, the Segdewick "Algorithms" book is excellent, even if it uses Java for all the code:

u/cannibalbob · 3 pointsr/cscareerquestions

The feedback about "jargon for development" can be solved by going through some books cover to cover, making sure you understand the theory, and implementing the exercises. I understand that feedback to mean that the person who gave the feedback believes there is too high a chance you will inflict damage on the codebase by making decisions not grounded in solid theory.

Examples of titles that are classics and widely known:
Algorithms (4th Edition): (there is an accompanying coursera course).

Code Complete:

Clean Code:

Functional Programming in Scala:

Learning Python:

Effective Java:

Haskell Programming From First Principles:

I included multiple languages as well as language-agnostic ones. Functional programming is the near-to-medium term future of software engineering, and most languages converging towards that as they add functional features.

I don't think bootcamp is required. Learning how to learn is the most important thing. If you get into these books, lose track of time, and feel "aha! that's how these things that I previously thought were unrelated are actually the same thing!", and are able to keep it up for weeks, then that is a good sign that you can get to where you want to be.

u/cello_bitch · 3 pointsr/Portland






u/molotovbliss · 3 pointsr/Magento

Obviously the biggest gripe with Magento is obviously, Speed.

That said I recall Alan Storm mentioning performance was not a target during initial development, flexibility and developer friendliness would be a key to market penetration as it is obviously what helped make it as popular as it is.

Fast forward and now we all are having to deal with this initial uncaring for performance. We install layers upon layers of caching and indexing to squeeze as much out of it as we can.

Personally I find Magento overly architected. It feels like Spaghetti code at times, except its just a big massive plate of lasagna now. Everything has to go through hundreds of layers to build out a simple request.

With that said.


  • Documentation sucks = Learn to read code
  • ORM = Learn SQL! (a DBA will thank you later)
  • EAV = Flatten the tables to many smaller tables
  • XML = Use associative Arrays (its native and loads quickly, and will throw errors upon un-initialization)
  • Email templates = Surely there is a better way?!
  • API = Nothing but wrappers around Models (which is why its still so damn slow)
  • Autoloading = Who ever thought scanning a hard disk for X number of dirs for one file must seek therapy. (yes I know theres class maps now and opcode cache like APC) Fun fact lib/ is scanned as well. so thats 4 code pools in total.
  • Upgrading large data will just not happen due to upgrade scripts with numerous ALTER TABLE commands instead of grouped causing large MySQL table disk copies and scan.
  • Data flow (even with the latest version still just plain sucks, thankfully theres Magmi and uRapidFlow)
  • Cron (do we really need another Cron inside of Magento itself?)
  • A better Magento connect similar to how Wordpress works would be nice.
  • Ebay/Paypal ;)


  • Observers (as much as I hate using design pattern buzzwords!)
  • PHP as phtml (no template language overhead. learn PHP frontend devs!)
  • Factories (see observers comment)
  • Singletons (see observers comment)
  • Adminhtml_Grid
  • Multi-Site/Store
  • Layouts per product/site/store
  • Theme and code pool fall backs
  • Shopping Cart Rules

    What I'm NOT looking forward to in Magento2:

  • EAV is sticking around (but maybe can be disabled?)
  • TDD/Unit Tests (Yes, I don't see the point in TDD, and hard to convince otherwise)
  • Twig
  • WYSIWYG editors
  • More layers on the already tall lasagna stack.

    After using Magento since version .6b using (X-Cart years before) I've slowly come to the realization that the majority of implementations seem to come from the Java world.

    I don't know if its the fact that instead of teaching Basica or even C isn't part of the curriculum at universities anymore and they just drop you into Java but I wish people would take more time to figure out the basic principles FIRST before saying Java, PHP, C, etc is better. They all have their +/-'s. But understanding the principles layers generally helps you understand how your PHP code is working inside the machine. I don't think this is taught anymore or no one cares. I'd suggest to pickup for a good read for those that don't.

    With that said anyone who thinks they can rebuild a better Magento from scratch, I will salute you, me I realize such a task would require years to achieve, by then the train may of already left the station. I know Varien who was a consulting company before Magento, realized the many pitfalls of OSCommerce for their clients. Hence why we have Magento today.

    Disclaimer: These are just my opinions, which are a lot like butts we all have one and they all stink. ;)
u/splatterdash · 3 pointsr/programming

The speaker wrote this as a book, which was actually published in 2005.

Bought my own copy some time ago, definitely recommended!

u/Yuushi · 3 pointsr/learnprogramming

Don't start with the dragon book as someone else suggested - it's too much for someone new. I'd suggest reading The Elements of Computing Systems (which you can also read online). It starts from the grond up, but in the end has you creating a "high level" compiled language.

u/reason78 · 3 pointsr/ECE

Start here: