8,390 karma · joined September 5, 2010
http://chris-granger.com http://www.witheve.com http://www.lighttable.com
Is this external work? If so, do you have any pointers to it?
Related discussion on twitter: https://twitter.com/roy_amitabha/status/634078514698952704
We have some really interesting ideas here around query-first schema generation. E.g. using things before they even necessarily exist as anything formally in the system. Powerful IDEs like Visual Studio enable this workflow, by giving you a quickfix that will create a method/function if it doesn't exist. Coupled with heavy normalization (i.e. 6th normal form) and a nice way of dealing with modeling in that world [1], we should be able to provide a really nice iterative experience. Our explicit goal is for working with Eve to feel almost conversational and exploratory. We found one of the biggest problems with tools like Access was that they forced you to plan everything up front, to define schemas and relationships before you can even do something of value. That's a trap we want to make sure we avoid.
> I also dislike drawing diagrams on screen when they're much quicker to sketch out on paper, but that's probably more of a personal preference (and I've not spent enough time with the editor yet).
The current editor evolved out of the question of if we could write programs on paper efficiently. I agree with you and one of the things I really want to explore a bit further down the road is a sketching-like interface that enables you to draw things directly (it wouldn't be too hard to even capture images from a whiteboard or sheet of paper).
I'm really excited to see what Jonathan is doing now that he's shifted his focus to end-user and building a releasable system at CDG. If you're interested in this stuff, all three of us are going to be at the Future of Programming workshop at strangeloop this year :)
The overall plan is to provide a bunch of really interesting generative testing facilities. For example, we can generate data based on your integrity constraints that tries to sneak values into the system that would break them. Being a live language also helps a lot here - you're inherently testing as you build things. We want to make it easy to just capture that while you're doing it.
The short answer is we have lots of tools in mind that will help with this, but programming this way just creates a very different kind of system. We've built some complex things and they've remained fairly flat and we made sure that it is both readily apparent what is contributing to your current query and easy to navigate into it if you want to see more. For the most part these problems boil down to navigation and debugging issues, both of which we have really powerful ideas for. For example, we want our debugging story to be what's called a "why? debugger" where you can click on any value in the system and Eve will show all the data that went into calculating it and every query it went through to get to here.
There's assuredly going to be lots more experimentation needed here, but we have every intention of making this handle more complex things. We're bootstrapping the compiler and eventually the editor, we've built clones of websites, and we'll continue to push the edges of what we can do with it :)
[1]: https://github.com/witheve/Eve/blob/master/design/visualProg...
There are definitely some differences between building large apps and these more communication/analysis tasks, but we think the foundation itself applies to both. The language is an adaptation of the Dedalus[1] semantics, which the BOOM lab did some amazing things in distributed systems with [2]. If it can build a clone of hadoop, chances are it can build most things. We've built a number of our compilers in Eve, several of our editors were bootstrapped, we've built numerous examples, most recently a complete clone of Foursquare. Before we'd want others to try and do that though, we need our tooling to get a bit better. We expect that the Eve editor will get there eventually kind of out of necessity - we're going to bootstrap a lot of it this time too, starting with the compiler.
[1]: http://db.cs.berkeley.edu/papers/datalog2011-dedalus.pdf
Actually, we think we did. We're just not choosing that as the primary focus of the workflow in Eve. Now with a better version of the editor and with a bit more work on the UI builder, I suspect we could rebuild the entire foursquare clone in under a week. If we had VCS so that multiple people could work together on it, it might only be a couple of days. This foundation for programming has lots of implications for building "real software" - it's actually based on research for making distributed systems much easier to build. [1]
We'll see more of that as we go since we're bootstrapping bits and pieces. One of the first things that will transition over is the compiler, if that gives you any indication of the level of sophistication you can achieve with this programming model.
When Atom was first launched I mentioned that it might make sense to port the interesting parts of LT over to it since the core editor isn't what's important (and it's also a ton of work to get right). LT has found its way into lots of projects, from the Chrome Dev Tools to XCode and IntelliJ, which is a tremendous honor for us - it's great to see it coming to Atom as well.
I sincerely encourage anyone fiddling with new ideas in programming to submit a proposal. :)
So yeah, Urbit is a better analogue than LT :)
These seem contradictory. We can either teach a narrow swatch of people to "code" or we can search for other ways to impart the important bit: modeling. The entire argument of the essay is that we should be looking for those "really useful" ways.
> If a time-strapped journalist comes across a highly-upvoted blog post on a tech site
I'm not sure focusing on getting a message out to someone who won't read the entire post is a worthwhile pursuit.
When we say "coding" the accepted definition has to do with giving instructions in a programming language to a computer. I'm saying that the fundamental skill for people has nothing to do with Python or computers at all.
[1]: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&e... - "write code for (a computer program)."
[2]: http://en.wikipedia.org/wiki/Computer_programming - "commonly referred to as coding"
[3]: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&e... - everything on the first page is talking about writing code as instructions to a computer.
That's because I'd rather people have the freedom to be mathematicians, nurses, lawyers, physicists, writers, and accountants while still being able to leverage computers. Instead of forcing people to become professional programmers to get the computer to model things for you, we should focus on teaching people how to model in general and build more tools like Excel that let people do that.
Hell, I'd stand behind a movement to just teach people Excel. With Excel, we don't have to spend the next several years worrying about what flavor of MVC we have to use. Instead, we can focus on doing actually important things like curing cancer.
> Besides programmers and mathematicians, the only people I've met with the faculties to properly break things down are lawyers.
My point is we should fix that, instead of focusing on teaching people Python.
Haha exactly! That's a really interesting example I hadn't heard before. There are lots of other fun ones: number permanence, volume conservation, etc.
Moreover, my real argument is that I don't think coding should be literacy. From the fundamental disconnect section:
> We don't want a generation of people forced to care about Unicode and UI toolkits. We want a generation of writers, biologists, and accountants that can leverage computers.
I don't think people should have to worry about exactly what the computer is doing if their problem isn't related to it. Specifically teaching general purpose programming as we think of it now is largely teaching people to build apps or command line tools. Instead of a generation that thinks of that as computing, we need a generation of people curing cancer with it.
I would argue that's just a matter of modeling enough to be good at it. I indirectly talk about this in a few places, while discussing how we iteratively craft models and in the section about kids (where I bring up debugging specifically). It's very important to work out assumptions and to be able to explore your models to find out where you've gone wrong. Programming is one way of doing that in terms of the computer, my hope is we'll find better ways of doing it in the future.
The next step would be manipulating the OS as relations. E.g. an insert into the process table allows you to actually spawn a process. It would start to get really interesting from there...
[1]: http://incidentalcomplexity.com/2014/10/16/retrospective/
Thanks for the indirect pointer on how to correct the issue though. If you hard refresh you can zoom now.
Did you have some weird plugins installed? Did you create a bunch of Clojure processes and count those?
EDIT: Ah, there was a memory leak for a while. I bet that's what the problem was. It's definitely fixed in master.