Future of Coding - Research Recap Three (WoofJS Workflow)

Episode Date: August 24, 2017

Over the last two weeks I had a suprise trip to Boston to meet with other researchers in this space. In preperation for the event, I spent most of the last two weeks building the WoofJS Workflow proto...type. Notes here: http://futureofcoding.org/episodes/6-research-recap-three.htmlSupport us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to the future of coding. This is Steve Krause. As you'll know if you listened to my last research recap episode from two weeks ago, you will know that my plan for this week, these past two weeks, was to look into other people's research into prototypes and interfaces that point towards the future of coding. But as things happen, that wasn't what actually happened over the past two weeks. Not this past Tuesday, but the one before, I got a phone call from Paul Trisano of Unison, who I've talked about before on this podcast. He invited me to a, quote, white writer's workshop for programmers who are trying to build future programming interfaces. That was happening in Boston the following Monday.
Starting point is 00:00:57 So this was so it took place last Monday. The way it worked is everyone who was attending the workshop needed something to present and then get feedback on. So I had a few different ideas about what to present. I wanted to come up with something that was top of mind, but also polished enough that I would get good feedback on it. What I eventually decided to present is my idea to combine Workflowy and Git, which I'm now calling the WoofJS workflow, because I built it into the WoofJS.com IDE. So let me tell you a bit about how that project ended up. I work at the coding space with students learning programming at all different levels of experience. And all students, but especially beginners, get stuck in a very common way.
Starting point is 00:01:53 When they work on a part of their project, they get lost in the weeds about trying to make that project work. They lose the forest for the trees, and they really forget what they're working on in the first place. So when I go over to help a student whose hand is raised and is stuck for some reason, the first question I ask that I train my teachers to ask is, what are you working on? What are we trying to accomplish here? And way more often than you'd expect, students look at you with confusion in their eyes and just shrug their shoulders. They've entirely forgotten what they were even working on in the first place. So my second question is, well, what step are you on? And this question works if they're working on
Starting point is 00:02:35 one of our guided projects, which have numbered steps. And so then they'll remember, oh, there's a list of steps. First of all, they forgot about about that so then they'll go hunting in uh in their open tabs for that list of steps they'll scroll to find the one that they're on and then they'll look back at me for help and then i'll say well can you read it to me and they'll read it to me and then now finally we're both on the same page about what they're working on and sometimes that's all i need to do in order to get a student unstuck just remind them what they're working on and they can solve their own problems from there even if they need more help the fact that we both know what they're working on is a big step forward so that's one problem that i want to solve with this new tool the second
Starting point is 00:03:19 problem i want to solve is that this whole problem can be made even worse when a student is working on their own creative project that doesn't have a list of steps that we've created for them. So we love when students work on creative projects. However, when they get stuck, I can't say, well, what step are you on? Because there is no list of steps. That's why I always encourage my students to create a list of steps for their project. It's basically like an outline that you would make for an essay in English class. But just like in English class, students don't like making outlines. Or just like in math class, students don't like showing their work. They just like going for it. And it's hard to communicate to a student why it's important for them to show their work or make an outline until they're already lost
Starting point is 00:04:01 because they haven't done that. So my idea to solve all of these problems is to create an integrated outline tool that will help students stay on track with what they're working on, and it's integrated into the project. So it's not a separate sheet of paper that feels disconnected from coding. It's right on the same screen that they're coding in. It's at the top of the screen, so if they ever lose track of what they're working on, they can see in big letters right at the top of the screen. So if they ever lose track of what
Starting point is 00:04:26 they're working on, they can see in big letters right at the top screen, that's what I'm working on. Then I had this other idea that instead of just being a flat list of steps, it could be a nested list of steps because in programming, we have tasks that have subtasks that have subtasks that have subtasks. So really, this tool could be a top-down programming assistant that allows students to break their tasks into smaller and smaller tasks and then click on any one of those tasks all the way nested deep and that task now becomes the task you're working on it's its name is big in big letters at the top screen and the path the breadcrumb trail of of its parent tasks are above it kind of like a file path. So you can see
Starting point is 00:05:06 how the task you're working on now relates to the larger project. So it makes it much harder to lose the forest for the trees because both the trees and the forest are all right in your line of sight in the same environment you're working on. The other big idea I came up with is that I noticed that this branching structure is similar to the branching structure of Git. And I could turn every one of these to-do items into its own isolated branch of code. So you can go work on any piece and not affect any other to-do. And then when you're done with any task, you just hit the merge button and it merges it up. It creates a interface for you to merge the code you've written of this subtask into the parent branch.
Starting point is 00:05:50 What's exciting about this is that I think it could enable collaboration at many more layers deep than we currently have now. Right now, if I go to create a pull request on someone's repo, I'm just collaborating one level deep. Maybe I'll solve one issue. But in order to solve that pull request, I need to solve a bunch of subtasks, and nobody can help me with those subtasks.
Starting point is 00:06:12 But if I was able to outline my whole plan to solve this issue in a nested way, someone could come along and see that I need help with an issue four levels deep, sorting a list, and they could just work on that. And then at my leisure, I could merge that into the larger projects I'm trying to complete. I think it could also help if you're working as a novice under a mentor programmer, the mentor could help you sculpt out this outline, and then the novice could go tackle each task by themselves.
Starting point is 00:06:52 Because I noticed as I mentor my teachers and my other colleagues in programming, that this outlining, keeping track of what you're working on, staying focused is one of the hardest things that they work on too. Even I have trouble with this workflow sometimes, and I have to do it on a scrap of paper. And I'm constantly frustrated and wondering why git commit messages seem to work backwards. You come up with a plan of what you're going to do in your head, then you do it in code. And then when you're done, you now write what you already did. Like, isn't that backwards? Shouldn't you first write the plan for what you're going to do, then do it, it and then hit the done button and so that's kind of how the product is going to work
Starting point is 00:07:29 when i found out that i was going to be presenting on uh in a week i i quickly made a plan for this tool what it would look like how it would work and i built it thursday friday saturday and sunday i kind of worked like five about five hours each day so it's like a 20 hour project and it was tricky and i wasn't sure i was going to get it done and it's buggy and not super intuitive now but i think as a prototype it kind of shows generally how this tool would work So let me walk you through it. You can try it yourself at wolfjs.com slash workflow. And I will also put a link in the notes to the presentation I gave on Monday, it has a bunch of screenshots to the tool. So you can so if you don't want to play with it yourself, which I would understand because it's buggy, you can kind of kind of walk you through it here um i i walk you through creating
Starting point is 00:08:30 the base the beginnings of a floppy bird project where you you first add a to-do that says you make the bird and then under that you have um make the bird fall and so you go to make the bird and and when you're done with make the bird you hit merge, that kind of thing. Currently right now merging isn't super pretty. Basically I put the parent code and the child code next to each other and give you a diff and you kind of have to copy and paste the child code into the parent until you think the parent is merged as much as you want.
Starting point is 00:09:02 Then you hit the done button and the child kind of goes away, it gets crossed out, and the parent now has the child's code within it. One thing I didn't work on at all that I think will need some thought is how to get changes from a parent or a sibling into a different child or sibling, because that's, I think, gonna be a common use case kids are going
Starting point is 00:09:25 to make a list of tasks that aren't quite as isolated as they could be and so they're going to want to move code around i guess they could just be copying and pasting it from branch to branch but it feels like we should have a more semantic way to get changes from from branches to branches other things that i didn't really work on that will need work before i release this to students um is is permissioning so because i think this really enables collaboration but i don't understand i don't quite have a plan for how to allow students to edit each other's branches and submit pull requests to different tasks. So that requires some thought.
Starting point is 00:10:09 And there are various bugs. The code isn't quite as isolated as I would want. And sometimes I want it to not be isolated. So if you edit a parent task and you haven't changed anything in the children, I kind of want the parent changes to flow to the children. But then if you do change the children and you change the parent, but they don't conflict, I feel like it should prompt you in the child if you want to accept the parent changes. Various things like that. Because I rebuilt Workflowy, which was mainly what was so time consuming when I was building this. But if I really want to do this right,
Starting point is 00:10:41 I have to basically rebuild Git into this task. I'm not going to rebuild everything. I'm not rebuilding rebasing and stuff like that. I'm not rebuilding some of the more advanced features, but I really am rebuilding a lot of the core features of Git, and that's going to take more than 20 hours. However, even if I built all that, I still think the core interface and workflow isn't as user friendly as
Starting point is 00:11:06 i think it needs to be i think it's maybe 10 times more or maybe 50 times more user friendly than using git on the command line is right now however i think it still needs to be like another factor of two times more user friendly before i release this onto my students. But I hope to be able to do that at some point. I'm not going to continue with that right now because there's more, I think, transformative research that I can be doing, more interesting prototypes I could be building. And there's also lower-hanging fruit to improving Woof
Starting point is 00:11:39 that I need to be working on. So I'm going to put this prototype on pause, but I do want to tell you about it because I think it is interesting and could spark some ideas in your heads to make other cool prototypes or products. So check out the prototypes. You can check out the code on GitHub,
Starting point is 00:12:00 and you can see the paper in the links to this podcast. So let me tell you a bit more about the writer's workshop that I was at. It was really exciting because there were some real luminaries of the industry that were there. So Jonathan Edwards, I knew a bit about before this conference, but I got to read maybe a dozen of his blogs while I was there. I really hope to read all of his blogs. I think he has like around 50 over the last decade. And it's been really exciting that he's been working on this exact same problem that I've been working on, maybe with like a little bit of a different focus, but almost entirely the same for the last 10 years.
Starting point is 00:12:41 So there's really a lot for me to learn from him. So it's exciting that I got to meet him and I get the sense that he's interested in continuing the relationship and maybe even coming down to New York to meet more people like me and him that are interested in this kind of thing. I told him about how I'm a part of this meetup group, future programming, and we have a Slack, so I invited him to Slack. So that was all very worthwhile. He's an interesting guy. And then I also met Richard Gabriel, who is known for the Worst is Better essay about why C beat Lisp, because it was just faster to market. And I met Mel Conway of Conway's Law, who's, Conway's Law talks about how an organization
Starting point is 00:13:24 will create systems that resemble the organization so it was really interesting to see his work and and hear about what he thinks about and there were a lot of other interesting people including paul who was the one who invited me so um one of the most prescient piece of feedback i got is um basically why are you here talking to us about this prototype why didn't you just try it out on your students like i i think what they were trying to say is this isn't theoretical research this is product development and you have a product that's used and you have students who use it why didn't you just go to them like you know we could just speculate about how well this will work with students and if they'll like
Starting point is 00:14:06 it and if they'll use it, but if you have the students, why don't you just test it with them and get real data? They're the real arbiters of whether or not these things will work. That was kind of what I wanted to believe about product development and research, but I was surprised when these researchers and luminary people suggested that as well. And I think the reason they did is because my research isn't that theoretical. It's pretty practical stuff.
Starting point is 00:14:38 I'm not creating proofs. I'm not... Yeah, my research is mostly practical up until this point. So I think that's good feedback. I submitted this paper that I'm linking to here about the WoofJS workflow, which I call in the paper my top-down programming assistant.
Starting point is 00:15:01 I submitted it to the SplashPX conference while I was there because the deadline was the next day, but I think I'm going to rescind that application because it's just not worth it to me to fly 1,000 miles and pay thousands of dollars. Well, maybe not 1,000 miles, but fly all the way to the West Coast and to Canada and pay thousands of dollars to talk about things that I could talk about just as well from my room in New York City like I am
Starting point is 00:15:32 now I can make videos about these things which I'm planning to do I'm planning to make videos about a lot of my prototypes so that the people who want to actually see these things and not just hear about them can do that but yeah yeah, so I think I'm not going to do the conference thing, or at least not do it very much, maybe once or twice a year. Part of the reason I'm not going to do it is I really don't like traveling. So, and traveling is expensive. So that's the conference. One other thing I want to tell you about the conference is that Paul, who invited me, gave a really, really compelling talk about, I think, that does a good job defending why, defending his approach to creating the future of programming and how it differs from mine and Jonathan Edwards.
Starting point is 00:16:15 So Paul started where Jonathan Edwards and I still am, where we're trying to create more intuitive interfaces to programming so that anyone, even beginners, can code. So we're trying to kind of raise the floor, if that makes sense, like make it easier for people to get into programming. So Paul's early demos are these structured editors for a Haskell-like language. And that's what really had me interested with what Paul was doing in the first place. Over time Paul's moved towards building more powerful mathematical functional abstractions that enable programmers to do way more powerful things, which is amazing, but he's kind of left behind this vision of making programming easier for beginners.
Starting point is 00:17:11 He's kind of more raising the ceiling than he is raising the floor, if that makes sense. And I really admire his task. He wants to make programming on a cluster of computers as easy and intuitive as programming on one computer. So his vision is, you know, you build Twitter in a weekend or in a week as your learn-to-coding exercise, and then it works for a few thousand people at the same time. But if you want to scale to billions of people, it's going to take hundreds of engineers and years to reach that kind of scale
Starting point is 00:17:43 because you're going to have to be doing all sorts of DevOps and computer-to-computer coordination. Why can't that Twitter that you build in a week or weekend scale to billions of users just automatically? And his answer is that we don't have the right abstractions to do that. We don't have the right, the languages aren't built for that. So that's what Unison is doing now. He's building a language that's designed for scale and clusters.
Starting point is 00:18:11 And the talk he gave at this workshop was making the case that this is a more powerful way to go because when you raise the ceiling there's more room
Starting point is 00:18:28 like up up in the ceiling to create new abstractions that are more powerful and the floor can always catch up so one argument he made is would you rather a brain to computer interface to x86 assembly so you could type x86 you could type x86 assembly as fast as you could think. Or a dumb Emacs text editor interface to a programming language of today, like Python. Or a programming language from 10 years into the future. And most people, I think, would prefer a text editor to a programming language of today with its more powerful abstractions than a brain interface to x86 assembly. And that's because what Paul argues is that a more powerful programming language lets you do less work.
Starting point is 00:19:21 And so even if it's harder to actually do the work there's just less of it so it was really compelling i'm doing a bad job of explaining it but i it hasn't made me want to switch tasks and be more of a abstraction person if if you will like i don't want to drop everything and go help Paul build Unison. But I do think it's compelling. And I think that potentially what my research will lead me to is once Unison is more solidified and the runtime is working, I could spend some time trying to build a better front end, which could be similar to what Paul's early demos looked like, or maybe more visually appealing, more visually intuitive with shapes as types or other abstraction interface visual metaphor ideas. Okay, so moving on to the next two weeks, my plan going forward. So I really hope for
Starting point is 00:20:21 the next two weeks to actually be doing research into other people's prototypes and demos and research. I've got a number of new links from Paul. I want to make it through all of Jonathan Edwards' like 50 different blogs over the last decade and then reach out to him and get him on the podcast, which will be a really wonderful conversation, I think. I found this website Expressions of Change while I was reading old Unison Gitter conversations. And it seems to be researching like the single question of how do we make changes to code semantic. And I think it's a really wonderful question because as the guy says, code is constantly being changed, and that isn't built into our languages. So similar to how Paul says, our languages are built for one computer, this guy would say our languages are built for our code never changing.
Starting point is 00:21:18 Both assumptions are crazy. And Paul's unison has a really interesting refactoring story that makes them semantic, but I think this guy has some also really interesting research as well, so I want to look at his website. And still I want to dig into Imp, the spreadsheet plus relations plus time project, and I also want to spend a day or two with Eve because I really need to give it a fair shot because I really respect those guys. So my hope is to just do research for the next two weeks, but I really am obsessed.
Starting point is 00:21:56 I'm becoming more and more obsessed with my spreadsheets plus streams idea. To recap, it's an idea that will allow you to make interfaces through functional reactive programming, FRP. And it's really most similar in my mind to CycleJS, but it's also pretty similar to Elm. My name for it is StreamSheets. I know, very original. Maybe later this week, or hopefully not until late next week i actually dig into this
Starting point is 00:22:29 and um following paul's advice i want to prototype on paper how i would build to do mvc and a basic chat app before i go to code because i think that like paul said there's a lot you can work out in your head which will save you dozens of hours of time in code because when you're coding, you're dealing with all sorts of ancillary problems that just take up your time. And when you're prototyping on paper, you could kind of get to the meat of it.
Starting point is 00:22:57 So some other notes. I ended up buying all the technology on which I could edit these podcast episodes i first heard my chromebook but it was a little too slow so i bought a 500 pc that was like a snail so then i even slower than my chromebook so then i bought a the cheapest imac i could for 1100 that was really slow compared to my chromebook, even though it had like twice the RAM or like four times the RAM and like way more cycle processing speed. And then I bought a more expensive iMac, but that was just like $1,500, way too expensive. So I tried an iPad Pro and that was
Starting point is 00:23:40 wonderful for $650. I was editing exactly what i wanted to with this wonderful app called hakusai 2 and it's free with the ability to buy extra features but i really don't even need those extra features and then i saw on a lark that the same app i was using to edit audio on my ipad is available for the iPhone. And so I pulled out my phone and tried it out, and it was really just as fast as the iPad Pro. So I returned all my computers and iPads, and now it turns out the solution this whole time was in my pocket, and so I'm now editing these episodes on my phone,
Starting point is 00:24:31 which is kind of funny. Another thing that changed logistically is I used to keep track of some of the to-dos for this website and podcast and research project in a Google Doc. And I've since retired that Google Doc, rest in peace. And I will be putting all those things into GitHub issues. So if you want to see what I'm working on, what my to-dos are, they're there. I think I have like 20 or so to-dos at the moment. Feel free to create more issues for me if you want me to do anything else, or feel free to comment on any of those issues. I'm really excited about having this whole thing as open source as possible. One last note before I leave you is that I wanted to let you know that I'm entering a bit of a busy time for the coding space, my after school computer science program for
Starting point is 00:25:16 kids in New York City. We are expanding the program to the Upper West Side along with the Upper East Side program that we already have. So our goal is to teach 400 students every week, and we're going to need between 30 and 40 part-time teachers in order to make that happen. So we have about 15 part-time teachers hired at the moment, so we have a lot more to go. So I probably have like 50 or so interviews that need to happen in the next three weeks. I'm trying to consolidate them all onto Tuesdays and Thursdays through this service called You Can Book Me that allows people to book times in the slots available on my calendar. And I hope that will be enough. And
Starting point is 00:25:56 I'll be and I'll leave me Monday, Wednesday and Friday, mostly free for this research and this podcast. But sadly, that might not work out in reality as well as I hope in theory. So that's it for this week. Keep an eye out for my updates at my journal, futureofcoding.org slash journal, and futureofcoding.org slash links, because that's where I hope to be mostly this week.
Starting point is 00:26:31 And I have a really fun interview coming up with my old boss lloyd tab from looker so hopefully that will come out early next week that's going to be a really exciting one and i will talk to you all about my research in two weeks see ya

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.