Hacker Newsnew | past | comments | ask | show | jobs | submit | jcstk's commentslogin

Religion is a subset of ideology, and both are a mechanism to recruit labor to fight and not the reason for conflict. Material isn't cheaper to buy, the "owner" of the material has all of the leverage - lock them in like a SaaS contract and them jump the price up, and the buyer can't do anything. Crops and slaves are no longer valuable as port worthy coast and natural resource deposits, but the fight is still over land and power.


It's influencer marketing. These 'ego battles' are a show to keep their brand in front of you. It's engaging like reality television. This is very valuable, especially for companies that need to fund their growth through investment and grants.


I wish more people were as astute.

The front matter of big politics and big tech is not too different from professional wrestling.


I think OP could be just as astute as you meant. They probably know that Altman is engaging in marketing, but still tried to make a case that it shouldn't be a good strategy and instead illustrates his character. Not that I disagree, as people could see the unnecessary drama as a sign of immature behavior and a negative net result in the long term, regardless if it generates press today. As many other commenters remarked, they will from now think twice about trusting Altman's ventures in the future in light of this long-winded tweet.


It's not that deep, he's not even writing it


This smells a lot of "any publicity is good publicity", which has been false for more than a decade. You know what makes line go up? Results.


OK.

Tesla Trailing P/E: 390.70 Apple Trailing P/E: 34.11 Ford Trailing P/E : 11.74


Perception and execution that is what i call P/E


I'm not sure what your point is. High P/E is a sign of overvaluation and a bad investment. Just because the market is irrational doesn't mean you should sign up for to be a bag holder.


Pretty sure OPs point is that Tesla has shitty results, has a CEO that lives “any publicity is good publicity” as a mantra and the company valuation is through the roof.


Yes and none of those are good things.


They're good things right now for Elon and Tesla. Whether they will continue to be is up in the air. But, it definitely works as a strategy, at least temporarily.


I got into programming through MUDs, have the fondest memories of those times and deeply appreciate their role in my life. I ran up a giant AOL bill playing Dragon's Gate that I had to work off by doing data entry that helped me understand the basics of computing, and then using that knowledge to create so many scripts and highlights in Rapscallion MUD client. After that, I realized I could make more things and never stopped. What a great time. I remember being online when the MUD I played reached their maximum number of concurrent players - 340 - and thinking that the world was so big. Crazy to think about online gaming today.


Those AOL prices were insane. It has admittedly been so long that I'm not sure I trust my memory, but I seem to recall per-minute pricing that could rack up over $20 per hour just from playing any of their text based games. I begged and begged my parents to let me just try one for a few minutes and they very wisely said absolutely not.

A few years went by and suddenly playing MUD / MOOs was free. I honestly miss those days, text-based has a vibe that no graphical game can ever replicate.


My dad worked for a studio that sold a game to WorldPlay. WorldPlay games charged by the hour, but the developers received AOL accounts that bypassed this charge. Theoretically I could play any WorldPlay game for free, but mostly I played my dad's game, which was free anyway as some kind of "check out our new game" introductory promotion.

There was a small regular community which got wiped out when WorldPlay started charging for it. The studio got more free accounts and gave them to regular players so that the game didn't just evaporate immediately, which meant everyone suddenly had a minor name change. After that, the game evaporated.


Yeah, so many of us with stories of angry parents over too large an AOL bill. If I recall correctly, my month where I did that was in Modus Operandi, the detective themed text game. I don't remember exactly how I spent all that time in MO one month, but I know part of how I spent that many hours was logging into my AOL account from my grandparents' place and a friend's place, in addition to what I was doing at home, which contributed to why my parents hadn't tracked that much "screen time" in that era. Amazing to consider how many things changed since then, but also how many of those concerns are the same even if the reasons for the concerns are different.


Yes, it was crazy. $2/hour in 1997 dollars! Agreed… I think only Pubg has come close to replicating the intensity of emotion in PvP (which was my main interest in playing)


Any information that comes to you for free or is on a screen is an advertisement. All of it. That's the point. Do you think people spend millions and billions of dollars creating and maintaining a content delivery network because they just want you to know about things?


Well, of course almost all information comes with an agenda, but perhaps the more useful distinction is whether the information is presented in good faith, i.e. is honest about the agenda (which actual advertising can also be).


Damn so all of HN or literally every single piece of digital media has just been an advertisement all this time ?


HN is an advertisement for Y Combinator. You and I contribute content to advertise our identity and ego.


What are you trying to sell me again? :)


His keen eye and intellect - valuable traits as a laborer in a knowledge economy.


Some of us grew up in a world where “journalism” used to mean something.


No, that was just good advertising in an era where there were few entities that could afford to broadcast at scale.


Your comment comes for free on my screen. :thinking_emoji:


It is an advertisement.


What about wikipedia?


The free encyclopedia is an advertisement for a nonprofit that does a lot of things: https://wikimediafoundation.org/what-we-do/. They manage costs of producing the encyclopedia by using volunteer labor. They operate a similar model as nature documentaries that drive donations for conservation and climate groups. These are all good things - still an advertisement.


What if people could pay to read an advertisement?


Almost as good as my idea to have people pay me to work for me.

Had a great business idea just now: A tool for staged interviews! The subject and the journalist submit an equal length list of questions. Each round of the auction they bid on questions they want to include or exclude. The loser gets 50% of the points spend by the winner to be used in the next round. Both the subject and the journalists can buy additional points at any time. I keep all the money.


One thing I find interesting about reading is that it's done in the voice of the reader, not the writer. Shame and manipulative high-pressure sales tactics... interesting perspective. Personally, I write to inspire people to get curious and try things. If this pushes their path forward, perhaps we will meet again down the road and find ways to help each other?


I read it that way because the essay doesn't actually contain any "carrot" -- it's not explaining why people should start using this tech or inspiring curiosity. It just takes a bit of a scolding tone and makes unflattering assumptions about why there are devs who aren't eager to jump onboard. That's the manipulative high-pressure sales tactic I mentioned: "jump on the bandwagon or be left behind" is one of the most basic of such tactics.

I'm not really intending to single out this essay for this, it's just another in an increasing stream of similar essays. I find it odd because I'm hard-pressed to think of another tech that devs had to be strong-armed into using. In my experience, when devs find value in a thing, they just start using it naturally.


FWIW, I enjoyed the hundreds of hours I spent with dart:mirrors to automate serialization, and the code-generation heavy approach always felt like kind of a bummer. But I feel like AI-assisted programming solves the majority of use cases this feature was meant for.


I'm reading these comments and I'm thinking "are we using the same Spotify?" I don't see any AI music, I don't get Podcasts pushed on me, the UI is fine, playlists are fine and I get new music I like suggested to me often.


"I'm not seeing a problem so how is there a problem" is not the right critique in an era where the selection algorithm is so personalised.

Spotify is awful for me, I concur with the original article. YouTube Music is heading slowly the same way. At this rate I'll have to cast around for another phone that can take an SD card again.

The service I really miss is eMusic, they had little in the way of well known music so leaned into small label music and it was wonderful.


Get a standalone music player and you will have full control (but you also may have some upfront work to do your music downloading and create your playlists but worth it imo). I got a Miyoo Mini game emulator for my kid and ended up getting one for myself, all for ~$50. Being offline (by choice, the device does have wifi) and being able fully customize the thing, backup the SD it's really great. It's such a whiff of fresh air to be honest, you get no popups, no attention misdirects, everything is there waiting for you and no corp messes up you.


A lot of the get an iPod comments ignore music discovery. I like new music and think new music is good and would like to discover new music. Having to buy all the music I want to try would be to expensive.


College and community radio are infinitely better for new music discovery. KEXP and KTRU here in Houston have expanded my horizons significantly. Bandcamp as well.


I can promise you none of the artist I listen to are getting radio play.


You might be surprised!


eMusic was so good!


It's the HN effect, as well as selection bias. People here are highly technical and may notice things that regular people don't, or they do things in a very idiosyncratic way. I remember seeing comments here before about how some people have no cell phone, run only a very old school terminal based computer, etc, for example. They also seem to be annoyed at very specific things as you can see in the comments here, things that the average user wouldn't even think about. Ultimately, HN and other technical fora are not representative of the average user's experience.


Agreed. I just navigated to my home page on desktop and I see the following categories:

- A section with 8 of my recently played playlists

- A section of "Made for <my name>" with 6 Daily Mixes (which I generally like), Discover weekly (which I like now that it's tailored to me: I used to hate that it only contained pop/hip hop hits), Release Radar (love it), and the AI DJ (which I find very annoying)

- A section called Recently Played which looks like all legitimate things I've played

- "New Releases for You", which are all by artists I've listened to very recently

- "Jump back in", which has several playlists and artists I've listened to recently

- A sidebar of all of my playlists I've created or followed

Of the ~50 actionable items on the page, the only one I dislike is the AI DJ, but it by no means feels forced on me since it's just a single square.

https://i.imgur.com/RKsIgLR.jpeg


I’m more curious of the claim that you don’t get podcasts pushed on you.

The last time I used Spotify (and the reason I left) podcast were constantly featured on the start page and it was impossible to remove them (and I have zero interest in podcast in my music application).


That's what I'm thinking as well. Spotify ain't great but it's fine. Some people are recommending Apple Music but Apple Music don't even have a client for Linux and their website is awful. OTOH, I can use Spotify even through my terminal.


You may indeed have a different experience, but you also may not notice these things as it happens slowly over time, like the proverbial boiling frog. If you're younger it's likely you haven't noticed the patterns. I've been around for a while and notice these patterns from miles away.


I'm talking about my current experience, not the delta over time. I've been using Spotify since 2011.


If you're listening to new music, and recommendations, how do you know you've not heard at least some AI music? I only listen to one playlist on Apple Music (my weekly personalised New Music Mix) and I've had to report several AI tracks. They were easy to spot as they all used the trick of releasing under the same name as successful artists who are in-between release cycles. These scammers bank on fans clicking without thinking which is money in the bank for them. I'm also pretty best about reading the bio of every new artist I'm recommended.

There's one prolific ai musician producing logo beats (boring) and psychedelic ambient (pretty much random drones) that I just can't shake from my playlists as they release lots of stuff under several different names.


I recently unsubscribed because I definitely saw a lot of AI music. I do think Spotify has the best UI and user created playlists of all platforms though


For me Spotify had best UI in 2012. Native, clean, simple, ultra fast.


I can appreciate this perspective because I used to have it. I even wrote a similar blog post 10 years ago - it was on the top of HN and the comment section was a beautiful shitshow. For me, this perspective was a good story to tell myself - it justified why I was only investing my time in “work”, and validated me for having “come so far”.

Over time, I have reflected and shifted this perspective. That reflection centered around the question the author hasn’t asked himself yet: who creates these expectations? It’s always some loose definition like “society” or “elite”, or some other handy wavy grouping of people.

But, to be clear, those expectations are coming from the author. That’s his perspective of what the world thinks, based on his interactions, based on what he chooses to read, listen to, etc. He's not describing anyone but himself.

I found that if I find myself projecting onto social norms, society, or some other loose definition of “they”, what I’m really doing is projecting a part of myself that I haven’t been honest about yet.


I agree - and will take it one step further: he misses the root causes of "instability", and I bet it tracks directly with the gutting of the middle class starting in the 70's, and/or the same flat-lining of wages (not keeping up with inflation etc) despite huge increases in productivity in about the same time period.

Money is a huge stressor in relationships. Misogyny is still a huge thing (to my utter surprise honestly). Abuse, etc. Options for financial stability to escape these things I would suspect to contribute as well.


The author of this article used Charles Murray’s Coming Apart as a source. He’s a pretty… controversial figure. The counterpart to him that is more progressive and less controversial is Robert Putnam. His books are a lot more digestible. I’d suggest looking up talks with the author on YouTube. (He even has a debate with Charles Murray - as they are somewhat of friends)

https://en.m.wikipedia.org/wiki/Bowling_Alone

https://www.goodreads.com/book/show/22609334-our-kids

https://www.goodreads.com/book/show/50124402-the-upswing

One thing I want to mention here is that it seems that social effects come before economic effects. People go through social change and then the economics follow later. That’s the one thing I would take away from the books/talks. Somewhat ironic to many here.


I noticed that you didn't mention which of these arguments were good or bad.


> I bet it tracks directly with the gutting of the middle class starting in the 70's

This belief is oddly common, considering it has no basis in reality. The share of adults living in households with sub-middle-class incomes has only grown by 4% since 1971.[0] The share of adults living in upper-class households grew by more (5%)! And this even as the number of single-adult households has soared[1], reducing the average number of earners per household!

[0]https://www.pewresearch.org/fact-tank/2018/09/06/the-america... [1]https://www.pewresearch.org/social-trends/2011/12/14/barely-...


The portion of double income households more than doubled between 1960 and today[1]. The middle class is working more because they want to, or because they need to? Purchasing power for the average worker is flat[2]. In some sense, it's like the middle class has been working for fifty years without a raise, only now two people in the household need to work. That fewer people are getting married or having kids is likely not because human nature shifted in the past few decades, but probably because their lives are not going well or developing properly.

1 - https://www.pewresearch.org/ft_dual-income-households-1960-2... 2 - https://www.pewresearch.org/fact-tank/2018/08/07/for-most-us...


> Purchasing power for the average worker is flat[2]. In some sense, it's like the middle class has been working for fifty years without a raise, only now two people in the household need to work

That “flat” wage is accounting for inflation according to your own link. So not only would a single earner be doing just as good today as back then, adding a second income means they are raking in twice the spending power as back then.

The only thing that has changed are expectations. People want way bigger houses, nicer cars, computers, smart phones, more meat, dental care, better medical care, etc. Worst of all (from a financial perspective), they want both of their average kids to spend 4 years at an expensive university.


> Worst of all (from a financial perspective), they want both of their average kids to spend 4 years at an expensive university.

Expensive only because it's been allowed to become expensive. Decades ago it was normal for a good university to be nearly free or at least quite affordably by the student working part time to pay their way.

> dental care, better medical care

People "want" health care. I mean of course, but it's not a whim, it's a basic necessity. Which like the university, was very affordable to nearly everyone decades ago.

Not sure people want bigger houses either, every housing topic on HN is full of desire for smaller apartments to get built.


> Decades ago it was normal for a good university to be nearly free or at least quite affordably by the student working part time to pay their way.

Here's a few graphs that show this more explicitly: https://www.buzzfeednews.com/article/gregschoofs/how-much-co...


Indeed. Even as late as the early 90s, my summer internships (not at minimum wage, but still just intern pay) was almost enough to pay for a year of tuition at CMU, an expensive top university.


> The portion of double income households more than doubled between 1960 and today[1].

Your data only represents "married couples with children under 18"--a (shrinking) minority of households. By definition it does not account for the dramatic rise in single-adult households.


The single adult households are a separate and bad thing. I don't think there has been a substantial shift in human desires in the last couple generations - most people still want to get married and have kids and fewer of them are. That they are able to subsist in one family households is not a bragging point for our system.


How does a “flat lining” of wages of cause family stability to go down? And how do you explain high levels of family stability in countries that are much poorer?


> And how do you explain high levels of family stability in countries that are much poorer?

Less individual freedom, greater direct economic dependency on others in your group, and also the threat of ostracization, excommunication, and destitution if you go against its rules. Basically, there are extremely high cost/stakes associated with going it on your own.

But on the other side there are also good things that come from greater direct interdependency, like perhaps less individual alienation and a greater sense of shared purpose, and access to community resources when you follow the prescribed rules.


In some places people have centuries of social-structure adaptation to deal with the stress of being systematically oppressed (by local elites, colonial overlords, ...).

E.g. money gets shielded by community institutions (such as local religious organizations) that are harder for elites to steal from than individual peasants, and then those act as a kind of social safety net in hard times. Extended families/clans build social bonds through e.g. marriage and baptism, and help each-other.

Often there are severe social problems in rural peasant societies: alcoholism, domestic violence, seasonal migrant labor keeping people away from home much of the year, corruption, ..., but people have also learned to be tough vs. some kinds of outside threats. But large waves in the world economy (or a large natural disaster or the like) also can overwhelm those defenses.


I think we agree that many pro-social structures exist in poor and socially rigid societies.

However these come at the expense of many liberties (i.e. religious) that are held as important in the more developed world. It's not clear that loss of such personal liberties would be an improvement in developed societies, even if it reduced the nominal divorce rate.


I agree there is a trade off, but let’s explore this a bit further. Who decides how much they value religious liberty compared to lower divorce rates? Decisions about these trade offs tend to be imposed from the top, by the elites. 2/3s of Americans still disagree with the Supreme Court ruling banning school prayer.

When there is a trade off, who should get to make the decisions about where to strike the balance?


In many places “low divorce rate” is a euphemism for widespread sexual assault, domestic violence, and total lack of women’s individual rights. You get young women handed off from father to husband as effectively chattel. Women have no choice but to put up with that when they don’t have any viable social/economic alternatives, but it’s overall pretty unpleasant and oppressive.

A significant proportion of people in the US seem to pine for the days when homosexuality was taboo and illegal, women could be beaten or raped by their husbands (and children by their fathers) and it was treated as no one else’s business, non-white people were kept out of the neighborhood and interracial marriage was frowned on if not illegal, pre-marital sex was encouraged for men but made women into “sluts”, middle/high school students received no education about basic human biology/anatomy, rape victims were forced to deliver their rapists’ babies, most professional jobs were reserved for white men, etc. But hey, low divorce rates!


Do you seriously think that this is a good description of how the upper-middle class in the West behaves? Because by and large, that's what we're talking about in this thread wrt. low divorce rates. The notion that social anomie, abuse and violence is a simply unescapable "fact" about late modern societies is baseless. You're describing pervasive dysfunction, not a "new normal".


> You're describing pervasive dysfunction, not a "new normal".

New normal can easily be pervasive dysfunction. When dysfunction becomes pervasive, it is also perceived as normal by people inside that society.

> The notion that social anomie, abuse and violence is a simply unescapable "fact" about late modern societies is baseless.

These were not so much anomies as taboo to talk about if it is happening to you. They were seen as private issues that should have stayed private and if you did talked about it, you was the bad one. Nevertheless, some statistics are available - for example domestic murders. Those went down. Some anonymous statistics. People who went through it in the past and did talked about it, their children remembering and talking about it later. The way domestic violence is portrayed in media - whether it is shown as something justifiable and ok or not.

When I was child, there was no domestic violence around me. Then I grew into adult and people started to talk more openly in front of me. Turned out, there was in fact domestic violence among adults I knew as child ... except I was protected from it.


The question remains. Do you think that the Western upper middle class are being willfully blind to some sort of domestic violence epidemic happening all around them, the way you describe previous generations as acting? You're relating isolated anecdata, that tell us nothing about whether some behaviors might have been common in the past.


Yes, Western upper middle class were willfully blind to domestic violence around them. Just like Eastern upper middle class. Or like lower class, really. It is not even that difficult ... you just don't talk about it. It was not crime. Most of it happens at home when no third party is around. If you did not wanted to be blind to it, you could talk to the aggressor and that was about how much realistically could be done. Shelters were not a thing at the time.

Whether it qualified as "epidemic" I don't know.

Seriously, people of all classes were also willfully blind to sexual abuse for years and that includes abuse by priests.


> Seriously, people of all classes were also willfully blind to sexual abuse for years and that includes abuse by priests.

Not really. This was a big part of why people were so vicious during the Protestant Reformation. You don't just have people buried up to their necks and then trampled by horses because you disagree about points of scripture.


(a) Where did you get “upper middle class in the West” from? The further-back context of this subthread is “family stability in countries that are much poorer”. Specifically, I assume, rural or recently urbanized/industrialized countries. The more recent context is some (uncited) polling of all Americans; those who were in favor of school prayer etc. are (statistically) less well educated, more religious, whiter, and older, compared to the rest of the population.

But (b) sure this also applies to upper middle class people across “the West” as of not very long ago. It’s not that every household was full of abusers, but it was treated by the public as a private matter, not talked about, and much more widespread than publicly recognized.


> poll of public opinion

Public opinion tells us little about real-world behavior. The whole point of OP is that the upper-middle class liberal elites are not practicing what they preach to the rubes and proles.


What is your point? This thread is a tangent from the original article.

My claim is that “low divorce rates” historically often masked widespread abuse and unhappiness in stressed (even broken) marriages which were continued due to social pressure, not always for the best.

* * *

As for the article, this causal claim is wildly speculative bullshit:

"The educated class decides cohabiting partnerships are just as valid and important as marriage. And they also believe it’s okay to walk away at a moment’s notice from a cohabiting relationship. ¶ Poor and working-class people follow suit. To the detriment of themselves and their children."

The problem working-class people have is not bad “elite” role models, but a lack of money and good stable jobs, limited parental leave, a lack of cheap childcare options, a corrupt and exploitative criminal justice system, etc.

The supporting evidence presented in TFA is some papers about how people find newspaper op-eds persuasive, are impressed by qualifications when reading public policy recommendations, and choose their high heel shoe height based on local trends when moving to a rich neighborhood; extrapolating from this to young working-class parents separating from their partners because “elites” say it is okay is a ridiculous stretch. Especially when the young women directly quoted said clearly why they broke up. Occam’s razor says we should listen to what they say instead of inventing some secret reason without any direct evidence.


> Who decides how much they value religious liberty compared to lower divorce rates?

> When there is a trade off, who should get to make the decisions about where to strike the balance?

Of course the Supreme Court when concerning anything involving the government making an establishment of any religion.

The US isn't Saudi Arabia. As much as it's any American's right to practice the religion of their choosing, it's not in any religion's right to deny any individual - even in their religion - their individual liberties, or to impose their religion upon a person of another or no religion.


Liberties have always come paired with obligations to one's surrounding community, so there would be nothing new in this. We have a name for pure liberty or "liberation" shorn of any checks or obligations towards others: we call it licence, and every increase in licence is ultimately a step towards bondage and tyranny.


Those obligations are strong and operational in many places where religion isn't the center of civic life.

There is nothing wrong with religion as a framework for teaching people about their social obligations, but it's hardly the only way to achieve that.


I don't think describing them as "rural peasant societies" is a great perspective to assume.


What do you mean? Historically most people in most places in the world (e.g. my ancestors in Europe a few generations ago, my godparents in southern Mexico recently, or most of your ancestors if you go back a couple centuries, wherever they happened to come from) have lived as rural peasants.


I think you're trying to think that stable families become less stable if their waged stagnate. They don't. What happens is that in aggregate, with stagnating wages, there are less stable (middle-class) families in society.

For so-called poorer countries, they are differently structured. It's tough to compare their family units with our rich nations.


> For so-called poorer countries, they are differently structured. It's tough to compare their family units with our rich nations.

But that’s exactly the point! Prior to the 1960s revolution in social norms, families in poor countries weren’t structured all that differently than ones in the US.

I’m no Reaganite, but the fact is that the stuff the old “family values” conservatives said is pretty much the same thing my Asian immigrant parents told me growing up.

Meanwhile, the data shows that Asian Americans who grow up in the bottom 20% have a 25% chance of ending up in the top 20% as adults. For white kids it’s just 11%. That’s a really big coincidence to hand wave away.


Asian-Americans are not this rose-tinted perfect example of family values breeding success. https://www.vox.com/identities/22530103/asians-americans-wea...

The crazy successful asian immigrants are mostly those who came recently, and who are bluntly the best and brightest of Asia coming to America for a better life due to US policy attracting the very best. Just like the above conversation, you only think of one slice of data to arrive at your conclusion.


The issue isn't with the absolute level of wages but with increasing income inequality (Gini coefficient) and the resulting loss of social status for young men on the lower end of that scale.


Correct. The hierarchy is getting steeper and harder to climb.

Men who don’t feel connected to a clear path of ascension become desperate and often either dangerous or losers.

It’ll be interesting to see what happens to the increasing number of men who feel they have “fallen off the path”. Could be scary


>It’ll be interesting to see what happens to the increasing number of men who feel they have “fallen off the path”. Could be scary

They will probably seek revenge against the social norms and classes which alienated them. History tends to repeat itself.


Community.


The “community” in those countries enforces exactly the norms the author talks about.


Income after taxes and transfer payments has grown for everyone since 1970: https://commons.wikimedia.org/wiki/File:1970-_Relative_incom...

You can make a fair argument that the bottom 50% haven’t gotten their share of productivity growth, but that doesn’t explain why social indicators among the bottom quantile have gotten so much worse.


> Income after taxes and transfer payments has grown for everyone since 1970

It's grown for every group used in that breakout, but while it breaks out the upper income groups on relatively fine categories, it groups the bottom half as one category.

(It's useful for the graph's original purpose of discussing top-weighted inequality, it's not useful for the argument you are trying to make with it.)


>Income after taxes and transfer payments has grown for everyone since 1970

And education, housing, and health costs has sky-rocketed, number of "essential services" to pay for (mobile phone, internet, severan "rentier" subscriptions) has increased, while job stability and availability for working and middle class has plummeted...

But yes, the top 10%, the types to usually post at HN, never had it better.


But a lot of those requirements are manufactured. Germany has an advanced industrial economy with half the percentage of college graduates we do (just 1/4). So why do we need to act like “cost of living” for everyone has to include saving hundreds of thousands of dollars for college?

I agree the top 10% have poor insight into what life is like for everyone else, but that cuts both ways. I think there’s a real misperception of what income is necessary to maintain a similar quality of life to the past.


University is free in Germany, and a lot of jobs that require a college degree elsewhere are fulfulled by 3 year appreticeships in Germany. So hard to compare.


Whether it's manufactured or organic, it's still real. That's the economic reality we all have to live with in America, so it doesn't matter whether Germany can operate just fine without the crushing college debt we have: the fact is, middle-class households in America have lost real wealth and purchasing power over the past 50 years because of this and a number of other factors.


Just because it's real, that doesn't make it right. You're missing the entire point: maybe the issue isn't the gutting of the middle class, but the expectation or encouragement of higher "education" even if it is unnecessary for a huge chunk of people.


>Germany has an advanced industrial economy with half the percentage of college graduates we do (just 1/4). So why do we need to act like “cost of living” for everyone has to include saving hundreds of thousands of dollars for college?

Because Germany doesn't treat non-college graduates working class people as "losers".

Germany also has a quite solid social protection, not a cut throat environment where tons of people are a medical bill away from homeless.


> Because Germany doesn't treat non-college graduates working class people as "losers".

Neither does the United States? Not sure where you're getting this idea from. Most people I know revere trades as they're a known way to make great money without a degree. And, anecdotally speaking, I've managed to get great jobs as a software engineer without a degree. We treat non-college graduates who don't try to ascend above retail or fast-food as losers - and for good reason.


> while job stability and availability for working and middle class has plummeted...

What?! The labor market has been so strong over the past decade that economists started to wonder if previous paradigms no longer apply (i.e. Phillips curve).


In most empires on the way down, the scholarly narratives and the truth on the field are different things...


The author is focusing on working class families, not middle class families (they are discuss as a comparison).

How does the gutting of the middle class harm stability of working class families?


>Misogyny is still a huge thing (to my utter surprise honestly). Abuse, etc. Options for financial stability to escape these things I would suspect to contribute as well.

yes, this is why I couldn't quite be convinced of the thesis being proposed here. Or at the very least, they way they try to describe the "marketing" of being in a faithful marriage runs counter to the reality. While the situation of "deadbeat dad becomes alcoholic, won't get jobs, and cheats" is not an uncommon cause of divorce, the more common narrative pushes it as a liberation of women's right. Less about a man breaking away to be free and more about a woman not being trapped.

That above deadbeat stereotype has more become the "violent domestic abuser" type as of late. So divorce is a way to turn an absolute nightmare of a situation into emotional stability in exchange for what will likely be financial hardship. It turns a bad into slightly less bad, not a potentially patchful good into a bad.

Or at least, that's how society markets it. I don't have hard sources and admit these are just the notions I feel have risen over 3 decades of media consumption.


>> Some of the jobs he can get don’t pay enough to give him the self-respect he feels he needs, and others require him to get along with unpleasant customers and coworkers, and to maintain a submissive attitude toward the boss.”

> It used to be high-status to hold a job and take care of your family. Not so much anymore.

As though it’s ever been considered high-status to have crap pay and deal with abusive bosses and coworkers. Ask the really high-status people whether it was.

You need recordings to be able to review interactions for who is more in the right, telling the employee they need to turn off FB and get on with work seems like it management would say it’s reasonable and worker might say it’s overbearing.


It's absolutely wild to me that Rob quotes:

> Lack of money is certainly a contributing cause, as we will see, but rarely the only factor. It is usually the young father’s criminal behavior, the spells of incarceration that so often follow, a pattern of intimate violence, his chronic infidelity, and an inability to leave drugs and alcohol alone that cause relationships to falter and die.

Without seeming to make any sort of connection that poverty is a causative factor in every single one of these. Poor people are more likely to commit crimes of desperation. Poor people are over-policed when compared to middle-or-upper class people. Poverty makes it more difficult to escape domestic abuse. (Idk about the infidelity one). Drugs & alcohol are maladaptive coping methods that many people use to escape the reality of their daily lives - which are much worse when you're poor.

But y'know, that doesn't fit into his worldview that the dissolution of "family values" is the root cause of all this.


Did you grow poor or have friends from poor backgrounds? I saw lots of drug use, stealing, petty vandalism and violence, and little if any of it had to do with their trying to survive in a material sense. There are different norms around which behaviors grant status, and this is the primary driver behind this kind of behavior in my experience.


I grew up poor, but was lucky enough to go to a fairly 'rich' school district amongst fairly rich people (upper middle class more than "rich" I guess).

You know what I saw in rich kids?

Lots of drug use, stealing, petty vandalism and violence.

I just rarely saw them suffer any consequences for it.


This just goes to prove that anti-social behavior is not a "consequence" of poverty, and that solid social norms are far more relevant. Rich kids can still live in a socially frayed, marginalizing environment.


If you are you get away, or even ahead, with anti-social behavor. If you are poor you go to jail.


Ding.

"Crime" is a function of poverty in so much as those punished for committing it are poor.


It's about survival in mental sense which lack of material means makes extremely hard.

People don't need money, but they desperately need sense of agency and entertainment and lack of money makes fulfilling those core needs in legal and moral manner super hard.


You're describing the cultural correlates of social marginalization and fraying social capital, not "poverty" per se. In many poor countries, casual anti-social behavior does not grant community status; in fact, the opposite is the case and punishments can be quite harsh indeed (though not nearly as harsh or socially damaging as the long-term imprisonment that's all-too-common in the US.) Widespread poverty in those failing communities is the consequence of such dynamics, not the cause.


Yeah, I did.


Poverty isn’t the cause of crime. People were objectively poorer in the 1950s, even in the lower classes, and people in developing countries are much poorer than even poor Americans.


Absolute income (whether measured in dollars or purchasing power) means very little when compared across time periods or countries. Poverty has never been about your absolute buying power. It is relative to the society you exist in. You will find, by any objective measure, that the wealth disparity in the US is nearly as high as it has ever been (only exceeded by the Great Depression). These same objective measures will consistently score the US as worse than many developing countries.

You will find across many eras and cultures in the last two millennia that the poorest members of the society are the most vulnerable members of society and the most likely to be punished for committing crimes. If you still don't believe me, read this paper for an in-depth analysis that controls for many factors: https://web.worldbank.org/archive/website01241/WEB/IMAGES/IN...

Laws are made by those with power. In today's society, power comes in large part from wealth - that's the foundation of capitalism. The objective of capitalism is to accrue capital, and our laws and police system are set up to protect the wealthy and their wealth.

That's why graffiti is punishable by ten years in prison. Stealing a week's worth of groceries can mean years in prison. In contrast, the penalty for illegally evicting a renter, rendering them homeless, is about two or three months rent, and no prison time.


> Stealing a week's worth of groceries can mean years in prison.

Not even close to accurate, unless you're running off with a cartful of steaks, which might push you into criminal territory. Most shoplifting is not even a misdemeanor, just a civil infractions. Criminal charges require hundreds or thousands of dollars and usually multiple offenses to get more serious than probation.


"Drugs & alcohol are maladaptive coping methods that many people use to escape the reality of their daily lives - which are much worse when you're poor."

I imagine this explains the correlation between poor minority neighborhoods during the crack epidemic or between the depressed rural areas and the opioid epidemic now.


who creates these expectations? It’s always some loose definition like “society” or “elite”, or some other handy wavy grouping of people.

I suggest reading the book "Manufacturing Consent" to get an understanding of how expectations are shaped by mass media.

Just like there was a concerted effort to create public support for war (WW1/WW2/Vietnam/etc.), there are concerted efforts to shape public opinion and create expectations within our broader culture about morals/values/etc. Sometimes it's explicit, and often times it's implicit and picked up via signaling cues (i.e. high status reporter says X, to go against X would mean no more invites to fancy dinner parties)


>But, to be clear, those expectations are coming from the author. That’s his perspective of what the world thinks, based on his interactions, based on what he chooses to read, listen to, etc. He's not describing anyone but himself.

The last conclusion is a little off. Everybody who expresses any opinion is describing "his perspective of what the world thinks, based on his interactions, based on what he chooses to read, listen to, etc". That doesn't mean they can't also coincide with a general trend, for example "societal expectations" at large.


Well said.

The glaring piece missing from this analysis is the psychology of the young men themselves.

Raising two young men myself, I’m blown away by how powerful cultivating intrinsic motivation is. My eldest just went from constant gaming/sleeping/hiding in his room to working a full-time job, launching a side hustle, and enrolling in classes.

Yes, my modeling & encouragement mattered. But the fulcrum was him accepting that living up to other people’s expectation in high school had left him tired, depressed, and lost.

The author has clearly identified that young man lack a goal worthy of their efforts.

He’s just completely ignored intrinsic motivation and the power of cultivating it.

I don’t think that’s an accident. I think our entire approach to young men as a society ignores the fundamental power of their interests.


> The author has clearly identified that young man lack a goal worthy of their efforts.

For me it felt like the title would reflect reality better if it was rephrased to "Society has nothing to offer to young men and they respond by not pursuing anything."


While you juxtapose gaming/hiding in your room and working/classes they're not mutually exclusive. I work a full-time job, take classes, have a sidle hustle, never leave my room, play way too many video games and sleep in almost every day.


father of a 4 years old boy. please help me! How do you cultivate intrinsic motivation ? any good strategy or book?


I've got two kids in college. Perhaps one thing is to avoid being consumed by your own fear of them failing. For a lot of the tasks they're given, if they're halfway intelligent, then the only hurdles will be attention and motivation. So, of you are the one supplying them with those things, then you're the one doing the work. "I'm not going to do your homework, but I'm going to make you do it," is doing their homework.

With that said, the tasks are going to come on hot and heavy sooner than you expect. I didn't have homework in grade school. At all. My kids had mountains of homework. Giving them too much to manage on their own, while telling you not to manage it for them, would seem like a cruel joke, but I don't know any other answer.

Also, you could be more disciplined than I was about my own chores. I didn't need to clean the bathrooms every week at the same time, but maybe had I set up a schedule like that, it might have modeled better habits in my kids. Or maybe not. ;-)


I just use common sense, I try to explain why doing something is good and try to make the kid to have a desire to accomplish something. Also things have to feel more fun and less of a chore. If that fails, I have to resort to authority ("please do this because I ask you to"). If that also fails, I have to use carrot and stick strategy ("you will get that toy only if" or "you won't watch cartoons unless").


Can’t you invalidate all social commentary with this argument? Surely there are trends in society that can be remarked on generally.


Your theory is that all social commentary is handwavey general remarks? If so, yes, let's invalidate it.

I think effective social commentary is mostly grounded in the personal, the specific, and the (thoughtfully) statistical. Otherwise it's very easy just to project one's biases onto a complicated picture. E.g., consider whatever it is that people think is "ruining the kids" these days. In the 1700s, you know what was ruining the kids? Novels: https://www.economist.com/1843/2020/01/20/an-18th-century-mo...

It's similar to how arguments about "what God wants" go wrong. Researchers showed that when people talk about what their god wants, they're unconsciously consulting their own preferences: https://www.discovermagazine.com/planet-earth/creating-god-i...

With broad social argument, it's easy to introduce all sorts of fallacy. Humans aren't really equipped to reason intuitively about things at this scale. Especially if the point is to persuade and/or entertain, simplifying into broad "logical" arguments can paint false pictures. Andrew Gelman wrote about this today: https://statmodeling.stat.columbia.edu/2022/04/24/the-perils...


The error in your line of thinking is that you assume humans are better interpreting statistical evidence than they are broad logical arguments. I don't see any evidence of that.


It's not a error until a) you show that's the case, and b) it's material to my point.

Honestly, I don't think people are "better" at that (if such a fuzzy construction can have a useful meaning). But I do think they are more careful with it because it's harder to get right and more easy to visibly get it wrong. It's fine with me if expecting more concreteness just drastically reduces the total amount of social commentary. Even if it dropped by 99%, we'd still have more than we needed.


The author provided data and graphs to highlight the problems in America he believes are being caused by a root problem of society having low expectations for men.

He doesn't provide any data to reflect what society's expectations are. Those are just his thoughts.

That's a big distinction.


The author provides no direct data, but cited a large number of peer reviewed articles and books. For example:

In a fascinating 2012 paper titled Sexual Economics, Culture, Men, and Modern Sexual Trends, the psychologists Roy Baumeister and Kathleen Vohs wrote:

“Although this may be considered an unflattering characterization…we have found no evidence to contradict the basic general principle that men will do whatever is required in order to obtain sex, and perhaps not a great deal more. (One of us characterized this in a previous work as, ‘If women would stop sleeping with jerks, men would stop being jerks.’) If in order to obtain sex men must become pillars of the community, or lie, or amass riches by fair means or foul, or be romantic or funny, then many men will do precisely that.”


I agree with what you're getting at. The prevailing belief in social science is that it's impossible to eliminate bias from your analysis of the world. In fact, I think many social scientists think that quantitative folks are kidding themselves when they think their clever statistical methods are free from their own personal biases.


In Tokyo, nobody jay walks. In New York City, everyone jay walks. Do you think there’s (1) not the product of cultural norms; and (2) no way for someone embedded in that culture to be able to observe those cultural norms and comment on them?


One thing that really stuck out to me was the implicit assumption that "stable home environment" requires or is equal to "married couple of biological parents living together until child becomes adult".

Especially the quote where an agreement that stability is important was interpreted as agreement that marriage is important.


Virtually everyone in the world aside from a handful of declining European countries believes that “stable home environment” = “married parents.”


Declining how? Besides natural population growth, I can't think of any other relevant decline European countries are experiencing. And even if they were experiencing a general decline, that doesn't mean there's correlation with the percent of married couples vs non-married ones. Marriage or civil union doesn't change the stability of the couple ( besides the fact that the former usually implies a party with a lot of people which could be expensive).


It’s especially jarring in contrast to Rayiner’s other comments in this conversation are about how Asian Americans are such economically successful go-getters compared to lazy white people due to their culturally superior family structure or something.

Rayiner: have you looked at the demographic pyramid in South Korea, Singapore, Japan, Taiwan, or urban China recently? https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/So...

Or if we want to talk about places where “traditional family values” (i.e. opposition to women’s rights) poll very high, how about the demographics of Russia?

The demographic decline in “a handful of European countries” is substantially a matter of time since industrialization, access to birth control, urbanization, female literacy, amount of immigration, housing prices, etc. more than ethnic/cultural/religious origin, and it is going to land on everywhere else in the world (USA, South Asia, the Middle East, Latin America, Africa, ..) soon enough.



The evidence is that married couples are more stable than unmarried couples.


Maybe you could share this evidence instead of sharing an anonymous assertion


Sure. I'll also show you how, so you could do this yourself in future.

I googled "stability of cohabiting couples". This led me to Wikipedia [1]. From there I hit the 2002 CDC report "Cohabitation, Marriage, Divorce, and Remarriage in the United States" [2]. That provides the following statistic:

"The probability of a first marriage ending in separation or divorce within 5 years is 20 percent, but the probability of a premarital cohabitation breaking up within 5 years is 49 percent. After 10 years, the probability of a first marriage ending is 33 percent, compared with 62 percent for cohabitations."

I wondered if that had changed since 2002, so I hit Google Scholar and searched for articles after 2010. A 2020 article discussed cohabitation broadly. I scrolled down and found a 2018 article [3]. (There's an ungated PDF elsewhere if you need it.) They look at 8 countries including the US. Their findings: "cohabiting couples who do not subsequently transition to marriage... consistently have the highest predicted probabilities of separation within 5 years." Some of the gaps between cohabiting and married couples disappear if you control for (e.g.) education and other demographics.

[1] https://en.wikipedia.org/wiki/Cohabitation#Likelihood_of_spl... [2] https://www.cdc.gov/nchs/pressroom/02news/div_mar_cohab.htm [3] https://read.dukeupress.edu/demography/article/55/4/1389/167...


It's puzzling to me that you are getting downvoted instead of responses when it seems like your comment follows the whole progressive comment Hacker News thing... Or whatever it is they are going for this week.


i can certainly think of cases where the children and one parent are really much better off without the second


I had an unstable family and a lot of patchwork in my youth. Won't recommend it. It doesn't have to be negative, but it often comes with compromises. And children aren't stupid, they can leverage the conflict of their parents, but it isn't necessarily for their best in the long run.

I heavily dislike the illusionary idealism from some for something that can be quite a lot of work. The state of marriage is pretty much not relevant though. At least in my opinion.


Yes it happens, but isn't the rule. On average, it's ideal to have two happy, loving parents. But only on average!


Thinking in terms of averages and correlations should not justify absurd oversimplifications.

The average human being has 1.99 eyes.


It seems you might be missing the larger point and getting hung up in pedantry. Try taking a deep breath and a step back to consider the bigger picture.


They basically said stable relationships are more stable than unstable relationships and you want evidence?


Stable relationships are possible without marriage. Some people view these as synonyms and others see that as a clear mistake.


Oh sorry I read their comment incorrectly


Why are the only options "married couple" or "unmarried couple"? Or even "married couple" or "single parent"?

Why can't broader family structures be considered, and be stable?


Those are the options that have significant data.

No one knows how other models work. However, note that "stable" comes from the data. Maybe other models are stable, maybe they're not. Without data, it's simply unknown.


I believe Harvard did a study that showed that two parent households were more strongly correlated with child academic achievement than other factors. Granted that's not married couples or biological parents, but two parent households. And academic achievement is only one measure of success.


Stable home environment = GOOD married couple of biological parents living together until child becomes adult

Stable home environment = GOOD biological parent until child becomes adult (if other GOOD parent dies, not leaves)

Leaves = child trauma, parent BAD = child destructive behaviour

One GOOD parent dies = child trauma, but lesser extent

GOOD = morally, respect, supportive, nice, kind, good-feel stuff

/eli5

Lesson: Marry not for looks, but personality eg. Johnny Depp and Amber Heard


The expectations are coming from our exposure to apps, articles, videos, education and opinions. It's not all in the author's head.

I'm not at all sexually frustrated like most men and yet I still feel all of the same things.


It's funny you'd say "that’s his perspective of what the world thinks" when he's an academic doing a PhD on the subject chatting with other academics about the same topic.

I mean clearly psychology is a lot of "our area of study observes X and attributes Y as a part of theory Z". It's not a hard science where objective, absolute, undeniable measurements can be made.

But it's not some random dude just pontificating about social structures on the internet.

By your measure we should just throw all the great philosophers works in the toilet because "that's their perspective".


Perhaps 10 years of existing within the system led you away from the more revolutionary perspective and towards the status quo. I would be curious to see the blog post you wrote, I can't find it in your submissions.


I hope I never find myself popping out of trap doors to defend the status quo like they are.


Are you actually disagreeing with the author? Or are you just saying the author is forming these perceptions in his head?


Hm. What about other things though, which are not the job, but still require effort/work? Like working on free software, working for a social project, being politically active, doing things of charity reasons ... Those don't require one to define oneself in terms of how far one has gotten in their career, but they actually add value to society. In many cases adding more value to society than the actual job. I think it's quite OK to define ones worth using such measures. We all live in a society. People should ask themselves more often how much they contributed to the well-being of society.


Volunteering tends to be an elite activity anyway. When people have to work multiple full-time jobs just to survive, it's just not very helpful or meaningful to ask whether they might find their inner fulfillment by helping out at the local animal shelter.


> elite activity ... full-time jobs just to survive

That's a heck of a false dichotomy. People are either billionaires or working at mcdonalds now?


Awesome and congrats. We started using MkDocs for https://aqueduct.io/docs/, and have since used it for a ton of projects. Some things that we found really useful were that it indexes all of your content for full text search automatically, and it’s stupid simple to deploy it to gh-pages. With a minimal amount of scripting, we push to a mkdocs source branch and it builds and deploys nearly immediately. It has saved us a ton of time and delivered tremendous value.


Is that more efficient than building locally and pushing changes to a repo?


I’ve found that I’m at least more willing to make quick typo fixes and deploy them when I just have to make the change locally and do a single push. This is especially true (for me) when there is some additional web content that is not generated by mkdocs.


Ditto on generic methods both changing the game for Dart and being necessary. I spend most of my time in Dart, Swift and ObjC, and I've built serious applications in Erlang and Java. All of which I like for different reasons.

My opinion is that Dart's type system is the optimal type system. It allows for statically typed API surface, but at the same time, I can still add some dynamic voodoo under the surface and enable productive meta-programming.


As a far as I can tell, an "optional type system" is just an unsound type system with a marketing name. Any decent static type system would allow one to progressively increase the level of typing, the weakest form being using a Variant type to hold all other types. The advantage here is that any invariants/proofs that are captured in the system are not compromised by unsoundness.


    > As a far as I can tell, an "optional type system" is
    > just an unsound type system with a marketing name.
It is a term with a specific meaning. The key bit separating it from both gradual typing and a static type system with a dynamic type (like Scala or C#) is that in an optionally typed language, the type system has zero runtime effect. If you were to take a source file and mechanically strip out all of the type annotations, the resulting program behaves identically to the original one.

Dart 1.0 was an optionally typed language. Dart 2.0 is not -- we've gone to a mandatory static type system (with lots of inference and a dynamic type). The limitations of optional typing are simply too onerous, and it's just not what users expected or want.

    > Any decent static type system would allow one to 
    > progressively increase the level of typing, the weakest
    > form being using a Variant type to hold all other types.
That's the dream of optional typing and gradual typing. In practice, I have yet to see a language that does this harmoniously. It sounds simple, but things quickly get very complex when you start working with generic types and first-class functions because the boundary between the untyped and typed code gets very strange. To keep the guarantees you expect inside your typed code, you have to figure out how to handle untyped data that flows into it. That gets nasty very quickly when that untyped data may be an instance of a generic class or a function.


> To keep the guarantees you expect inside your typed code, you have to figure out how to handle untyped data that flows into it.

This would be solved in a conventional static type system by forcing the user to eliminate the variant, and forcing the user to deal with the case that it has an unexpected value.

So I cannot see why even C# dynamic is necessary, except to perhaps save some thinking, but this isn't a good thing IMHO.


The dynamic type was added to C# to facilitate interoperability (ex. DLR), not so much to encourage lazy devs to get their bugs at runtime rather than compile time.


Additionally to simplify dynamic dispatch calls on COM.


I still do not understand why this cannot be done via a Variant type. Also it doesn't explain why Dart 2 has a similar feature.


> I still do not understand why this cannot be done via a Variant type.

Makes little difference, either way you need a magical type since it has to allow any method call at compile time, and then requires enough RTTI that it can check for and dispatch method calls at runtime. Whether you call it Variant or dynamic has no relevance.


Think of dynamic as a different word for Variant.

The semantic differences for OLE2 Variants vs C# dynamic mostly only exist in implementation protocols.


The problem munificent was talking about is that for more complex types you cannot write that type checking predicate you want, which would check if a value belongs to the given type and return a variant-free version of the object. For example, if you have a reference to an array of integers in the typed part of the code you need to protect against untyped parts of the code inserting non-integers inside the array. The only solution is to insert typechecks in the reads and/or writes to the array (there is more than one way to do it, with different tradeoffs in expressivity and performance). A similar problem happens with functions: if you try to give a static type to a function with a dynamic implementation you can't just make the check at that point. You also need to insert type checks after every call, to see if the return value has the expected type (and again there is more than one way to do it...)


I assume that my downvoters do not believe this can be done in a conventional static type system. So I will try to explain further.

> The problem munificent was talking about is that for more complex types you cannot write that type checking predicate you want, which would check if a value belongs to the given type and return a variant-free version of the object.

The complexity of the type should not matter to a sound type system. Assume a "fromVariant" function that unpacks the variant, it has a type: forall a. Variant -> Maybe a. Maybe is either Nothing or Just a, depending on whether the variant does indeed contain what you expect it to contain.

> if you have a reference to an array of integers in the typed part of the code you need to protect against untyped parts of the code inserting non-integers inside the array.

This "protection" is exactly what static type systems do. "Untyped code" in the context of using a static type system, is code that works with variants. So we need to pack the array of integers into a variant, where they will be suitably tagged by the runtime. The "untyped code" is free to write whatever it wants into a variant, so we must unpack it with runtime checks. The static type system forces us to unpack and assert its contents, before we can assign a specific type to it.

> The only solution is to insert typechecks in the reads and/or writes to the array

I am not sure what you mean here. When the array is packed into a variant then it can indeed be modified into anything by "untyped" code. But it should always be tagged correctly, which is the responsibility of the runtime. It will need to be re-asserted when unpacked into a specific type.

> A similar problem happens with functions

Functions should be values like any other, so my points apply to them too.

The point I have been trying to make, is that a conventional static type system will already allow for "gradual typing". I cannot see a need to use an unsound type system in order to achieve this goal.


Dart's choice of an unsound type system doesn't actually matter for those gradual typing problems we were talking about. I think you are getting too caught up in that point.

Anyway, going back to the topic, I'll try to explain why your idea doesn't work.

> assume a fromVariant function

What I was trying to say on my other post is that you can only create such a function for primitive types (numbers, booleans, strings, etc). And perhaps also for objects, if your language has something analogoud to an instanceof operator.

But for the higher order stuff like functions and mutable references you cannot write such a fromVariant function so easily! Suppose I write down a dynamically typed implementation of the identity function and pass it to some typed code that expects an int->int function. When we pass the function to the typed side we will call fromVariant on it but the best we can do at first is check if the value we have is a function (and not an integer, etc). There is no way that fromVariant can also check the function signature, to guarantee that the dynamically typed implementation will always return an integer when given an integer.

One way to solve this problem is for fromVariant to return a wrapped version of the dynamic function that checks if the returned value is of the expected type. But these wrappers can slow down the program a lot and they also mess up with pointer equality...

> the arrays

The basic problem with the arrays is similar to the one with function. The statically typed code can't blindly trust that the array will always contain the type it expect because at any moment the untyped portion of the code could try to insert junk values into the array. You will either need to do a runtime check when the dynamic code writes to the array (which slows down the dynamic code) or you need to add runtime checks when the static code reads from the array (which makes it slower than it would be in a fully static language).

Things also get extra tricky if the array contains non primitive values (functions, other arrays, etc)

---

If you are interested I can send you links to a couple of gradual typing papers. As munificent said, there is currently lots of ongoing research about this and we all wish it were as simple as you were suggesting it would be :)


> Dart's choice of an unsound type system doesn't actually matter for those gradual typing problems we were talking about. I think you are getting too caught up in that point.

I was trying to show that "gradual typing" should be possible in any reasonable static type system, without resorting to unsoundness. I do concede that there is probably a definition of the term "gradual typing" out there that I am not strictly adhering to.

> Suppose I write down a dynamically typed implementation of the identity function and pass it to some typed code that expects an int->int function. When we pass the function to the typed side we will call fromVariant on it but the best we can do at first is check if the value we have is a function (and not an integer, etc).

If the best we can do is tag it as a function, then fromVariant would unpack it to a function with type Variant -> Variant, which represents all dynamically-typed functions. When we call this function, we indeed would need need to assert the outputs.

> One way to solve this problem is for fromVariant to return a wrapped version of the dynamic function that checks if the returned value is of the expected type

Agreed. Although the danger of this is that you have a bomb waiting to go off inside some unsuspecting piece of typed code. The alternative to to acknowledge that it is a partial function in the type, e.g. the Variant -> Variant function becomes Int -> Maybe Int, or similar. The point is that we are solving these problems using conventional static typing. You haven't yet convinced me that this doesn't work.

> You will either need to do a runtime check when the dynamic code writes to the array (which slows down the dynamic code) or you need to add runtime checks when the static code reads from the array (which makes it slower than it would be in a fully static language).

It sounds like you are concerned with performance and efficiency, that may indeed be an issue, but it's orthogonal to the type system. My own position is that if one wants performance, then don't write untyped code!

> If you are interested I can send you links to a couple of gradual typing papers. As munificent said, there is currently lots of ongoing research about this and we all wish it were as simple as you were suggesting it would be

Thanks for the offer, I am definitely interested. I suspect that the outstanding issues are around usability and efficiency. I stand by my original point that "gradual typing" should be possible in any sufficiently expressive static type system.


> I do concede that there is probably a definition of the term "gradual typing" out there that I am not strictly adhering to.

The basic goal of gradual typing is that you can have your program be fully untyped or fully typed or somewhere in between and it will behave in a sensibly in all cases. Adding types to a program does not change the result of the program, except that sometimes adding types may cause new type errors to show up.

> the best we can do is tag it as a function, with type Variant -> Variant

This is very limiting. With this restriction, you cannot assign an accurate static type to a function with a dynamically typed implementation, which means that you can't use dynamically typed libraries from inside statically typed code.

Similarly, you cannot use statically typed objects inside the dynamically typed code because all objects that can be touched by the dynamically typed part of the code must have all their fields typed with the Variant type.

> Although the danger of this is that you have a bomb waiting to go off inside some unsuspecting piece of typed code

Technically the bomb is inside the dynamically typed part of the code :) One of the nice things you can get with a well though out gradual typing system is a guarantee that the line number in any of the type error messages will point to the dynamically typed part of the code. We call this blame tracking.

> It sounds like you are concerned with performance and efficiency, that may indeed be an issue, but it's orthogonal to the type system

Yeah, but one of the big challenges with gradual typing today is that i we try to be flexible (letting programmers add types wherever they want) and sound (with a soud type system, blame tracking, etc) all the implementations so far have had very bad performance, often running much much slower than the untyped version of the code would (with factors like 5x or 10x slower being common).

When the performance gets this bad it effectively means that your only options are to have fully typed code or fully untyped code, because almost anything in between will run up super slow. Which kind of ruins the whole point of being able to gradually add types to your program.

> Thanks for the offer, I am definitely interested.

You can get very far by searching google scholar for "gradual typing. One good place to start out would be Siek and Taha's original paper on gradual typing for functional languages[1] and Sam Tobin-Hochstadt's PHD thesis on Typed Racket[2] (which used to be called Typed Scheme back then). For an example of the challenges of gradual typing in practice, this recent paper [3] might be interesting.

[1] https://cs.colorado.edu/~siek/pubs/pubs/2006/siek06:_gradual...

[2] http://www.ccis.northeastern.edu/racket/pubs/dissertation-to...

[3] http://www.ccs.neu.edu/racket/pubs/popl16-tfgnvf.pdf


Thanks for the references. It looks like "gradual typing" is about trying to retrofit types to dynamic languages. That is certainly harder than starting with a statically-typed system and adding dynamic types (my preference). The latter clearly works, as evidenced by e.g. C# and Dart 2.

> With this restriction, you cannot assign an accurate static type to a function with a dynamically typed implementation, which means that you can't use dynamically typed libraries from inside statically typed code.

It depends what you mean by an accurate type. A accurate type for adapting your example would be to expose Variant -> Variant as Int -> Maybe Int, thus capturing the partiality. I concede that Int -> Maybe Int cannot be used in a function that expects Int -> Int, but that is how it should be! An untyped language cannot provide me with a function of Int -> Int.


Indeed, gradual typing and optional typing are more along the line of adding types to a dynamic language. The kind of dynamic typing you were talking about looks more similar to the Haskell's Data.Dynamic type or the "dynamic" type in C#. It works great to add some dynamicity to the language (for example, to interoperate with a dynamic API, or to code metaprogrammey stuff like reflection and serialization) but you can't use this to bridge the full continuum between static typing and dynamic typing, which is the design space that languages like Dart and Typescript are trying to tackle.

> It depends what you mean by an accurate type.

The gradual typing literature tends to prefer having partial functions (that might raise well-behaved type errors at runtime) because it eases the transition between typed and untyped programs. You can add or remove type annotations without having to simultaneously add and remove tons of explicit pattern matches against Maybe. But this isn't the part I was talking about.

The key issue is that when you cast a function from (Variant->Variant) to (Int->Maybe Int) you need to add a small wrapper around the dynamic function that converts the input from Int to Variant and converts the output from Variant to Maybe Int. In theory it is simple but in practice all those wrappers can add up really quickly...

Functions are the simplest case where these higher-order type-conversion issues pop up but in my experience things are actually the most thorny when it comes to mutable objects and arrays. The extra type checks and conversions around every property read and write can add a ton of overhead. And from a semantics point of view you need to be careful because if your implementation is based around wrappers it could end up messing with object identity (like Javascript's === operator or Python's "is")


This is exactly right. It's a subtle, complex problem that isn't apparent until you start really digging into these kinds of type systems. It's really hard to define the right membrane around the untyped code and values as they flow through your program into typed regions while giving you the safety and performance you expect inside the typed code.


I respectfully disagree. The "right membrane" around any untyped value is a Variant type. A static type system would then stop you making any assumptions without unpacking and asserting its type. If we don't want variants and just want to defer type errors until runtime, then this is possible too (GHC Haskell can do this).


GHC's Dynamic type can only contain monomorphic values, it can't handle polymorphic stuff.

GHC also considers Dynamic->Dynamic and Int->Int to be incompatible types, which is not quite what one would want in a gradualy typed setting.

Haskell also sidesteps the difficulties that come with mutability in a gradualyly typed setting.


> GHC's Dynamic type can only contain monomorphic values, it can't handle polymorphic stuff.

Sort of. If you wrap a polymorphic type inside a monomorphic one then it can handle it fine, for example

    data Mono = Mono (forall a b. a -> b -> a)
(But perhaps you know this)


I did not mention GHC's Dynamic type. I mentioned GHC's deferred-type errors as an alternative technique to "gradual typing". I believe there were plans to implement a polymorphic version of Dynamic, but it obviously wasn't a high priority. Note that GHC does not require any special type-system extensions to support Dynamic.


No, there's more to it. There's been some research in recent years on the actual benefits of types and the results are less straightforward than some people think.

An important aspect of type annotations, for example, seems to be that they help document the API of a module, regardless of whether they're statically checked. This is especially relevant with respect to maintenance tasks.

Conversely, the benefits of static type checking to get correct code initially seem to be a lot murkier. There seems to be a cost associated with static types and that is that it takes longer to write code; time that can be spent in a dynamically typed language on other validation work (remember that types do not even remotely capture all software defects).

This means that it is definitely worth exploring the benefits of optional/gradual/soft typing vs. static typing and/or runtime type checking vs. compile-time type checking.

Conversely, the assumption that static types are an unalloyed good is not currently borne out by the evidence (in part, of course, that is because the evidence is inconclusive).


There seems to be a cost associated with static types and that is that it takes longer to write code;

But this is not the only cost that matters, indeed might not even be a cost.

I've gone from being neutral about static vs. dynamic types to being pro-static types -- and the change happened when maintenance became a bigger part of my job.

Writing new code is now far less important to me than looking at a small part of a large system and trying to understand what is and is a not possible at that point. Static typing does not make this easy, but dynamic typing makes it far more difficult.


> But this is not the only cost that matters, indeed might not even be a cost.

I'm not saying otherwise. My point is that there's no objective way to proclaim one better than the other. This depends on application domain, economic constraints, engineering constraints, what you're doing, and so forth.

Writing Ada software that controls a pacemaker has totally different requirements than exploratory programming in Jupyter that mostly deals with integers, floats, and arrays and matrices thereof, for example.


> I'm not saying otherwise. My point is that there's no objective way to proclaim one better than the other.

Very true. But any analysis that emphasizes writing code over maintaining it will systematically bias itself in favor of dynamic typing.

Interestingly I have had the converse debate with some of my colleagues, who have learned to hate Python because they keep having to debug existing systems. I try to tell them that it is an excellent language for the kind of one-off data-analysis that I did when I was a scientist.

They don't believe me, because here among software engineers, seemingly innocent 400 line scripts keep growing into giant, decade old, 100kloc typeless monstrosities.


> Very true. But any analysis that emphasizes writing code over maintaining it will systematically bias itself in favor of dynamic typing.

This is not what the studies do. There is no emphasis on anything. They look at how people do on a number of different tasks with different typing options and report the results.

Also, it's not just dynamic vs. static typing. Gradual and soft typing is also of interest, because it allows you to turn dynamically typed code into statically typed code without a complete rewrite.


Type annotations are brilliant for documentation, and it does matter if they're checked or not, because otherwise they're just comments, and we all know comments become wrong over time. If the compiler doesn't enforce your type annotations you can't trust them.

The sweet spot for me at the moment is a language which is fundamentally static but has good type inference so that you don't actually have to mention types all the time.

Haskell's pretty good at this, although because it's possible to write many Haskell programs without actually mentioning a single type anywhere it can be a pain to read the results. Rust deliberately constrained type inference so that you have to have type annotations on functions, which makes sure your interfaces don't get too murky when reading the code.

I'll go with the idea in another reply that static typing really starts to show its benefit in long-lived code bases under maintenance.

Certainly a static type checker makes refactoring a lot easier, in my experience.


> Type annotations are brilliant for documentation, and it does matter if they're checked or not, because otherwise they're just comments, and we all know comments become wrong over time. If the compiler doesn't enforce your type annotations you can't trust them.

Note that I wrote statically checked. You can also check them at runtime (basically as a form of Design by Contract), which is what Dart does at the moment.


You could, but why should you spend the cycles on that at runtime when you could've done it just once in the compile phase and errored out at a useful time instead of six weeks later when you hit the one branch you neglected to write unit tests for?


Because designing a type system that is sound and expressive and simple is bloody hard. Haskell frequently has a number of `{-# LANGUAGE ... #-}` directives at the top of source files, OCaml has acquired no less than six different ways of doing runtime polymorphism: as an extreme case, the module system has morphed into a fully functional OO system in addition to the one OCaml already has.

Runtime type checks allow you to greatly simplify the difficult parts of the type system or make it more expressive.

People often forget how many expressiveness shortcuts we take so that our type systems keep working out. We have integers (which are in actually practice often just elements of a finite ring), but introduce natural numbers and suddenly a lot of static type checks stop working out. How about interactions between the natural numbers with and without zero? Integers modulo your wordsize vs. infinite precision integers? Can you statically check overflow or underflow? Dart has both `num`, `int`, and `double` types, and `int` and `double` are subtypes of `num`, but `int` is not a subtype of `double`; readAsBytesSync() returns an `Uint8List` that conforms to `List<int>`. From a mathematician's perspective, computer science type systems are usually painfully simplistic. They usually capture something about the representation of the data, not its actual mathematical properties. Their role is often is to prevent undefined behavior, not to capture the actual semantics. Computer science typing often tends to be opportunistic rather than semantically oriented, based on what's easily possible rather than what one wants to express (see the entire family of covariance issues).

As an extreme example, consider GAP's [1] type system. We're dealing with computer algebra here, and some of the types simply cannot be captured at compile-time. Any type annotations would have to be checked at runtime, other than the trivial ones (and even integers are basically a subtype of the rationals or any polynomial ring with integer coefficients).

If I want to do effective implementations of matrices and vectors over finite fields, I pack several finite field elements into a machine word and extract them; no static type system in existence has even remotely the power to statically typecheck these operations for me, unless layered over a ton of unsafe code, and then only for some languages.

From the computer science side of things (I have a background in formal methods), type systems are underpowered specification languages that just pick a small subset of a formal spec that happens to be convenient to prove. They can express only a subset of program behavior (compare what types in even (say) Haskell do to a full-blown formal specification in Z) and often not even the interesting ones. As a result, I don't particularly stress out over whether checks only occur at compile time. Runtime type checking is simply a different tradeoff in that you move from the set of types that you can build a sound type system around to predicates that can be expressed at runtime. It's simply a different set of tradeoffs.

[1] http://www.gap-system.org/


> There seems to be a cost associated with static types and that is that it takes longer to write code

Perhaps. As someone who has used Python and Haskell for roughly equal amounts of time in my professional career I definitely find Haskell faster to write in.


mypy is getting good (from haskell's perspective that would be 'barely passable', still a great improvement from what it used to be), been using it actively for the last year and advocating it for 6 months and seeing nice ROI even considering it's warts.


I don't think I've seen a Variant type in any language that doesn't store some form of type information at runtime (unless you count C void pointers, which I don't), and "any decent static type system" incurs no runtime overhead in the common case.


Of course variants would need to tag their payload, but this is what all dynamic languages need to do anyway. My point was that such dynamic behaviour can be done without resorting to an unsound "optional type system".


Isn't Dart compiled to JavaScript? As far as I can tell by playing around with DartPad, a normal int in Dart carries no runtime information indicating that it is an int (other than the fact that it is a JavaScript-level int).

If you wanted to add variants to Dart, you'd either need to add this runtime information, or limit the Dart typesystem to be no more and no less than what the JavaScript typesystem already stores dynamically.


Surely JavaScript itself tags ints?!


It tags numbers, yes, but actually it doesn't tag ints in particular - there is no integer type in javascript, just a 64-bit floating point one. (This is why asm.js code sticks |0 after every arithmetic operation involving integers: that forces rounding the number as if it were an integer, and therefore allows optimizing the expression to use integer instead of floating-point arithmetic.)

If Dart wants to distinguish ints and doubles, it needs to keep track of that on its own; if it has a JavaScript variable x and needs to know calculates x/2, it won't know whether to round it as if it were integer arithmetic, or return a floating-point value. Usually it is enough to do this at compile time (the function calculating x/2 knows whether it's halving a Dart-level double or a Dart-level int), and so there's no need to make x an object that remembers its own Dart type.

Also, even if JavaScript distinguished ints and doubles, a higher-level language is likely to want to have multiple kinds of things with an int representation: bools, enums, bitfields, Unicode scalar values, etc. Again, ideally that information is tracked at compile time and the knowledge of what to do with an int representation is inserted into the compiled code, and so no metadata needs to be stored at runtime.


Writing well-typed code means writing a proof of some set of properties over the code. There are three assumptions here:

(1) creating abstractions that are typed correctly is easy

(2) the existing abstractions you're building from are correctly typed

(3) the properties that the type system proves are valuable enough to reward the effort

Whether (1) is true depends on your type system. If it's very simple (e.g. dynamically typed), it's trivially true. If it's rich and expressive, it can sometimes be impossible to express your intent without obfuscating your types (e.g. using pointers and typecasts or polymorphism or some other loophole); and with some type systems, it's plain impossible to express some valid programs.

Whether (2) is true is a social problem. You need to have enough sensible people in your community such that you get to use List<T> rather than ObjectList with typecasts, or what have you. What's available in the runtime libraries often translates into what's commonly used for APIs in third party modules, and if the library of types isn't rich enough, APIs will use loopholes or typecasts or other mechanisms that obfuscate types. Third party code turns into a kind of firewall that stops your types (and the information, proofs, they convey) from flowing from one module to another in your program.

Whether (3) is true also depends on your type system, but also on your application domain. It's in direct opposition to (1); the more you can prove with your type system, the harder it normally is to write code that proves exactly the right things, and neither more nor less (the risk is usually too little type information flowing through). If the properties being proved are important to your application domain, then that gives a big boost to type systems that can prove those properties. If it's just because it gives you warm fuzzies, and testing is what proves interesting things because interesting properties (in your domain) are harder to prove with a type system, then rich type systems are less useful.

Personally, I was once a strong proponent of rich expressive type systems. But I eventually learned that they can become a kind of intellectual trap; programmers can spend too much time writing cleverly typed confections and less time actually solving problems. In extremis, layers of abstraction are created to massage the type system, often in such an indirect way that the value of the properties being proven are lost owing to the extra obfuscation. Now, I see much more value in a strong type system for languages like Rust, but much less value at higher levels of abstraction. That's because many of the properties being proven by Rust (like memory safety) are already proven in high-level dynamic languages through GC and lack of pointers and unsafe typecasts. Whereas application-level properties being proven through type systems are seldom valuable.

Documentation and tooling are much stronger arguments for types in high-level languages than proofs; ironically, this means that the type systems don't need to be sound, as long as they're usually OK in practice!


As a whole, you are correct. Pragmatically it allows defining the boundaries of soundness.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: