The good guy/bad guy myth - <AUTHOR> https://aeon.co/essays/why-is-pop-culture-obsessed-with-battles-between-good-and-evil <comment><USER2> I think people telling stories like Star Wars choose to make the antagonists Capital-E-Evil because modern audiences are much less happy to root for people who are fighting a war if they aren't shown that the war is thoroughly justifiable.

A few hundred years ago you could happily put a character in a saga and have them go off on viking raids and kill any number of people whose only crime is living near the coast, and still put them forward as morally admirable.

Nowadays if you want to have your protagonists shooting at their enemies or hitting them with sharp bits of metal you basically have to choose between a good-vs-evil narrative or having only anti-heroes rather than plain heroes (and both choices are now common).

So I think this bit is pretty much backwards: « Good guy/bad guy narratives might not possess any moral sophistication, but they do promote social stability, and they're useful for getting people to sign up for armies and fight in wars with other nations. »

What modern Good-vs-Evil narratives are collectively yelling at us is the idea that _only_ outright visible evil justifies making war.

<comment><USER3> I think it's the inverse. Good-vs-evil narratives are not some progression, rather the inverse.

Whereas ancient peoples and older eras saw war as a necessary evil in some cases, and could see the enemy as regular people that they just had to fight (even down to the Iliad, the most heroic figure, Hector, is on the enemy side), the Good-vs-Evil narrative doesn't come to prevent war (except in dire circumstances), but to refuse the enemy its humanity and justify total war.

Good-vs-evil was used to justify the pillaging and goring of the colonial era, to the Nazi's extinction of the Jews, and so on.

That's the route of modern diplomatic terminology ("axis of evil" and so on), and behind the dehumanizing of the enemy. And even civilian casualties don't matter much when you're fighting "evil" (e.g. Dresden, Hiroshima, modern Middle East, etc).

Another such trick is to promote (with articles, movies, etc) the "inner conflict" of your side (how they fear they're fighting an unjust war, the pain they get from the killings they had to do, PTSI, etc), thus humanize them more into good guys, while still painting the other side as caricatures. This faux- critique of war is an excellent way to say "we might do bad, but we're ultimately the good guys, the ones who actually do question what we do".

<comment><USER4> Is the good-vs-evil narrative always a regression?

Caricature-painting is a basic tool of modern morality tales. Is it so universally regressive? Would we be better off if we portrayed Pol Pot, Heath Ledger's Joker, or Opposing Racist White Guy as trying to balance conflicting motivations?

<comment><USER5> If you portray evil as being done only by people who have pure-evil motivations, that gives your audience the impression that they can't do evil. After all, _they_ don't have evil motivations!

I think it is in fact important to show that conflicting motivations can lead to evil. Heck, even _good_ motivations can. That way people might actually stop and think about whether what they're doing is in fact evil.

Or to put it in Godwin's Law terms, your typical Nazi was trying to balance conflicting motivations. The right lesson to be learned is not "Nazis were evil, so they did evil things" but "we better watch out for conditions that cause people to behave like that".

<comment><USER6> Your average Nazis and German society in general, sure. But the ones who architected the final solution and world war? That's a different matter. Sociopaths exist, as do people with deep hatred for certain groups, and a desire for power and glory no matter the human cost.

A better way to frame the matter is what sort of conditions in a society lead to dangerous people being in charge.

<comment><USER5> Just to be clear, the "ones who architected the final solution" attempted other solutions first (e.g. having Europe's Jews emigrate from Europe to somewhere else; they were stymied by other countries not being willing to accept them). I'm not saying this was a _nice_ thing to try to do, but even they did not start with cackling evil laughter and wanting to wantonly slaughter people. Something that often gets left out of histories of WWII.

<comment><USER6> And I'm sure serial killers start out with fantasies and stalking instead of melodramatic laughter. What matters is what people end up doing. The Nazis did very bad things.

And I've heard Eichman's rationalizations for keeping the trains running on time. He was doing his duty, it was lawful, nobody around him opposed the policy, etc. It's all BS to excuse his moral choices and anti-semitism.

And yeah, we need to understand how groups of people come to justify genocide and other terrible practice, but keep in mind not everyone went along with it in WW2. Bulgaria refused to hand it's Jews over. There were German police and army who refused to cooperate with the SS. It was possible to resist participating in genocide, and sometimes without consequence.

<comment><USER5> > What matters is what people end up doing.

Sure, I agree. My point is that we need to get people to notice that they're on a slippery slope to doing bad things and stop. And that this is easier if they admit to themselves the possibility that they might end up doing bad things.

As you note, during WWII there were people who noticed and stopped. I just wish more had.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> I racked my brain in disagreement at first with her claim (I took a fair amount of ancient literature classes in college and continue to read ancient literature when I can), only to find I couldn't come up with many examples that contradict her. In fact I even began to think on the Bible, the one document I'm sure we would all think of as being moralizing, but even it contains passages that don't assume the good guy/bad guy trope:

In the Joshua narrative (a part of the Bible that troubles a lot of people for its wholesale slaughter of ethnic groups) before they sack Jericho Joshua sees an angel and asks which side he is on, and the angel replies, "neither" (Joshua 5). Similarly in Deuteronomy the existence of other deities is presumed in some passsages, but they are meant for "other nations" (Deuteronomy 4). And my favorite example, God tries to kill Moses after he commissions him (Exodus 4:18).

Here's the thing though, when ethnicity and familial ties no longer are the thing binding a society together, the only thing left is ideology. If we want to live in a pluralist society we have no choice, but to embrace narratives that bind us together through morality and ideology. Universalism is a powerful tool, it can create a society like the US, which has many faults and sins to be sure, but is the only society in history to elect a member of, what was very recently, a slave class to its highest political office. Universal also has its dark side in things like the fascisms of the early 20tj century.

It seems like we might be migrating back (or around?) to a non-Universalist sentiment around the world in the current backlash against globalization. The impetus definitely has some nationalism and racism in it, but it feels different to me than a moralizing racism of the past that assumed racial superiority, and now seems to be rooted in a theory of primacy (it's not that we're better, but we come first, e.g. "America first").

It makes sense to me that we are migrating away from Universalism. Our collective psyche cannot fathom the indirect violence that we are all wreaking on each other right now (and the immense catastrophes we are all about to suffer).

<comment><USER8> > Universalism is a powerful tool, it can create a society like the US, which > has many faults and sins to be sure, but is the only society in history to > elect a member of, what was very recently, a slave class to its highest > political office. Universal also has its dark side in things like the > fascisms of the early 20tj century.

Haiti, the second republic in the Americas, elected people who had been slaves. For example, Faustin Soulouque, born into slavery in Petit-Goâve in 1782, elected President of Haiti in 1847 - [https://en.wikipedia.org/wiki/Faustin_Soulouque](https://en.wikipedia.org/wiki/Faustin_Soulouque) . He then became Emperor of Haiti.

What do you mean by "Universalism"? Is it "focused around ... the doctrine that every human soul will ultimately be reconciled to God because of divine love and mercy"? [https://en.wikipedia.org/wiki/Universalism](https://en.wikipedia.org/wiki/Universalism)

Because I struggled and failed to see the connection between the German and Italian fascist movements movements and the American Universalism of the late 1700s.

Those fascist groups were driven be nationalism. You can see that in the names. Partito Nazionale Fascista, ("National Fascist Party") was rooted in Italian nationalism. Nationalsozialismus ("National Socialism" or "Nazi") was positioned as alternative to international socialism. In "Ein Volk, ein Reich, ein Führer", the "Volk" means ethnic Germans.

I think internationalism, expressed for example in [https://en.wikipedia.org/wiki/The_Internationale](https://en.wikipedia.org/wiki/The_Internationale) , is closer to what I think you might mean by Universalism than ethnic nationalism.

<comment><USER9> > Haiti, the second republic in the Americas, elected people who had been > slaves.

Haitians gained their freedom and formed their republic by genociding all the white colonialists - men, women, and children - and forming their own society.

The US had slaves, and then an internal reform (including a Civil War to put down a rebellion) freed them. The same society that once enslaved people later elected them. Ironically, the genocide of the Haitian Revolution was a justification by the pro-slavery elements who feared the same thing would happen as in Haiti.

The land by itself is not the country.

<comment><USER10> Civil war killed 25÷ of males between 18-45 in South. It thoroughly destroyed their way of life (as it was trully slave society). Internal reform is a bit understatement. There were many disagreements and figths over former slaves after, including violence and terrorism and laws to limit their rights (meaning they went from elected to unable to participate in politics). It was not straight line.

Women and children died too.

<comment><USER9> Nobody went around after the Civil War deliberately killing every single man, woman, and child on the losing side, and forming an entirely new country.

This is what happened in Haiti - a full on genocide _after_ the French surrender. Remarking on the extraordinary feat of "electing" a former slave is a little bit strange when almost everyone who _wasn 't_ a slave was killed or fled the country. With a few specific exceptions, white people in Haiti became _persona non grata_ who could not own land, etc.

The degree to which post-war Haiti could be called a "republic", except nominally, is somewhat questionable as well.

Additionally, slavery as a "way of life" destroyed in the South is generally exaggerated. The South was economically dependent on slavery, yes, but slavery was largely an institution of the wealthy planter class. As Grant wrote in his memoirs, most of the Southerners who fought in the Civil War were duped into fighting a war they had no real interest in; the best most of them had going for them was basically "sure, I'm dirt-poor sonofabitch, but at least I ain't a _slave_ ".

 _The young men who would have the fighting to do in case of war, believed all these statements, both in regard to the aggressiveness of the North and its cowardice. They, too, cried out for a separation from such people. The great bulk of the legal voters of the South were men who owned no slaves; their homes were generally in the hills and poor country; their facilities for educating their children, even up to the point of reading and writing, were very limited; their interest in the contest was very meagre—what there was, if they had been capable of seeing it, was with the North; they too needed emancipation. Under the old regime they were looked down upon by those who controlled all the affairs in the interest of slave-owners, as poor white trash who were allowed the ballot so long as they cast it according to direction._

[http://www.gutenberg.org/files/4367/4367-h/4367-h.htm#ch17](http://www.gutenberg.org/files/4367/4367-h/4367-h.htm#ch17)

<comment><USER8> > "The degree to which post-war Haiti could be called a "republic", except > nominally, is somewhat questionable as well."

The definition of "republic" is quite general, and includes the Roman Republic and the German Democratic Republic, neither of which follow the Madison- derived definition described at [https://en.wikipedia.org/wiki/Republic#United_States](https://en.wikipedia.org/wiki/Republic#United_States) .

Haiti had multiple forms of government. Quoting from [https://en.wikipedia.org/wiki/List_of_heads_of_state_of_Hait...](https://en.wikipedia.org/wiki/List_of_heads_of_state_of_Haiti) :

        1.1 Saint-Domingue (1791–1804)
        1.2 First Empire of Haiti (1804–1806)
        1.3 State of Haiti (1806–1811)
        1.4 Kingdom of Haiti (1811–1820)
        1.5 Republic of Haiti (1806–1822)
        1.6 Republic of Haiti during the unification of Hispaniola (1822–1844)
        1.7 Republic of Haiti (1844–1849)
        1.8 Second Empire of Haiti (1849–1859)
        1.9 Republic of Haiti (1859–present)

The 1804 massacre of most of the white population was under Dessalines and the First Empire of Haiti. The republic came later. Faustin Soulouque, who I mentioned earlier, was elected to be the President of the Republic of Haiti in 1847.

If you would like, feel free to ignore the "republic" part of my comment. My point holds that I think Haiti is an example where someone born a slave was elected president ... for some definition of the word 'elected.' I can't figure out who was able to vote in his election.

As a contributing factor to him coming from an underclass even in a society almost completely urged of white people, he was black in a culture where mulattos had held more political power. (Eg, quoting [https://en.wikipedia.org/wiki/Jean- Louis_Pierrot](https://en.wikipedia.org/wiki/Jean-Louis_Pierrot) "As President of Haiti, he was intended to be a figurehead for the mulatto ruling class.") He organized a massacre of mulattos while he was president, then as emperor he "installed black loyalists in administrative positions ... [and] created a black nobility".

BTW, Wikipedia's summaries aren't that detailed and I haven't found better. It's probably that I don't know where to go to look. My DDG search for Faustin Soulouque mostly came up with sites which use Wikipedia as the main source.

If there is a reason for why this example does not serve as a useful counter- example, then perhaps it's because there are enough qualifiers in the definition that the original statement "the only society in history to ..." is not actually that useful?

Add enough qualifiers and you can make anything sound special.

</comment></comment></comment></comment></comment></comment><comment><USER11> A few years ago I grabbed a free ebook of Grimm stories from Project Gutenberg for light bedtime reading. There are several there, based on different translations and containing different subsets of the stories. This one seems to be the most complete: [http://www.gutenberg.org/ebooks/5314](http://www.gutenberg.org/ebooks/5314)

I was surprised by how many of the stories fell under one of these templates:

• Main character in story is cruel and dishonest. This brings him wealth, power, love, and/or happiness.

• Main character in story is victimized by someone cruel and dishonest. Responds by finding someone weak and/or stupid that he can victimize in order to boost his wealth or position back to what they were originally.

It was very hard in most of the stories to find anyone who could be described as what we would call a "good guy".

<comment><USER12> In the first tale the king is a minor character but seems to be a "good guy".

The protagonist does do something nasty and go on to live happily ever after with the victim though.

</comment></comment><comment><USER13> When I was a kid, one thing I loved about Japanese manga was that the bad guy was often somewhat admirable. I couldn't stand the USA tradition of exaggerated and simplistic evil bad guys. I couldn't stand the lack of nuance in 99% of anything produced by Disney. But Japanese manga often had antagonists who had purposes and motives that were at least understandable, and sometimes as morally justified as the protagonists. In the cartoon show Starblazers, the villain of the first season end most shows by sending compliments to the brave crew of the Argonaught, because their courage and cleverness allows them to continue forward despite all the odds. If I ever had children, I'd want to expose them to that kind sportsmanship, rather than the good-versus-evil attitude of most USA created children's shows.

</comment><comment><USER14> I have to disagree with the assumptions here that there are no ancient good guy/bad guy narratives. David vs Goliath. Samson and the Philistines. Jesus against Death in Revelation. And that's just the Bible.

People's stories going through history follow all sorts of narratives, some that are hero/villain, some that are proverbial, some where some virtue is being exemplified by one or more people, and some evil exemplified by people or elemental forces and nature. There's nothing modern about it, it's just that you can make anything seem hazier or more opaque or you reduce it to a binary, depending on just how much you want to over analyze it.

<comment><USER15> I don't know the other stories well and Christianity is a big good-bad theme in itself with its hell and heaven but in David versus Goliath the giant never was the bad guy. He was just fighting for the other side and David killed him, that's it as far as I know.

<comment><USER16> I think that's a fair point. But otherwise, David is very much a "good guy" in virtually all of his stories.

King David's famous "Slice the baby in half, so that both 'mothers' can have half of it" is clearly a fight of good vs evil. The Evil mother doesn't care for the child, while the good mother cares deeply for the child. And that's how King David solved one child-custody problem... (not actually killing the baby, but by judging the reactions of the two 'mothers' to the potential act).

\</comment></comment></comment><comment>-----

The story of "Sodom and Gomorrah" is implicitly about evil. The town faces divine punishment because 10 good people couldn't be found. Its perhaps not "good guy vs bad guy", bit the concepts of "bad guy" are definitely explored.

<comment><USER17> >David is very much a "good guy" in virtually all of his stories.

The whole Bathsheba incident portrays him in a very negative light.

<comment><USER4> He also comes across as a fairly bad father (his kids rape, murder, and commit treason). That goes all the way back to taking multiple wives against explicit instructions. 1 Chronicles 21 describes David as being responsible for the death of 70,000 of his people.

</comment></comment></comment><comment><USER18> > Not only do people in ancient stories not switch sides in fights but > Achilles, say, would never win because his army was composed of the rejects > from the Trojans'.

It's not in the Iliad, but in the Aeneid one of the Greeks _pretends_ to desert in order to sell the story of the Trojan horse, and the Trojans do kindly accept him.

[https://en.wikipedia.org/wiki/Sinon](https://en.wikipedia.org/wiki/Sinon)

(However, it turns out that that he was still really loyal to the Greeks and the Trojans made a mistake by believing him.)

</comment><comment><USER19> The increasing prevalence good guy bad guy dichotomy is probably driven by the conatraint of the shorter forms. There's a great videoessay on why star trek movies are awful (all of them except I and IV have a villain, and only II pulled it off well) while the series deep space nine pulled off an incredibly complex villain by virtue that they had 7 years to develop his story arc.

Even Darth Vader, the example from the OP essay got complexity as the franchise spanned decades.

<comment><USER4> Good point. Good TV, shows like Breaking Bad, the Sopranos, and Mad Men use their longer format to take their time and develop more complex characters.

</comment></comment><comment><USER20> In a Song of Ice and Fire there are no good guys or bad guys. Each side has moral quandaries and a drive to survive. The only "Evil" characters are sadists, and there are quite a few. That is part of the reason the books are so engrossing.

People have lamented the Game of Thrones show has gone down hill after passing the books. I argue that is because the narrative has shifted to a war against the White Walkers, a clearly malevolent force. Instead of a mutlifaceted story about amoral factions, it's become Lord of the Rings. The story lost its spark and rejoined the common good versus evil narrative.

<comment><USER21> If the writers are any good, the white walkers will also turn out not to be clearly bad.

<comment><USER4> They are kind of described as out-of-control biological weapons the Children of the Forest used against the First Men. So it's possible they are more like a weapon of mass destruction (zombie virus) unleashed for complex reasons (war, survival) and less like a people.

</comment></comment></comment><comment><USER22> This is an American filmic convention. Maybe it's a holdover from the Hays Code, which explicitly mandated a good guy/bad guy structure by regulation.[1] Japanese anime and Russian literature do not follow it.

[1] [https://www.asu.edu/courses/fms200s/total- readings/MotionPic...](https://www.asu.edu/courses/fms200s/total- readings/MotionPictureProductionCode.pdf)

</comment><comment><USER23> Darth Vader was not the one who wanted to blow up a planet. In fact, he dismissed the idea of such a weapon as futile and silly. The followup movies in the original trilogy added layers to the question of good and evil, and the most recent film in the series explicitly questioned the entire premise. So maybe opening with Star Wars is not the best example.

<comment><USER4> > ...the most recent film in the series explicitly questioned the entire > premise.

Did it? The bad guys are still blowing up planets and murdering the people who love them.

</comment></comment><comment><USER24> Why is it a bad thing if the moral is usually that goodness triumphs? Seems better than arbitrary person triumphs.

Also, Macbeth is a story about one bad act dooming Lord and Lady Macbeth. So when is this shift meant to have taken place? In the Bible, the main guy goes around healing and feeding the sick and turning the other cheek. His life starts and ends with power hungry figures trying to kill him. Let's keep working backwards. Wasn't the Minotaur a pretty evil guy? Just sits there eating virgins until a hero selflessly, bravely, and cleverly manages to slay him.

I'm not convinced.

<comment><USER25> I think the point the author is trying to make is that there may be a connection between the "moral physics" (as she puts it) in modern folktales and the genocidal nature of war in the modern world. It seems like the intent of these stories is to nurture a sense of innate moral superiority in the audience, often for explicitly political purposes, as she mentions with the Robin Hood story. The protagonists in these stories never go to war except against people who are true villains and have no morals at all, so it's as if war draws a line between good and evil so clearly that it justifies wiping your enemies off of the face of the earth completely.

If the point of telling a story is to create a shared experience like a football game, where the audience roots for a certain side to win, then yes, it's better for the "good guys" to win. But why is that the point of stories? If we look at ancient folktales, it becomes harder and harder to root for the good guys, if there even are any. If there is a moral battle, it's between two individuals, not an army of good and an army of evil, like in Star Wars or Lord of the Rings.

It's a pretty broad, sweeping claim to make, but I think she brought enough historical examples to make a strong case. We can't go back in time and ask the ancients themselves.

</comment></comment><comment><USER26> Huh. Once upon a time, as a young boy, I had dreams of becoming a writer.

A couple of years ago I actually started writing what might have become a novel. But I remember that back then, it changed the way I watched movies and TV programs. And I started having on an almost regular basis these epiphanies of things about writing that people can learn in college in the USA. I do not remember what movie, series, scene or character triggered that one, but the "biggest" one I got was that _in real life, Good and Evil exist only as approximations_. Asymptotically, if you will. (Almost) _Nobody is purely good or evil._ And even the people we consider evil, tend to see themselves as good. And they consider _us_ evil.

Sorry to pull a Godwin in the first round, but consider a prime example if ever there was one: Even Hitler did think of himself as basically good. He ordered unspeakable atrocities, but from his point of view, it all served the greater Good and was therefore justified. The question of how somebody could arrive at such a fucked up value system will probably never be answered to anyone's satisfaction.

Or Captain Ahab. He has a twisted moral compass, but again, from his point of view, he is doing "the right thing"(tm). Or Major Weissmann, Dominus Blicero. And often enough it is just egotism, "I want to be super-duper rich", or "I want to rule the _ENTIRE_ world!" And what a crap job that would be! Does nobody ever think of that? No wonder terrible villains fail to conquer the planet, they are idiots. But to get a villain with depth - or at least the illusion of it - we need somebody who has another goal than just petty materialistic things or power over people. OH!! Watchmen!!!

So that particular epiphany taught me that a good (meaning "halfway believable") "villain" never does anything "evil" for its own sake, but from their own perspective, the villain does what needs to be done, terrible as it may be, because it serves a higher purpose, whatever that may be. Although I wonder about Judge Holden, he was an awesome antagonist, but I think he would have considered "good" and "evil" irrelevant. Anton Chigurh, too. He is possibly the closest anyone has come to creating a character that is pure evil. Then again, neither of these two has depth.

</comment><comment><USER27> This article is embarrassingly wrong. In _every single_ interpretation of the monomyth, we have a hero that strives to be victorious over some form of evil -- often times at great cost. But Ms. Nichols is being disingenuous by cherry- picking The Iliad (which is politically complex) -- why not Beowulf, or The Odyssey -- where we have _very clear_ cases of antagonists and protagonists. Also, the argument that moral face-offs are "a recent invention that evolved in concert with modern nationalism" is so unequivocally wrong, if you said it, you'd be laughed out of an undergraduate English class.

Morally relativist and historically revisionist BS.

<comment><USER28> Well, because _Beowulf_ is a Christianized retelling of earlier more pagan versions adding in moralizing (and of course involves a fair bit of nationalism/ethnicism although most people tend to ignore the allusions to the backstories and dynasties because it's hard to keep straight even if it's equally hard to miss that Beowulf dying is considered very ominous for the survivors), so it follows the same pattern as King Arthur discussed in OP: what was originally a relatively neutral set of stories about a warrior fighting monsters then becomes morally inflected - Grendel is not just a bandit or some monster, but he's a descendant of Cain, the first murderer and fratricide, inimitably evil and opposed to all mankind and core Anglo-Saxon moral values like hospitality and feasting which he cannibalistically perverts, and his dam can only be slain by a weapon from Genesis.

<comment><USER29> Isn't any form of "monster" just a cheap "this thing is evil" marker?

<comment><USER28> I don't think so. Are the monsters in _Shadow of the Colossus_ evil? Are Humbaba or the Bull of Heaven in Gilgamesh evil? After all, Humbaba may have been 'terrible' but that was his assignment from the gods. (Was Satan the tempter in the Book of Job Evil with a capital E?) They may be dangerous to humans and destructive, but they are merely doing their job or following their nature. It might be better to refer to them, Rowlingesque, as 'fantastic beasts' rather than 'monsters' to avoid the loaded connotations.

<comment><USER6> Are Jason, Freddy and Michael Myers just monsters? What about the monsters and demons on Supernatural that the Winchester brothers kill because they hurt people?

At what point is something a monster that does bad versus a bad guy that does bad?

<comment><USER28> Let me try again with an even more mundane example. Is a tiger an evil monster just because it may eat people? At what point is a tiger just an animal which does something people don't like vs a _bad_ guy that does _bad_? How about a landslide? What would it take to make a landslide _evil_ with a capital E?

<comment><USER6> In context of the article, it's the myth of good guys versus bad guys instead of gray characters. That means these characters have moral choices to make. A tiger doesn't understand morality, while Kylo Ren and does, but chooses to do join/stay on the dark side, which means causing a lot of people harm, which he's fully aware of.

We don't hold a tiger morally responsible, while most of the beings on the tv show Supernatural would be, since they're capable of making moral choices. Even the ST Borg understand morality, although they consider it irrelevant. But the Federation would probably hold them responsible, if they had the power to put the Borg Queen on trial, like they ended up doing with the Changeling lead female character from the Dominion.

</comment></comment></comment></comment></comment></comment></comment><comment><USER30> It's a fine essay, right up to this point: "The ostensibly moral face-off between good and evil is a recent invention that evolved in concert with modern nationalism – and, ultimately, it gives voice to a political vision not an ethical one."

What utter drivel.

The moral face-off between good and evil is core to a great many religions, most notably Christianity. Concepts of right and wrong, and the clash between them, has formed the core of many strains of philosophical, religious, cultural and literary thought for 2,500 years, at least.

Such thought, particularly Christian thought, has influenced the literature of Western Europe for many centuries. It's hard to find a writer who was not at least aware of God-vs-the-devil story lines.

Sorry, professor, but western civilization has existed for much longer than you imagine. Not everything is political, ok?

<comment><USER27> That same quote made me roll my eyes. You would literally be laughed out of an undergraduate English class if you made that claim. I guess Beowulf and The Odyssey weren't moral face-offs?

<comment><USER31> >I guess Beowulf and The Odyssey weren't moral face-offs?

No, they aren't.

What's the "moral face-off" in Beowulf? He goes to help the King of the Danes defeat the monster Grendel. Then he returns home to become king and eventually dies fighting a dragon. Who is the "bad guy"? It's not a moral lesson about good and evil, but about virtues and qualities like bravery important to Anglo-Saxon society.

Same with the Odyssey. What's the "moral face-off"? Who's the bad guy? Odysseus has to wander because he had angered the god Poseidon, and goes through a series of adventures and ordeals as a result. It's not a moral struggle of good and evil, it's again a tale about important qualities like obedience to the gods.

Neither of those stories are "good guy vs. bad guy" stories in any way.

<comment><USER27> _Really?_ Why is Grendel characterized as "evil" and a "fiend in hell"? Why does Beowulf exemplify traits of courage, bravery, and self-sacrifice? Why is Beowulf already famous for his "good" and "glorious" deeds?

I was re-reading the intro, and ran into this gem[1]:

        105
    	the wretched creature      ruled for a time
            since him the Creator      had condemned
    	with the kin of Cain;      that killing avenged

Totally forgot about this _literal_ reference to Cain (of Cain and Abel fame). I mean, you're about as wrong as wrong gets.

[1] [http://www.heorot.dk/beowulf-rede- text.html](http://www.heorot.dk/beowulf-rede-text.html)

<comment><USER31> Nope. You're confusing "antagonist" with "bad guy". I'm fact, much of your confusion, and the confusion in the other comments, stems from conflating "protagonist" and "antagonist" with "hero" and "villain".

Beowulf is a tale of a brave warrior vanquishing monsters, not a struggle of good and evil, anymore than a story about someone hunting a wolf described as "monstrous" or "evil" is a moral tale.

It's similar to what the author points out about the Arthurian stories. The original French tales were about brave knights fighting beasts and monsters to display their strength and bravery. It was only later versions that transformed them into moral paragons fighting representations of human weaknesses and evils.

I also note you conspicuously forgot the Odyssey in your response.

<comment><USER27> >Beowulf is a tale of a brave warrior vanquishing monsters, not a struggle of good and evil, anymore than a story about someone hunting a wolf described as "monstrous" or "evil" is a moral tale.

Beowulf is a story about Beowulf displaying favorable virtues by overcoming a bunch of challenges. The Odyssey is a story about Odysseus displaying favorable virtues by overcoming a bunch of challenges. These virtues include justice, honor, courage, honesty, prudence, and so on -- this is the GOOD. The challenges include monsters, hardships, annoyed gods, and so on -- this is the EVIL.

Your analysis is highly reductive. I guess the New Testament about a cool dude that made 12 friends.</comment></comment></comment></comment></comment></comment>


The meeting that showed me the truth about VCs - <AUTHOR> https://medium.com/@tomerdean/the-meeting-that-showed-me-the-truth-about-vcs-and-how-they-don-t-make-money-ab72b52b50cd <comment><USER2> That's been true since about 2000.

From the 1970s to about 2000, venture capital firms as a class were profitable. Since 2000, venture capital as a class has been a lose. What keeps this going is that each VC thinks they're better than average. Most of them are wrong.

Venture capital in Silicon Valley used to be about finding someone who had a good technical idea, and getting them enough money to make a working prototype or a small production run. New technology and intellectual property were the key. That was a good business.

In the first dot-com boom, this changed. Technology wasn't the issue. It became about buying market share to achieve a "first mover advantage". That resulted in a focus on growth and a race to out-spend the competition. There were winners and losers, but in the end, mostly losers.

In this, the tail end of the second dot-com boom, we see the same pattern. The big difference this time is that nobody is going public. There's just round after round of private capital. The extreme case is Uber, with a valuation greater than General Motors while still losing money at a huge rate.

This is fueled by low interest rates. There's so much capital sloshing around looking for yields that too much money is being funneled into marginal companies. That's why there are no IPOs; it's cheaper to borrow.

<comment><USER3> "What keeps this going is that each VC thinks they're better than average"

Another thing keeps them going is that the VC Partners get a nice salary for 10 years. Many of them will make more money than many C-level executives. I don't see a downside in being a VC.

<comment><USER4> The downside being the fund investors of the VC firm.

</comment></comment></comment><comment><USER5> I find this argument inadequate. The conclusion may be true (that most venture funds lose money) but this article does a poor job of elucidating why this may be the case. There are many directions we can approach this from.

First, to simplify, instead of talking about an A and B and having 25% ownership after these rounds. Let's assume $10M is invested in the A for 25% ownership ($10M on a $30M pre-money valuation / $40M post-money.) Of course if each of these companies exits at exactly $50M and money just sits there for 10 years then the returns will be garbage. But in reality if you're investing at a post-money of $40M, very few of your companies will exit at $50M.

What actually matters here is what happens with money after exits. If money is returned to investors immediately, then what we want is to solve:

$100M * (1.12)^Y <= .25 * (exit price)

For example, if ONE company goes from $40M post and exits at $562M after 3 years, and then this money is distributed back to investors, then investors receive .25*$562 = $140.5M as a return, which is more than 12% per year for these three years ON THEIR ENTIRE $100M investment. (This assumed no subsequent dilution but you get the idea.)

If money isn't returned directly to investors then it needs to be re-invested. The point is, of course your venture returns will be poor if you just place your cash under a mattress post exits. The math becomes much more favorable for the VCs with realistic time assumptions.

<comment><USER6> Evidently, a $10M investment that compounds at 12% p.a. will return $31M after 10 years.

The article however shows that dilution of that initial "round A" investment by subsequent rounds of capitalization needs to be taken into account (as well as when such a "round B" occurred, but that isn't addressed). It is this dilution that reduces the returns, requiring one or more "unicorn exits" to make the hoped for returns from the initial investment

</comment></comment><comment><USER7> My biggest criticism of this analysis is his wild overstatement of the benchmark return. Where in the world do you get 8% safely in equities and/or real estate? It's more like 3-5% because the world is awash in capital with precious few places to put it into play.

Which in a way would support his main point more strongly: venture returns are inevitably coming down from 12% to 7 or 8% annually.

<comment><USER8> Over the long term, it's not hard to find. You can get 8% annually by buying a broad based index fund and holding. Vanguard Total Stock Market would've worked over the past 10 years.

Beating the market is tough.

<comment><USER9> Vanguard Total Stock Market:

\- 76.7% over the last 10 years (5.87% annualised)

\- 90.0% since inception 15 years ago (4.3% annualised)

That is very far from 8% - at that rate with compound interest you'd have gotten 217% of returns from VTI over 15 years.

<comment><USER10> Also future returns from here going forward a few years are looking worse than that. Stocks are expensive by historical standards at the moment.

<comment><USER8> Look back 50 years and you'd have been saying "stocks are expensive" every few years, missing out on massive returns. Invest for the long term and don't worry about it. Today's expensive is tomorrow's cheap.

</comment></comment></comment></comment></comment><comment><USER11> great post but it misses several important dynamics (in addition to subtler effects): 1\. LPs invest in multiple VCs - they have their own portfolio effect. 2\. not even VC investment is equal -- there's 10-50x difference between their largest and smallest bets. 3\. there's non-financial benefits to being an investor in Uber (and doubly, for being able to say it publicly). There's no benefit in saying you're an investor in the stock market. Subtly, if you're a top VC and NOT an investor in enough Uber's (and only investing in unknowns) then LPs and entrepreneurs don't take you seriously.

These effects combine to dampen the effects you mentioned. Consider FriendFeed - small $50M acquisition by Facebook, but given its non-financial impact, do you think the VCs regretted the investment? They'll make their $$$ somewhere else, perhaps the entrepreneur's next startup... which turned out to be quip, acquired for $750M last week...

<comment><USER12> LPs? Can you clarify that abbreviation?

<comment><USER13> Limited Partners

</comment></comment></comment><comment><USER14> I don't quite agree with the math and illustrations.

If they put in 10M, get 25%, and exit is at 50M, that approximately zero growth over valuation (probably down from series B) This is why VCs don't always take series B, and series A is much smaller so they can place more investments and see which ones are worth it. A 100M series A fund with only 10 deals seems unrealistic.

Six years is not enough to IPO for most startups. Much less 4, if the A comes towards the end of the placement phase. That's not a change that helps anyone.

</comment><comment><USER15> > Screw traditional investors, move to the "cloud". We should be able to find > better access to capital that isn't looking for 12% returns. Can't we find > investors willing to get a 8% stable yield in a $1B+ fund diversified over > hundreds of startups?

8% return means returning 2x in 10 years. The author /already told us/ that 85% of venture funds are unable to do even this. How will this "cloud" diversified fund do better than 85% of funds?

</comment><comment><USER16> VCs are just doing the same investment strategy that record labels used to do... before file sharing decimated their mechanical royalty agreements. For every Britney Spears, you had 10+ other acts that could barely produce a break-even single. It's highly Pareto-driven.

Combine that with the fact that 2016 has only seen 7 tech IPOs...

And the fact that investment in sub-25M cap is dead thanks to Sarbane- Oxley/Basel III...

And GDP growth forecasts being cut by the IMF...

The only thing propping up the tech market right now is the fact that Apple, Microsoft and Google hold 23% of all U.S. corporate cash. Exit strategies pivot around whatever initiatives these three players choose, which means they, in essence, control the direction of tech innovation without having to acquire a single business. VCs will automatically organize their investments based on the acquisition habits of those three players in the hopes they get caught in the net as well.

<comment><USER6> What you describe is exactly what occurs in UK biotech. Many drug-oriented biotechs aim no more than to please the big pharma companies...

</comment></comment><comment><USER17> So why isn't there an organization that distributes the risk of startup failure across many companies (kind of like how insurance distributes the risk of catastrophe)? That way, one unicorn would satisfy everyone, and all the startups that failed wouldn't matter. (I say this as someone who knows nothing about startups and VCs of course...)

<comment><USER6> That's precisely what VCs aim to do.

<comment><USER18> Yup, that's literally the definition of VCs. Instead of a single LP having to choose one startup to invest their $10M into, they buy shares in the dozens of startups that the VC then invests in. The risk and reward is shared between all the LPs in that fund.

</comment></comment></comment><comment><USER19> 8% return in equities market? Wow... I did not know what I can just invest money in the stock market and get rich...

The 8% annual return is impossible to achieve (BTW, that is number what sharks tell to "retail investors"). Between 1998 to 2008 the annualized return on SP 500 was about -1.35% (yes negative and there was huge boom during 2000s). And that is excluding all fees.

I think 8% would be an excellent return for limited partners who invest into VC funds...

<comment><USER20> Yes, but that's because you cherry-picked the decade with the lowest return.

Over the past 50 years, the average return on investment for 10 year periods has been [1]

        1956 - 1966    9.21%
        1957 - 1967    12.81%
        1958 - 1968    9.91%
        1959 - 1969    7.74%
        1960 - 1970    8.08%
        1961 - 1971    6.97%
        1962 - 1972    9.83%
        1963 - 1973    5.97%
        1964 - 1974    1.29%
        1965 - 1975    3.31%
        1966 - 1976    6.66%
        1967 - 1977    3.65%
        1968 - 1978    3.24%
        1969 - 1979    5.92%
        1970 - 1980    8.50%
        1971 - 1981    6.55%
        1972 - 1982    6.70%
        1973 - 1983    10.56%
        1974 - 1984    14.61%
        1975 - 1985    14.12%
        1976 - 1986    13.62%
        1977 - 1987    15.09%
        1978 - 1988    16.13%
        1979 - 1989    17.34%
        1980 - 1990    13.80%
        1981 - 1991    17.41%
        1982 - 1992    16.08%
        1983 - 1993    14.85%
        1984 - 1994    14.32%
        1985 - 1995    14.83%
        1986 - 1996    15.23%
        1987 - 1997    17.90%
        1988 - 1998    19.04%
        1989 - 1999    18.05%
        1990 - 2000    17.30%
        1991 - 2001    12.81%
        1992 - 2002    9.26%
        1993 - 2003    10.96%
        1994 - 2004    11.95%
        1995 - 2005    8.98%
        1996 - 2006    8.33%
        1997 - 2007    5.84%
        1998 - 2008    -1.36%
        1999 - 2009    -0.95%
        2000 - 2010    1.38%
        2001 - 2011    2.88%
        2002 - 2012    7.03%
        2003 - 2013    7.34%
        2004 - 2014    7.61%
        2005 - 2015    7.25%

So yes, you historically could just invest money in the stock market and get rich, and you will probably continue to be able to do so.

[1] [http://pages.stern.nyu.edu/~adamodar/New_Home_Page/datafile/...](http://pages.stern.nyu.edu/~adamodar/New_Home_Page/datafile/histretSP.html)

<comment><USER9> That was back when both inflation and interest rates were higher. Not necessarily comparable.

(Why do you think that many experts pick 10 year maturity bonds with a 1.5% coupon over stocks?)

</comment></comment></comment><comment><USER21> Often feels like everyone is a VC today.

</comment><comment><USER22> If you don't make enough money when every single one of your portfolio companies exits for $50M, then you're doing it wrong.

<comment><USER23> That is a horribly naive analysis. Did you even read the article? $50M can be a great outcome or a terrible one depending on the circumstances. What valuation did you buy in at? If you bought in at $100M, a $50M exit means a 50% loss. How much time did it take to exit? A 50% return after 1 year is a very different outcome from a 50% return after 10 years.

<comment><USER11> actually, read the post - the point isn't about ROI, but absolute dollars. A VC (human) can't do 25 deals because they can't sit on that many boards.

<comment><USER14> First: yes you /can/

Second: you don't /have/ to have a /personal/ board seat

Third: funds typically have multiple partners

If there is one lead and five follows in a series A, do you really think there are six new board seats created?

</comment></comment></comment></comment><comment><USER24> If you read this before the article it may help: I always thought that VC meant "Venture Capitalist" or referred to the capital the investor invested (Venture Capital), this article doesn't mean either of those things, rather, it means the company that has accepted this money.

<comment><USER25> You may be doubly confused. VC here does refer to venture capital firms - sometimes they're no more than a few people running the firm, in which case you could refer to the individuals as venture capitalists. These firms invest in startups, businesses which create a product. Their job is to "choose winners." But where do the individuals making up a VC firm get that money to invest? It's very rarely their own wealth. Instead, they get it from LPs - endowments, pension funds, big banks, family offices (which manage multi- millionaires' money), all of whom want to get on the Silicon Valley wave. And those LPs certainly expect to get better returns than if they just put it in the bank, or into the stock market. So there are two levels at which a "company" must "raise" money - the startup from the VCs, and the VC from the LPs.

<comment><USER24> Ah. Thanks for the clarification here.</comment></comment></comment>


AT&T iPhone Tethering to Cost $55 Per Month - <AUTHOR> http://daringfireball.net/linked/2009/06/18/appmodo-tethering <comment><USER2> Well, as the commercials say, it is the "Fastest 3G Network in the U.S." that you're paying for (Eye Roll)

Seriously though I think this is one practice that people should protest. I have no problem with AT&T charging for the equipment itself but if they advertise "unlimited data" than you should get "unlimited data" regardless of what screen it's on.

Don't get me wrong, I see their side of it. If people can tether they'll use more bandwidth which will cost AT&T more. So they want to charge more. I get the business reasons on their side.

But last I checked it was still a crime to advertise fradulently and that's what I consider their "unlimited data" plan to be. Just because the Cellular companies have banded together to make this pricing the norm doesn't make it right.

<comment><USER3> I think the argument is "Unlimited Data for the iPhone" - not for a laptop connected to it. If that is the case, I wish they would make it explicit.

<comment><USER4> > Furthermore, plans(unless specifically designated for tethering usage) > cannot be used for any applications that tether the device (through use of, > including without limitation, connection kits, other phone/PDA-to computer > accessories, BLUETOOTH® or any other wireless technology) to Personal > Computers (including without limitation, laptops), or other equipment for > any purpose

That's not explicit?

<comment><USER3> It is, and I stand corrected. When I went to check the "Data Plan" feature, I saw the following text - which didn't note the no-tethering. I should have drilled down.

[http://www.wireless.att.com/cell-phone- service/packages/pack...](http://www.wireless.att.com/cell-phone- service/packages/packages-details.jsp?q_package=sku3790236&_requestid=108919)

\---SNIP---- Feature Please note: Data plan for iPhone is required for the life of your iPhone service and cannot be removed in the future. Data Plan for iPhone

$30.00/month

Data Plan for iPhone includes unlimited data in the U.S. Access rich HTML email and desktop-level web browsing, as well as Visual Voicemail to listen to voicemail messages in any order you choose.

Please note: AT&T is Apple's exclusive carrier partner for iPhone in the United States. An eligible data plan for iPhone is required. This data plan covers data usage in the United States and does not cover international data usage and charges. If AT&T determines that you are using an iPhone on your account without an eligible data plan, AT&T reserves the right to add an eligible data plan to your account and bill you the appropriate monthly fee. \---SNIP----

</comment></comment></comment></comment><comment><USER3> Seems pretty reasonable in comparison - I pay $60/month for my Sprint USB 1xEVDO Dongle for 5 GBytes.

Now, if that $55 includes data for the iPhone as well, then I'll be very interested in seeing how ATT's HSUPA network compares to sprints 1xEVDO in the Bay Area - But I'm guessing that would be too good to be true.

</comment><comment><USER5> You know, I don't have an Iphone. I have an HTC that does ABSOLUTELY everything the IPHONE does for less.

I pay $45 a month, which includes unlimited data, sms, and calls. I get tethering for free as well! Its not the Tethering your paying for. Its the Name brand.

<comment><USER6> I've been looking for a new plan. What phone/carrier do you have?

<comment><USER7> I have a G1 from T-mobile (Arizona, USA). I'm pretty sure all G1 plans come with unlimited data; you pay more or less based on text messages and call minutes.

I get tethering via the Proxoid app. It does not require being root. It has some downsides: it's not a super-simple one-click thing (not that I care, but some might), and I haven't got it working for https yet.

But otherwise it is really good. Made getting stuck at LAX last week less annoying.

<comment><USER8> T-Mobile in the Phoenix area is really good. I am getting pretty tempted to jailbreak my iPhone and go back to T-Mobile. Plus, it will be nice to use my dev G1 with 3G speeds when I switch over to it.

</comment></comment></comment></comment><comment><USER9> I used to tether my laptop to my Sony Ericsson's GPRS connection K750i via Bluetooth - there weren't any monthly fees or other faffing about, I just paid for what I used (I think it was by the Megabyte in those days).

Why do they have to make it complicated?

</comment><comment><USER10> Tethering is free (and currently available, I tried it out) on Optus in Australia. I don't know the situation with the two other Aus iphone carriers.

<comment><USER11> Really? How did you get it to work? When I tried, I got a popup "contact your carrier".

The SMH is reporting that it'll be $10/m from 22nd June ([http://www.smh.com.au/digital-life/mobiles/optus-iphone- teth...](http://www.smh.com.au/digital-life/mobiles/optus-iphone-tethering- comes-at-a-price-20090618-cizn.html)), and the Optus FAQ says it will announce the price on that date ([http://personal.optus.com.au/web/ocaportal.portal?_nfpb=true...](http://personal.optus.com.au/web/ocaportal.portal?_nfpb=true&_pageLabel=Template_wRHS&FP=/personal/mobile/iphone3G/faqsiphoneossoftware&site=personal)).

<comment><USER12> Go to <http://help.benm.at/au.php> on your iPhone.

</comment></comment></comment><comment><USER13> How do they know your tethering?

<comment><USER14> I wonder if people who paid for Netshare when it was available in the App Store will get billed for tethering if AT&T goes after unauthorized tetherers.

<comment><USER12> Netshare is a hack, a pain to set up, and when I tried it was far slower than tethering is now. I bought the app, tried it, and never used it again.</comment></comment></comment>


What's so bad about processed foods? Scientists offer clues - <AUTHOR> https://www.apnews.com/c06a1200807c4b82a03452d08d480692 <comment><USER2> The article admits the study is small to the point of not really being worth anything and provides no other information other than idle speculation.

<comment><USER3> This article, and the study are relatively small... that said there are quite a few studies and information on specific processed foods not being so great. From refined seed oils to heavily blanched and processed modern varieties of wheat. Of course, there's also the unnatural things we feed ourselves and are livestock to consider. Let alone the huge amount of refined sugars taken in by society as a whole compared to a couple hundred years ago.

Time and time again, looking at various differences in varieties and concentrations of some of the things we eat today vs. how it was done with heritage varieties a century and a half ago are very, very different in terms of the effects on the body.

What I feel it comes down to, is we've been able to effectively eliminate starvation and famine in most of the world... now, I feel we need to start thinking about what is actually healthy, what isn't and it goes way beyond any specific agenda.

There's also the fact that many people will react differently to a great number of factors. Keto works well for many, but there are some where it's very bad/dangerous. Same for vegetarian. It all really varies and we're only at the very tip of the iceberg in terms if food knowledge and how it relates to health.

Unfortunately there are _way_ too many biases that are based more on faith than science. I don't think that a general advice of eating less refined, less processed foods is a bad idea all around. The majority of what we eat today are not things that were around for even 100 years in terms of variety, refinement and proportions. That seems like a long time, but on evolutionary terms, it's the blink of an eye.

</comment></comment><comment><USER4> Is there a standardized definition of what is considered "processed"?</comment>


Ask HN: Where to report fraud phone calls? - <AUTHOR>

Today I got a robo call asking me to visit Verizon78.com to save $78 off of my next bill. The web page looks pretty good, but I am not a Verizon customer, so I am sure this was a fraud phone call. I can report it since I am not on the do not call registry, but I am not sure if that is the correct place to deal with this.<p>Can anyone with better web skills than me also pick apart their web page? All of the links look like they point to the regular verizon site, so it is a convincing fake page. <comment><AUTHOR> The page now at least comes with a warning from google when I try to enter. I think in the future I will report it there too as that might be one of the methods that will help others the fastest.

[https://www.google.com/safebrowsing/report_phish/](https://www.google.com/safebrowsing/report_phish/)

</comment><comment><USER2> [http://whois.domaintools.com/verizon78.com](http://whois.domaintools.com/verizon78.com) Looks pretty fishy. Report the call here [https://www.ftccomplaintassistant.gov/](https://www.ftccomplaintassistant.gov/)

<comment><AUTHOR> When I first searched for the whois listing it was not found, and several registrars showed it as available. It was just registered today.

It also seems like I reported it to the correct place. The FTC complaint assistant pointed me towards where I reported this as part of the do-not-call registry when I worked through their process tree.

I am sure it is no accident that this was all setup and started on a weekend when most of the federal agencies will take at least 48 hours to get a report and act on it.

</comment></comment><comment><USER3> I got the same call from 800.922.2222 south Carolina state government is what my caller ID said. But it was same message. Save 78 on next phone bill.</comment>


Ask HN: How do you learn a new concept/programming language/ framework? - <AUTHOR> <comment><USER2> One of my secrets is to load reading material onto a tablet and then read it while doing cardio at the gym. This is very good for things for which book learning is effective.

If you want to use, say, maven or spring, you will completely destroy yourself by looking up answers on stackoverflow or google and not understanding how the system works. If your team does it for a few years they will be up sh1t creek and have to pay somebody like me $200 an hour.

Read the manual from end to end a few times and then do it again and you will find systems like this are not so bad when you understand them.

</comment><comment><USER3> I use it, and then use it some more. I start with a specific objective and get that right. After that it's just a matter of getting familiar with the specific syntax.

</comment><comment><USER4> I watch a video/course, then do some exercises to get the feeling of it.</comment>


Kids and Teens Books of 2019 - <AUTHOR> https://fivebooks.com/category/best-kids-books/ages-9-12/ <comment><USER2> All book links are shrouded affiliate links (tag=fivebooks001-20).

<comment><AUTHOR> Please, can you elaborate on your findings? Thank you.</comment></comment>


Why Aren't More Users More Happy With Our VMs? Part 1 (2018) - <AUTHOR> http://tratt.net/laurie/blog/entries/why_arent_more_users_more_happy_with_our_vms_part_1.html <comment><USER2> It would be better if VM comparisons included JSC rather than, or in addition to, V8. JSC tends to outperform V8 so if you find a pathology in V8 it's just not so surprising. It would be more interesting if you found a pathology in JSC.

I think that the use of small benchmarks obscures what's going on. The VM is trying to win in the average. It's like a professional gambler. Observing that the VM did something dumb for a program is like observing that a professional gambler lost a bet. That's not interesting. In a game of chance, even a really great strategy will have its outliers.

I think that to understand the quality of a VM you have to throw millions of lines of code at it and see if the optimizing JIT can consistently produced speedups or at least produced speedups more often than not using some aggregate metric. As someone who studies the behavior of JSC on million line code bases, I can tell you that a pretty good outcome is if only a small number of functions experience an "upside down" effect from optimization and ends up running slower over time.

Finally, the whole search for a methodology to pinpoint warmup is broken. It's pure brain damage. VMs need to be fast even for small programs that don't have a chance to warmup. Startup time is absolutely important. So it's a methodological antipattern to even try to find the warmup.

The questions worth asking are:

\- for some program, how long does it take to run that program. Start to finish. No ignoring warmup.

\- how long does it take to run some very long program or the average running time of a small program averaged over many iterations

\- some percentile of behavior, like the 99th, to get an average of the janky behavior.

Ideally you measure all of those things and include both short running and long running programs.

This tells you how good a VM is.

If you're doing math or methodology to identify the warmup point then you're effectively biasing your experiment to forgive VMs for bad behavior so long as that bad behavior happens early. Nothing could be sillier. Users care about the perf of their VMs at startup not just in steady state.

Anyway, that's the way I like to do optimizations in JSC.

<comment><USER3> > \- for some program, how long does it take to run that program. Start to > finish. No ignoring warmup.

This methodology likely comes from Java, which has long-running server applications. "How long does it run" is often "until someone hits ^C". Here, startup cost can be slow as long as the peak performance is fine. It's accepted that the first minute or two of the server are slow, but that's small compared to the month or so that the server will be running for.

> This tells you how good a VM is.

I think papers like this approach it from the wrong angle. I don't care about the VM's theoretical peak performance. I care about being able to measure and track performance in a reliable way. Put simply, I'm fine with bad codegen as long as I can consistently measure it. Feel free to improve it, but adding to _sometimes_ give me good codegen, unreliably, is much more frustrating than bad codegen. But this seems to be the way the VMs are going, with things like probabilistic profiling.

If I refactor my code and replace for(let i = 0; i < L.length; i++) with for(const i of L), what's the cost? Will performance go up or down? We don't have tools or metrics to handle that right now. How can I ensure my codegen is good won't regress?

I work on a particularly demanding website in my free time ( [https://noclip.website/#smg/AstroGalaxy](https://noclip.website/#smg/AstroGalaxy) , unfortunately won't run in WebKit due to missing WebGL 2 ), and performance varies drastically from Chrome release to release, and I do extensive testing with node.js to make sure that I'm getting good codegen.

<comment><USER2> I know that the warmup skipping comes from Java. It was a mistake there. Saying that it's because Java is for servers is a lame excuse and may be getting it backwards - maybe Java only succeeded on servers because all the tuning ignored warmup.

I hear ya that having tools would be great - but the best speedups do come about from probabilistic methods so it would be weird to rely on whatever a profiler told you.

</comment></comment></comment><comment><USER4> The reality is... it's been decades and while JVM languages can be pretty fast, I have yet to see many non-contrived examples where the VM based language consistently outperforms competently written but not heavily optimized C++. Even then, extensive tuning is done to the VM. Heck, with the advent of Go you now have another great higher level language that consistently outperforms Java/Scala, has top notch garbage collection, and doesn't make you deal with a bloated VM.

JIT is very nice in theory. It's great in certain applications (eg; in very tightly scoped domains like accelerating linear algebra). Its proponents always talk about how it allows for optimizations that would be too costly or difficult when doing AOT compilation. But the operational complexity to get it to actually perform at that level on a production language VM (eg; oracle's JVM) is often its undoing.

<comment><USER5> According to The Computer Language Benchmarks Game, Go performance is in the same ballpark as Java, and sometimes several times slower:

[https://benchmarksgame- team.pages.debian.net/benchmarksgame/...](https://benchmarksgame- team.pages.debian.net/benchmarksgame/fastest/go.html)

<comment><USER6> Honest question: isn't the benchmarks game unrepresentative because it encourages submission of heavily optimized non-idiomatic programs?

Edit: looked at the source, which is easily accessible. The Java examples are reasonable (if slightly performance-minded, but nothing shocking).

</comment></comment></comment><comment><USER7> It occurs to me that, in practical terms, the "steady state" of performance with the increasingly large blobs of JavaScript we find littered throughout the web tends to impact the user more than other JITs. As the user navigates from page to page, the VM is reset, a fresh set of minified blobs is downloaded and JITed, and a core or two is pinned to do so. That translates pretty directly to a hotter phone, less battery life, and a frustrated user. Sure, when your JVM startup is 0.1% of the runtime of your program, it's not as big of a deal, but when it's more like 20% of the time a user spends using the program (their web browser), it's a lot worse, and has slim potential for improvement.

<comment><USER8> It has been really frustrating watching the frontend-web evolve. Take Jira for example, the platform is written in Java yet all my time is spent waiting for all the widgets to jiggle their way into existence. No matter how fast your server is, if you have to do 10-20 network requests to hydrate your frontend architecture the network time alone is going ruin your perceived performance. Your server could deliver sub 5ms response times, with 50ms Time to First Byte on the initial request, and it would still feel like wobbly molasses. The JVM is the least of their worries.

</comment></comment><comment><USER9> Haven't we learned that VMs aren't worth it? The amount of engineering resources it takes to design a half-way decent one is just absolutely staggering. We all know that theoretically they can be faster than native code, but how many people have actually experienced that? The costs are too high: the warm-up costs, the engineering costs, the complexity costs. If every single language just generated LLVM IR and compiled it, we'd be in a lot better place and we'd probably have better, or at least more predictable, performance.

Like more resources have probably been put into the JVM than any other VM or compiler on earth and what has it given us, exactly? Performance is still worse than C and with homogenized operating systems, as well as the move towards the web, the portability guarantees don't feel very important. If I'm missing something, please tell me!

<comment><USER10> The same can also be said about GC. Every year somebody is promoting a new Incremental Realtime Generational garbage collector that is _almost_ acceptable for serious work, if you ignore enough real-world overheads. People writing code that has to manage resources besides memory have found that, given the right core language facilities, managing memory too is no bother, but managing other resources while fighting GC is intolerable. Of vourse you need destructors.

Meanwhile, C performance has not been a worthy goal in decades. Getting "as fast as C", if you could get there, would still leave you firmly in second or third place. Thr computers are not getting much faster anymore, but the problems are getting much bigger and the networks much faster, so performance matters more each year than the last.

<comment><USER11> That's a True Scotsman fallacy. I guess all those millions upon uncountable millions of lines of Java, Erlang, C#, etc code in production is not serious? Because it's running in a VM?

<comment><USER12> What percentage of those lines run with an incremental realtime GC?

The only such Java GC I know of is part of the Azul Zing VM.

<comment><USER13> I believe that's why the poster referenced the "No True Scotsman" fallacy. It entirely depends on your definitions and you can keep endlessly narrowing your definitions. All of them GC, right? All of them are doing some form or another of incremental, right? (Some in all generations, others only in some generations, based on balancing and tuning needs.) Do all of them have realtime characteristics? Yes and no. None of them are allowed to stop the world, certainly, but does that mean that all of them or any of them can be called "realtime"? It's a semantic hedge forest.

</comment></comment></comment></comment></comment><comment><USER14> Ugh at risk of being the grumpy old programmer: jit code is just never going to touch actual handwritten native code in performance. It's been like 50 years. If we care about performance we need languages for it.

<comment><USER15> I mostly agree, but compilers intentionally don't explore every optimization path to save compilation time, and a JIT is able to trace the program for real data and find places that could benefit from additional attention.

I don't think JITs are the only way to address that trade-off in compilation time vs runtime performance metrics, and whether their benefits are worth their other costs is an interesting, program-dependant question, but they have strictly more information available than a naive compiler and can potentially use that to make better decisions.

<comment><USER16> Any languages explore both? Compile to native and run with a jit which profiles and optimizes further based on runtime behavior?

<comment><USER17> Its called profile guided optimization, although they don't run with an actual JIT. The big 3 C compilers all have it.

<comment><USER18> It is clearly less powerful, it analyse one sample and extrapolate from it.

Every user should have it's own PGO and regularly refresh it to be competitive with the advantage of JIT profiling

<comment><USER19> This is a completely legitimate comment (which was 'dead' when I saw it). PGO really is less powerful than JIT.

A compiled language with a "micro-JIT" (e.g. for v-tables) seems like an interesting idea to me.

</comment></comment></comment></comment></comment></comment><comment><USER20> It seems that the authors are not measuring what they think they are, or have explained it poorly. Most transitions from interpreter to JIT show speedups of x10 to x100, eg luajit or V8. How is it possible that the variation of V8 (as an example), according to their numbers is showing improvements of only a few percent, when it should be orders of magnitude faster after transition? My conclusion, they are measuring variations after warmup.

All of the warmup, and transitions from interpreter, to JIT, to optimised JIT , happen inside the first few micro or milliseconds of EVERY one of their thousands of process iteration. Their measurements are ALL of the system variation of the VM after warm up has taken place. The VM is optimizing within the first 1-1000 inner loops occuring at the start of EACH process iteration. For most working programmers, a variation of a few percent on a running system AFTER warm-up in "steady-state peak performance", and before any I/O takes place (because language benchmarks avoid I/O), would not be an issue. If it is an issue, then the article perhaps demonstrates that a compiled language would offer less variation.

The benchmarks listed range from a shortest of around 0.4s for fannkuch/hotspot/linux, up to 1.8s for n-body, pypy, linux. This 'long- running' benchmark code (of .4 to 1.8s ), by definition, has to include multiple inner loops/hot code, which is quickly optimized, otherwise benchmark code would have to be millions of lines long, in order to have a sufficient runtime length. Tests need to run for at least tenths of a second, for cross language comparisons, since JITted languages take some iterations to warm-up.

<comment><USER12> Their first iteration is an entire run of the underlying benchmark. Subsequent iterations are reusing the same VM. They run each plot multiple times, and reboot between plots.

They're trying to show that "warmed up steady state" isn't something that reliably exists.

<comment><USER20> Yes, I know. But the tone of the whole article, is as if, they've found deep flaws across many VMs. They call something 'warmup" which I think has little or nothing to do with the JIT, but is unaccounted variations in the whole running system.

The final graph shows a binary trees program in C, with a 6% variation between "in process executions", and no steady state, it seems logical that most VMs will show the same or worse variation.

The "warmed-up steady state" does exist, but not if they define it so narrowly. All of their iterations and timings are running at x30 to x100 interpreted speed, the only 'cold' interpreted code is in a few microseconds of the first loops of an execution.

</comment></comment></comment><comment><USER21> Stupid question for people who know more about these things. Why can't we fight the warmup time by running an already warmed up snapshot of the program? Or say dumping some data structure when it hits steady state to give hints to the JIT the next time it runs?

<comment><USER2> That would be great but it's hard because the trick, at least in JS VMs, is to have the JIT specialize based on the heap.

So you'd need a heap snapshot or some way to link the generated code to a different heap.

Maybe not impossible, just hard enough that it's not widespread.

<comment><USER22> It does seem like you could do JIT with a persistent cache which stores the JIT output along with a key that's a hash of all the relevant system parameters like CPU model and VM parameters like heap size. This would mean that the typical case of re-running a program in the same environment would be pre-warmed.

<comment><USER2> It's much harder than that because the JIT is speculating on what lots of objects in the heap are doing, including watchpointing them to constant fold properties. It's not clear what the key should be in that case.

Still not impossible but I want to be clear on what exactly makes this hard. CPU model for example is not what makes it hard.

<comment><USER23> > including watchpointing them

I assume this isn't literally using hardware watchpoints?

<comment><USER2> Yeah

</comment></comment></comment></comment></comment></comment><comment><USER24> I love intellij idea, but it's pretty damn slow for a lot of things (though never quite as bad as eclipse). I have always wondered if the JVM is optimizing for tasks that happen at startup, at the expense of performance during use. It would be a shame if the slow performance simply came down to the JVM profiling at startup and determining that the core function of the entire program was to index the code in your workspace.

<comment><USER25> In my experience, IntelliJ is as fast as VS Code. It'll never be as fast as a terminal editor because it has actual features as opposed to just being a text editor.

Outside of startup (which has gotten so much better in the last years I don't even see the splash screen anymore) and initial indexing upon project creation or library downloading, it's perfectly fast enough.

<comment><USER26> In my own experience IntelliJ is slower than VS Code to use... It will depend on what you're doing as VS Code has an interesting plugin module to not hang up the UI/Editor itself...

Not all the plugins respond in time while typing, but I can at least keep typing and it continues to function with basic editing (general worst case).

</comment></comment></comment><comment><USER27> There are a couple of talks associated with this post and paper.

 _Virtual Machine Warmup Blows Hot and Cold_

[https://www.youtube.com/watch?v=LgCHAU8ZB00](https://www.youtube.com/watch?v=LgCHAU8ZB00)

 _Why Aren 't More Users More Happy With Our VMs?_

[https://www.youtube.com/watch?v=cmrzOkEM9fc](https://www.youtube.com/watch?v=cmrzOkEM9fc)

</comment><comment><USER11> People are complaining about VM performance, while at the same time I'm guessing a fair number of the same people happily writes production code in Python. It's hard to find a slower language than Python.

People are not using VM-based languages because they want to beat the numeric performance of hand-optimised Fortran. They use it because of the memory safety, compatibility and performance which is on par with or even better than other languages (at least when it comes to the JVM) for the tasks that they want to perform, which is for most programmers not going to be numeric simulation.

<comment><USER28> I have nothing against lean VMs/JIT compilation like LuaJit or the way Racket compiles on the fly, but I do avoid Java VMs for various reasons:

\- Dependency hell and deployment problems: It's hard to make correct assumptions about which VM version is available on which platform. Pre- installed versions interfere with side-installed versions, and there is a ton of software that requires older Java VMs to work properly. It's a huge mess.

\- Potential for losing future OS support: Apple, Microsoft, and others may at any time decide to block Java VM or no longer support it on their platform. That means you have to bundle your software with a Java VM, e.g. Crashplan has done this, making installation and deployment even more difficult.

\- A thousand past problems on Linux: Various versions of OpenJDK and Oracle's java in combination with user software written in Java have caused massive problems on my Linux machines during the past 15 years, from causing extreme slowdowns to freezing the desktop until you hard reset.

Nothing else has given me as much troubles on Linux than Java, not even proprietary graphics card drivers and kernel extensions. Whatever the Java VM does, if it can freeze your whole system just because you run desktop software like Jabref, then there is something wrong with it.

<comment><USER25> t. person who has not used java since Java 1.5

<comment><USER28> My post wasn't intended to be taken as a statement about Java, the programming language, it's about VMs/Java implementations. Unfortunately I have software to run on the Java VM.

</comment></comment></comment></comment><comment><USER29> I suspect that part of the issue is that when _devs_ are writing and testing their code, they rarely keep the VM running for long enough to reach peak performance. So the performance still feels slow to developers, and performance issues still block the develop/reload/test cycle.

<comment><USER30> This is what overnight "regression" & "aging" (where you run the test suite over and over, to try and capture those rarely-seen corner cases) tests are supposed to capture.

I'd be surprised if the VM developers didn't run these.

More likely, the environment the VMs are run in has changed in the decades since their development: amount of RAM, cache size, latency of one subsystem over another....

</comment></comment><comment><USER31> The title doesn't do the surprising conclusion justice.

"When we set out to look at how long VMs take to warm up, we didn't expect to discover that they often don't warm up. But, alas, the evidence that they frequently don't warm up is hard to argue with."

By not warming up they refer to instances when early performance is higher than later performance or when the performance doesn't settle.

<comment><USER32> > By not warming up they refer to instances when early performance is higher > than later performance or when the performance doesn't settle.

which are both cases where you would be disappointed were you to use the VM as a server.

I think their point is that VMs are more unpredictable than many realize and also intrinsically unpredictable in some cases.

</comment></comment><comment><USER33> It's psychological. Most users don't really care how fast something runs once the JIT warms up: instead, they care about the latency of their starting the program to the time they can use it and use this latency as a psychological measure of the performance of the program as a whole. Stupid? Yes. But that's what actually happens.

The JVM has always had a slow startup path. Much slower-overall systems like Python don't. That's why people don't complain about Python performance and do complain about Java performance.

</comment><comment><USER34> These tests could be on a website of their own. I'd love to see how the results change with time and how competing implementations compare in terms of behavior (not necessarily performance), V8 especially has changed a lot but it wouldn't surprise me if it still ran into issues.</comment>


Comparing Languages for Engineering Server Software: Erlang, Go, and Scala/Akka [pdf] - <AUTHOR> http://www.dcs.gla.ac.uk/~trinder/papers/sac-18.pdf <comment><USER2> I appreciate the time obviously spent on this, but i see a couple errors and ommissions. C# and F# are VM languages that run on the CLR which is extremely similar to the JVM.

Also, Go and Erlang use fiber blocking threads (userspace threads). A fair comparison would use fiber blocking in Scala/Java as well using Comsat/Quasar.

I have a feeling JVM based languages would perform far better than Erlang, and possibly even as fast as Go if fiber blocking threads were used.

Edit: they're using Akka which (I believe) IS fiber blocking so part of my critique may not apply. However, Scala is known for generating somewhat slower code than Java so I would expect Java with fibers to perform 2-10x better

<comment><USER3> Akka is built on top of the JVM which doesn't support fibers (yet: see [http://openjdk.java.net/projects/loom/](http://openjdk.java.net/projects/loom/)). Akka implements its own scheduling atop Java's fork-join thread pool. Fibers at the JVM layer would be faster.

<comment><USER4> Not only that, its non blocking. Meaning you can have a very small thread pool with great performance. Think 1 thread per core.

</comment></comment></comment><comment><USER5> I recently switched the core pages of my website (a small search engine) to Go from PHP. Have not implemented any goroutines yet, just focused on a line-by- line port for now, and it was overall a fun experience. I would highly recommend Go. Only downside is the smaller (but growing) community of developers, so you might spend a little more time finding answers. Also I wish it didn't force you to comment out unused libraries or unused variables when you're trying to troubleshoot something. It should be allowed when running, but keep it restricted when building maybe?

<comment><AUTHOR> Look up the vscode-go extension. It adds/removes unused imports automatically and thus removes most of the friction.

Regarding unused variables, the only solutions I am aware of involve renaming to underscore, commenting out or passing to a function like fmt.Println.

<comment><USER6> Atom IDE, vim, and just about anything that uses goimports, gocode, and the other packages works great.

</comment></comment></comment><comment><USER7> > In the experiments we use the following versions of the languages: > Erlang/OTP 19.0, Go 1.7.1, Scala 2.12.0 with Akka 2.4.12.

These are pretty outdated, it would be interesting to see numbers on the latest versions. I'd be especially curious to compare with Erlang/OTP 21.0 (coming out today) as they did a lot of optimization work on the attributes tested in this benchmark.

</comment><comment><USER8> Any thoughts on Cloud Haskell?

<comment><USER9> If you are comparing to Go then just regular Haskell has all the same capabilities and more (lightweight threads and communication primitives, plus extra cool stuff like software transactional memory). Cloud Haskell is trying to put it more in the Erlang camp where you can distribute beyond a single process transparently, but I don't think it is well maintained or really production ready.

<comment><USER8> More specifically, thoughts comparing Akka, Erlang and Cloud Haskell, which are 3 different implementations of the actor model.

</comment></comment></comment><comment><USER10> This paper covers all the mainstream languages but I feel an "alternatives considered" section is missing. I would love to know what's the author's input on Swift server side, Elixir and Crystal.

<comment><USER11> For the benchmarks done in the paper, elixir should basically benchmark identically to erlang, since if there's any performance regression, it's a very thin wrapper.

I doubt crystal is mature enough in its multithreading model (which is still nascent, and IIRC not fully supported in the current rev, and inherited from ruby's in concept) to perform well at all in this. Erlang, Go and Akka were all conceived of specifically to handle multithreaded connections.

<comment><USER12> Crystal's multi threading model will eventually be exactly the same as go's, not ruby's, but yes its not done yet.

</comment></comment></comment><comment><USER13> Only C++ and Java(C#) can share memory between threads. If you are going to compare things you probably should understand that and design the test so that it shows the difference. If the application is so simple it can scale on different machines, the performance doesn't really matter.

<comment><USER14> Am I misunderstanding what you mean?

C#, F#, Go, and Rust can share memory between threads. Those are just ones on the list I am sure about.

<comment><USER13> C# can, it's design is copied from Java. Go and Rust can't share memory natively, they need to copy data.

So you probably should not make "games with go".

<comment><USER15> Go prefers message passing of copies using channels, but absolutely does permit shared state if you want it. I've written multithreaded code with shared state in Go myself. You just need to pass a pointer to the state across a channel, and can then control access using synchronisation primitives such as mutexes in exactly the same way you would in Java or C.</comment></comment></comment></comment>


Goldman Sachs Files Patent for Securities Settlement Using Cryptocurrencies - <AUTHOR> https://bitcoinmagazine.com/articles/goldman-sachs-files-patent-application-for-securities-settlement-using-cryptocurrencies-1449000967 <comment><USER2> I've done a complete 180 on this from when I first heard about block chain and settlement until now.

I originally saw the block-chain used for settlement as a form of "blub", we already have a settlement mechanism that just sort of works, why do we need a new form of trade settlement.

There are alot of what's known as "back office" functions that still work via email and phone call that the block-chain can help automate. To fully appreciate what they are trying to solve you need to understand that while the process of trading has been sped up by orders of magnitude over the years, the process of settlement is still very arcane.

Things like obtaining borrow for shares you want to short often still require picking up a phone. This leads to hedge funds executing their short first and then finding borrow for the short before they have to settle the trade. Since trades settle 3 days after the trade was executed this is normally a safe proposition.

Settlement, as mentioned, also takes 3 days for equities. Each fund that trades has their own "banker" called a prime broker. When hedge fund A trades 100 shares of MFST with hedge fund B. Those funds report the trade to their own prime brokers(pb). Then the PB's talk to each other to confirm the trade. They then have 3 days to transfer the shares and cash to each other and deposit them into the accounts of the hedge funds who traded.

Lots of things can go wrong in this, and it means human interaction is required to sort this out, which takes even more time. Also this accounting of trades happens at the end of the day in batch form, which means even things like people wanting to get home can delay settlement, you'd think I'm joking but....

If all trade able assets where secularized on a block-chain then settlement could happen almost instantaneously, limited by the number of transactions per block and how fast blocks are "mined".</comment>


How to Design Programs, Second Edition - <AUTHOR> http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html <comment><USER2> The unsung engineering school in Boston. Tough to get any love when MIT is a few T stops away. Right on.

<comment><USER3> Did Scheme/Lisp make new home at Northeastern? Olin Shivers is also there. Some of his prose may not appeal to all but I find these legendary: <http://www.scsh.net/docu/html/man.html> <http://www.ccs.neu.edu/home/shivers/autoweapons.html>

<comment><USER4> I went to NEU for comp sci undergrad. While I was there it converted from a Java school to a Scheme school. It happened almost overnight when they hired Matthias Felleisen and told him to bring some of his friends.

I am so grateful to have had my education become heavily functional for my last two years. Changed my life permanently for the better.

</comment></comment></comment><comment><USER5> This is probably a bad comparison to make but I am curious, apropos SICP, how does this book stack up? I notice right off the bat they're using Lisp.

Anyone who's read through this, do you think it's still valuable if you're already working through SICP?

<comment><USER6> I don't think anyone has read through this, in the second edition at least — 5 of the 13 chapters are blank.

I'm currently reading through SICP, and I think I'm going to stick with it instead of reading [the existent parts of] HtDP. I like the style of writing in SICP better. That said, if you're turned off by the writing in the first chapter of HtDP, this note appears at the end of the chapter:

"Oh, and by the way, the rest of the book uses a tone that is appropriate for a serious text."

<comment><USER7> > _5 of the 13 chapters are blank._

It's an update of HtDP (<http://www.htdp.org/>) and it's still in progress. I taught an intro (CS1) course using last year's draft (when chapters 1, 2, and 4 were all there was) and had no problems.

</comment></comment></comment><comment><USER3> Has this book received major updates lately? It has been available in draft form for a while. Many chapters are still empty.

<comment><USER8> Yes, the book has received significant updates lately. More updates are available from the draft version: <http://www.ccs.neu.edu/home/matthias/HtDP2e/Draft/> . But, of course, it's not done yet, so there are still parts missing.

</comment></comment><comment><USER9> Is it out in book form yet or are they still growing it?

<comment><USER7> Still growing---it's a lot more than last year but chapters 8--12 are still blank. I imagine that by next fall it will be in near-final draft form and they'll aim for a dead-tree publication date in time for Fall 2013, but that's just a guess.

</comment></comment><comment><USER10> the first 7 chapters of the 2nd edition cover chapters 1-4 of the 1st edition minus the parts that discuss imperative code

</comment><comment><USER11> I'm a tl;dr guy and really hate lisp books.

<comment><USER8> tl;dr:

1\. You can't learn how to program quickly, but you can learn how to program.

2\. Remember the design recipe.

3\. The structure of your programs should follow the structure of your data.</comment></comment>


The Biography Of Union Square Ventures – with Fred Wilson - <AUTHOR> http://mixergy.com/fred-wilson/ <comment><USER2> This is an interesting interview.

I like the running back analogy at 21:00. Here's a link to Lindzon's blog post Fred was referring to: [http://howardlindzon.com/breathing-drinking-twitter- poker-li...](http://howardlindzon.com/breathing-drinking-twitter-poker-life- justine-bieber/) (Ignore the wheels off title, it's actually a good read esp. if you're a Twitter developer.)

</comment><comment><USER3> His voice sounds a lot like Paul Graham's.</comment>


Proposal: Turn Waterfox 56 (a Fork of Firefox) into an Extended Support Release - <AUTHOR> https://www.reddit.com/r/waterfox/comments/5ysn9e/proposal_please_turn_waterfox_56_into_an_esr_and/ <comment><AUTHOR> Note: This would provide a way to keep the old-style Firefox extensions working after Mozilla de-supports them in Firefox 57.</comment>


Ask HN: Do you have to write lots of complex code before you can simplify it? - <AUTHOR> Ugh.
I have to write so much complex code to make whatever I am building work, then I have to go through a challenging phase of simplifying it down to the minimum working code.
When I look at the minimum working code that is the result of this process I think "why the heck couldn't I have written that simple code in the first place - it would have taken me 25 minutes instead of 8 hours".
Blah. I'm sure some genius programmers out there only ever write the minimum code in the first place. <comment><USER2> Sounds normal. At first you want to get something that works, and works correctly. This is rarely achieved by small and optimized code.

Once you have the correct code, you'll also have a more complete understanding of the problem and it's parts.

At this point you can start simplifying, optimizing and so on.

Also, having a correct code makes that job easier, since now you can have both a proven set of tests and a reference - errors are trivial to catch.

> I think "why the heck couldn't I have written that simple code in the first > place - it would have taken me 25 minutes instead of 8 hours"

You didn't know it back then, now you do. The path from there to here resulted in that understanding, and the hindsight through the understanding makes the past looks absurd.

</comment><comment><USER3> Where are you finding you're rewriting the most code? Is it around the interface or data structures at use inside the code? Or something else entirely?

I find getting the data and data structures correct leads to the simplest implementation -- and chipping away at the code as you go along trying to make it simpler and faster is usually how a solution evolves.

I don't know if anyone writes the perfect implementation of anything complex the first time -- you have to work at it.

<comment><AUTHOR> Alot of it is trying to make something work but not fully understanding how the framework I am programming works, and as my understanding grows of the framework I keep pulling apart and modifying my code.

Eventually I get the code to behave in a predictable manner and get my functionality implemented then I start removing all the dead ends and mistakes and misunderstandings.

Rinse and repeat several times until the code is as simple as I want it to be.

<comment><USER3> Well, it seems like once you learn the ins and outs of the framework, things will go more smoothly? I've avoided complex frameworks (or ones that have too much magic baked in) for this reason over the years.

<comment><AUTHOR> I embrace frameworks. Short term learning pain, manyfold medium to long term gain.

It might be hard to learn to drive an 18 wheeler but better than building it yourself.

<comment><USER4> But sometimes all you need is a bike. Or a pair of sandals.

</comment></comment></comment></comment></comment><comment><USER5> I don't _have_ to, I think, but often writing more-complex code than I'd otherwise want is sometimes the most efficient way to get things done, because otherwise I'd get stuck in analysis paralysis. Also, I tend to shy away from the more "succinct" option because it seems like it'd lock me into certain choices, with more edit distance between design decisions.

</comment><comment><USER6> It's standard iteration process. This is why most of design and development process diagrams are displayed as continuous circle. Nothing has been perfect for first try.

Speed and/or size improvement in next iteration is much better than completely reworking because of: missed or bad requirements understanding, compatibility issues etc.

As was already mentioned, you have to have something working. Only this can be improved. Without working code any speed or size optimization is useless.

</comment><comment><USER7> This is pretty normal.

Remember 90% of code is crappy. Your job is to make something work, and then you can go back and make it work better.

</comment><comment><USER8> That's like expecting to type out an essay perfect the first time. It's perfectly normal to write a draft and iterate on it many, many times until it gets good.

With coding, it can take a while of working with rough code to identify the abstractions that simplify problem.

</comment><comment><USER9> Yes. One way to shortcut the process is to write some design notes prior to typing any code.

This design could then be reviewed by your colleagues.

This is the same mental process but may save a lot of tedious typing and then undoing again when you consider a better design</comment>


The Answers Are Out There, and New Q. and A. Sites Dig Them Up - <AUTHOR> http://www.nytimes.com/2011/02/07/technology/07question.html?_r=4&pagewanted=all

<comment><USER2> The above link asked me to log in. Try:

[http://www.nytimes.com/2011/02/07/technology/07question.html...](http://www.nytimes.com/2011/02/07/technology/07question.html?_r=1)

or

[http://www.google.com/search?sourceid=chrome&ie=UTF-8...](http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=The+Answers+Are+Out+There%2C+and+New+Q.+and+A.+Sites+Dig+Them+Up)</comment>