Inventing on Principle - amazing video!

Started by
65 comments, last by ddn3 12 years, 2 months ago
Such a free form tool which encompasses the ideas of immediate feedback, reversible execution, built in execution safety nets like memory overruns, infinite loops, in execution memory modification etc.. Is it really needed? It's nice in theory but do people think or develop in such a fashion? It's a like sandbox for programs for programmers, but every example he shows, is example of a pre-solved system after which u then apply foresight into the problem space and then expand upon the exist solution through the use of selective paramaterzaion, customized input and output..

That's nice but it requires foresight into the soultion space after the fact. I'm not sure how others come about with their software solutions but for me, program space is too large to just mess around with a bunch of parameters to come up with a solution ,( for humans anyways, a machine learning algorithm is another thing all together ). Even a trivial problem expands with recombination, beyond human comprehension. You will still need insight to guide those random walks to produce anything eventful, imo..

I think UI is very important and is the limiting factor for most systems but I don't think creating a open ended sand box for programs for programmers, is the answer. I'm not even sure what was the question.

-ddn
Advertisement
Such an incredible, excellent and inspiring talk, and I'm at a loss for better words. Thanks so much for sharing! I saw this on twitter, but didn't get a chance to see it cuz of 1 hour length. I wish I knew watching the first 7 minutes would be enough (to understand that you must see everything).

I really like his approach to life, and I'm attempting to do something similar.


I think a large point he makes that's overshadowed with his demo is how little progress has been made toward making a language that's more inline with current UI developments than text editing. I think a more visual language could be pretty interesting. To my knowledge there aren't any (good) low level visual programming languages yet?

I do think that his code editing visualizer could break down in more complex cases. It's pretty simple to handle functions more in line with functional programming, but I feel like it would either be unusably slow or just broken in more complex cases when there is a little more dependency on external data.


I'm actually working on one right now. I started a few weeks ago, so it's very early without much to show yet, but I'll see how it goes.

I'm doing it precisely because I believe there is potential in the area (after all, if you remove your restrictions, such as code must be "plain text", then you should be able to achieve at least as much or more, right?), and I didn't see any existing solutions. I'm making something I want to use myself, and if it's good I'm sure others would want to also.


And considering I do have all the latest tools, I don't see anything that has moved even an inch beyond the Turbo Pascal era of tooling. But apparently, VS 2011 will be gray instead of purple?

Don't forget the achievements.

To be fair, there are actually some very nice incremental improvements in VS 11. I'd say more so going from 2010 to 11 than 2008 to 2010. And I think VS needs to exist, because it fulfills a specific purpose for the time being, and cannot be replaced instantly. But I believe there should be work done on alternative approaches, and perhaps they can one day overshadow VS (if they're good enough).

Where is the time-travelling debugger though? We need to have that asap please.
Actually, I just found a project that does something very similar to what I was about to build, Code Bubbles.

It seems it branched off into an experimental thing at Microsoft for Visual Studio named Debugger Canvas.

http://msdn.microsoft.com/en-us/devlabs/debuggercanvas

Check out the video at the bottom. Very cool!

Where is the time-travelling debugger though? We need to have that asap please.

Hmm, is this it?

imageur.png

http://www.microsoft.com/visualstudio/11/en-us/products/compare

Hmm, is this it?


To a degree.

Now extrapolate this into fictional territory.

User submits a bug. You click a button and end up with their application state. You move forward and backward to diagnose that.

Not inside debugging session, but regular user, perhaps visiting a website or running an app. Doesn't really matter, the concept of "application" or "exe" is not all that important anymore, one gets a snapshot of user's workflow and all that affects it, be it current process, driver, OS, hardware.


Debugging history today is limited to capturing a small set of events inside a specially crafted debugging session. It works with limited set of managed languages which can establish such a separation.


But more on topic of direct modification of application (or game) state. Debugging crashes is still a pain. Rather than focusing on technical widgets, imagine usability only. When a user experiences an issue (not necessarily a crash), they may opt to send the application state directly. No more bug trackers, filling out issues, writing "steps to reproduce". They simply say "the button should not be here".

As developer, you receive such issue, then just move a bit back or forth through execution to pin point the error.

Next, there's diagnosis tools. Mark a logical item in such application snapshot, "find all references" to see how it got into that state (when was button.visible set to true). This isn't manual reference chasing, but automated analysis of program flow. Most of this type of programming is nothing but reference chasing. A very manual task for majority of part.


A tool like this could be built, but only given sufficient hardware and even then it would be pushing everything, from storage to computational capacity.

We have small and limited tools that help with individual parts of the process, but not the next step. Just like 20 years ago building a dictionary was a considerable technical challenge due to hardware constraints, it's trivial today (set<String>).

Hence I mentioned the unpopular CS topics which do hint that such tools will likely never be possible or that a particular step will become possible in a given number of years when hardware advances to the point where problems we're solving are smaller than that.

Instead of P vs. NP, it's closer to economy and exponential growth. For most human endaevors, there is an upper limit. Dictionary has finite size and hardware outgrew that. Maybe we'll reach an upper limit on computer-assisted tasks as well.
Now extrapolate this into fictional territory.
That's not fiction - that's modern debugging...
User submits a bug. You click a button and end up with their application state. You move forward and backward to diagnose that.
Not inside debugging session, but regular user, running an app. One gets a snapshot of user's workflow and all that affects it, be it current process, driver, OS, hardware.
When a user experiences an issue (not necessarily a crash), they may opt to send the application state directly. No more bug trackers, filling out issues, writing "steps to reproduce". They simply say "the button should not be here".[/quote]This has been mainstream for 10 years now...
Debugging history today is limited to capturing a small set of events inside a specially crafted debugging session. It works with limited set of managed languages which can establish such a separation.[/quote]No it's not -- in a modern C/C++ game engine, from when the user starts the game to when they encounter a bug, every frame of their entire session can be reported and analysed (and imported into a "special debugging session" if required).
But more on topic of direct modification of application (or game) state. Debugging crashes is still a pain.
As developer, you receive such issue, then just move a bit back or forth through execution to pin point the error.[/quote]We can do this easily these days. Modern game engines need to support NUMA architectures, which means the lowest levels operate on the "input->process->output" black box concept. Inputs and outputs are buffers, and processes are scheduled so they only run at safe times.
At any time, you know exactly what buffers are potentially being read or written (global state is dead). Furthermore, before/after each process, you can store the state of any mutable buffers, allowing perfect rewind functionality.
When the user submits an issue, you can use the submitted replay to end up in the problematic state (deterministic replay of the user's session) and then rewind/replay to find the cause / bug. This is real and is easy to implement, not some far-fetched impossible idea.
Next, there's diagnosis tools. Mark a logical item in such application snapshot, "find all references" to see how it got into that state (when was button.visible set to true). This isn't manual reference chasing, but automated analysis of program flow. Most of this type of programming is nothing but reference chasing. A very manual task for majority of part.[/quote]We've had tools to automate this for a long time. Both for general reference-chasing, and for change-detection.
A tool like this could be built, but only given sufficient hardware and even then it would be pushing everything, from storage to computational capacity.
Hence I mentioned the unpopular CS topics which do hint that such tools will likely never be possible or that a particular step will become possible in a given number of years when hardware advances to the point where problems we're solving are smaller than that.[/quote]Uh, no. Get with the times, grandpa. This shit is real.
in a modern C/C++ game engine[/quote]

I'm not talking about game engines or C/C++.

I'm typing this in Firefox. How do I click a button to send you current state of my application so you can stack trace it. While you're at it, fix the DX bug which causes corruption when I resize google maps at over 1024 width (here, I opened the problem page in another window, look at the computer state to find out if it's a driver or application bug)

Because for me, just building FF takes 2 hours and breaking to enter debugger and load symbols at a single point takes 15 seconds.

What am I missing here?

We can do this easily these days.[/quote]

OK. Why aren't you making billions with it and collect Turing prize for it? Because tool like that would be revolutionary. Why doesn't anyone know about this? Why do you let others file patents if its so trivial and a done deal?

Is it possible we're talking about something different?

I'm typing this in Firefox. How do I click a button to send you current state of my application so you can stack trace it.

Worth pointing out that this is pretty trivial in any language with serialisable continuations. Plus, somebody has actually implemented it in SmallTalk.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]


Worth pointing out that this is pretty trivial in any language with serialisable continuations. Plus, somebody has actually implemented it in SmallTalk.

Apparently, Smalltalk is for grampas, while the cool kids are doing this today with everything.

But it doesn't answer my original question - if this has been a solved problem for 10 years, where is button to do that when I'm debugging Firefox and driver issues running on Windows?

But the thread has come full circle back to my original claim. The design of OSes and other components solidified around proprietary blobs, making development of such tools impossible at any meaningful scale, which is why interest and research, academic or otherwise died down.

Small steps are being made within sandboxes (CLR, JVM, JS engines), but these are still a far cry from stuff that was already done decades ago.


It's also why I feel presentations like this are important. Even if they don't show anything that is technically new, they remind about ideas. Telling someone to go learn Smalltalk won't produce results. But showing a tool like that makes people ask why we don't have stuff like that already may cause them to discover not just that, but also other technologies and different approaches. And it sparks interest into more than just banging out some API calls with Vendor Tool 2012.

Node.js and NoSql, the two most overhyped words recently aren't new or even innovative. But they revived some old ideas in practical form available to developers who do not want or cannot reason about underlying scientific and engineering aspects of concurrency theory, yet use these tools to great effect for actual value in their work. What was once constrained by tool no longer is. Dissemination of ideas and interest is much more important than siloed pinnacles of knowledge.
All right, I have an article I think you'd enjoy: "Free your technical aesthetic from the 2010s: A rejection of the rejection of the 1970s".

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

This topic is closed to new replies.

Advertisement