What's wrong with Software nowadays and how we can fix it - <AUTHOR> https://github.com/zells/core/blob/master/manifesto.md <comment><USER2> Anyone who says this:

        in the virtual world of computers,
        everything can be replicated, from complex
        physical phenomena to abstract ideas,
        and even your own mind.

Does not understand computers well enough to be lecturing the world about the need for software "literacy". The assertion that computers can represent any of those things is a complete falsehood.

Computers are great with complex mathematical models of physical phenomena, and in some limited cases this is extremely useful. But smart engineers know the limits of their tools, and computer models are not an exception.

But to assert that abstract ideas or the human mind can be replicated in a computer only shows that the author either has no idea of the actual state of the art, and/or has no idea of what he means when he says this is possible.

One of the first things you learn in Computer Science is that not all problems can be solved with a computer. It's amazing that people so enamored with math that they want to believe they can model every phenomenon in the universe with a computer apparently disbelieve the math that proves computers can't correctly model everything.

Weird. Please don't try to teach the world that computers can do everything. They can't. And that should be lesson one in any plan to increase software literacy. Starting, apparently, with its advocates.

<comment><AUTHOR> I remember a draft of the manifesto that had indeed way more classifiers in it. I guess removing almost all of them for better readability was maybe not the best idea.

DecoPerson and noxToken are right about this being a general statement about computing and not present day technology. Whether or not the human brain can be completely simulated by a machine is still an unanswered question but nothing I came across so far convinced me that it's not possible.

While it's true that not all mathematical problems can be solved algorithmically, that doesn't limit at all the kind of things a computer can simulate. Most physical phenomena don't have a mathematically precise answer and approximations are usually good enough. I hope I understood you correctly there.

If you say "computers can't correctly model everything" then I probably disagree with your definition of a "model". In my understanding of the word the concept of correctness doesn't even make sense. I'm convinced that models should be first and foremost be judged by their "usefulness".

To make this discussion more concrete, it would be very helpful if you could provide an example of something that cannot be modeled with a computer.

<comment><USER3> Sure! Most real numbers are uncomputable, for starters. "approximations are usually good enough" is a smoke screen that assumes that it's always possible to make approximations and iteratively improve their accuracy, something which generally is only true for computable numbers!

Another example, something I've been studying recently, is the phenomenon of patterns. Patterns are very abstract, and it's not at all clear how a computer can model a pattern without resorting to some concrete instantiation of it. At best, we have blueprints, models, code, designs, and instances; these are all themselves occurrences of patterns, but they fail to embody the pattern itself.

While I've got your attention, "Cryptography also enables a high level of security." is a ridiculous line. Cryptography, by itself, is only a building block. Security is _structural_. Check out object capabilities: [http://srl.cs.jhu.edu/pubs/SRL2003-02.pdf](http://srl.cs.jhu.edu/pubs/SRL2003-02.pdf)

Edit: Scott Aaronson discusses limits of quantum computation in this talk: [http://www.scottaaronson.com/blog/?p=2903](http://www.scottaaronson.com/blog/?p=2903) Basically it is totally possible that minds _cannot_ be simulated by computers without destroying the mind in question!

<comment><AUTHOR> I must admit that I have only very limited understanding of numeric and cryptography. But I do find these very interesting discussion points.

The uncomputable real numbers are the irrational ones, no? But those you can compute to an arbitrary precision. It's just for most applications, you don't need much precision. But again, I've not done very much simulation so I might miss something.

Patterns are something I haven't thought about in this context. I'm not entirely sure what kind of patterns you're talking about. I'm guessing software patterns. I was thinking about abstract patterns and had to think of Deep Mind and how it learned to play Go by recognizing patterns.

I stay with my statement about security. I never said that it's sufficient. But necessary. I think a cryptography-enabled capability-based security model could be very interesting.

Will definitely read Aaronson's talk. That's a very interesting subject.

<comment><USER4> Simplify your message. What is the core, key idea of what you want to do? If you can't explain it in a sentence, keep trying.

<comment><AUTHOR> I want to "increase the number of people who are able to write, modify, combine and share software by building a tool that makes writing software easy and fun, and accessible to everyone." I even have a slogan. I call it "Enabling Software Literacy"

That said, I'm highly skeptical towards the "good ideas can be stated in a sentence" heuristic.

<comment><USER4> If you want anybody to listen, you're going to have to keep repeating it.

It's a good start. I can support software literacy. Now you need to state your plan to get there just as concisely. Probably not as easy.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> >To fix this, we need to increase the currently tiny number of people who are able to write, modify, combine and share software. We need a tool that makes writing software easy and fun, and accessible to everyone. A tool that enables software literacy.

Global access to niche knowledge doesn't seem like an effective use of the world's time to me. Let's look at this same idea, but replace "develop software" with "perform brain surgery."

> To fix this, we need to increase the currently tiny number of people who are > able to perform brain surgery. We need a tool that makes performing brain > surgery easy and fun, and accessible to everyone. A tool that enables > neurosurgical literacy.

Just like Software Engineers don't need to know how to perform neurosurgery, accountants, marketers, burger flippers, and salespeople don't need to know how to write software. I'd rather the CEO of the company I work for spend time on growing the business, not learning how to write a "Hello, world!" program.

<comment><USER6> I disagree with your analogy. In my opinion, programming is more analogous to composition. Most courses of study require at least one composition course, because no matter what discipline you're studying, it's important that you be able to organize your thoughts and express them clearly as well as understand the formal expressions of others.

I personally experience a huge overlap between ordering my thoughts for writing and making a mental model of a problem and its programmatic solution. Yet it's easier for most people to pick up a pen or open a word processor and express themselves than it is to write a working program.

Why should it be so? Apart from implementation details of hardware platforms and runtimes, you're really talking about expression in different units: subroutines rather than paragraphs, APIs rather than outlines, user stories rather than theses.

To bring it back to your analogy, consider what a tool that lowered the barrier to entry to brain surgery might do. It might certainly do things like list the particular skills, tools, and medications required to perform certain procedures. It might provide a check list of crucial steps and a sort of troubleshooting tool. It isn't going to make an expert out of an unskilled user, and a particularly skillful surgeon might not benefit from the tool at all, but on balance, it would raise the baseline competency of many users and help ensure that certain critical requirements were met.

A good assisted programming tool would do the same. It would help the user accurately model the problem, it would advise the user of certain best practices, and it would certainly warn the user of common mistakes. This is all very much in line with a good word processor, with features like spellcheck and document templates.

So I disagree that programming is analogous to brain surgery. Programming itself is a tool for the expression of an idea and much more akin to composition, and there is no good argument in my opinion against tools to assist with either. Remember that for a large part of our history, literacy was considered a niche skill, and widespread literacy led to explosive growth of our knowledge of the world. I'm not one of those "literally everyone should learn to code" types, but there is quite a lot of potential in spreading programming literacy, even if you feel most people have no business practicing it.

<comment><USER7> Why not we (software developers) take the route of improving end-user software and letting people easily accomplish their mundane everyday tasks, instead of letting them program as a remedy to the sorry state of software? Have you looked at it that way? Would people buy a car that required them to tweak it and service it right after it went out of the showroom?

<comment><USER6> I think you misunderstood me. I'm not saying that people should become literate in programming so they can program their own solutions, although that'd obviously be good. I'm saying that we should encourage people to become literate in programming if only so they could express their needs more clearly and evaluate solutions better.

I likened programming to composition. Most people who took composition courses don't necessarily need to write papers on a daily basis, but they certainly benefit from being able to interpret and evaluate material. If I could get people to understand the general concept of a data type, I'd certainly have an easier time of communicating with them and satisfying their needs.

</comment></comment></comment></comment><comment><USER8> I usually try hard not to be cynical, but in this case I can't stop myself.

This seems to be another attempt at a grand, unified packaging and IPC / linking method. There have been hundreds of these, and there is no attempt at all to discuss where all the others went wrong, and how this will improve upon them.

<comment><USER9> Obligatory xkcd cartoon: [https://xkcd.com/927/](https://xkcd.com/927/)

<comment><USER10> I tend to think that these xkcd URLs are becoming like bible verses for geeks. I find myself memorizing those numbers. (e.g. "Ugh, he's getting like xkcd/386 again.")

<comment><USER11> 386 is funny one!

<comment><USER12> But with 698, it all hinges on the delivery. Get the timing wrong and watch the rotten vegetables fly.

</comment></comment></comment></comment></comment><comment><USER13> At first glance, it seemed like yet another silicon-valley-neoliberlist-style lots of words and ideologies, but no code and practicalities. But it seems like OPs thesis has a more hands-on approach:

[http://zells.org/res/Zells_DiplomaThesis.pdf](http://zells.org/res/Zells_DiplomaThesis.pdf)

<comment><USER14> From the 10mins I spend looking at it:

\- It seems some kind of language/computation-model. Loosely based on a "everything is an actor" model.

\- It did look goodish. I tried following the Fibonacci example, which sort of made sense (I got the impression that recursion is handled by creating new nodes/zells). The discussion chapter also seemed interesting.

\- It has that abstruse academic feel, where sometimes it is hard to assess whether the problem is my ignorance, or just vagueness of the publication.

\- Motivation sections usually have an exaggerated tone to them (i.e. this will totally change everything), but this one, and the article above, are a bit over the top.

\- There are also some over-the-top statements sprinkled throughout the thesis (e.g. "a model of virtual objects which exist independent of any hardware").

<comment><AUTHOR> \- that's exactly what it is. And the way I see it, actors are an implementation of OOP (in it's original meaning) so I would stick with "everything in an object"

\- thanks =)

\- I had that same feeling while writing it, constantly balancing my own ignorance with an acceptable level of vagueness

\- call me the over-the-top guy. But the way I see, your vision has to be grand, if not megalomaniac if you want the essence to survive the collision with reality

\- seamlessly migrating networked objects are one of the lesser over-the-top ideas though

<comment><USER4> If the thesis is relevant at all to what you're doing now, might I suggest linking to it directly from the manifesto? Otherwise it sounds mostly like you are very excited about something, but I got almost no idea what that something is.

<comment><AUTHOR> That's probably the biggest weakpoint of the manifesto but also kinda on purpose. While the thesis was all about "let's build something" the manifesto is a fresh start trying to answer the question "what is the problem?". The thesis is still relevant but a bit outdated and I'll probably rewrite it in multiple blog articles.

What I'm planning to use as information starting point is zells.org but it's all still in an early stage. At the moment I'm working on creating a document that visualizes the "end product" that I have in mind.

<comment><USER4> After looking at the thesis and the manifesto, I think your best bet is to create one worked example, in pseudo-code or whatever, and then see if you can get anyone on board with that.

</comment></comment></comment></comment></comment></comment><comment><USER15> > Just as knowing why apples fall down and aeroplanes fly up, the citizens of > the 21st century need to know that computers are not magical boxes but > composed of dynamic models.

In all honesty, I don't know why apples fall down and aeroplanes fly up. I just know that they do. No doubt that improving software literacy is a worthwhile goal, but I think the author hasn't made a strong case for it in the opening paragraphs.

<comment><USER16> One of the most common challenges that I see engineers face is to effectively empathize with the user. When you know a lot about something, you just see it in a fundamentally different way. This makes it difficult to focus on making it easy for the user to do what they want, not what you think they should want.

When I drive my car, I just want to get from point A to point B while listening to a podcast. I don't care to know how they work. This doesn't make me enfeebled or ignorant, I would just rather commit my learning cycles elsewhere.

Computers need to be the same. Why would we be so foolish as to think that it's a wrongdoing that people are able to effectively use computers without having any clue about how they function?

Literacy isn't about forcing people to learn things, it's about ensuring that everyone has the baseline exposure to help them discover _if_ they have an interest in a topic, and then the resources to explore that topic if they choose.

<comment><USER17> > When I drive my car, I just want to get from point A to point B while > listening to a podcast. I don't care to know how they work.

Yet, you've spent months explicitly training for that task.

<comment><USER18> And that's just learning how to use the car. We're talking about _building_ one.

<comment><USER19> I think the car analogy kind of falls apart at this point. Using a computer and writing programs for a computer are both interacting with software. Take spreadsheets, for example: is making a spreadsheet analogous to building a car or to driving one? What about drag-and-drop visual programming?

</comment></comment></comment></comment></comment><comment><USER20> > Just as knowing why apples fall down and aeroplanes fly up, the citizens of > the 21st century need to know that computers are not magical boxes but > composed of dynamic models.

I'm not sure most of the public could explain why gravity works, or how an airplane actually gets in the sky. This is because most people are not inquisitive by nature, they generally take things at face value without questioning why. This kind of attitude does not work if you want to build something complex whether it be software, a car, or a bridge. I think the first step is how we as a society can encourage a generation of thinkers and tinkerers.

<comment><USER21> > This is because most people are not inquisitive by nature, they generally > take things at face value without questioning why.

I have to disagree with this statement. Almost all people that I meet, pretty much across all group boundaries you can imagine, I find to be inquisitive. Very inquisitive in fact.

What I think you may be observing is that the depths of questions that many are interested in aren't great... gossip magazines, for example serve to give answers to an inquisitive populous, we can question the value of such questions, but that is still a drive to know something.

Also, I find that when people do ask deeper questions they can be simply overwhelmed by the answers. I'm not particularly good at mathematics, but often times work with people that are in the very top tier in that realm: I will ask certain questions for which I'm simply not prepared to hear the answer... the answer requires background that I simply don't have... I am genuinely interested, but the required prep work is simply out of the question. One could argue that the answers can be simplified as well, but that's not always true.

</comment></comment><comment><USER22> I'm going to buck the trend of cynicism and say this is beautiful and matches my own ideas closely, though I have not read the paper yet.

How many of us seasoned programmers came to an understanding with computers by playing in a "toy world" of comprehensible, somewhat visible, documented, predictable abstractions, such as Logo, HyperCard, Excel, BASIC, or even assembly code, and now perform bizarre ceremonial rites on a daily basis to get a teetering stack to perform our bidding as part of "real" programming? There's a vicious interplay between how "bad" and complex software is and how arcane and unapproachable it is, even to experts, driving away all but the most determined to crack the code, who then work together to try to build quality components and applications against great odds.

<comment><USER22> After reading the thesis, the proposed model of computing is like a concurrent Smalltalk where everything is completely mutable, even an object's code and prototype chain. The author then writes a function to calculate the Fibonacci sequence by turning it into a distributed system, with some effort, and then runs the code and talks about its performance!

At first glance, there seems to be a lot of incidental complexity and creative choice in expressing a function from integer to integer in this system, which goes against the ideas of code reuse and separating meaning from optimization -- i.e. that there is one global Fibonacci function that we can inspect and understand and don't have to rewrite for performance, or in another language, or to run in a distributed fashion.

</comment></comment><comment><USER23> > More and more, users are put into - sometimes golden - cages, and forced to > hand over their ideas, personal information, and even identities to > international quasi-monopolies that put everything into walled gardens which > the creator can only access through tiny keyholes.

I don't think this has anything to do with software, it seems more like an attempt to educate the masses on the evils of facebook and twitter, but then again that isn't a software problem. You can see this kind of locking system in financial businesses like loans/mortgages, or even benign ones like the eyeglasses business.

<comment><AUTHOR> They might not be as benign as you think: [https://www.youtube.com/watch?v=CAeHuDcy_bY](https://www.youtube.com/watch?v=CAeHuDcy_bY)

But I agree that this is not a software problem but a business model problem. The solution however, can be software.

</comment></comment><comment><USER24> Pleased to see more efforts to fix fundamental problems with computing. It's certainly needed, this won't get fixed by piling more crap on top of the existing stacks (including: building OSS versions of proprietary things.)

This one seems to address some of the values I think are important, so, neat.

But I'd argue ordinary people just need to be able to use software, not necessarily build it. So, available software should be high-quality. There should be meaningful choices between alternatives. I think that means: no lock-in.

</comment><comment><USER25> Whenever the physical world intrudes on the illusory "virtual world of computers", the man behind the curtain is observed in its less than superlative aspects and we're less prone to attribute OZ powers to "software".

Software /is/ magical in many aspects. But its own inherent magic has never been anything other than sleight of hand sort of magic. Even then, software magic borrows from the glory of /insanely/ complex physical machines, and various wondrous features of Nature itself.

One case in point was when Moore's Law and economy collided and the practice had to ramp up on concurrency and deal with SMP. A bit later (and still on going) we're ramping up on distribution and dealing with CAP. In the former case, the illusory 'indivisible' platform was seen to have a sort of geography. In the latter case, the illusory notions of linear 'time' and smooth 'space' was smashed.

OP's remedy for a software-driven world's ailments is software literacy. But the physical head poking through the curtain should make it clear a large subset of these ailments have to do with physical things, such as computing devices, infrastructure, access to energy, and even softer concerns such as legal and political cover for making, providing, and operating software.

Imagine if every single person was a world class chemist and biologist. Would we be able to do away with drug companies? You have that amazing molecule all figured out -- do you have the physical capability for actually realizing it?

</comment><comment><USER26> I'm taking the opposite opinion for the sake of argument: The more you understand about software, the more frustrated and disappointed you will be, as you see all the easily avoidable flaws around you.

Web pages that have a few lines of text are unreadable on mobile devices and drain your battery.

Setting the spin speed on a washing machine takes ages because the computer polls for input only about once per second, so it misses most of your button presses. How to reconcile this if the clock speed is thousands to millions of cycles per second and the whole system has only a handful of inputs and outputs.

These are not tough technological limitations, but completely easily avoidable human failures. There can be nothing but negligence, cynicism and depression to explain them.

People would be a lot happier to just say "I guess it must be like this", or "My device is getting old and slow". A bit like "God works in mysterious ways" or "it must be fate" can often feel better than "our government is corrupt" or "I don't have any kind of plan".

I guess it's the same about any thing you feel passionate about. If you cared about clothes or food, seeing all the junk out there might make you less happy. A friend of mine was a barista. He wasn't happy that people were paying the same amount for worse coffee.

<comment><AUTHOR> Wow that's depressing. I suddenly feel the impulse to give you a hug and tell you that it's gonna be alright. I wish I was more sure that it actually will be.

</comment></comment><comment><USER27> I haven't read the paper yet but the idea looks promising.

I've had this itch myself for a long time. I can't quite put my finger on it but we really need something like a high level assembly language. One that incorporates high level concepts like networked computers, cryptographic identites for users, access to a global, shared pool of data and algorithmic primitives regardless of which application they were originally written for, or what domain specific higher level language they were created in.

Like, once a user has entered their address into a computer, they shouldn't ever have to enter it again in a different software. Once someone has written an algorithm which takes input x and produces output y, noone should ever have to rewrite it again, but everyone should be able to reuse it. Applications shouldn't all indvividually handle transferring data between devices of the same user or even between users, this should be already built into our programming model. And so on.

If this sounds like some utopian dream or incoherent babble, that's because it probably is at this point. But I'm convinced this is the future of computing we should be aiming for, not piling up more stuff onto our existing stack that's just barely held together by ~50 year old technolgies built for that age.

<comment><AUTHOR> Wow that's exactly how I feel. I couldn't even formulate it that well. But I'm very happy to know that other people feel this itch as well.

Your sentiment of "aiming for the future we want" instead of "piling up more stuff on our existing stack" reminded me very much of this talk: [https://www.youtube.com/watch?v=gTAghAJcO1o](https://www.youtube.com/watch?v=gTAghAJcO1o)

</comment></comment><comment><USER28> IMO we're kind of headed that way now. I always saw this as the point of Google's combined interest in TensorFlow and Kubernetes.

Containers are the piece of the toolchain we've been missing. Now we actually have some feasible logical methods (deep neural networks + gradient descent) that can be used to structure existing computational tools into deeper, more intelligent systems.

Think of it this way: what's the difference between (an ideal) container and an artificial neuron? Structurally, they are nearly identical: they both have collectors and emitters, and perform some non-linear action in concert with other similarly-structured systems. Containers can also help with some of the "trust" problems: if we're shipping around trained data models (or container images) rather than the actual training data, we can push storage out to the edge of the network and run the models there. Containers provide a common computing language that enables you to do that.

This platform is not a leap forward for the theoretical capabilities of AI; but it is a shortcut that should eventually make it easy for AI researchers to leverage vast existing libraries of software written in any one of hundreds of programming languages.

I actually suspect that this is just the first generation; there are a number of software problems that currently can't be solved easily in a multithreaded manner. However, if you can build a container that does what you need, you can eventually train a model to replicate the container -- it may be less computationally efficient, but with future orchestration platforms it may end up being more time-efficient.

</comment><comment><USER18> This industry is in its infancy. We have some of the greatest minds working in it, and yet we barely know how to make things work right, and OP's suggesting we try and design tools that an average person can use to create powerful software. How about we let highly-trained specialists figure out how to write complex software first, before we try to teach average programmers how to do it, and perhaps then we can turn our heads towards the masses.

<comment><USER29> Making computers incredibly simple to use seems to have worked out well in the case of the iPhone. Lots of common usability problems in computer UI simply went away with a much better design. It's hard to say where the mobile-phone industry would be today if that shift hadn't happened in 2007.

Perhaps the same could happen for computer programming. For example, in the 1990s, HTML introduced coding to lots of people who otherwise probably wouldn't ever have considered it. A forgiving declarative interface was a lot more appealing than learning what compilers, linkers, functions, parameters, and APIs were.

</comment></comment><comment><AUTHOR> Since this is my first submission on hacker news, I'm a bit overwhelmed by the amount and quality of the responses. I'll try to address critiques individually but in order to not have to repeat myself continuously I wanted to thank everybody for their time and energy this way. Your feedback is much appreciated and I'll use it to debug the idea and the manifesto.

</comment><comment><USER30> I think this misses the problem completely. The problem is not that people that trust computers need to put more effort into understanding computers. The problem is that people keep trusting computers.

What people really need to be educated on is "Why computers are not and never will be trustworthy". And they don't need the details of why, just the bottom line.

<comment><AUTHOR> Why are computers not trustworthy nor ever will be?

</comment></comment><comment><USER31> Can we __please __just let this idea die. Almost since the day programming was invented there has been at least one person out there trying to dumb it down to work for the average person and it __always __fails. Computers are __hard __to program because they 're __complicated __. Programming languages strike a balance between simplifying some aspects of that complexity and exposing enough of the inner workings to efficiently implement algorithms. Different languages strike different balances but ultimately they all are more complicated than the average person can handle because at the end of the day the computer itself is more complicated than the average person can handle. No amount of dumbing down or simplifying things is going to create a programming language that you 're going to want to write serious programs in but that the average person is going to be able to understand.

<comment><USER4> It sounds like you really want programming to continue to be difficult.

<comment><USER31> On the contrary, I want programming to be easier where possible, but the goals of this manifesto (and all the similar ones before it) are trying to fix the wrong thing. Better and more powerful abstractions are always good, I'll always welcome a new tool that makes my job easier. However the goal of this project is to make a tool that's explicitly designed to make code that's easier to read for the average person, not easier to program in. This is in many ways a set of opposing goals. Things that are easier to understand tend to lead to more verbose code and vice versa. Look for instance at assembler. Conceptually assembler is __very simple __but because of that simplicity implementing anything non-trivial in assembly tends to be very verbose. On the other extreme languages like APL and Haskell are __very concise __but they 're hard to understand because they're very complex and leverage a lot of very powerful concepts.

What I want are new tools that leverage powerful concepts to allow me to efficiently express complex ideas. These tools by their very nature are hard for the non-programmer to understand. Look at what's being proposed in this manifesto. They're advocating for what is in essence internet enabled Excel. Do we really want to start trying to write applications in Excel? Can you imagine the horrible spaghetti code that would result in? Imagine how much code you're going to have to write to express even mildly complicated concepts? Imagine trying to maintain one of these beasts.

Further more, for this idea they propose to get off the ground, the vast majority of programs would need to be written in this new language they're proposing, which is, quite frankly, not going to happen anytime in the next 20 years at least. We're __still __using C and assembly, and they don 't look to be going anywhere anytime soon (although _maybe_ Rust can dislodge a little of the C). I __do __think it would be good for more of the population to at least have a passing understanding of basic programming concepts, at the very least learning how to solve problems using abstract thinking would be useful, but I don 't think trying to create some kind of "simple" programming language is the way to do it. There are "simple" programming languages out there, just look at any of the toy languages designed to teach children how to program. But that's the thing, they'll always just be toys, they expose a very limited subset of capabilities for solving a limited subset of problems (mostly they focus on making it easy to draw on the screen since it allows for simple games that provide positive feedback for children learning).

<comment><AUTHOR> If I understand you correctly you're probably thinking about how more concise notation systems make things easier for experts but harder for novices, e.g. maths and music scores, and probably Haskell as well.

So I suppose you mean "Things that are easier to understand _for novices_ [...]".

But that's not always the case which is incidentally proven by your examples. Assembly Language is a lot easier to write _and_ understand for novices than machine code. And Fortran even more so. Bret Victor illustrates this very nicely in the video I linked to.

I'm convinced that the power that makes something more concise and at the same time easier to write and understand is abstraction. Or more precisely, the _right_ abstraction, since a bad one can have to opposite effect. So I agree with you that better and more powerful abstractions are always good. Spreadsheets for example are a great abstraction for some problem but terrible for others.

So in order to "leverage powerful concept" and "express complex ideas" you need to be able to create your own abstraction. In this way my proposal is very different from Excel which barely allows to create any new abstractions.

What the manifesto apparently doesn't make clear is that I'm not proposing a new programming language but a programming _model_. The language part is more like byte-code than Java but it's really a protocol. The result is something that would serve a similar purpose as HTTP but would be vastly more powerful.

I think the mistake that these "language designed for children" that you have in mind is that they add training wheels instead of removing the pedals. The latter manages way better to teach you the basic concepts (steering, balancing) first and once you mastered these, gears and transitions increase your efficiency.

When it comes to software, I would take a similar approach and create a software authoring/execution environment that can be used by novices and experts alike. Novices would learn the concepts (message passing, abstraction) without actually writing code. The coding would then be added to increase the user's efficiency by providing a more concise notation. The actual language used would best be domain-specific to achieve maximum efficiency.

<comment><USER31> Ah, now this is a very interesting conversation and you're right, the manifesto doesn't get any of that across.

Abstractions are the key to powerful programming languages, but they're also the thing that people struggle with the most when learning programming. It appears a certain segment of the population is just not capable of thinking in abstractions in the way that programming requires (or at least they do not care to invest the effort to learn how). Math has a similar problem, with high level maths requiring a level of abstract thinking most people are not comfortable with.

The flip side of that though is that all abstractions leak. Abstractions are convenient shorthand, but to properly use them you still need to understand the thing they're abstracting over and that becomes more true the larger and more powerful the abstraction is. The leap from machine code to assembly language for instances is a very small abstraction, it's mostly a matter of mechanical symbol replacement with very nearly a 1 to 1 mapping from assembly keyword to machine OP (there's some small nuance around single vs. multi-byte ops as well a register vs. immediate vs. address ops). Because the abstraction to machine code is so thin it's not terribly important to understand the actual machine code because the abstraction when it does leak does so in only very small and minor ways and it's usually easy to figure out what's going on. Once you start working in larger and more powerful abstractions it becomes a lot more important to be able to peek behind the curtain as it were. Understanding classes for instance and the nuance involved in dynamic dispatch in something like C++ is very important to properly understanding their behavior, limitations and tradeoffs.

When you talk about using this new Excel like model as a generic programming model I'm immediately reminded of the actor model. It's a very similar design, but it's also not really a good fit for certain kinds of tasks. That's part of the problem when you start talking about some kind of generic model (or abstraction as the case may be), it likely will work quite well for certain classes of problem but be wholly unsuitable for others. I also don't see it actually addressing the issue the manifesto brings up which is to promote programming literacy. The vast majority of people are going to have no interest in learning about the various abstractions programmers employee. It could be argued that they would benefit from doing so, and that some classes that teach basic programming abstractions should be mandatory in either Highschool or College level courses, but I suspect we'd see as much success there as we do with the higher level maths like statistics and calculus.

As for the toy languages most of them aren't too terrible but in the interest of not getting bogged down in a study of advanced topics they tend to force certain abstractions such as being loosely typed, or having no namespacing. For most real languages various escape hatches are provided to allow you to bypass the abstractions when necessary (in extreme cases FFI allows for escaping the language entirely), but all those escape hatches tend to introduce dark and mysterious corners in the language that are __very __hard to explain to novices because they tend to strip away all the layers of abstraction exposing the dangerous moving parts of the language. In order to avoid confusing novices with features it 's assumed they'll never use most of the toy language elide the escape hatches you'd expect of a real language and instead simply say "No, you can't do that" in instances where the student wants to do something that isn't built into the language. In particular being able to link to and utilize C libraries is a hugely powerful feature that most real languages support, but which tends to introduce all kinds of complications not only at the language level but also at the tooling and build level that most toy languages want to avoid.

</comment></comment></comment></comment></comment><comment><USER32> I think there is room for a "global librarian". Moreover, when AI starts to program itself, having a logically linked system that can be queried for potential implementation strategies will be beneficial for integrating new features. However I think google can already do this to some regard. Perhaps its time for something like "site: github, lang: python, tags: [csv, excel, graph]. Then add some local db that can receive notifications from github on changes?

</comment><comment><USER33> Viewpoints Research Institute (Alan Kay's group) is working on solving some of those problems. They have published some interesting papers although I don't know how practical their ideas are.

[http://www.vpri.org/html/work/ifnct.htm](http://www.vpri.org/html/work/ifnct.htm)

</comment><comment><USER34> I propose capital punishment for people who do not put enough effort into optimizing memory usage and performance. I know we have more than 64kb of ram now. That does not mean we have to add useless shit that just bloats everything.

<comment><AUTHOR> What should be the punishment for premature optimization?

</comment></comment><comment><USER35> Yet another "If only Hypercard had been the future" dream.

I agree it would have been nice if it had been. But there are Reasons it didn't work out that way, and probably isn't gonna go there.

<comment><AUTHOR> What do you think those reasons are? In case of HyperCard I think it's that there wasn't any inter-stack-linking let alone networking. What I'm crying about is that Smalltalk was not the future.

<comment><USER35> It's too hard/expensive to make that kind of abstracted GUI that lets you make real software, and too hard to keep it updated as the environments/contexts change, as in your example of networking became important, and it wasn't part of hypercard, and would have taken a lot of time and skill to make it so in a useful way.

It's just too hard. You can make that kind of layer for a special special purpose domain (say, making simple games, or sound engineering, or what have you), but it's hard even to do that right, let alone a general purpose universal environment. Software is expensive enough to develop with quality the 'ordinary way', let alone trying to develop and maintain some kind of layer on top that let's people do it without.... without what? Without knowing what they're doing? At some point, if you are able to make it actually powerful enough, it's going to be just as 'hard' as anything else, isn't it?

<comment><USER4> HyperCard failed, but not necessarily for technical reasons.

It might be worth making some hypotheses and testable predictions here about how much complexity is needed for various tasks, and how well current tools are doing at avoiding unnecessary complexity.

I think surveying the current landscape and past efforts, and getting a dialog going along the way, would be a lot more valuable than immediately starting to design a solution.

I'm very confident there are opportunities here, but not so confident about the chances of any particular approach.

</comment></comment></comment></comment><comment><USER36> Hi rtens, I would like a concrete (not abstract) explanation of what a cell is and how to compose an application with them; your docs are very abstract. Perhaps a hello world application?

<comment><AUTHOR> The thesis mentioned elsewhere contains some concrete examples but my goal with the manifesto was to get to the root of the problem I'm trying to solve which is quite abstract indeed. I do not have a document yet that visualizes what I want to build but I'm working on that. I'll post updates on twitter.

</comment></comment><comment><USER37> I'm also working on solving this problem, but my solution is to teach vanilla HTML, CSS and JavaScript by making an IDE with WYSIWYG, real time analysis and other goodies.

<comment><AUTHOR> That's great. What's your target group?

<comment><USER37> Trying to get people who make Word documents to make web documents instead, using HTML. I think it's time to bring HTML and the web to the mainstream. Companies are currently paying hundreds thousands of dollars to copy/paste from Word to a CMS that store the document in a database blob, when they could make HTML documents themselves for peanuts. Once you have the documents in HTML format instead of a closed binary format, it's possible to use all the nice tools we developers use, like git.

</comment></comment></comment><comment><USER38> The cells concept seems like a global git repo atop a NFS. While such a thing might help the people who choose to use it. I think you will have to be very careful to avoid the competing standards trap. [https://xkcd.com/927/](https://xkcd.com/927/)

If you are truly passionate about bringing programming to more people, then I suggest starting by trying to teach each existing language to a different person who doesn't know programming. The intro experiences of each of those people should confirm or refine your ideas about what needs to be built in order to get the maximum number of people programming.

Alternately, you could start with the observation that it seems to be the case that even most programmers do not make most of their own solutions. If that is true then a good thing to build might be a general programming language that would get most programmers to start making most of their own solutions.

Either way, the result should be a language that is so much simpler to write in and that provides such a small time to useful solution that not only will most programmers choose to use it to solve their own problems but most programming instructors will choose to use it as a first language.</comment>


The supply of fresh water is in trouble as mountain ice vanishes - <AUTHOR> https://www.nationalgeographic.com/science/2019/12/water-towers-high-mountains-are-in-trouble-perpetual/ <comment><USER2> "120 million people live along the Indus," says Immerzeel, "but the Indus plain is like a desert. It's completely reliant on the water from the thick glaciers above."

(Nobody mention overpopulation)

<comment><USER3> Agree point of overpopulation is not mentioned enough. Someone made an estimate that earth can sustain more than 10 billion but that is provided we all work together. I cannot see that happening providing we have country boarders.

I expect wars starting to happen for resources in the next 10-20 years, not a popular opinion.

<comment><USER4> The earth can sustain much more than that, we even have the beginnings of the technology needed for that now. Indoor farming can produce the needed food, providing we can produce enough energy - which requires a lot of renewables and some breakthroughs in nuclear fission and fusion. Desalinization can produce the water, with the same energy requirements. In the end everything is an energy problem, which is why nuclear fusion is so exciting.

We're actually limited not by space, water, or arable land, but by thermodynamics. At some point we'd overheat the planet directly from our own waste heat. We have to get off the planet to continue growing the population.

Once we do that the limits on human population are so high as to be mind boggling.

<comment><USER3> But this is all limited by how people will coexist and if they will work towards the same goal, which rarely happens on a large scale Paris agreement for example

</comment></comment></comment></comment><comment><USER5> I'm pretty convinced there's an efficient way to desalinize ocean water. It frustrates me that this hasn't been realized on a large scale yet

<comment><USER6> After that, we just have to figure out how to cheaply get it to the top of the mountains.

<comment><USER7> Electric helicopters? Drones?</comment></comment></comment>


Quirky response to magnetism presents quantum physics mystery - <AUTHOR> https://phys.org/news/2020-09-quirky-response-magnetism-quantum-physics.html <comment><AUTHOR> >Coexistence of Surface Ferromagnetism and a Gapless Topological State in MnBi2Te4

[https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.12...](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.125.117205)</comment>


Underemployment Is the New Unemployment - <AUTHOR> https://www.bloomberg.com/view/articles/2018-09-26/unemployment-numbers-hide-the-effects-of-underemployment?srnd=opinion <comment><USER2> This is not new. This underemployment because of competition for odd jobs also happened under Hoover in the late 1920's. Hoover also put tariffs in place against foreign goods to prop up american made goods. That didn't work, it just removed affordable goods from the shelves.</comment>


Personal Panopticons - <AUTHOR> https://reallifemag.com/personal-panopticons/ <comment><USER2> Yes, personal privacy is a function of the system moreso than of the individual. If one doesn't share his contact list with Facebook, but all of his friends do, then his contact list is de facto not private. This is a real occurrence. Financial information is not safe; hundreds of millions of credit card numbers and social security numbers have been stolen in recent years, through no fault to the individual, but to the companies and institutions that they entrusted their information to. Unless you accept isolation, you will be forced to interact with the world using PII, and since it's useless and futile to trust the world to protect your privacy, why should any individual bother? Your location will be tracked by license plate scanners, surveillance cameras, and cell phone towers. You will (soon) be identified by facial recognition. This is the reality we face.

Privacy is something we must believe in and actively strive for as a society in order to be in any way feasible. I don't see that happening any time soon.

</comment><comment><USER3> > "two friends are talking about recent trips to Japan, and soon after one > gets hawked cheap flights there" — that have led users to erroneously > conclude that their phones are listening in on their conversations.

Has this not been shown to happen?

<comment><USER4> What scenario is more likely:

1\. While in Japan, or during the planning of the trip to Japan, the persons visited websites that indicated a preference towards visiting Japan, and sometime later an ad network connected the cookie with their past behavior and served an ad for a flight, or

2\. Someone has created a hitherto unknown stealth malware designed to circumvent the "microphone on" notification on smartphones and exfiltrate audio from a user's device, deployed the infrastructure to store and process the audio, and then done everything already needed in scenario 1 to serve ads for a flight.

Any moderately-skilled network engineer or security professional would be able to instantly tell if a device was sending audio to a remote server if told to look. And highly-skilled people are actually looking.

</comment></comment><comment><USER5> > The appropriate response to these shifts cannot simply be an effort to > recover the older normative framework and its configuration of legal and > social provisions.

So is the author in favor of something like GDPR? I cannot tell.

</comment><comment><USER6> I struggle with the idea that the benefits of technologies like AI, personal data accumulation, etc cannot be separated from centralized services.

Why must it all be in "the cloud" where it can be surveilled?

</comment><comment><USER7> 2600 words on a Tuesday morning is rough, anybody got a tl;dr?

<comment><USER8> I'd go with...

> the most serious threats digital technologies pose are not strictly personal > concerns like identity theft or companies' surreptitiously listening in on > conversations but the emergence of a softly deterministic techno-social > order designed chiefly to produce individuals that are its willing subjects

<comment><USER9> the goal of every social order is to produce individuals that are its willing subjects, whether it does this softly or not.

<comment><USER8> Yes. I don't know the correct terminology but to me a 'state' can be viewed as a thing that enforces a social construct on its citizens. If the citizens can openly shape and agree with the social construct, so much the better.</comment></comment></comment></comment>


DNS Made Easy - ANAME records (CNAME on apex/root solution) - <AUTHOR>

Dear DNS Made Easy client,
Today, we are happy to announce the release of ANAME records, a new feature exclusive to DNS Made Easy.  DNS Made Easy is adding more flexibility to enterprise DNS management and at the same time making DNS resolution over 50% faster.
Benefits of ANAME over CNAME records
* ANAME records can be created at the apex (root record) of a domain, whereas CNAME records are forbidden at the apex per DNS RFCs
* ANAME records can exist with other record types, whereas CNAME records must be unique per DNS RFCs * ANAME records can exist in a round robin configuration, whereas CNAME records may not per DNS RFCs * ANAME records lead to a much faster result for resolving DNS servers by cutting out additional lookups inherent with the use of CNAME records
How ANAME records work
When a DNS Made Easy user creates an ANAME record, they will enter a fully qualified domain name as a value, just as they would have done if a CNAME record was created. This fully qualified domain name is looked up internally by DNS Made Easy, the resulting A records are mapped and created on DNS Made Easy name servers. DNS Made Easy will constantly monitor the value of the ANAME record, compare to the existing mapping in the ANAME comparison database, and modify the existing records if necessary.
ANAME records were also designed to work in conjunction with the DNS Made Easy Global Traffic Director (GTD) service. When a DNS Made Easy user creates an ANAME record in a non-default region (i.e. US West, US East, Europe, and/or Asia Pacific), the resolution of the fully qualified domain name will be done from systems sourced in that region. All mappings and record creation done with an ANAME record for a specific region will use data collected only from that region. This allows DNS Made Easy customers to provide geographically differentiated responses with ANAME records when used with the Global Traffic Director service.
To the DNS Made Easy user, ANAME records are configured just like CNAME records, however they have improved on the CNAME record type by eliminating the most common restrictions and performance bottlenecks.
How much does the ANAME record cost?
As with any DNS Made Easy service we constantly strive to provide maximum ROI for our clients.  As such we are providing this service at no additional charge to all clients that use our Managed DNS services.
For more in depth information on how ANAME records work, please see our introduction video at: http://anamerecord.com
For tutorials that explain how to configure ANAME records in DNS Made Easy, please visit: http://help.dnsmadeeasy.com/records/aname-record/
If you have any additional questions regarding ANAME records, please do not hesitate to contact us. You can reach our sales office by email at firstname.lastname@example.com or by phone at +1.703.880.3095 ext 1. You can also open a support ticket at https://support.dnsmadeeasy.com.
Sincerely, DNS Made Easy <comment><USER2> I'm confused. Is this like a geo-friendly A record?

<comment><AUTHOR> The best way to view it is as an an improved CNAME record: faster resolution for clients and ability to use at the apex/root of the domain. As far as I understand it, if the domain that it points to is geo-DNS'd, then it can be geo-friendly too.</comment></comment>


Thanksgiving Got Shorter After the 2016 Election, Study Says - <AUTHOR> https://www.nytimes.com/2018/05/31/science/thanksgiving-political-views.html <comment><USER2> "The smartphone data included 21 billion "pings" of devices in November 2016, each recording the location of a given smartphone at a specific time. It was provided by SafeGraph, a company that collects location data and other information from partners, including developers of mobile applications."

Well that is certainly interesting. This comes out to 70 pings for every smartphone in November. I am assuming dataset they've got is limited to U.S. only, there is a single cell phone per person, and there are 300 million people in U.S. (both are minor underestimations).

Now I am wondering what other information is available for purchase and how it is used.

<comment><USER3> i just happened to be at a salon at ucla a couple weeks ago where keith chen spoke about this research. the data comes from about 30 million phones for which they can reliably get the data, not every phone in the US.

</comment></comment><comment><USER4> If true, then people are losing focus on what's important. Half of my family is extremely conservative. Half is very liberal. We get along great at family gatherings, because we just agreed that discussing politics is less important than family relationships.

Maybe that will play out over the next couple years, now that the latest political developments seem to have really stretched the boundaries. Perhaps we will collectively decide it just isn't worth it to squabble. If we get super lucky we will realize we are being played, and we'll join together and turn on those who are driving the division.

<comment><USER5> I have zero tolerance for racism. My family voted for Trump and they say racist things. I don't need that in my life.

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

<comment><USER6> It is a short step from being willing to dismiss opinions with a simple "that's racist" to being unable to discuss reality. See [https://news.ycombinator.com/item?id=16908414](https://news.ycombinator.com/item?id=16908414) for an example of a conversation that is hard to have when you dismiss other people's views with "that's racist".

<comment><USER7> Not every idea deserves serious consideration.

<comment><USER8> Ideas are expressed by people. Does every person deserve serious consideration?

<comment><USER9> Racists do not

<comment><USER6> That is your opinion, and you are free to it.

However at this point "racists" organized and wound up controlling Congress, the Senate, the Presidency and the Supreme Court. The people that you'd like to ignore are currently running the place. Ignoring them might not be the best idea...

<comment><USER7> It's pretty unlikely that any dyed-in-the-wool Republican is going to hear your rational argument and be so astonished at your doctrine that he changes his mind.

<comment><USER6> Actually it is surprisingly likely..IF you're willing to do the hard work of moral reframing to put it from their views and values. See [https://www.nytimes.com/2015/11/15/opinion/sunday/the-key- to...](https://www.nytimes.com/2015/11/15/opinion/sunday/the-key-to-political- persuasion.html) for more about that.

That said, few people of any political persuasion are able to engage in that exercise.

<comment><USER7> I don't think this kind of exercise is that difficult, and I get plenty of practice on HN talking to people who have very right-wing ideas about the economy. But come on; it's not a way of working miracles. You might persuade your uncle who loves Donald Trump to moderate a couple of positions; you aren't going to turn him away from the Republican Party.

This is the main reason that election campaigns have moved on and focus much more heavily on turning out their own supporters than persuading "undecided" voters, who are a statistical nullity.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> One of the most important skills I learnt as a kid, from my family, is learning how to disagree without taking it personally. My parents couldn't possibly be more different from my sister and I. They also encouraged us to have meaty discussions and debates, everyday at the dinner table. Over the years, we've had some very passionate and spirited debates, but they were entirely focused on the issues. Not the people behind the issue. We learnt how to disagree violently, while still showing warmth and love for the person behind the disagreement.

As a teenager, I thought this was the default in society. It was only after leaving home and going to college, that I realized it was the opposite. Whereas my family took disagreements as an opportunity for lively debate (and a bit of fun in the process), too many people take disagreements as an insult and a personal affront. One can only hope that this tide will swing back around the other way.

</comment><comment><USER11> Any study like this will have the interesting caveat that the presence of smartphones at a formal, traditional family gathering might itself produce effects. That is: maybe family gatherings are getting shorter because so many people would rather play with their phones than listen to Uncle Joe's story about high school football. Again.

How could a researcher using smartphone location data control for that?

<comment><USER7> Well, for one thing, smartphone penetration is tremendous, and for another, all groups being compared have phones.

</comment></comment><comment><USER12> No comparison to 2015 data? Maybe Thanksgiving always shorter for this group.

<comment><USER13> Also, presumably areas of different political affiliation are likely to be farther apart, and people with a long drive home are likely to go home earlier. Perhaps they've corrected for all that in the paper, but it's not out yet.

</comment></comment><comment><USER14> This is pretty unfortunate if accurate given that the political "opinions" causing the rift, on both sides, are likely held by people whose political knowledge extends to roughly the start of the current election cycle and no further.

And at the root of this division lies the mainstream media.

</comment><comment><USER15> Then researchers used that mobile tracking data to see who visited strip clubs the Friday after Thanksgiving. They contacted those people to see how much they would pay for them not to tell their wives about it. You know, for science.

<comment><USER16> Please don't do this here.</comment></comment>


Storyboard That - Visually document ideas and processes - <AUTHOR> http://www.storyboardthat.com

<comment><AUTHOR> This is my new startup I have been working for months. Any and all feedback appreciated. I really hope it will make peoples lives significantly easier. - Thanks aaron</comment>


Typed Clojure Game of Life - logan-campbell http://logaan.github.io/clojure/core.typed/2013/10/02/core.typed-game-of-life.html

<comment><AUTHOR> I've always liked the Game of Life implemented with stencil convolution[1]. It's very declarative.

Stencil convolution[2] transforms a matrix (often an image) by taking a small matrix--the stencil--and using it as a set of weights to add all that cell's neighbors. Let's imagine our stencil is the following matrix:

        1 2 3
        4 5 6
        7 8 9

Then, to process each cell in the big matrix, we start by putting the 5 over that cell. The new value for the cell is going to be 1 times the cell up and to the left plus 2 times the cell directly above plus 3 times the cell up and to the right and so on.

If we represent the Game of Life as a matrix--a two dimensional array of Ints --we can use a stencil to easily compute the neighbor count. We would use this matrix:

        1 1 1
        1 0 1
        1 1 1

Applying this stencil gives us a function that goes from the matrix of alive cells to a matrix of neighbor counts. Then, to do a step in the game of life, we just zip the two matrices together with the transition function.

The neat bit is that the real code looks pretty close to what I have just said! For example, here is how the stencil looks:

        neighbors = [stencil2|1 1 1
                              1 0 1
                              1 1 1|]

We can use basically the same transition function as in the post:

        transition a 2 = a
        transition _ 3 = 1
        transition _ _ = 0

And the actual step algorithm:

        step grid = R.computeUnboxedS . R.zipWith transition grid $
                      mapStencil2 (BoundConst 0) neighbors grid

(BoundConst 0) just tells the stencil to treat every square outside the large input matrix as 0. R.computeUnboxedS just turns the result of zipWith back into an unboxed array.

Now, the computeUnboxedS function call is not really intuitive. Unless you knew how the API was supposed to work, you would not think of it. This is where Haskell's types come in, acting like active documentation: you can see that you need the computeUnboxedS function because that's the only way to get from the type at the result of zipWith to the type you actually want!

Anyhow, this is not the best way to implement life, admittedly. The biggest shortcoming is that, since you're using an array, the field is always bounded to the same size and you're always representing _every_ cell, even ones that won't be alive for generations. Mostly, this is just a great example to see how stencil convolution works!

[1]: [http://www.slideshare.net/kizzx2/repagolpdf](http://www.slideshare.net/kizzx2/repagolpdf)

[2]: [http://research.microsoft.com/en- us/um/people/simonpj/papers...](http://research.microsoft.com/en- us/um/people/simonpj/papers/ndp/Stencil.pdf)

</comment><comment><USER2> It's a bit tongue-in-cheek to compare this to Edward Kmett's FP Complete articles on Cellular Automata, but they're a really interesting read if you want to get your feet wet with some advanced Haskell programming

[https://www.fpcomplete.com/user/edwardk/cellular- automata](https://www.fpcomplete.com/user/edwardk/cellular-automata)

The series began as trying to explain the value of the Store Comonad for generalizing the "Cellular Automata are Comonads" notion, but then dipped into how to build resumable folds to implement CRC hashing for pngs.

The final article pulls a really great trick out where by writing down a very general type for cellular automata as comonads it was possible to automatically generate code which generalizes CAs to stranger topologies (like a cylinder).

The final code including the CA code, the strange topologies, the PNG encoder, and a webserver to display the whole thing online is all probably shorter than the Java CA code would have been here.

</comment><comment><USER3> > my gen Y attention span

I can't believe people internalize this "Gen Y" shit. It's just ageism. There's always been something to distract us.

<comment> logan-campbell I don't actually identify as Gen Y (I had to look up the dates) or as a particularly distractible person. I just wanted a pithy way of saying that the protocol issue I hit wasn't necessarily an inherent issue, but rather that I chose not to deal with it.

<comment><USER3> I understand the intent, and I don't want to undermine your point, I just find it offensive, but that would certainly put me in the minority.

</comment></comment></comment><comment><USER4> The FP Scala vs. OO Scala was nice to include. All too often you see simply OO Scala.

</comment><comment><USER5> My try on a more 'idiomatic' haskell version : [https://gist.github.com/arianvp/6814753](https://gist.github.com/arianvp/6814753)

I have no idea what the inputs need to be. I coded by types. Code compiles but has never been tested but probably works. (Ha, gotta love haskell)

edit: Think it works

<comment><USER2> The list comprehension is great, but man is prefix ((.).(.)) scary. I always rename that to (.:), use it infix, define it pointfully, and comment calling it "two-argument compose".

</comment></comment><comment><USER6> > I couldn't bring myself to do a Java version but I'd expect it to be several > times larger

I'm a big fan of Clojure and don't have much love for Java, but this is a little unfair. I especially think doing a Java 8 version _with lambdas_ would be an interesting comparison.

<comment> logan-campbell The code is up at [https://github.com/logaan/typed-game-of- life](https://github.com/logaan/typed-game-of-life) and I'd be very happy to accept a pull request with a Java example. I've done a few side by side comparisons of Clojure / Scala / Java and the Java has always been several times larger than Cloure / Scala. In a couple of cases it was 20-30x larger.

Java 8 may indeed improve this situation. Does it also introduce higher order functions for working with collections?

<comment><USER6> Yes, through the Stream API.

<comment> logan-campbell Sweet.

</comment></comment></comment></comment><comment><USER7> Interesting that the Haskell version is the most concise and also has as much or more typing than the rest!

<comment><USER8> In Haskell it's generally considered bad form to omit type annotations for your top-level functions. There is even a compiler warning for this sort of thing. Thankfully, the Haskell plugins for good editors (vim or emacs) provide hotkeys to automatically insert an inferred type annotation for a function you specify.

<comment><USER2> It's naked-looking without them. Valid, but all the documentation is hidden.

</comment></comment></comment><comment><USER9> Obligatory [http://www.youtube.com/watch?v=a9xAKttWgP4](http://www.youtube.com/watch?v=a9xAKttWgP4) APL version explained.

Here's one I found online [http://dfns.dyalog.com/s_life.htm](http://dfns.dyalog.com/s_life.htm)

        life←{                             ⍝ John Conway's     "Game of Life".
            ↑1 ⍵∨.^3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵ ⍝ Expression for next generation.
        }

Completely awesome convolution method.

<comment><USER10> Certainly awesome. Note that this implementation is toroidal. My take on J[1] (code-golfed) based in the same algorithm:

      l=:[:+/(3 4=/[:+/(,/,"0/~i:1)|.])*.1,:]

De-golfed:

      life =: [: +/ (3 4 =/ [: +/ (,/ ,"0/~ i:1) |. ]) *. 1 ,: ]

[1] [http://www.jsoftware.com](http://www.jsoftware.com)

</comment></comment><comment><USER11> The width of each window isn't the same for Scala compared the others. It'd have been nice to see them all the same width with text wraparound.

<comment><USER12> the picture lets you see the height and width of all of them and I think both parameters tell you things about the "shape" of the code</comment></comment>


Ask HN: What's not to like about Marketo/Hubspot/etc? - <AUTHOR>

I am considering marketing automation software for auto-emailing and reporting. What are your thoughts on what each service does well, and perhaps more importantly, can't do as well? <comment><USER2> I've demo'd Hubspot. It works as described and rolls up a lot of marketing tools e.g email marketing, analytics, crm etc into one solution.

That said, the alternative, piecing together individual applications e.g mailchimp for email marketing, ga/mixpanel for analytics etc might be more effective.

It depends I guess on your resources, both developer and marketing.</comment>


Ask HN: Suggest me a new programming language with small user community to learn - <AUTHOR> I want to learn a very new programming language. It should not be too popular. It should not have a large user community. It should be relatively new compared to Go, JavaScript, etc.<p>My intention in learning behind a language like this is to see if I can contribute run-of-the-mill libraries to this language's ecosystem. If it is new and not so popular yet, there is a good chance its ecosystem would be lacking where I can contribute my time and effort to improve it. <comment><USER2> Scheme is big and small at the same time. It is old, but the last report on the language was released a couple of years back and it is still growing. There is still many areas that needs some love.

Checkout [http://scheme-lang.com/](http://scheme-lang.com/)

<comment><USER3> You beat me to it!

I'd recommend checking out Chicken Scheme. Not only is it a kick-butt implementation but its community, #chicken on Freenode, is truly fantastic.

Give it a whirl :)

</comment></comment><comment><USER4> I'd try Racket (Scheme family) or ReasonML.

</comment><comment> em-bee there are plenty of older but less popular languages that could use some help to improve the ecosystem.

pharo smalltalk for example. (i can give you a list of things i'd like to have there right now.)

pike is a nice language with a small community. plenty of room for interesting things to add.

red-lang is another one that could use some help.

bonus: if you pick that up any of these three i'll offer to mentor you :-)

</comment><comment><USER5> [https://www.idris-lang.org](https://www.idris-lang.org) the book is great.

[https://urbit.org/docs/learn/hoon/](https://urbit.org/docs/learn/hoon/) has a small, welcoming community. It's pretty out there though.

There's also nim (fast Python) and Crystal (fast Ruby).

<comment><USER6> I've been meaning to check out urbit thoroughly for a while but they seem to have gone overboard with the esoteric terminology, at least for me personally. I was put off by the naming schemes in the docs last I looked at them about a year ago. I suppose I'll have another look again. Maybe they grow on you once you are familiar with them.

</comment></comment><comment><USER7> Odin[0] is very new and has a pretty small community, but it's promising and very well thought-out.

[0]: [https://github.com/odin-lang/Odin](https://github.com/odin-lang/Odin)

</comment><comment><USER8> I'd recommend Dart. It's a great language but the ecosystem was severely lacking when I lasted used it.

An additional benefit is that it's super easy to contribute to the Flutter codebase!

</comment><comment><USER9> What do you consider as "run-of-the-mill" libraries ? like data- structures/algos ? or say something like a database connector / http router ?

</comment><comment><USER10> Nim sounds like a perfect opportunity for you :)

</comment><comment><USER6> Zig is very cool. Not sure whether it has a community yet. I liked the authors talks and livestreams on YouTube.

</comment><comment><USER11> Lua!

<comment><USER12> Lua is 26 years old. The OP said younger than Go. Go is 9 years old.</comment></comment>


Ask HN: Math books for a CS autodidact? - <AUTHOR> I am a full-stack web developer in my mid thirties and am mostly self-taught. Over the years I've build a good base of working knowledge, but lack the theoretical backgrounds. So to rectify that, I want to start (re)building my math skills from ground up.
My goal is to acquire enough knowledge to properly understand "Concrete Mathematics" (by Graham, Patashnik, Knuth), followed by CLRS and SICP. I'm searching for books that meet these criteria:
1. They must build "from the ground up". My brain has pretty much forgotten all of high school math. For instance, I can't even do division on paper.
2. I have a full time job, so the books should be pleasant to read and pedagogically well constructed.
3. No skipping over details, i.e. no books that are just collections of definitions and theorems. As someone else here on HN put it, I'd prefer them to "be written by mathematicians, for mathematicians".
4. Good exercises with solutions.
I've already found a few suggestions in other threads:
* An Introduction to Mathematical Reasoning: Numbers, Sets and Functions (Eccles)
* How to Solve it: A New Aspect of Mathematical Method (Conway, Polya)
* Calculus (Spivak)
* Linear Algebra Done Right (Axler)
Can I read those in order before proceeding to "Concrete Mathematics"?
Thank you <comment><USER2> For fundamentals of Probability and Counting, I really liked [https://www.artofproblemsolving.com/store/item/intermediate-...](https://www.artofproblemsolving.com/store/item/intermediate- counting)

</comment><comment><USER3> Algorithms by Papadimitriou would be a pleasant read on algorithms.

<comment><AUTHOR> Thank you, that looks like an interesting read.</comment></comment>


AI, Deep Learning, and Machine Learning: A Primer [video] - <AUTHOR> http://a16z.com/2016/06/10/ai-deep-learning-machines/ <comment><USER2> Basically this video ignores the history of machine learning in general. Jumping from Expert Systems to Neural Networks and Deep Learning is actually ignoring 36 years (and billions of dollars) of research [http://machinelearning.org/icml.html](http://machinelearning.org/icml.html) (Breiman, Quinlan, Mitchell, Dietterich, Domingos, etc). Calling 2012 the seminal moment of Deep Learning is quite hard to digest. Maybe it means that 2012 is the point in time when the VC community discovered machine learning? Even harder to digest is calling Deep Learning the most productive and accurate machine learning system. What about more business oriented domains (without unstructured inputs), the extreme difficulties and expertise required to fine tune a network for a specific problem, or some drawbacks like the ones explained by [http://arxiv.org/pdf/1412.1897v2.pdf](http://arxiv.org/pdf/1412.1897v2.pdf) or [http://cs.nyu.edu/~zaremba/docs/understanding.pdf](http://cs.nyu.edu/~zaremba/docs/understanding.pdf).

Those who ignore history are doomed to repeat it. As Roger Schank pointed out recently [http://www.rogerschank.com/fraudulent-claims-made-by-IBM- abo...](http://www.rogerschank.com/fraudulent-claims-made-by-IBM-about-Watson- and-AI), another AI winter is coming soon! Funny that the video details the three first AI winters but the author doesn't realize that this excessive enthusiasm in one particular technique is contributing to a new one!

<comment><USER3> I think you're spot on with the observation that 2012 refers to when VCs discovered machine learning. Anyone who has recently interacted with VCs will tell you that they look for anything to do with machine learning (and VR/AR/MR), even when it makes no sense. There are going to be some companies who will be able to leverage machine learning to advance their business, namely, Google/Facebook who will probably claim they can offer better targeted advertising and such. Most other players who merely try to force machine learning on other fields are likely to realize that while the technology is cool, it's still too early for it to be generally applicable to "any" problem.

Especially dangerous is going to be the mix of machine learning with healthcare. I believe Theranos tried it and found out it's not that easy... I'd watch this space with skepticism.

<comment><USER4> > Especially dangerous is going to be the mix of machine learning with > healthcare.

Medical diagnosis has been one of the primary application areas of AI since the 70s (maybe earlier, I can't remember off the top of my head). The widespread non-availability of automatic doctors should tell you how well that has worked :-(.

Coincidentally enough I worked both in AI (1980s) and drug development (2000s) and now _really_ understand how hard it is!

I do believe we will soon see automated radiology analysis as it is likely to _appear to be_ most amenable to automated analysis. Presumably in Asia first as the US FDA will justifiably require a lot of validation. The opportunity for silent defect is quite high -- you are right to say "especially dangerous"

</comment></comment></comment><comment><USER5> This is an opinionated video that tries to rewrite history. For example, according to it, the "big breakthrough" with deep learning occurred in 2012 when Andrew Ng et al got an autoencoder to learn to categorize objects in unlabeled images. WHAT? Many other researchers were doing similar work years earlier. According to whom was this the "big breakthrough?"

The video at least mentions Yann LeCun's early work with convnets, but there's no mention of Hinton et al's work with RBMs and DBNs in 2006, or Bengio et al's work with autoencoders in 2006/2007, or Schmidhuber et al's invention of LSTM cells in 1997... I could keep going. The list of people whose work is insulted by omission is HUGE.

I stopped watching the video at that point.

<comment><USER6> Omitting the other members of the LBH conspiracy and Schmidhuber is unfortunate, but I agree with the idea that the number one reason deep learning is working now is scale. Hinton also says it himself, for example (at 5m45 in the video below): "What was wrong in the 80 was that we didn't have enough data and we didn't have enough compute power. [...] Those were the main things that were wrong".

He gives a "brief history of backpropagation" here: [https://youtu.be/l2dVjADTEDU?t=4m35s](https://youtu.be/l2dVjADTEDU?t=4m35s)

<comment><USER7> I agree that scale is an important factor in deep learning's success, but that Google experiment ended up being a good example of how not to do it. They used 16000 CPU cores to get that cat detector. A short while later, a group at Baidu were able to replicate the same network with only 3 computers with 4 GPUs each. (The latter group was also lead by Andrew Ng.)

<comment><USER8> Incidentally, seeing the speaker set up an overkill neural network for a trivial classification problem seemed off to me. Unsurprisingly, at least 75% of the neurons were unused.

Throwing a phenomenal amount of neurons at a problem is not a goal; using a minimal amount to solve it in a given time budget is.

The statement at the end of the video, " _all the serious applications from here on out need to have deep learning and AI inside_ ", seems awfully misguided. Even DeepMind doesn't use deep learning for everything.

</comment></comment></comment></comment><comment><USER9> AI is very fragmented. Biomimicry has always been the way forward in every industry and Stephen Pinker made good head way from my vantage.

[https://www.google.com/webhp?sourceid=chrome- instant&ion=1&e...](https://www.google.com/webhp?sourceid=chrome- instant&ion=1&espv=2&ie=UTF-8#q=stephen%20pinker%20how%20the%20mind%20works)

[https://www.google.com/webhp?sourceid=chrome- instant&ion=1&e...](https://www.google.com/webhp?sourceid=chrome- instant&ion=1&espv=2&ie=UTF-8#q=computational%20theory%20of%20the%20mind)

Saira Mian, Micheal I. Jordan (Andrew Ng was a pupil of his) and David Blei were not mentioned in this video so they are off the mark a bit. Vector space is the place.

[https://www.google.com/webhp?sourceid=chrome- instant&ion=1&e...](https://www.google.com/webhp?sourceid=chrome- instant&ion=1&espv=2&ie=UTF-8#q=michael+jordan+deep+learning)

AI has become the most competitive academic and industry sector I've seen. Firms like Andreessen are trying to understand the impact during this AI summer and they should be applauded for this.

One of the keys to AI is found here: [https://www.google.com/webhp?sourceid=chrome- instant&ion=1&e...](https://www.google.com/webhp?sourceid=chrome- instant&ion=1&espv=2&ie=UTF-8#q=split%20brain)

Deep learning has very little to do with how the brain and mind work together. In the video the highlight on ensemble (combinatorial) techniques are a big part of the solution.

<comment><USER10> More direct link to Split-brain as it applies to computing: [http://en.wikipedia.org/wiki/Split- brain_(computing)](http://en.wikipedia.org/wiki/Split-brain_\(computing\))

Also, thanks for that term! Was not aware of it, but very useful to describe what I think is one of the big problems.

<comment><USER9> Yes, split brain approaches in general computing are very interesting and I think, over lap some approaches in ai-based computational combined with neuroscientific efforts.

</comment></comment></comment><comment><USER10> Interesting to see the amount of "winters" AI has gone through (analogous, to a lesser extent, to VR).

I see increasing compute power, an increased learning set (the internet, etc), and increasingly refined algorithms all pouring into making the stuff we had decades ago more accurate and faster. But we still have nothing at all like human intelligence. We can solve little sub-problems pretty well though.

I theorize that we are solving problems slightly the wrong way. For example, we often focus on totally abstract input like a set of pixels, but in reality our brains have a more gestalt / semantic approach that handles higher-level concepts rather than series of very small inputs (although we do preprocess those inputs, i.e. rays of light, to produce higher level concepts). In other words, we try to map input to output at too granular of a level.

I wonder though if there will be a radical rethinking of AI algorithms at some point? I tend to always be of the view that "X is a solved problem / no room for improvement in X" is BS, no matter how many people have refined a field over any period of time. That might be "naive" with regards to AI, but history has often shown that impossible is not a fact, just a challenge. :)

<comment><USER11> 1) sounds like exactly what deep learning is...map more complex abstractions in each succeeding layer

2) are computers that can understand speech, recognize faces, drive cars, beat humans at Jeopardy really 'nothing at all like human intelligence?'

<comment><USER12> _> 1) sounds like exactly what deep learning is...map more complex abstractions in each succeeding layer_

Only at such a high level of abstraction as to be meaningless.

 _> 2) are computers that can understand speech, recognize faces, drive cars, beat humans at Jeopardy really 'nothing at all like human intelligence?'_

They are not. Hundreds of man years worth of engineering time go into each of those systems, and none of those systems generalizes to anything other than the task it was created for. That's _nothing_ like human intelligence.

<comment><USER13> This is a very superficial point-of-view.

What matters here is the concept itself (deep learning as a generic technique) but also __scalability __. Not the specifics that we have today, but the specifics that we will have 20 years from now.

The concept is proven, all that matters now is time...

<comment><USER14> > The concept is proven, all that matters now is time...

This is a very naive point of view. You could deep-learn with a billion times more processing power and a billion times more data for 20 years and it would not produce a general artificial intelligence. Deep learning is a set of neural network tweaks that is insufficient to produce AGI. Within 20 years we may have enough additional tweaks to make an AGI, but I doubt that algorithm will look anything like the deep learning we have today.

<comment><USER12> This is basically exactly what I was trying to say with my original comment; thanks for stating it in a clearer way.

</comment></comment></comment></comment></comment></comment><comment><USER15> From the presentation: "There's a lot of talk about how AI is going to totally replace humans... (But) I like to think that AI is going to actually make humans better at what they do ..."

Then immediately he continues that

"So it turns out that using deep learning techniques we've already gotten to better than human performance [....] at these highly complex tasks that used to take highly, highly trained individuals... These are perfect examples of how deep learning can get to better than human performance... 'cause they're just taking data and they're making categories.."

I think that brushing off the dramatic social changes that this technology will catalyze is irresponsible.

One application developed by one startup in California (or wherever) could make tens of millions of people redundant all over the world overnight.

How will deep learning apps affect the healthcare systems all over the world? What about IT, design, music, financial, transportation, postal services... nearly every field will be affected by it.

Who should the affected people turn to ? Their respective states ? The politicians ? Take up arms and make a revolution ?

My point is that technologists should be ready to answer these questions.

We can't just outsource these problems to other layers of society - after all, they're one step behind the innovation and the consequence of technology is only visible after it's already deeply rooted in our daily habits.

We should become more involved in the political process all over the world (!) - _at least_ with some practical advice to how the lawmakers should adapt the laws of their countries to avoid economic or social disturbances due to the introduction of a certain global AI system.

<comment><USER16> I just listened to Altman discussing this at a recent interview and it is obviously something he thought a lot about. If you can't watch the video he says that ai is an amazing resource and YC is funding a basic income study in oakland as well as open ai. He also points out that doing a task that a machine or computer do is pointless. I find myself agreeing with what I believe his conclusion was;

we (humans) want ai and will all be better off for it. we are heading into a shift on the order of the industrial revolution and the best course is unknowable. we should harness this technology, try to distribute it bu collaborative building & information dissemination and study the idea of personal fullfillment & a basic quality of life.

In short, the answer is definitely not to stop working on it because it is just basic game theory that someone/entity will not. We need to leverage to fix the problem it creates & learn how to allocate our resources by studying this immeadiately.

[http://m.youtube.com/watch?v=FuijDaj8DvA](http://m.youtube.com/watch?v=FuijDaj8DvA)

<comment><USER15> > He also points out that doing a task that a machine or computer do is > pointless.

This is true for some tasks - but not true for others, even if AI could in theory do them better.

For example, a medical doctor. It is easy to see this as just a job, but it's so much more than that - it's the culmination of 20 years of studies, a childhood dream, the feeling of being important and useful to society, the "thank you" from the patient, the social circle, the social status...

There are many people who actually enjoy their jobs, because it gives them meaning and satisfaction.

Another example - musicians. I see so many "AI composer" projects out there - algorithms which compose music... I think these people are kind of missing the point ..

It's easy to see music as notes and tempo, but it is much more than that. It is a medium, a tool, through which the listener can connect to the artist and experience his emotional state: [https://www.youtube.com/watch?v=1kPXw6YaCEY](https://www.youtube.com/watch?v=1kPXw6YaCEY)

Having an algorithm on the other side feels so fake.. artificial..

<comment><USER13> Only because your mental map is old, archaic and will not allow you to see things any other way.

So what is the right course according to you? Do we set an artificial threshold at some point in the future, where these jobs will be swapped to AI? Do we simply _never_ replace them with AI?

Do we __slow __progress in order to cater to people 's obsolete expectations (don't want to hurt their __feelings __after all).

No. Problems will appear and we will solve them. It is our duty to the universe, to ride the wave and see it all the way through.

EDIT: Virtual Reality will solve a lot of the "meaning of life/emotional satisfaction" issues that creep up. And VR is getting a jump .... right about now. It's quite amusing, just thinking about the timing.

<comment><USER15> > Only because your mental map is old, archaic and will not allow you to see > things any other way.

I've done my fair share of acid and mushroom trips, explored the DMT hyperspace dozens of times, travelled through time and space into alternate realities, met and communicated with biological and machine beings and have thoroughly explored our planet.

My mind is wide open :)

Since you mentioned the Universe, then it would help to remember that in "galactic" terms, we've just climbed down from the trees a couple of hundred thousand years ago and our technology is still extremely primitive and it is not at all a proven fact that we can survive it.

More down to Earth, what I suggested in the parent post is that people who are bringing this technology forward should also be the people who come up with the political and social proposals for changes necessary to accommodate it.

We can't just unleash these "technological atomic bombs", which fundamentally change the social game and then expect the politicians to handle the fallout. Tech people and scientists need not stay on the sidelines any more - they must be the designers not only of technology, but of the social system too, since the two are merging anyway...

Of course this can't be "enforced", rather, it's an ethical thing to do on the part of tech companies, justified by the fact that deep down, our motivation is to make the world "better".

<comment><USER13> Yes and this will without a doubt take place too. In fact, some would say it's already happening.

My point is that the process, if we might call it that, will be osmotic and not discrete. Of course there is also the notion of people believing that there is a layer of central planning somewhere and that "we" (groups, organizations, nation states) actually have high-level organizational control over what is happening.. Watching Taleb talk about tail events will quickly put these notions to the ground.

We shouldn't waste time inventing such control when there is none or even inventing the illusion that such control will be effective. All we can do, I feel, is _guide_.

</comment></comment></comment></comment></comment></comment><comment><USER17> We will be closer to cracking neural nets and are closer to the singularity when we can train a net on two completely different tasks and each task can make other predictions subsequently better. IE: train / test it on spam / ~ spam emails, then train the same net with twitter data male / female.

<comment><USER18> You can do this now(?!)

In fact something as simple as naive Bayes will work reasonably well for that.

I'm not sure if you are aware, but in (say) image classification it's pretty common to take a pre-trained net, lock the values except for the last layer, and then retrain that for a new classification task. You can even drop the last layer entirely and use a SVM and get entirely adequate results in many domains.

Here's an example using VGG and Keras: [http://blog.keras.io/building- powerful-image-classification-...](http://blog.keras.io/building-powerful- image-classification-models-using-very-little-data.html)

And here a similar thing for Inception and TensorFlow: [https://www.tensorflow.org/versions/r0.8/how_tos/image_retra...](https://www.tensorflow.org/versions/r0.8/how_tos/image_retraining/index.html)

<comment><USER19> Transfer learning at the moment works within one domain (say images), because the low level shapes are still similar, but not between different domains of data

<comment><USER18> Sure, that's what I was pointing out.

However: Zero-Shot Learning Through Cross-Modal Transfer [http://arxiv.org/abs/1301.3666](http://arxiv.org/abs/1301.3666)

</comment></comment></comment></comment><comment><USER20> One of the main challenges in Deep Learning is that it requires massive amounts of data, orders of magnitude more data than a human toddler to detect a cat. It could be a great area of research on how to reduce the amount of data it takes to train the network.

One main thing it lacks is imagination. Humans can learn things and can imagine different combinations of those things. For example, if I ask you to imagine a Guitar playing Dolphin, you could imagine it and even recognize it from a cartoon even though you have never seen it in your life before. Not so for Deep Learning, unless you provide massive amount of images of Dolphins playing guitars.

<comment><USER21> Interesting! Made me wonder - how would we compare the data that neural net receives with the data that toddler's visual cortex is getting?

On a purely visual level - let's say we have 10k of static 32x32 images defining a class of cat. Or even more of them plus some negative examples. Each image is a different cat, in a different position (they're incredibly flexible creatures). Having so many cases we should be trying to make some kind of a generalization of what 1024 pixels of a cat should look like.

A family with a toddler has only one cat. From that one example, he learns the concept of what a cat is and is able to generalize it when in different situations. But a toddler has 2 eyes, his visual input is stereo. Even if he sees just one cat, it's not a _static_ image interaction. The input is temporal, he can see the cat moving and interacting with the environment.

<comment><USER19> I think stereo vision isn't super important for this - people blind in one eye don't do noticeably worse. Not to say depth doesn't help for segmentation or learning concepts but I don't think it's the key

</comment></comment></comment><comment><USER22> Pretty basic stuff - the history portion was more interesting than any of the content that followed. Anyone who's been paying the slightest attention in the last few years will be familiar with all of the examples used in the podcast.

On a side note I always admire the polish of the content that comes out of a16z - its typically very well put together.

</comment><comment><USER23> [http://www.videojots.com/davos/state_of_ai.html#2181](http://www.videojots.com/davos/state_of_ai.html#2181)

Apparently, robots still struggle to pick up things?</comment>


Linking plasma formation in grapes to microwave resonances of aqueous dimers - <AUTHOR> https://www.pnas.org/content/early/2019/02/13/1818350116 <comment><USER2> Previous discussion: [https://news.ycombinator.com/item?id=19195692](https://news.ycombinator.com/item?id=19195692)

</comment><comment><USER3> A nice video explainer involving the authors of this paper: [https://www.youtube.com/watch?v=wCrtk- pyP0I](https://www.youtube.com/watch?v=wCrtk-pyP0I)

</comment><comment><USER4> Eli5 please. Does this means that there's a chance to advance plasma containment based on microwaving grapes?

</comment><comment><USER5> So if the plasma is actually generated at specific points of concentration dictated by the geometry of the resonator, and is dynamically synched to the microwave field, could this not be synched with a magnetic bottle to create (a) stable oscillating contained plasma volume(s)?

(After tuning the physical geometry)

<comment><USER6> Sure, I think.

Look at Movie_S04 (MP4).[0] After ~0:56, the plasma is apparently no longer linked to the grapes.

0) [https://www.pnas.org/highwire/filestream/849570/field_highwi...](https://www.pnas.org/highwire/filestream/849570/field_highwire_adjunct_files/4/pnas.1818350116.sm04.mp4)</comment></comment>