Eve Dev Diary (August 2016)
incidentalcomplexity.comI was really confused when I saw this that the Eve Dev Blogs, https://community.eveonline.com/news/dev-blogs/, were being posted on HN. For others this is a new programming language called Eve and is completely unrelated to the video game Eve.
Here I was hoping others were getting as excited about clone states (free to play) as I was.
What's interesting to me is that the more Eve develops the more it seems to be returning to its LightTable roots. This isn't a bad thing, there's still plenty of life in the LightTable approach, but my impression of Eve before was that it was designed to be a tool that non-programmers would use. Based on this latest blog post, it appears that may be of less importance. I still hope Eve continues to develop in its current direction, I'd like to see how the immediate feedback and flexibility of Eve can continue to be refined.
A programming language that non-programmers can use is like a written language that illiterate people can read: it's an oxymoron. (The minute you can use it, you're a "programmer"; the minute you can read, you're "literate")
Not everyone who writes is necessarily a writer. In the same vein, not everyone who wants to tell a computer what to do wants to be a programmer.
but when people say "that non-programmers can use" they don't mean "that people whose job title isn't 'programmer' can use." They mean "that people who can't program can use." it's a bit confusing and I suppose I could be wrong. (They could mean "people whose job title isn't 'programmer.'")
Somebody who makes a spreadsheet is telling a computer what to do. Are advanced users of Excel programmers?
Businesses occasionally express the business rules in the form of spreadsheets to be directly implemented into code.
Spreadsheets even double as unit tests.
> Are advanced users of Excel programmers? Yes.
Edit: here's a previous discussion about a Turing Machine in excel - https://news.ycombinator.com/item?id=6416631
The previous form of Eve wasn't quite a programming language at all. It was akin to databases in Excel.
I think they explained in a previous blog post that they wanted a programmer-friendly format to exist, but this is a side feature.
Still, I'm skeptical. It seems rather unlikely that implicitly taking a cartesian product of two lists of query results is beginner-friendly.
You can do the same style of programming using the ClojureScript libraries reagent/posh/re-frame/datascript. Why not just use those?
It isn't clear to me what Eve offers that those don't.
To me your comment reads like the infamous "why not use FTP and this hodgepodge of CLI tools" comment on the original Show HN for Dropbox. Eve is trying to bring everything together into a unified, standalone package, with the goal of being more accessible to non-specialist developers (think people who write Excel macros).
Hmm, I don't think the situations are even remotely comparable when you look at the actual projects.
With Eve, you still have to learn their home-grown programming language. That is non-trivial. If you didn't have to learn a completely new programming language along with its own non-standard terminology and idiosyncrasies then I would agree.
I am aware of what they are trying to do -- I've been following the team for the last 4 years. I liked their approach of starting from first principles, but at some point they lost the plot.
Out of curiosity, would you say the same thing about Clojure? It's also a home-grown language with its own non-standard terminology that is non-trivial to learn. Any fundamentally interesting change in programming will fit that description. Rust, Go, even Typescript, add a bevy of new syntax constructs and a whole set of terminology that isn't shared with other languages (borrowing, type definition files, goroutines). Every library brings with it new semantics and new terminology to deal with. It's not like datascript is inherently obvious to folks.
The important bit from that line of thinking is that there's a cost to adopting it and the benefits have to outweigh that cost. We haven't talked much about what those benefits are, so I get where you're coming from - it may indeed look like we've "lost the plot." :) Most of our content is geared toward people who are already interested in what we're doing and want to follow along with the work. It's very much not a pitch at the moment, that will be coming in a couple of months. You can pick up on some of it from what we have shown though:
- Eve programs are naturally tiny (no tricks/golfing/epic one liners). The CLJS libs you mentioned all have TodoMVC implementations that are ~5x as large as Eve's (just 63 lines!).
- There's no incidental ordering in the language, which means you're free to organize your program however you want. As a result, it enables truly literate programming.
- Another result of a lack of ordering is that programs grow very organically through composition. Want to react to an event on a thing someone else created? Write a block that matches for it. Want to add some fake data into the system? No changes needed, add a block that adds some data. Want to visualize where all the active users are in your app? Write a block anywhere.
- Eve programs aren't talking to a database, they are the database. That means no plumbing, no impedance mismatch, and no extra infrastructure is needed. A practical example of this from one of my tweets[1]: I can take our todomvc add three @global tokens (changed from "all") and we now share todo lists. No server setup, no client->server transport, etc.
- Eve's semantics were built for concurrency, asynchrony, and distribution. There are no promises, or thread synchronizations, or borrows.
- Correctness can be defined globally through integrity constraints, allowing people to safely contribute to an application without worrying about checking every possible invariant locally. No more null checks and Joey can't check something in late at night that allows people to have a negative salary.
- Everything is data. The file system, http requests, the DOM... That means everything can be queried and everything can be reacted to. Want to be alerted when the machine you're on is running low on memory? Write a match against the machine's memory and commit an email when it dips below a certain threshold. Want to know how many open http requests there are? It's just a query away. With no indexing, no passing things around, no real effort at all, you can ask any question about your system you want.
- Since everything is data, we can provide amazing tools. A very simple example here: [2].
Excitingly, the list continues on, we're just focusing on making Eve a lot more real before we tell people about it. It's up to us to prove and communicate what Eve brings to the table and we're taking that very seriously. My blog post about Light Table was never meant to be a big deal - I did it on a whim. Eve, on the other hand, is deliberate, well researched, and well grounded. As you suggest, it will take a lot to convince folks that there's a net gain to the switch and so we're collecting lots of evidence. Amusingly enough, in some ways we're actually returning to the original "plot" - one of the demos I want to do in October is a recreation of the LT demo. We finally have a language with the semantics necessary to fulfill that vision. :)
[1]: https://twitter.com/ibdknox/status/755450540104884224 [2]: https://twitter.com/ibdknox/status/760963855296016384
Thanks for the response.
> Out of curiosity, would you say the same thing about Clojure? ...
Fair enough. :)
What is the largest thing you've written in Eve? I've found that Clojure strikes an amazing balance between semantics that help you reason clearly about problems and the flexibility to do things that the language creators didn't imagine. I guess I just haven't seen that with Eve.
However! If you tell me to stay hopeful about Eve, I will. :)
Well it does have an extremely weird syntax. Why follow convention when you can move in an arbitrary direction?
I was really hoping to see more happen in line with the interactive database querying tools and demos. Slicing and dicing data, some simple analytics, maybe a little about how to get the data in and out to/from other systems. Something to show that it's almost at a practically usable point - then I'd be on board.
That's the kind of thing I could use now for my projects, but I get the idea that it's not the focus, with this new effort on the programming language. I was really a bit shocked and disappointed to see Flappy Bird to tell the truth, I felt that the project has maybe lost its focus.
After some reflection, it makes some sense, because I guess it's showing how the database is used for state in the background, so it's showing the close integration that's possible. OK cool - now please back to the data exploration/querying/analytics focus!
I tried to read the documentation, but I didn't quite get it.
What would I use Eve for?