Out of curiosity, what would you classify as a practical application? We're looking for some interesting examples to build to help show Eve to folks.
EDIT:
For instance, one of the examples we're throwing together now is an app that a food truck owner could use to put up their menu, manage a queue of orders (in person and online), alert people when their order is ready, accept payments, and post to social media. We picked this because it's an app trucks could actually use and it has lots of "real" functionality in it - from stripe integration to social media posting. Also, who doesn't love food trucks? :)
> There must be a better range of use cases.
There are lots of businesses I'm sure we could build, but that's not really our goal. This one happens to be straightforward and real, so it seemed decent. Do you have any suggestions that you think would make for a better demonstration?
I think the more useful ability for the food truck operator is the ability to modify the software their business runs on, not the ability to build it from scratch.
Imagine everything on everyone's desk was bolted to it, and you could only choose between a few desk packages. Someone comes along and says "people should be able to put together their own desk packages!" But everyone wonders: "huh? I'm not a furniture engineer. What would I do with a custom desk that I can't do with an off-the-shelf one?"
But as we know people come up with all kinds of uses for desks when they are allowed to reconfigure them freely.
That's what we're losing out on by not making software reconfigurable, at least a little bit at the top layer.
What we have right now is a series of buttons that add or remove bolted down components from your desk. Eve is trying to imagine what it might look like to actually be able to move things around freely, add duct tape etc.
I know it's a weak argument, because no one really knows what people would exactly do with the ability to modify their software. It just seems to me like the kind of thing that would pay off.
Yes, I agree with this 100%, and this is one of the main goals for Eve, much further down the line (see some of our experiments with graphical interfaces to Eve: https://github.com/witheve/eve-experiments)
But even today we're focused on making programs easier to read and modify. Let's say a food truck owner (with a little technical experience) does download our app written in Eve, and wants to modify a button.
When he opens the program, he can see a table of contents, and code written in a literate programming style. So immediately there's a place to start.
The user could read through the document and try to find the place where the button is drawn, but the program is running right there. The user can inspect the button in question, and the editor will point right to the code that draws it.
The user can modify the code right there, and see changes to the app immediately. This workflow is similar to what we demoed in this video: https://www.youtube.com/watch?v=TWAMr72VaaU
Obviously given the current form of Eve, this scenario requires a food truck owner who is also a developer. But supporting simple workflows that make using a computer easier is central to what we're trying to do with this language.
Anyways... I see there is a tier missing between the consumer of such model and Eve. That tier is of the Assemblers (a light version of the traditional "Developer") who will take requirements to modify an Eve app to the liking of the given consumer. They (the Assembler)( could also put out different versions of the app that fit the most requested use cases.
I think the thing that the Eve developers are missing (from their mental model) is that the "essential complexity" of a given task is irreducible and is often more than someone who is not an algorithmic thinker can handle. This is different than the "incidental complexity" which Eve might reduce greatly.
I think we do. Excel, and the various systems implemented on top of it. To my understanding systems built on top of Excel are used to run all sorts of things, even live hardware, because it's so approachable and easy to modify.
Perhaps Eve can be 'sold' to the industries that rely on Excel. First the project can just add @excel database....
We will know the age of "personal computing" has truly arrived when such things are possible. At the moment, our hypothetical food truck owner (and many, many more people I know personally) are at the mercy of others, frustrated and unable to achieve their computing goals unaided.
I don't think anyone denies they've brought tremendous value to professionals in need of some ad hoc programs.
- Exhaustive inline documentation. Like, consider literate-programming as a model. I want to see thoughts, observations, etc. as I read through the code. I want to know how you think somebody should be thinking. I want notes around "well, because of the way the stdlib works this is O(n^3) when it could be O(n^2), but it's okay for our values of n, we can come back to this." Show me not just what's good, but what kinda isn't but is made up for by other stuff being awesome. Show me where the bodies are buried. Because otherwise, sticking to stacks where I already know and can risk-assess against is a better use of my time.
- Deployment advice. This doesn't mean "throw it in a Docker container", because that's not showing a grasp of the tools around you, but rather, say, open-ended integration with AWS, or Google, or whatever. Show me best practices for configuring it, as I already can see with Rails. And, as above, explain the thinking, explain the value of it, discuss alternatives and why you didn't go that route.
Ultimately, I want to see that whatever tools that I would move to next (I use Ruby for devops-type tasks and Dropwizard for the web) to demonstrate that the developers are intensely thoughtful about the people using their systems, rather than just technology.
HTH.
Europeans. Please add a Döner- or Würstel- stand model.
+ bootloader
+ radio stack
+ HAL
+ custom code layer, say Arduino
+ communication layer
+ mesh hub (+ mesh communication layer)
+ sink code on mobile (bridge, no access to encrypted data)
+ local communication on mobile (low latency)
+ cloud
+ remote access
+ interfaces, mobile/dashboards
It has also a lot of crosscutting concerns: latency, scalability (keep it local stupid), bandwidth, security, safety. Till out in the field: how to remotely define if it is hardware or software to reduce number of devices that gets returned.
It's non trivial, and the whole program is available in book form as a literate program.
In the meantime, I hope I can show a "plausibility argument" for Eve's potential by pointing to areas where the status quo of mainstream programming is visibly less than ideal. Uniformity of data formats and operations across the programming stack is one such area.
Ror had none, because it was doing what everything else was doing, just faster. But a successful business used it so people got interested.
Node.js first demonstrated chat server
Angular.js showed two way binding of dom to data using declarative syntax
React had those crazy dom update benchmark.
Golang showed various pattern for synchronizing using channels. The "hello world" of go was a chat server.
Etc.. now all those tech had many other great feature. But you need to find one single killer concrete example for the tech, that it performs an order of magnitude better / simpler / faster / safer than any other.
Also, never ever forget runtime speed benchmark. You don't need to be the best, just not catastrophicaly bad.