Stack Overflow gets series E funding for $85M - <AUTHOR> https://stackoverflow.blog/2020/07/28/ceo-quarterly-blog-post-3-series-e-funding/ <comment><USER2> As a pretty avid answerer on SO (>5k rep, >100 answers), it's surprising how much money people are willing to throw at this. The staff's apparent inability to interact positively with the community is a huge red flag[0], especially as the primary value they have as a brand is the size and quality of the community. I would switch sites easily if there was a compelling alternative, but I haven't heard of one.

0: [https://meta.stackexchange.com/questions/333965/firing- mods-...](https://meta.stackexchange.com/questions/333965/firing-mods-and- forced-relicensing-is-stack-exchange-still-interested-in-cooper)

<comment><USER3> Part of the difficulty SO faces is that there's sort of two similar but distinct problems that it's meant to solve, and as such there is no one "community". It's simultaneously a place to ask programming questions and get answers to them, and it's a repository of commonly asked programming questions with curated answers. The heavily engaged section of the community represented by your linked thread tends to focus on the latter goal, and the things they do to benefit the site for it (e.g., the aggressive closed-as-duplicate patrol) tend to be the things that makes it a hostile feeling place for the "long tail" community of new question askers and occasional answerers.

<comment><USER4> A trivial solution to this dilemma seems to be to consider stack overflow a place for the former, and have a system in place where you can vote specifically to elevate a question to the latter category. (god knows they don't mind adding stuff, with comments, votes on comments, votes on questions, on answers, votes on closing questions, votes on reopening them... – surely yet another kind of vote wouldn't bother them!)

Such an elevation may require some small edits. This adds all sorts of benefits:

1\. Given that it is now clear that the question is moving from 'this answers the question asked by the original poster' to 'this is now like a blog post, generally useful information that should score highly on google', it is completely fine to edit the question and turn it into something that no longer entirely matches the original asker. I'd even go so far as to clone the question, and leave the real question unmolested.

2\. The question (or, better yet, an answer) can be marked as obsoleted or outdated. There are huge swaths of questions on SO that have a ton of votes and an answer that was fantastic in the past, but is now flat out misleading or wrong, but it seems both onerous to begin the path of finding a few thousand people to downvote it, as well as 'mean' to the poster of that answer, and tricky for the historic purposes of the internet (imagine a fix in some source code has a comment that links to this answer!) - and for similar reasons, editing the answer so that it is nothing like the original answer is also flat out bizarre. It'd be so much better if it was possible to vote an answer as 'obsolete' or 'outdated'. But that doesn't work if SO is at odds with itself and at once a repo of common questions AND a specific question->specific answer forum.

3\. Given that an SO community now has a presumably much smaller set of questions-with-answers that have been elevated to 'commonly asked question with great curated answers', they can 'police' their fiefdom of curated general knowledge vastly better, with mods and random passersby invited to ocassionally inspect one of these curated answers and see if it still seems useful, applicable, and correct in the current day and age. It also becomes far more feasible to browse through the entirety of the curated questions list.

<comment><USER5> This already exists as "Community wiki" [0], which is almost exactly what you describe, at least in theory.

It seems like a useful feature that often has a positive effect. It's not clear to be that it's improved the general attitude of the community or of management.

[0] [https://meta.stackexchange.com/questions/11740/what-are- comm...](https://meta.stackexchange.com/questions/11740/what-are-community- wiki-posts)

<comment><USER2> The community wiki is strange to me because it completely removes the gamification aspect. If your post becomes a community wiki, you stop getting reputation. If you edit a community wiki, you get no reputation.

</comment></comment></comment></comment></comment><comment><USER6> I can't pinpoint the exact moment but I noticed I've been finding more and more answers in the official documentation, GitHub issues and project source code. Maybe Google got better at indexing docs or people started writing higher quality documentation but where I used to land on SO multiple times a day I will now visit it a few times a week at most. Also when the mentioned sources hit a search result it's almost always better quality (SO has gems for sure, but I often encounter outdated, incorrect or half solution answers and the format is not structured so that you can share your process which makes it hard to examine how someone got to that point and where to take it from there - unlike say GitHub issue thread).

<comment><USER7> One of the documentation sites that were decent since a long time but have _massively_ increased over the last years is MDN [0].

It's just incredibly well designed and their tutorials and documentation pages are friendly but thorough.

[0] [https://developer.mozilla.org/en- US/docs/MDN_at_ten/History_...](https://developer.mozilla.org/en- US/docs/MDN_at_ten/History_of_MDN)

<comment><USER6> This - unfortunately Google rarely lands there - but I use it exclusively when I need to lookup JS stuff.

<comment><USER7> Tip for those who use DDG:

You can prefix your query with '!mdn' (plus a space). To search in MDN directly.

</comment></comment></comment></comment><comment><USER8> > An Inflection Point to Accelerate the Realization of our Mission

It makes me sad to think that someone wrote this headline and thought it really meant something.

Congrats to the SO team, I guess.

<comment><USER9> Which is, of course, to immanentize the eschaton.

<comment><USER10> Hail Eris!

</comment></comment></comment><comment><USER11> Congrats to the SO team. That said, I'm struggling to understand how/why a they could possibly need to raise now a total of $153MM.

All the content is community generated so there's no costs there.

The core Exchange product is extremely templatized and I would assume be quite scale-able to spin-up as they need additional ones.

I don't believe they have much in the form of paid outbound marketing initiatives.

I'm assuming that I'm completely missing something here. Educate me. ;)

<comment><USER12> _That said, I 'm struggling to understand how/why a they could possibly need to raise now a total of $153MM._

Gotta make the work of those digital sharecroppers pay off _somehow_ : [https://blog.codinghorror.com/are-you-a-digital- sharecropper...](https://blog.codinghorror.com/are-you-a-digital- sharecropper/)

No, the fact that the blog post was written by a SO founder is not lost on me.

<comment><USER13> > This is a topic that I've spent a great deal of time thinking about, because > we happen to run a site chock full of user generated questions and answers. > The last thing I want to do is exploit Stack Overflow users for corporate > gain, even accidentally. That's horrible.

Yikes. Right on the nose...

<comment><USER11> Yikes is right. Seems like they said the quiet part out loud.

<comment><USER14> Jeff Atwood had principles, which is why the current morally bankrupt leadership wants to erase him. Stack would have been in a much better place if he'd been left in charge.

</comment></comment></comment></comment></comment><comment><USER15> It's just a shame that programmers like myself can't invest randomly in the tools we love. GitHub, StackOverflow, and DigitalOcean all would have had at least $10k from me years ago. I get the reasons why, it's just frustrating to see obviously good companies grow just like you expect them to and 100x their valuation over a decade.

<comment><USER16> I actually really like this idea. The model sort of reminds me of a cooperative. There is a cooperative for Outdoor Clothing in Canada and it had a reasonable amount of success.

<comment><USER7> These types of organizations tend to be _very_ resilient and stable [0].

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

</comment></comment></comment><comment><USER17> This concerns me. I doubt the product will actually become better with more VC money thrown at it. We will probably see things like premium content now.

</comment><comment><USER18> What's the endgame with SO here? A series F investment? Going public? Selling to Microsoft?

I would assume selling to Microsoft would be the thing to do.

But whoever buys it has no revenue model so that's tricky. Unless they're doing it for altruistic purposes.

Don't get it twisted I love SO.

<comment><USER19> At this valuation an acquisition is less likely. I would have rather expected an acquisition by Microsoft than a series E, but I guess it's too late now.

That would leave an eventual IPO as the only way out, but they'd need to break even first (or at least have a very compelling vision to break even soon). I don't see that happening with their current Teams product, which is an uncompelling entry in a crowded market.

Also, whether Teams eventually succeeds is largely unrelated to SO's unique value: the community. Teams is not valuable _because_ of the community, it's just a spin-off from their public platform. They really need to find a better path to success, because wasting $85M on the status quo is not going to get them there. Their Careers product was more interesting in this respect, but it seems they failed to achieve sufficient scale there.

</comment></comment><comment><USER20> > This is an exciting inflection point in our company's history as we > accelerate the realization of our mission

If your first line of a financing announcement is this, then I do wonder if SO has lost touch with who their target audience is.

I also struggle to see where the value actually comes from, if tomorrow all of the top 1% of posters stopped then their leverage to promote other lineups is dead.

It's a shame to say it but its another case of VC overvaluation

</comment><comment><USER21> Bit concerning they haven't been able to build a sustainable business off a website that has become more or less a canonical resource for software engineers by now.

</comment><comment><USER22> Looking at the answer-rate-over-time[0] SO benefits from the Corona pandemic.

0: [https://data.stackexchange.com/stackoverflow/query/303570/an...](https://data.stackexchange.com/stackoverflow/query/303570/answer- rate-over-time#graph)

<comment><USER23> wow, it looks like the answer rate is going down significantly. It looks like it slipped a bit in 2014/2015 but there's a big decrease in 2019 around the time of the Monica Cellio incident.

</comment></comment><comment><USER24> remember that the database to SO is released under CC.

[https://www.brentozar.com/archive/2015/10/how-to-download- th...](https://www.brentozar.com/archive/2015/10/how-to-download-the-stack- overflow-database-via-bittorrent/)

</comment><comment><USER25> Oh boy, Series E.

If you raise Series E it means either you are doing extremely well or your business is drowning and you need a lifesaver. A business that is doing really well typically raises much more than 85M, so I'm going to go with the latter option. In which case, also, an 85M lifeline at this stage means you are not worth that much alive ...

IMO I can see in a very clear way the downfall of SO happened, they undermined the community that made them rise in the first place. Their most valuable asset _IS_ the community, way more than the knowledge base they have accrued. People no longer feel comfortable going there. I wouldn't be surprised if their MAU is going down.

Too bad for Atwood which I think is responsible for the culture that SO initially had, and which lured many of us to contribute. Since he left, it's hard to put it in words but _something_ changed. I don't think he's happy with how the site turned out to be down the road.

tl;dr; what this series E means is that SO will become the new experts- exchange sooner than later.

</comment><comment><USER26> SO is over 10 years old now and hasn't changed much - I'm wondering what makes the investors think that profits will come and now is a good time to invest more money.

</comment><comment><USER27> Stack Overflow is the greatest programming resource ever made and the people who answer questions in a manner that helps also teach the OP are the true heroes.

</comment><comment><USER28> How difficult it would be to build a decentralised SO?

I know it's the valuable knowledge base and contributing users that will be missing in our new service but we gotta start somewhere.

I guess it would be easier to onboard Software developers on a decentralised service than general public.

Some ideas for this service:

1\. Users can choose to keep knowledge base locally for topic of their interests

2\. A terminal based interface for quick answers

<comment><USER29> I guess the difficult part is not the technology, it's not like SO is doing anything too fancy on that front. But the community, growing and getting people to answer questions, that's something we'd have expected FSF to grow, but somehow that community couldn't.

<comment><USER30> I agree that building a community is very hard, but at least there are success stories to look at. I can't name any successful, Google-accessible decentralized system.

</comment></comment></comment><comment><USER31> I wonder if they have received any buyout offers lately. Their business model doesn't seem to be as successful as it should be (given how much their site is used), but it seems like they'd be an ideal candidate for a company that wanted to make inroads with developers, like Microsoft. And the site does already run on IIS. Perhaps I should start a Bureau of the Atomic Scientists- esque doomsday clock[0] for the minutes until Microsoft buys Canonical and Stack Overflow and completes their trifecta of modern dev tooling companies with GitHub.

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

<comment><AUTHOR> I want to say "with the direction that SO Teams took - no."

Its not that SO Teams is a bad thing, just that it isn't the thing that the other companies want to buy.

Look at Microsoft - its got a large work productivity suite (MS Teams, Office, Sharepoint) - all of which are more more mature than Stack Overflow in terms of developer experience. And then there's GitHub and its got GitHub Discussions ( [https://github.com/github/roadmap/issues/104](https://github.com/github/roadmap/issues/104) ) on its roadmap for the near future. SO would be conflicting with that... and then there's the rest of the SE network that has nothing that a hypothetical MS buyer would want. And SO Jobs competes with LinkedIn. At best it would be an accuhire... but a lot of the developer knowledge has either left or been fired.

Google is the other option. But then... Google is trying to do its own venture into worker productivity. SO (and the SE Network) would kind of help that and making it searchable... but its really not that interesting of a target beyond all that content (and Google doesn't really like managing content of their own). And elsewhere on HN today you can see what Google thinks of maintaining information... why would they want to buy it when they can get search clicks for free? Google has no need to buy SO as an accuhire... and again, most of what is there seems to be sales rather than engineering (look at job postings [https://stackoverflow.com/company/work- here#positions](https://stackoverflow.com/company/work-here#positions) )

The blog post seems to suggest that SO wants to go up head to head with Zoom, Atlassian, Slack and Microsoft for the team productivity area. That feels like a "too little, too late" for the direction that they're looking at.

As an aside - look at the benefits on [https://stackoverflow.com/jobs/companies/stack- overflow](https://stackoverflow.com/jobs/companies/stack-overflow) \- the free lunch from in house chef and proclaiming great chairs feels (at least to me) more of a startup that is spending money because it got it.

</comment></comment><comment> user00012-ab A dystopian science fiction story where Yahoo buys Stack Overflow, destroys it like all their other products, and in the doing so, no one knows how to program anymore and society collapses.

</comment><comment><USER29> "The next generation of digital applications" buzzbingo!

</comment><comment><USER32> SO is an amazing product. I learnt a lot from it. But in the last few years, I have been directed more towards Github, whenever I face issues with a particular library or tech stack. I see those questions already being asked/answered via github Issue.

I am not sure, what is the endgame for SO. But, Github could become a strong competitor in this space. Its become lot more easier to copy paste troublesome code/error and see resolution in github.

</comment><comment><USER33> I prefer using forums. They feel more personal, inviting, and calm. My bookmarks include top forums for every language I use. I would rather wait a few hours for an answer than bother with SO when I have questions that don't seem to have been asked before. SO is hostile even after years, and years of use I still always feel as though I am walking on eggshells when I post questions to SO. That's not okay.

</comment><comment> Fire-Dragon-DoL To me the problem with stackoverflow is the same. It's a useful place to find examples and simple answers to almost-documentation kind of thing, but all the hard questions without a clear possibile answer is not allowed. This made the website less and less useful over time.

</comment><comment><USER34> Haven't used SO at all for over five years now. Eventually I'll look up some weird edge case answers, but the trust I had on the site and it's content is long gone.

This smells like a corporate move to get more money on executive's pockets, nothing more. A shame that SO was allowed to get to this state.

</comment><comment><USER35> Congrats to them. Let's hope it doesn't destabilize the product too much.

<comment><USER36> one the bright side, if it's destabilized _enough_ then someone would be incentivized to build a better one.

<comment><USER37> How do you make a better one? It's a human problem, a social interaction problem, not a tech one. Novices want to ask all the didn't-even-read-the- official-docs and don't-want-to-do-my-own-homework questions they want, and the more experienced users don't want to see those kinds of low-bar questions.

In my not so humble opinion, the mods on SO gets a lot of shit, but I think they're not strict enough. SO is absolutely brimming with low-bar questions and answers. Best case that is all noise, worst case, the wrong and misinformed answers (by people portraying expertise) ends up in production code.

<comment><USER36> much like how there is a feature for linking to duplicates, there should be an official feature to link to a section in the official docs.

It should even be in your face when answering a question. A culture of posting sources/references.

</comment></comment></comment></comment><comment><USER38> What about all the other stack exchange sites? Are they separate and not deserving of support because they are not about software? Is it because software makes money so a public support group for software is monetizable?

I miss usenet.

</comment><comment><USER39> I've stopped contributing to SO.

SO is simply going the same route as Experts Exchange (if you're old enough to remember it). It has amassed a significant amount of knowledge (for free!) that they'll some day hide behind a paywall and sell to desperate seekers of that information.

<comment><USER40> EE used to be the top search result for a long time... Hope SO don't go out in the same way.

</comment></comment><comment><USER41> Congrats. Despite all the complaints about the nastiness of their mods, they've generated billions of dollars of programmer productivity to the world.

<comment><USER42> _> complaints about the nastiness of their mods,_

I didn't downvote your comment but I think it would be better if we don't phrase it in a _" us vs them"_ manner such as _" their mods"_.

The mods are _us_. The mods are mostly unpaid fellow users that passed a points threshold[1] to do certain admin tasks. E.g. 3000 points to cast "close votes" isn't that high.

If we don't like what the "mods" are doing, maybe that old saying is relevant: _" we've met the enemy and the enemy is us."_

[1] [https://stackoverflow.com/help/privileges](https://stackoverflow.com/help/privileges)

<comment><USER43> its mildly more complex. As someone that never enjoyed the moderation angle that SO took (forgoing community for correctness and generally tending towards librarian stuffiness), to me the mods are most certainly not "us".

<comment><USER37> If the mods on SO were more lenient than they already are SO would be completely useless, as opposed to barely useful, as it stands today.

So many of the low-effort questions and answers belong in forums or IRC channels, or just ask your colleague, FFS. Or, you know, read official documentation? Get an understanding of the subject before you start making posts and just wait around for an answer. But I guess people could actually learn something, then.

Learning is not what many developers seem to use SO for, they just want a quick fix. Something to copy-paste. It leaves them with no understanding and increases the shittyness of code everywhere.

We need a higher bar for programming. If you can't get your work done without SO, you should be fired.

<comment><USER43> Way more people are on SO than venture into IRC or are now split up on discord. SO had the opportunity to be that community and to be that helping hand, the community were willing (people like me!) but due to the attitudes of some, like yourself (j'accuse!) we closed ourselves off to that because we thought being "correct" was more important than helping.

SO could have easily been both but people just overly fixated on the concept of building a perfect library of knowledge.

</comment></comment></comment></comment></comment><comment><USER44> I thought it was bought by Microsoft but I guess it's just Mandela effect playing trick with my mind.</comment>


Programming as a Way of Thinking - <AUTHOR> https://blogs.scientificamerican.com/guest-blog/programming-as-a-way-of-thinking <comment><USER3> > With a computational approach, we can go "top down", starting with libraries > that implement the most important algorithms, like Fast Fourier Transform. > Students can use the algorithms first and learn how they work later.

This is exactly how I understood it. Three years back, WebAudio API was a new addition in browsers and I decided I should make something with it. I settled on building a Whistle Detector using a cited research paper as my basis. I barely understood anything in that paper and had to dig into DSP, FFT and other basics to get around. As I had no external help, I struggled plenty but managed to complete it after two weeks [1].

Funny enough, we had a DSP course which never made sense to me. Two weeks into my puzzle I walked away with more useful knowledge than the course ever did. What has always motivated me to learn is the application. I can work tirelessly if there is an interesting thing to build, even if I have to go through mundane theory. But, I find it utterly tedious to learn theory with no immediate goal in mind.

[1]: [https://stuff.shubhamjain.co/whistlerr/](https://stuff.shubhamjain.co/whistlerr/)

<comment><USER4> That's a very interesting comment to me because I may be perhaps the opposite. I got a slow and frustrating start learning application development--I wasnt getting it. I felt I was following instructions on how to write esoteric insutructions and not understanding how it worked. I found the book Code by Petzold and read it. Then I discussed some of this with other developers and realized they were even more clueless than I was.

It seems some people love theory/understanding while some love building something practical/useful.

<comment><USER5> I learn best when I build something that illustrates the theory. Reading gives me a dim idea, but building something (and freely experimenting on the way) teaches me how it works.

<comment><USER6> I'm the opposite, and had to be persistent with searching for the right learning tools for programming, with the least terms and behaviours left undefined. If there are such things as 'learning styles', theoretical learners vs applied learners is the most intuitively clear distinction. However choosing a teaching and measurement paradigm that fits both without a lot of wiggling is not so intuitive...

</comment></comment></comment></comment><comment><USER7> I had a math teacher at my high school who used python and SAGE to teach us pre-calculus as well as programming, computational thinking and some mathematical logic. He was an absolute genius and I wouldn't be where I was if it wasn't for him - unfortunately the school saw him as a threat to the standard model of teaching and drove him insane before he just quit. I hope he's doing ok.

<comment><USER8> I've had thoughts like this, using sci-py to teach kids how to hack math. Our education system is kind of sad face.

<comment><USER7> It was definitely cool - he had us writing python functions to estimate the area under a curve (and then visualize it), and other things I don't quite remember at this moment. Once he made us define math functions just based on there being a 0, and a successor function, which happens to be what I'm doing in a graduate Math Logic course at my university.

<comment><USER4> That's really incredible.

It's sad to see educators like this get pushed out of their field. I had some incredible teachers as well, but also some awful ones. There needs to be greater competitive components added to the education system, such as statistically significant pupil success in education and career outcomes.

</comment></comment></comment></comment><comment><USER9> In the beginning of 80s there was a concept called "Programming is the second literacy" [1] introduced by Soviet computer scientist A.P. Ershov. Nowadays it's obvious that there is a huge demand in special programming tools not only for professional programmers (C++, Java..), but for domain experts who use algorithms too (Python, DSLs..).

There is a popular objection that "not everyone should be able to code". But it depends on the "to code" definition. A good example here is with game designers. They may not know how to do low-level coding, work with 3d math or use C++ templates. But still for a really good game designer it's very important to have algorithmic thinking and they need to have a tool for testing their algorithmic ideas on the computer.

As for Python, there is an issue: it's hard to find examples of good style of Python programming (I think only few of us actually learnt Python with help of textbook). Some time ago I was happy to find notes by Peter Norvig about Python and about comparing Python and Lisp. His code is very elegant, see, for example: [http://norvig.com/python-lisp.html](http://norvig.com/python- lisp.html)

[1] [http://www.sciencedirect.com/science/article/pii/01656074819...](http://www.sciencedirect.com/science/article/pii/0165607481900028)

<comment><USER10> >it's hard to find examples of good style of Python programming

I've never really bought that this matters so much as long as you just write sensibly in general. How many python users really make sure to do everything a "pythonic" way?

<comment><USER9> I think, it depends on how you use Python.

1\. "Executable pseudocode", almost a toy language to explain few algorithms in your article.

2\. Sysadmin tool. Replacement for shell, a way to write quick throwaway scripts.

3\. "A modern Lisp". Universal language for implementing AI algorithms, DSLs etc.

I, personally, use 3rd variant. I write quite big programs in Python, for example I made few compilers in it. That's why code quality is important for me here.

<comment><USER11> I would posit there are far more methods than these besides. Python is a powerful language that is flexible enough to be used for all these and more. You or anyone will inevitably write code they believe to be best suited to their problem, pythonic or not, weighted by the coder's ability and personal definition of "pythonic"

</comment></comment></comment></comment><comment><USER12> I saw Allen Downey speak about this concept a year ago in a small forum at the University of Richmond. Several professors in the audience challenged his thinking. I approached one after that and asked what he thought and the answer was basically that Dr. Downey's approach is spot on. This coming from a CS professor.

I have just started reading his Think Stats book [http://www.allendowney.com/wp/books/](http://www.allendowney.com/wp/books/) which is starting to help me better understand statistics. Not far enough into the book yet to make a complete judgement however.

Got to say I like seeing different perspectives on traditional subjects. My youngest is going to Olin next year in Mechanical Engineering and seeing these sorts of articles keeps me excited about her unconventional engineering education at Olin.

<comment><USER13> I don't quite understand your comment. If the professor you spoke with said "Dr. Downey's approach is spot on" then why would said professor "challenge [Dr. Downey's] thinking"

<comment><USER12> These were testing his thinking. They wanted to find holes in it and in this one professor's view they did not.

</comment></comment></comment><comment><USER14> Nice. I've actually found ideas in programming about modularity and complexity to be ways to approach such complexity in economics, physics, social relationships etc. "Notes on the Synthesis of Form" for example is about design in the abstract and often through examples in architecture but the ideas re: the ontology developed help and are helped by similar ideas in structuring software. This is especially the case when thinking about modeling live simulations like video games. In the vein of "Notes," our normal semantics about the "categories" of thought we have like CS, philosophy etc. might be more "categorical" than needed.

Some thing I want to play with more is OS-y scheduling and AI-y thought as ways to think about time management or problem-solving for "humans."

</comment><comment><USER15> "With a computational approach, we can go "top down", starting with libraries that implement the most important algorithms, like Fast Fourier Transform. Students can use the algorithms first and learn how they work later."

The "Learn how they work later" part sends out alarm bells to me. I don't have a lot of confidence that students will be particularly motivated to dig into how an algorithm works after their problem has been solved I fear this will lead to a generation of "just use $x package" and people blindly plugging in "magic algorithms" without understanding their choice. "Quicksort for everything" or "include leftpad" if you will...

I see it a little in my industry (Engineering) "oh your data is noisy just apply a kalman filter" never mind if it is appropriate or not.

<comment><USER16> Another aspect, one that I've encountered many times, is that even when someone has to implement the idea from scratch, they don't work to understand it and instead just translate pseudocode. I once had an interview where I was asked to explain why a piece of code (that the interviewer wrote) worked, because the interviewer did not know.

A benefit of the bottom up approach, of starting with the math and no reference implementation, is that you are less likely to implement it unless you understand it. And I should stress, these are tradeoffs.

</comment></comment><comment><USER17> This post reminds me of Amir Rachum's post about Knowledge Debt[1].

"This is how programming should be taught. You should do stuff way before you can figure out how it works. For a while, you should intentionally be ignorant about distracting details."

"You should, intentionally and tactically, decide which piece of information you can do without, for now. But you should also, intentionally and strategically, decide when to pay back that debt."

[1]: [http://amir.rachum.com/blog/2016/09/15/knowledge- debt/](http://amir.rachum.com/blog/2016/09/15/knowledge-debt/)

</comment><comment><USER18> > _Programming has changed. In first generation languages like FORTRAN and C, > the burden was on programmers to translate high-level concepts into code. > With modern programming languages—I'll use Python as an example—we use > functions, objects, modules, and libraries to extend the language..._

This is the first paragraph. I understand that it's just setting the stage, but it makes so little sense by itself that I had to make an effort to continue reading.

<comment><USER19> Yeah, that was an odd start, given that Dr. Downey is a Professor of Computer Science. Even a charitable suggestion that he was looking to keep things as understandable as possible for a wide audience doesn't seem to give much defense.

I think he was trying to articulate how much more expressive/extensive programming languages and libraries (and tools?) have gotten over the years, so that a student can get to do something interesting with much less down-and- dirty arithmetic and arcana.

<comment><USER20> What has changed its the modules and libraries, which has exploded in availability.

The actual programming method haven't changed much since the dawn of Unix, or perhaps Lisp - although it took a while to spread.

</comment></comment></comment><comment><USER21> The canonical, award winning version of these ideas is described in Ken Iverson's seminal 1979 paper 'Notation as a tool of thought'[0] - <USER2> recommended to anyone who finds the ideas discussed interesting (even if they find the scientific american article lacking ... because it is)

[0] [http://www.jsoftware.com/papers/tot.htm](http://www.jsoftware.com/papers/tot.htm)

<comment><USER22> Peter Naur's "Programming as Theory Building" ([http://pages.cs.wisc.edu/~remzi/Naur.pdf](http://pages.cs.wisc.edu/~remzi/Naur.pdf)) is also a closely related read.

</comment></comment><comment><USER23> "The computer revolution is a revolution in the way we think and in the way we express what we think.", SICP, 2nd Edition.

The article misses what I believe is the most important point, which is the concept of the abstraction of a function. A function is more than a computer concept: a function is a hammer, a violin, and a microscope; you put an input and you get an output.

<comment><USER24> Not only that, but you can then realise that functions are manipulable objects too, and have operations of their own--eta abstraction, reduction, composition, etc., and can be used to build all of modern mathematics pretty much from scratch.

</comment></comment><comment><USER25> The author focuses on the algorithmic and computational aspects of programming. Yet, nowadays programming is much more than this beautiful classical view on programming. Programming is more about describing a _complex system_ by taking into account such aspects as concurrency, cross-cutting concerns, asynchronous events, transactionality, distributed computations etc.

<comment><USER26> That is not surprising, as this is not an article about programming in general, but about using programming for teaching in other areas.

I would, however, welcome the companion article, "Thinking as a Way of Programming", to balance the prevalent notion that testing is the only way that matters.

</comment></comment><comment><USER27> BTW, the article author, Allen B. Downey, has a marvelous collection of free technical books: [http://greenteapress.com/wp/](http://greenteapress.com/wp/)

<comment><USER27> And in his books, he does what he prays: teach you complex topics using computer programs. I don't know if it is a good approach of the general population, but for us programmers, it certainly is.

</comment></comment><comment><USER28> Not sure what I was expecting from the title, but for sure not what I read. Maybe I'm quite old now, but working with latches and switches was always a way of thinking. Writing awful BASIC with GOTO and subroutines was not that different. Writing OO code is quite different at first impact but then you discover that it is basically the same way of thinking. The real way of thinking of programmers doesn't have anything to do with the languages, it's more about finding solutions for some problem. If you can't find solutions by yourself, banging your head, it doesn't mean that you have to find a better language for your software, doing nothing in the meantime, it means that you have to start from scratch understanding how to fix things and how to solve problems. If you just wait for the next big thing or the next shiny solution that fixes everything for you then imho programming is not for you.

<comment><USER24> Good point, I think it's about finding the 'correct' ways to break small parts together into a solution for your problem. We certainly have some tools to help us along the way--OOP, FP, etc.--but there's definitely an element of craftsmanship to it.

</comment></comment><comment><USER29> Nice work. Of course teaching engineering [0] and physics [1] from a computational perspective is not a new idea.

[0] [https://en.m.wikipedia.org/wiki/Structure_and_Interpretation...](https://en.m.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs)

[1] [https://en.m.wikipedia.org/wiki/Structure_and_Interpretation...](https://en.m.wikipedia.org/wiki/Structure_and_Interpretation_of_Classical_Mechanics)

</comment><comment><USER30> I agree partially with this article. I think programming in a highly expressive language and runtime is a great way to get started exploring and develop intuition. I solved differential equations using mathematica in middle school, long before I even learned how to integrate. I solved instances of the traveling salesman problem long before I understood how complex it is. I played around with images and video files long before I learned anything about signal processing. I find that it is very helpful as a student to be able to learn from bottom up and top down simultaneously. Mathematica is much more forgiving than python if a student has no prior programming experience.

</comment><comment><USER31> > _The languages I am calling modern are not particularly new; in fact, Python > is more than 25 years old. But they are not yet widely taught in high > schools and colleges._

Seems like a strange claim, because

> _eight of the top 10 CS departments, and 27 of the top 39, teach Python in > introductory CS0 or CS1 courses._ [1]

[1] [https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now- th...](https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most- popular-introductory-teaching-language-at-top-u-s-universities/fulltext)

<comment><USER32> If you posit that python is a better way to teach programming, and that top universities are more likely than average to use better ways of teaching, then that data point may be skewed.

</comment></comment><comment><USER33> Pete Naur's "programming as theory building" is an excellent read on the topic. Not only on the executable code front, I've also found the type notation used in Haskell to be a great modeling tool using which I can check the consistency of what I'm designing. I'm not talking Coq level proofs here - just an elegant notation that you can use on paper as effectively as in code.

</comment><comment><USER34> Also check out his companion blog post: "Python as a way of thinking". Has some nice slides there.

([http://allendowney.blogspot.com/2017/04/python-as-way-of- thi...](http://allendowney.blogspot.com/2017/04/python-as-way-of- thinking.html))

</comment><comment><USER35> If you liked this, you may also like [https://www.youtube.com/watch?v=6J1vRrozgBg](https://www.youtube.com/watch?v=6J1vRrozgBg) .

PS There is a written version of this, but I could not find a copy that wasn't behind a paywall. Perhaps someone else can.

</comment><comment><USER36> Some discussion of the efficiency cost of our current favorite higher level languages would be nice. There are things about Python that people love, and I think we should strive to provide that with something more like a 2% performance penalty instead of ~200%+

Languages like Nim are very promising on that front.

</comment><comment><USER37> Opinion is not fact. Given this is Scientific American should we expect something, say, more scientific?

Let's put this under the heading, "One Size Does Not Fit All".

The underlying assumption of this opinion is that there is only one model to teach too.

In the modern era we really need to take into account our differences.

In this case, functional versus procedural programming.

1\. Write this in a Lisp as functional.

2\. Present the functional form as human readable as the given procedural.

3\. Conduct a study and gather the data.

4\. Present the findings.

My experience has taught me that there is subset of the human population who think more naturally in functional programming.

But if one model is insufficient? then why would two be?

What languages are yet to be invented to meet the needs of the millions of daily programmers?

It is time for experimental science to be conducted given the millions of people involved.

The path has already been laid out with Usability research that is entirely experimental.

It is time to do the hard science on usability of claims of functional and procedural programming languages.

It is time to put to rest opinion and one size fits all.

</comment><comment><USER38> The reason we went for Turbo Pascal in the old days was the readability. ( it was C or Pascal )

</comment><comment><USER39> This article starts to get at an idea that I've had for a while now -- that mathematicians are doing it wrong.

In the software business we learned a long time ago to name our variables properly, name our functions logically, and to control complexity by breaking ideas into modules and then hiding the details inside.

If you can't name something, then you don't know what it is, and that tells you that you should rethink your design.

Mathematicians don't do that. They name variables "a" or "x", or worse, they use some Greek letter I can't type on my keyboard. They are entirely inconsistent in their use of variables: "phi" or "theta" can mean a zillion different things. I can't tell you the number of times I've read a computer science paper, a paper that uses entirely unnecessary equations, and doesn't bother to define symbols. This practice wastes everyone's time.

It's laziness, pure and simple.

Mathematics needs a general overhaul. The language of math needs to a complete redesign with a focus on understandability. And the key to it is to force mathematicians to name their variables.

Yes, I realize that mathematics deals in abstractions that have little relationship to the outside world, and it makes little sense to call a variable a "dog" or a "car". So what? It just means that we need a new vocabulary, a vocabulary that includes terms like "fourier transform" or "hypotenuse". Pretty much every industry has it's own vocabulary. Chemistry has thousands of terms. Biology even more. Computer science is full of them. Math is full of symbols that have no inherent or well-understood meaning. That should change.

<comment><USER40> It's more standard than people realize. Offhand:

x: "some real-valued variable"

n: "a countable quantity, usually a total"

i: "an index"

k: "some kind of constant", often an integer, whose value doesn't change, "c" is also used for this

e: almost never used as a variable, it's Euler's number

p: some kind of probability, or a prime number, along with p and q

t: some kind of parameter, often goes from [0,1] or (0,1)

z: complex numbers

I have a Master's in EE so I've studied this a bit.

<comment><USER41> U, V: vector spaces

u, v: elements of vector spaces

G, H: groups

g, h: elements of groups or

g, h: homomorphisms, isomorphisms etc

e: group identity

K, F: fields

I: ideals

f: functions

(x): sequences

x_i: i-th element of a sequence

A, B: matrices

It all depends on the context it's used of course

<comment><USER42> This notation has developed over tens to hundreds of years before we had the capabilities of autocomplete and formal typing where a computer can help us write longer names more quickly. This is why single letters became prominent, they were simply easier and faster to write.

But anyone who is serious about writing maintainable code today should be using an IDE where the benefits of susinctness are entirely relegated by intellisense-like tools.

Trading readability for conciseness is near the top of my list of "crimes against future maintainers."

So I had never thought about this in the context of mathematical symbols, but this makes total sense and I'm strongly in favor of relegating mathematical conciseness in favor of readability and specificity.

<comment><USER41> It's actually the other way around. Mathematical notation used to be very much language-like and tedious to read. As time went by (and math became more complicated) notation was developed to make it more succinct and easier to understand. (And sometimes the more succinct notation helps to develop new insights. The change from Roman to the Indian/Arabic number systems made calculations easier for everybody) [https://en.wikipedia.org/wiki/History_of_mathematical_notati...](https://en.wikipedia.org/wiki/History_of_mathematical_notation)

Compare the two following statements:

One from Euklid's elements (written 2.5k years ago):

"Given two straight lines constructed from the ends of a straight line and meeting in a point, there cannot be constructed from the ends of the same straight line, and on the same side of it, two other straight lines meeting in another point and equal to the former two respectively, namely each equal to that from the same end."

And my attempt of translating the above, in what should effectively be Hilbert's notation (19th-20th century):

If there are two triangles ABC and ABD where AC=AD and BC=BD and C and D are on the same side of AB then C and D are the same point.

Which one was easier to parse in your mind?

As a bonus try rewriting this formula using longer variable names and tell me how legible it would look [http://i.imgur.com/wCWkyNL.png](http://i.imgur.com/wCWkyNL.png) (it's from a proof of one of Syllow's theorems [https://en.wikipedia.org/wiki/Sylow_theorems](https://en.wikipedia.org/wiki/Sylow_theorems) )

<comment><USER43> Conversely, you just draw a picture and leave all of this tedium behind, making the import of what you are talking about obvious at a glance.

<comment><USER41> Proofs by picture arent proofs though. And how would you even convey by picture that two line segments are of the same length. Or that if you drew C and D as separate points they turn out to be the same point?

<comment><USER44> Oliver Byrne's edition of Euclid is a nice proof-by-picture example: [https://www.math.ubc.ca/~cass/euclid/byrne.html](https://www.math.ubc.ca/~cass/euclid/byrne.html)

<comment><USER41> Those look more like proofs with pictures, than proofs by picture, but I'm too lazy to get involved into the obscure notation of that book and check whether a random proof from the book would be equivalent to a modern proof from a standard textbook.

Altough, judging by the old timey language of the book, it's possible the book predates Hilbert's axiomatization of Euclidean geometry and the proofs in it were good enough for the standards of its time.

In modern mathematics proof by picture generally means you've drawn / pointed out a single example, possibly wrongly or in a way that doesn't generalize, and because you've shown that one example holds you assume all possible examples hold. That, obviously, needs not be the case.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: Anyone else worried about WebAssembly? - <AUTHOR> Okay, I realize I might be late to the party here. I just read up about WebAssembly recently, and my understanding of the pros are: - can be compiled from many languages - improved performance
But the cons seem pretty problematic: - binary format seems harder for content blockers to work effectively - binary format seems easier to hide malware and other bad scripts - binary format seems to make the web less open; novice web developers can't just fire up the console anymore to see what makes something work.
I know I've seen previous sentiments of this sort expressed on here before (If anyone can link me to other critiques of this kind, that'd be awesome). It just seems unfortunate that the web is becoming more opaque with this change. <comment><USER2> The cons are legitimate concerns, but compared to the plausible alternatives I still don't think they're too bad.

Assuming a reasonable implementation in browsers, WA code should still be significantly safer to run than installing native applications locally on almost any major desktop OS, since there is a sandbox model in place for the in-browser code but the desktop OSes all have relatively open and crude security models that are 20+ years past their use-by date.

We already have plenty of malware-like scripts written in JS trying to fingerprint you, steal your processing power to mine Bitcoin, trick you into entering sensitive data in the wrong place or otherwise exploit you, so I don't see that WA is particularly likely to be worse in that respect. It's not great, but we should fix these things by tightening the security models for all downloaded code; it's not a problem specific to one language.

The barrier to exploration by curious learners is a significant drawback, for sure. Plenty of people have learned basic programming skills by examining interesting websites over the years. But again, even in JS, usually you just get some obfuscated, minified bundle these days unless a site is specifically leaving natural JS for visitors to read as tutorial sites sometimes do, so again I'm not sure we're losing anything that wasn't already getting lost anyway.

<comment><AUTHOR> Gotcha. Thanks for addressing the concerns. Can't say I'm fully relieved by them, but they do give some partial answers to things I was confused about.</comment></comment>


Python's super considered harmful - <AUTHOR> http://fuhm.net/super-harmful/ <comment><USER2> I think classical-inheritance subclassing is itself harmful. Subclassing creates less flexible software than other approaches, and creates a need for lots of boilerplate.

This issue - super in python - drives many new python programmers crazy. However, I suspect most seasoned devs never think about it.

These days I never subclass or feel like I want to. Occasionally I'll use 'duck' typing where I would have subclassed in the past but I find that I rarely even need that. The desire to use classes like this sets off an alarm in my head that I'm making my code too complicated.

You do a lot of subclassing in Java. Java steers you there because it's so onerous to use dictionaries and arrays/lists/tuples. The syntax for these structures is simpler in python, and so they're more commonly-used.

Subclassing is particularly important for creating frameworks in java. You build your world with packages, class hierarchies and 'bean' style objects. Whereas in python you tend to abstract by module - sets of statics, functions and lightweight structures.

I believe python would be stronger still had it had removed subclassing altogether, and instead taken the prototype approach. In prototype languages there's no such thing as a class. Everything is cloned off an original master object. Functions and properties are tapped into the clone. Iolanguage has many of these advantages but is far slower, lacks the reach of python's standard library and (I think) also lacks python's awesome list-comprehension syntax.

Someone with better articulation than me could generate blog traffic for themselves by creating a pithy post about the difference in style between java and python, and why subclassing is unpythonic. Then we could link to it when these issues come up.

<comment><USER3> I don't see much difference between a duck-typed language in which callables with capitalized name are just expected to produce objects which obey a certain duck type, and a prototype language.

The problem to which super is a (general and tricky) solution is the consequences of _multiple_ class inheritance rather than class inheritance. A single-inheritance super could be realized in a less tricky way.

<comment><USER2>
        > I don't see much difference [..]

Agree, there's not much. But I have some scenarios in mind where I prefer the prototype approach.

1) Inline classes

A pattern I sometimes use involves creating an object to maintain state before a for loop. Example scenario: parsing characters as they come in over a network line. Say the data has qutation blocks that create nesting situtaion. You want to support both ' and " blocks.

It's a simple situation. You want an object that will store some kind of mode for what scope you're in at the moment, and you'll be accumulating the structure you're parsing. [1] You might want the object to have a render(self) method as well, to dump the data once you've parsed it.

In io you can just say "Make me an object that does this". In python you declare a class, and then instantiate an instance of it. It's needless to create the class - there is absolutely only one time that I'm going to build this thing. [2]

You could create a syntax that worked like python, but had a syntax that addressed this without technically being a prototype language.

2) Adding functions to existing objects

In python there is ugliness involved in tapping a new function onto an existing object. Python's a bit confusing here partly because of the way self works. When I encounter this in python I usually do a lambda trick to make the function a member of the object, and then I'll have some method on the object that will refer to it. The equivalent in io is more straightforward.

        > A single-inheritance super could be realized in a less
        > tricky way.

True. I have and will never use multiple inheritance in python and would prefer the simple syntax that would be made possible with single inheritance.

I remain interested in this broader issue of - is class-based inheritance a good thing at all?

==

[1] In python you have to use a structure for this, because once you're in the 'for' loop, it won't let you rebind variables outside the scope of the for loop, only modify them.

I haven't played with 'inline' yet.

[2] You could also use a dictionary, but I think that's a bit more verbose. An object is just what I want in these situations.

<comment><USER4> For #1 you can just use a closure.

For #2, the method documented in [http://stackoverflow.com/questions/972/adding-a-method-to- an...](http://stackoverflow.com/questions/972/adding-a-method-to-an-existing- object) doesn't seem so bad to me.

      object.methodname = new.instancemethod(function, object, class)

It may be deprecated. But it still works.

<comment><USER2>
        > For #1 you can just use a closure.

I don't think that will work. See the discussion about rebinding in the post or elsewhere in the thread.

<comment><USER4> It is unclear to me what you think doesn't work. A closure can easily store state. As you yourself demonstrate in your rebinding example, you can store and mutate scope if you use a mutable datastructure (like a list) to avoid rebinding problems.

Perhaps if you gave an example of what you think doesn't work, I might understand your point.

</comment></comment></comment></comment></comment></comment><comment><USER5> How Python's super() actually gets used:

[http://www.google.com/codesearch?as_q=super\\(&as_lang=py...](http://www.google.com/codesearch?as_q=super\\\(&as_lang=python)

<comment><USER6> Indeed. super() is a hook / callback which permits a library to be used in ways not envisaged by the original author.

<comment><USER7> This definitely is not correct. Though there are many who argue that classes should be designed for inheritance and that classes which are not should not be inheritable (I'll leave that to your own judgement), when classes are designed for inheritance you _do_ need a way to call your superclass.

And in Python's case, due to MI, you need a way to call your superclass _es_ in a consistent and sensible order even though these superclass _es_ are unaware of one another (one might be "normally" inheritable while the other is a mixin-type superclass for instance, or used to inject metaclass-based behaviors). This is, as far as I know, a perfectly valid use case and one which _requires_ a `super`-type utility (though Python's own `super` isn't quite a flawless implementation of this).

</comment></comment></comment><comment><USER8> I'm always irritated when I see such post.

My kitchen is full of knives, but I accidentally stab my wife only once or twice per year. That's because I'm extra careful.

Same thing go with language constructs. I just don't throw features around and see what happens.

<comment><USER9> That's extra careful? I have been married 18 years and I have stabbed my wife a total of ZERO times.

<comment><USER8> <http://en.wikipedia.org/wiki/Irony>

</comment></comment></comment><comment><USER10> "considered harmful" considered harmful: <http://en.wikipedia.org/wiki/Considered_harmful>

</comment><comment><USER11> Good post with solid examples.

At the risk of being down voted into oblivion (I know I would be on proggit by the fundamentalist Pythonistas there): it seems to me that this just adds to the list of Python issues that make the language far more complicated than it really should be.

Examples that spring to mind:

\- The ongoing saga with the GIL (although I realize this has advantages in simplifying C extension development) [1]

\- String formatting changing seemingly from 2.4 and every version thereafter [2]

\- The 2.x/3.x split (yes I know there are reasons)

\- Version issues for scripting [3]

\- Syntax inconsistency. I know this one will be controversial but I'm referring to things like the fact that del() is a operation

\- Other issues [4]

Isn't something like Ruby or Lua a lot cleaner in this regard? I ask this question seriously.

[1]: <http://www.dabeaz.com/python/GIL.pdf>

[2]: <http://kuoi.com/~kamikaze/read.php?id=287>

[3]: <http://news.ycombinator.net/item?id=1712035>

[4]: [http://www.quora.com/What-are-the-main-weaknesses-of- Python-...](http://www.quora.com/What-are-the-main-weaknesses-of-Python-as-a- programming-language)

<comment><USER7> > At the risk of being down voted into oblivion (I know I would be on proggit > by the fundamentalist Pythonistas there)

You seem to be very well acquainted with proggit indeed as this kind of pre- whining is quite common there. Though the little twist about it at the end is a new (and quite despicable) addition to it.

> it seems to me that this just adds to the list of Python issues

Considering this page is at least two years old, it's older than e.g. most of the GIL hubbub.

> The ongoing saga with the GIL (although I realize this has advantages in > simplifying C extension development)

The GIL saga makes the whole language simpler (running directly opposite your thesis that all these "points" make the language more complex), though it _does_ make taking advantage of multiple cores harder (if you somehow have a beef against multiple processes).

> String formatting changing seemingly from 2.4 and every version thereafter

You might want to read and test things before that kind of claims. When the article you link says:

> In Python 2.5 and later, there's a new formatter

it means the old one is still there. It was not removed in Python 2.5 (or later, `"It is %s!" % foo` still works perfectly in Python 3.1). The second "point" of your article is hellishly disingenuous as it has _nothing_ to do with formatting. It's also a pretty terrible article as it uses "long form" formatting in the `format` calls (which are used to make bindings clearer, whereas you can use C#-style positional formatting if your strings are short and readable in and of themselves)… and then whines that the formatting calls are too verbose.

And of course, coming from Perl the article you link to suggests… implicitly pulling variables out of the context instead of explicitly sending them to formatting.

> The 2.x/3.x split (yes I know there are reasons)

Indeed, and a number of these reasons center around making the language simpler and more consistent (`print` as a function, reorganization of the stdlib, ...).

> Version issues for scripting [2]

This has _nothing_ to do with Python as a language.

> Syntax inconsistency. I know this one will be controversial but I'm > referring to things like the fact that del() is a operation

What are you talking about? What is `del()`? Are you talking about `del` as in `del foo` and expressing your dislike of it being a statement? Considering the original job of `del` (completely remove a binding from a scope), I'm not sure what else it could have been (though I can't say I like it much, be it to remove a binding from a scope or remove elements from structures). I'd also enjoy your explanation of how it demonstrates inconsistency: which other Python non-statement operation is able to destructively alter scopes? And is a majority of the scope-altering operation non-statements? If it is not, would not the non-statement scope-altering operations be inconsistent?

> Other issues [3]

Few of these are universally valid. In fact, I can find none that is apart from whitespace making it harder (if not impossible) to generate code[0]. Some of these complaints are plain nonsensical (Python being an "untyped language"), most others are personal preferences which you may or may not agree with (Python's scope confusion and crappy lambdas — or more precisely overuse of statements as Haskell's lambdas have exactly the same limitation — bug me a log, while TFAA's dislike of `eval` basically amounts to "I hate languages where not everything is decided at compile time)

> Isn't something like Ruby or Lua a lot cleaner in this regard?

Ruby definitely is not, though the choices it made are most definitely different. I don't know enough Lua to comment on it.

But if you want orthogonal and consistent languages, you probably should not look at even remotely popular languages anyway: they're mostly hobbled together. Even Haskell, which your [3] seems to hold as some kind of holy grail, is a complex and not necessarily consistent language. Consistent languages are generally very small (syntax-wise, as every syntactic construct you add to the language exponentially increases your chances of breaking syntactic consistency) and provide lots of power to users (e.g. the ability to very easily define control-flow structures, increasing the risk of lowering the "external" consistency of produced code). Examples of such languages are Smalltalk, Forth, Lisp (especially, in my opinion, the Lisp-1 family). Though really all of those should be pluralized as they pretty systematically ended up forking from a common ancestor into a multitude of related-but-incompatible (usually library-wise, sometimes syntax-wise or semantics-wise) languages.

[0] but then again, how often does that happen, and doesn't Python provide the tools to generate a running system rather than have to statically generate code which will then have to be compiled and run? I can't say I've often liked _this kind_ code generation, which in my experience has more often lead to pain and suffering than enjoyment, e.g. in GUI toolkits)</comment></comment>


Stanley Fish and the Argument Against Free Speech - <AUTHOR> https://www.tabletmag.com/sections/arts-letters/articles/cancel-culture-stanley-fish-free-speech <comment><USER2> > Expressing doubt about the efficacy and ethics of diversity politics, > questioning slogans like Black Lives Matter and Defund the Police, or > worrying about the implications of gender reassignment therapies for > children are all conflated with doing physical harm to actual people.

The author reveals their own prejudices in this statement, this whole article is just a red herring for the usual right-wing whining about being overly censored, never mind that the religious right has perpetrated more than it's fair share of censorship. Conservatives have no trouble telling people what to do with their bodies or personal lives, but God forbid somebody should tell you that it's not ok to respond with "All Lives Matter".

Free speech does not mean "you get to say what you want and nobody can get mad at you". It doesn't mean that you can say things that most people think are hateful and receive zero repercussions from the rest of society.

The government is being run by people who believe as the author does. He is free to pontificate on the pros and cons of giving a child gender reassignment surgery (how often is this happening?) without fear of censure by the law.

But looking deeper, he is mostly mad about potential backlash to his ice cold hot takes. Diversity politics is a side effect of giving underrepresented communities a voice, and gender reassignment surgery is a legitimate treatment for a recognized mental disorder, although not one taken lightly by physicians and strawman parents.

The author of Ramones the narrowing of acceptable discussion topics, but why are these things that he feels the need to talk about? I live in a "liberal" and inclusive city and I've never noticed a transgendered child. Is he mad you can't called people the N-word too? I can think of an endless list of discussion topics that don't require me to belch out hastily rendered judgments about how people are wrong or dumb or immoral.

<comment><USER3> Free speech set minorities free and it is true that it was abused by some people. For instance the feminist movement was indeed influenced by people wanting to legalize pedophilia. To their credit, at least at some point they distanced themselves from these people.

And it is true that the pedophiles did indeed defend themselves with the argument of free speech. As did people from the Third Reich.

What is undeniably true though is that free speech empowers minorities in a way a "liberal in an inclusive city" could never do.

Don't think yourself as a savior if you hand power to penalize speech to large media conglomerates and social media companies. You are no liberal, no progressive. You are just more the conservative, orthodox counter culture to people that do actually have liberal policies.

<comment><USER2> > pedophiles did indeed defend themselves with the argument of free speech

What are you on about? Pedophiles have the right to speak as freely as anybody else, which is to say without censure by their government. What do you think the first amendment says? Obviously "free speech" doesn't protect anybody from action, but they have the right to speak without fear.

Your post is what I'm talking about. There is no reason a company can't decide what is or isn't fit to print on their website. That said, big social media conglomerates shouldn't exist for other reasons. Nationalize Facebook, nationalize twitter. Personally, I'm done with those sites anyway, preferring federated social media.</comment></comment></comment>


Macron's Plan to Get French Youth onto the Factory Floor - <AUTHOR> https://www.bloombergquint.com/businessweek/macron-s-plan-to-get-french-youth-onto-the-factory-floor <comment><USER2> Yes, I can see the lines of those pampered socialistic darlings now, hand out for more wages, carrying strike posters. Frawnce has ruined itself, lived off future potential earnings and surrendered what taxes it caan gather to pay early, inflated pensions to retired union people. New York times says behind their paywall [https://www.nytimes.com/2019/07/09/world/europe/france- telec...](https://www.nytimes.com/2019/07/09/world/europe/france-telecom- trial.html) By Adam Nossiter July 9, 2019

PARIS — In their blue blazers and tight haircuts, the aging men look uncomfortable in the courtroom dock. And for good reason: they are accused of harassing employees so relentlessly that workers ended up killing themselves.

The men — all former top executives at France's giant telecom company — wanted to downsize the business by thousands of workers a decade ago. But they couldn't fire most of them. The workers were state employees — employees for life — and therefore protected.

So the executives resolved to make life so unbearable that the workers would leave, prosecutors say. Instead, at least 35 employees — workers' advocates say nearly double that number — committed suicide, feeling trapped, betrayed and despairing of ever finding new work in France's immobile labor market.

Today the former top executives of France Télécom — once the national phone company, and now one of the nation's biggest private enterprises, Orange — are on trial for "moral harassment." It is the first time that French bosses, caught in the vise of France's strict labor protections, have been prosecuted for systemic harassment that led to worker deaths.

The trial has riveted a country deeply conflicted about capitalism and corporate culture, and may help answer a question that haunts the French as they fitfully modernize their economy: How far can a company go to streamline, shed debt and make money?

If convicted, the ex-executives face a year in jail and a $16,800 fine. But even before the trial wraps up on July 12, with a verdict sometime later, it has become a landmark in the country's often hostile relations between labor and management.

As President Emmanuel Macron has sought to make France more business-friendly, he has run into a buzz saw of strikes and faced a revolt among Yellow Vest protesters who accuse him of being the president of the rich. While many workers complain they struggle to make ends meet, employers say a system of generous social benefits and worker protections makes hiring onerous and stifles job creation.

Didier Lombard, the former chief executive of France Télécom, center, was recorded saying in 2007 that he would reach the quota of layoffs "one way or another, by the window or by the door."

ImageDidier Lombard, the former chief executive of France Télécom, center, was recorded saying in 2007 that he would reach the quota of layoffs "one way or another, by the window or by the door." Didier Lombard, the former chief executive of France Télécom, center, was recorded saying in 2007 that he would reach the quota of layoffs "one way or another, by the window or by the door."CreditStephane De Sakutin/Agence France-Presse — Getty Images The trial has become a searing demonstration of those lingering tensions.

France Télécom was caught flat-footed by the digital revolution, as fixed-line subscribers dropped away by the thousands. The state ordered the company to go private in 2003, and by 2005, it was over $50 billion in debt.

Sign up for The Interpreter Subscribe for original insights, commentary and discussions on the major news stories of the week, from columnists Max Fisher and Amanda Taub.</comment>


Disney+ launches on November 12 for $6.99/mo, plus new Marvel, Star Wars series - <AUTHOR> https://arstechnica.com/gaming/2019/04/we-now-know-what-disney-will-look-like-plus-a-few-new-exclusive-series/ <comment><USER2> At that price point I will subscribe just to keep up with marvel and Star Wars.

<comment><AUTHOR> Agreed. I assumed they would be at $12+... was wise to get in well below Netflix, et. al. Will see how long that price lasts, however...</comment></comment>


Boxee Blog » Boxee for iPad and more goodies - <AUTHOR> http://blog.boxee.tv/2011/08/09/boxee-for-ipad-and-more-goodies/ <comment><USER2> The boxee software itself hasn't been updated in a year at this point.

I honestly don't care for all these extraneous bits and pieces if they can't even ship the base system in any real timeframe.</comment>


Getting Rid of Big Currency Notes Could Help Fight Crime - <AUTHOR> http://www.nytimes.com/2016/02/22/opinion/getting-rid-of-big-currency-notes-could-help-fight-crime.html <comment><USER2> Remember, opinion pieces in the NYT are not fact checked and the authors can be lying through their teeth, or should I say, expressing a heart-felt opinion.

> But these are relatively minor burdens compared with the potential benefits > of reducing criminal activity and tax evasion.

The same justification which complicates my life, as an overseas American, since I have a bank account and retirement savings in the country I live in, and which costs me several hundred dollars each year to get a US accountant to handle my taxes.

Obviously I want a more concrete justification than "potential benefits."

> There are now so many ways to pay for things, and eliminating big bills > should create few problems.

What are the other options for the 10 million unbanked or underbanked American households?

Or those who travel overseas and don't want to depend on the credit/debit card working? For example, I was in Germany once and the ATM ate my card, because my bank back in Sweden had issued a fraud alert. I had to borrow money from my co-workers because I wasn't going home for a couple of days and, silly me, hadn't brought extra cash with me to change into Euros.

Of course, the NYT reported on problems with US credit cards when traveling overseas, eg, at [http://www.nytimes.com/2011/07/03/travel/credit-card- problem...](http://www.nytimes.com/2011/07/03/travel/credit-card-problems- abroad-readers-respond.html) , so it's not like this is an obscure issue.

And as everyone has pointed out when this topic comes up, cash is king in the German speaking countries. The last few times in Switzerland I stayed at B&Bs, where the practice is to pay in cash on arrival. 4 nights @ ~$120/night is about $500. But that's okay, since the Swiss ATMs give out 100 CHF (about $100) bills. Which are accepted everywhere I tried.

So yes, if you are a rich business traveler (like an editor for the NYT) then there are many options for you. But that's the 1% speaking.</comment>


Ask HN: How about a plugin to stop from compulsive buying - <AUTHOR>

1. a plugin which asks for another (partner) phone number while installation 2. all "buy" or "check out" kind of links will trigger a "duo push" to the partner 3. only when partner agrees the buy button is enabled. this will bring 2 people in the buying workflow which in itself reduces lot of UN-necessary that we buy <comment><USER2> Too much work, very little return-incentives.

As UnoriginalGuy says: first big issue will be supporting 50+ devices * browsers on said-devices (that alone should tell you to avoid it)

Then you'll need to analyze and build up a collection of thousands of e-commerce stores with their specific check-out implementations.

Then you'll need to create filters for sensitive products (and try to define what is sensitive to who)

Then you'll need to support angry spouses who bomb your limited support email due to revenge-restrictions, partner-trolling, etc.

Lastly, some Google AdSense will become counter-productive to making money from this (if you intend to).

Ads sell products and you stopping product-buying would be, well...

</comment><comment><USER3> I wonder if you could build in another method as well, that isn't dependent on a second person agreeing on the purchase. Maybe something that would put in a time delay on any purchase screen. A 24-hour delay on clicking submit for a purchase might cut down impulsive buying.

</comment><comment><USER4> If I can install it, I can disable it.

I own multiple devices (smartphones, PCs, and tablets) you could never be on all of them and I could bypass your restrictions.

Plus I have three+ browsers installed and am familiar with safe mode and incognito mode.

</comment><comment><USER5> I know several people who could benefit of your idea. The implementation seems easy to the user.

Have you tested how much people in your circles _needs_ it?

</comment><comment><USER6> Isn't a today's economy based on compulsive buying? Such a plugin could cause a global crisis.</comment>


A simple way to embed sequence diagrams in markdown - <AUTHOR> https://howardroark.github.io/get-diagram/ <comment><USER2> i like diagram things like this.

you really can't call a .json structure like that "markdown", because the formatting isn't nearly intuitive enough -- for instance, i threw a single- quote in to do a contraction, and that was enough to make it fail -- so that needs work, but overall i'd call it a very good effort, worth pursuing.</comment>


Ask HN: How to get started in Computer Vision? - <AUTHOR>

I've seen a lot of interesting applications of CV in virtual reality (e.g. Oculus Rift) but is it necessary to have a graduate degree in CV to work in the field? What are some introductory materials for someone with a strong background in CS and Math? <comment><USER2> I'd say start with OpenCV ([http://opencv.org](http://opencv.org)). Go through the code samples that are provided with the library to get a glimpse of different algorithms. Also, there's a lot of stuff on Stackoverflow which should help you to get started.</comment>


Ask HN: Leveraging offers against current company - <AUTHOR>

I'm currently employed with a kick ass company that I really love.  Unfortunately, I'm paid about $20,000/yr under where I should be.  Recently I've had headhunters calling me and one company is very interested in hiring me (the offer is almost 100% in the bag).  I actually don't have any desire to leave or move, but I can't pass the money up.  Meanwhile, I have a big opportunity looming (my dream job/opportunity--interviewed, been in talks, probably a 50/50 on ever getting an offer at this point).
I have a few questions on how to handle the situations.  What worries me is I don't want to be unethical and lead the second company on and use their time and money without intention of going there, but their offer will be in line with where I should be paid right now, and I feel like using that to try to get a big raise at my current gig could work.  And if my current says no, I have a backup plan.  In addition, this company in Cali (the big dream job opportunity) could get back with me any day now and I'm afraid it would be unfair to either accept a job somewhere else, then leave immediately if the big one comes through, or to get a large raise with my current, then turn around and leave immediately.  How should I approach this in the most professional and ethical manner?
note: throw away account <comment><USER2> Don't mention other offers - it looks like you are selling your loyalty, rather than asking to be paid what you are worth. Just present your data on being underpaid and ask for a raise.

If your dream job comes through, just tell them it's your dream job and move on.</comment>