Hacker News new | past | comments | ask | show | jobs | submit login

All these live demo applications (like http://livecoding.io/) are interesting and may be useful for teaching the basics of a language, but I don't see them being used at anything bigger than small demos.

A real innovation would be finding a practical use for this type of technology (or a spin of it) in large-scale projects.




I basically agree, but live programming is not live coding. Live coding is about programming while the program is actively running (we can argue if performance is involved in live coding or not). Live programming, on the other hand, is about creating a live feedback loop between the programmer and artifact being programmed with the aim of making development easier.

Scalability will take some time to achieve, but I think we will get there with some hard work.


Isn't this already achieved with a REPL? I mean other than GUI programming, which something like this would be useful in the same spirit as a REPL.


A REPL provides no code editing experience, you can at best just add code progressively one line at time and advance (never rewind) execution.


I'm not quite sure what you mean. By "rewind execution" do you mean something similar to Interlisp's "undo" function?

http://www.softwarepreservation.org/projects/LISP/interlisp-...


Sort of. But if my reading of the manual is correct, interlisp only allows for manual undo and replay; YinYang traces dependencies and repairs program executions automatically after every keystroke. Not sure what is limiting the interlisp environment from doing the same thing.


I edit and re-edit code in my vim Clojure REPL all the time.


Sure, ed supports editing also. The question is what kind of execution feedback are you getting? And for REPLs it's line by line.


That's not true for REPLs which allow interaction with running processes, which is probably most of them.


REPLs allow for interaction with programs (running processes), not code. With direct manipulation, you get a very different kind of liveness: sure you can change the program but their is no repeatable record of doing so (unless Smalltalk style images are used). For code, you just get feedback on the line you just entered and executed.

Live programming allows one to change code to change fate; the running program isn't so much changed as remade, and is completely repeatable.


I think you're mixing up different kinds of feedback, then..

In a REPL, execution feedback can be continuous, not only line-by-line as you said earlier.

If we're talking about 'code feedback', in general yes you do just get feedback on the line you entered.

There's complexity here though. I think of any editor where you execute lines or blocks of code at a time as a REPL, mainly because they're often implemented by piping said blocks to a commandline..

I'd include IXI Lang in this category, and it certainly does have code feedback. You might 'execute' one line, which could set a process going which periodically changes another line of code (and therefore its associated running process).

Perhaps at this point IXI Lang stops being a REPL, and starts just being a live programming language, but I'm not sure at what point that happens. Or maybe REPL is just an outdated term, as they do tend to do a lot more than a linear read-eval-print loop.


> There's complexity here though. I think of any editor where you execute lines or blocks of code at a time as a REPL, mainly because they're often implemented by piping said blocks to a commandline..

This is the crux of a REPL: what would you execute a line of code in the editor though? What does it mean to execute a line of code in a method? Or even an entire method? Development via REPL requires a certain program structure and an aversion away from abstraction (at least in code being developed), and even then the programmer must be manually involved in decided what to re-execute, performing dependency tracking in their head. Smalltalk too actually, where "liveness" often comes from manipulating objects directly.

> Perhaps at this point IXI Lang stops being a REPL, and starts just being a live programming language, but I'm not sure at what point that happens. Or maybe REPL is just an outdated term, as they do tend to do a lot more than a linear read-eval-print loop.

Ya, the concept of a REPL is kind of outdated, but its the term people prefer to start from (e.g. LightTable has an Insta-repl) if they are coming from LISP. I've even heard Smalltalk environments described as a REPL before, even though the metaphors that they depend on are completely different (there is an explicit line-based re-eval though...so maybe they are similar?).


Yes and good point about abstraction - I was surprised when Mark Guzdial noted that live coders don't do abstraction, but I think that's generally true during live coded music performance. I'd like to work on making abstraction more accessible to live coders, and moving away from REPLs should help.


I think we abstract (generalize) much slower than we can usually react with functionality. In machine learning, we actually find that abstracting IS comparable to learning,

Perhaps practicing is a form of abstraction; you practice something now to perform it later...the prepared parts of an otherwise improvised performance?


Yes I agree with your implication that improvised performance requires preparation, and interesting to think of this as abstraction. I think of it as developing a personal 'style', which I suppose is abstract.

I do like to prepare for a performance by making a new abstraction (i.e. a new combinator) but then learn how to use it during a performance. So yes, I make new abstractions in preparation offline, but I'm still working out what that abstraction 'means' online.

I think listening to music is more akin to abstraction in machine learning, as Whitehead puts it, "Art is the imposing of a pattern on experience, and our aesthetic enjoyment is recognition of the pattern." [1]

When I'm performing I think I'm listening to my own music in this machine learning sense, recognising musical abstractions which might not be explicit in the code which generates it.

Also if it's group improvisation there's learning from each other..

[1] I use this quote out a lot, but ironically it's taken from a passage that is protesting against soundbites.


In practice the two feedback loops are generally complementary, and I don't see a real need to nitpick or claim ownership of general terms.


Right. They are completely orthogonal, and you can have one without the other. This isn't about nitpicking, this is about asserting a clear definition and bring some clarity to this new area, which is just going to flounder if we keep calling orthogonal topics as the same.


I think you're complaining about someone calling a live programming environment livecoding.io. I think that's nitpicking.

The feedback loops are not orthogonal, because programming a running process is rather difficult if not impossible without that programmer feedback loop. The program feedback loop exists within the process feedback loop. A change in programming feedback is highly likely to profoundly affect the wider feedback loop with the running process, and perhaps vice-versa.

In this case livecoding.io only seems to be for coding fixed media. Is the program actively running or not? In terms of UX it doesn't really matter either way, so our live coding/live programming distinction is pretty much irrelevant.

If it was possible to do animation in livecoding.io then it would be a clearer case of live coding by our definition, but obviously that wouldn't stop it from also being a live programming environment.


The program feedback loop doesn't need to exist in the process feedback loop...often they don't, and even in live programming the program is not running in the production real time sense.

>In this case livecoding.io only seems to be for coding fixed media. Is the program actively running or not? In terms of UX it doesn't really matter either way, so our live coding/live programming distinction is pretty much irrelevant.

Agreed. Such simple systems (like khan academy) tend to be single trick ponies around live refresh. One mechanism doesn't make a story, and so it doesn't even make sense to put it in a story bucket.

>If it was possible to do animation in livecoding.io then it would be a clearer case of live coding by our definition, but obviously that wouldn't stop it from also being a live programming environment.

Agreed, they can overlap, but how animation was dealt with could lead down either path to the exclusion of the other (does it support improvisation or development). From me on LtU:

> In that sense, I'm not working on a new way of programming, just speeding up the feedback loop of our current programming practice. If some new way of cybernetic programming eventually emerges from the faster feedback (unexpected benefits of improved tooling happen all the time), maybe live coding will make more sense to me. Maybe that is the key difference of our approaches.

Mechanism is perhaps less relevant than the experience trying to be achieved. In this essay, I described a live programming "make development better" experience. Someone could probably take my videos and describe them with a very different improvised live coding story on top of them also, focusing on activities I don't understand and definitely did not design for, but since the mechanisms involved overlap...

This is why terms are so powerful: the use of "live coding", if it stands for something, is a brand that allows us to quickly decide what we are going to see and experience when we click on the link. It will also elicit strong denial from those who don't want to be in that brand, since their problem spaces and approaches are very different.


Ok here's two quotes from you:

"Live coding is about programming while the program is actively running"

"Live programming [Hancock03] promises for much more fluid feedback between the programmer and a program that is executing while it is being edited."

These statements are connected.

Yes software engineering is a different activity from making music. But, if I want to address live coding of music in particular I just add a word or two. I'm often interested in cross-disciplinary discussion though.

We've been around this a couple of times though, and I think can probably predict each other's points by now. :)


As I've come to understand it, live coding is about programming while the program is actively running, changing the program's flow and behavior in real time as part of a cybernetic melding between programmer and program. Live programming is about better feedback between the programmer and program, which also involves execution, but the program is undergoing development by the alone programmer in a dark room somewhere and is not actively being used, program execution is just to collect data to present to the programmer so they can develop the program!

Whereas live coding has been presented as a new experience that transcends programming as we know it, live programming is just a new twist and substantial incremental improvement on the old programming experience, boring and pragmatic. In much the same way, Victor's Learnable Programming provides similar feedback to improve how programming is taught, and not to revolutionize what programming is.

I used to read a lot of Shadowrun in High School; the decking experience was about hacking through heavily secured computer systems by creating and customizing programs in real time. But when I started doing this, programming turned out to be more of a cerebral experience where real-time problem solving is neither necessary nor (yet) very effective. I'm quite OK with improving on that experience.

> We've been around this a couple of times though, and I think can probably predict each other's points by now. :)

Surely. We need to have a formal debate sometime if we ever attend the same conference.


I think this is an insightful distinction, and as you've said before such incremental work could lead to a major shift.

But you can't claim Victor for your cause, he is explicitly concerned with reinventing programming, and not incremental improvement.

For example he says his "Up and Down the Ladder of Abstraction" essay is his personal manifesto, and that "it's not about programming. It's about a way of thinking". http://worrydream.com/MediaForThinkingTheUnthinkable/note.ht...

He says in that same note that he was goaded into writing his "learnable programming" essay by people relating his work with live coding. It seems that for him, discussing improving programming tools was a diversion from his long term aims of uncovering a new way of thinking with computers. His disassociation from live coding seems to be a direct criticism of Khan Academy's approach but maybe he has a more general criticism of live coding... In any case, I wouldn't claim him for my cause either.


I wouldn't dare to claim Victor for my cause, and I'm only reflecting on what he said in his learnable programming essay.

> It seems that for him, discussing improving programming tools was a diversion from his long term aims of uncovering a new way of thinking with computers. His disassociation from live coding seems to be a direct criticism of Khan Academy's approach but maybe he has a more general criticism of live coding...

I don't think this is indicated in his essay. i.e.

> Programming is a way of thinking, not a rote skill. Learning about "for" loops is not learning to program, any more than learning about pencils is learning to draw. ... Thus, the goals of a programming system should be: (1) to support and encourage powerful ways of thinking; (2) to enable programmers to see and understand the execution of their programs

He very much is concerned with programming not as a new way of thinking, but as an existing way of thinking. The examples in his essays then go on to elaborate on programming with better tools to understand execution; it is not a re-invention in any sense. We could try to interpret this passage:

> We change programming. We turn it into something that's understandable by people.

I think this means: we make programming into something that's understandable by people. Comprehensible. Is it change, or is it augmentation? His words imply the former, but his actions (features) imply the latter. Finally we get to:

> Likewise, a well-designed system is not simply a bag of features. A good system is designed to encourage particular ways of thinking, with all features carefully and cohesively designed around that purpose. This essay will present many features! The trick is to see through them -- to see the underlying design principles that they represent, and understand how these principles enable the programmer to think.

Yep, it is about design. He is just scratching the surface of a field I refer to as PXD (programmer experience design) :). The essay then goes onto to present design principles useful in helping make programming more understandable, and examples of those principles at work through various demoed features. Some of those features include some form of liveness; but many don't.


Yes his learnable programming is about improving existing programming tools, but he treats that as a diversion, his other stuff seems quite different.

His recent talk calls for a break from established norms and a return to the free thinking of the early days of computer science. His work combining geometry with syntax (which is also an interest of mine) follows on from that early work, it's as though he's treating the last few decades of software engineering as a diversion.

To me it's quite clear that Victor is calling for something more akin to augmenting and extending human thought, maybe your 'cybernetic melding'. He argues that this software will be used in ways which we cannot yet understand -- he thinks it'll be future generations who develop use and understanding for such technology, he's just chipping away at the possibilities.

But maybe your more approach is more optimistic in this regard, in that you're finding ways that could improve programmers' lives now.

I think my approach is optimistic too, in developing technology through use, taking communities of practice as a starting point, not an end goal.


> He argues that this software will be used in ways which we cannot yet understand

I feel the same way.

> But maybe your more approach is more optimistic in this regard, in that you're finding ways that could improve programmers' lives now.

I'm actually pessimistic that we have much time to innovate. I see programming as a viable profession only for at most another 20 years; by then speech dialogue based systems (aka AIs) are advanced enough to take over on what were programming these tasks before.


I don't see a need for pessimism there. If speech is text plus prosody, then I see adding a prosodic channel to the programming interface as augmenting/enriching programming languages, not replacing them. I also don't think speech is 'special' in terms of intelligence (e.g. Deaf people are just as intelligent), so enriching text could just as easily come in a different form of imagery (prosody being a form of mental imagery) such as drawing. And that is the area that Victor is working in.


live programming of sorts - JavaScript v Spreadsheet - benefits of coding user interactions with a spreadsheet. http://www.youtube.com/watch?v=GuxWduDNgVM

because more people are good with a spreadsheet, than programming. Thoughts?




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: