Awesome Analogy for Understanding Levels of Programming

via [Reddit](http://www.reddit.com/r/explainlikeimfive/comments/j2ekw/how_did_we_go_from_binary_to_assembly_language_to/c28n0cr): If you said to your dad "i'm hungry" he will probably go to the kitchen, get all the ingredients to make a peanut butter and jelly sandwich, make the sandwich, cut off the crust (because he knows that's how you like it), put it on a plate and then set the plate in front of you. You had a problem (you were hungry) and your dad was able to fix that problem just by hearing a single sentence. What if you were talking to a new babysitter? What would you say? You might say "Can you please make me a peanut butter and jelly sandwich? I really like strawberry jelly. We keep the peanut butter in the fridge on the top shelf, and i don't really like crusts. Thank you". After all that, the new babysitter would go off and do *exactly* what your dad did, the only difference is you had to spend more time explaining exactly what you wanted. So, later on, your mom comes home with a super smart monkey and a pretty smart monkey. Your mom tells you the monkeys know a handful of tricks. The only difference between the monkeys is the super smart monkey will perform its tricks when you say certain key words, while the pretty smart monkey will only perform his tricks when you do certain hand motions (he doesn't understand english). Your mom helps you learn the hand motions and the corresponding english words (e.g. when you pat your head or say "open" the monkey will open whatever is in front of him). Fortunately, the monkeys don't know a whole lot of tricks, so there isn't a whole lot to memorize. So can you get the monkeys to make you a peanut butter and jelly sandwich by combining all the tricks they knows? It turns out you can, but it's kind of difficult. It was easy for your babysitter to pick the strawberry jelly over the apricot jelly, but to get the monkeys to do it you have to tell them to grab all the jelly out of the fridge, put all the jelly on the counter, put them in alphabetical order (which is even harder to do), grab the jar on the far left, then put the rest of the jars back. In fact, anything your babysitter and dad can do, the monkey can also do. actually, in some ways the monkeys are better. Sometimes when your dad is making a sandwicch, he realized the garbage can is full, so he collects the garbage and puts it on the side of the house before finishing the sandwich. The monkeys will happily make you sandwiches all day long, completely ignoring the overflowing garbage can (unless you tell them to take out the trash). So, to bring thins analogy home, the pretty smart monkey is like binary, the super smart monkey is like assembely, the babysitter is like a low level programming language, and the dad is like a high level programming language. Binary and assembly essentially do the exact same thing, but one you're kind of able to talk to in english, while the other has to be given instructions in 1s and 0s. low level programming languages can do everything the binary and assembly languages can do. the low level language sometimes combines a number of assembly instructions to make your life easier. high level languages make your life super easy, but sometimes they do things without asking. All the languages have trade offs. Generally, low level languages are faster but difficult to work with, while high level languages are easier to work with, but slower.