Future of Coding - Research Recap Two

Episode Date: July 31, 2017

Learn about what I did over the last two weeks!  Notes here: http://futureofcoding.org/episodes/4-research-recap-two.htmlSupport us on Patreon: https://www.patreon.com/futureofcodingSee omnystudi...o.com/listener for privacy information.

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to the Future of Coding. This is Steve Krause. So I'm two weeks in, and I've been hard at work doing research and getting my friends and mentors on this podcast as guests. You've seen some of that if you've been following my journal at futureofcoding.org slash journal, and following the podcast wherever you listen to it, at iTunes or Google Play or Stitcher, or you can actually stream it on my website at futureofcoding.org. So most of this episode will be summarizing the research that I've been doing over the past two weeks.
Starting point is 00:00:37 That's the purpose of these research recap podcasts, episodes. But before I get into that, I wanted to talk a little bit about how this process has been working for me, reflect in a meta way about the system, my schedule, how I've been thinking about this lifestyle. So, and before I get into that too much, I want to just reframe and talk about the purpose of this entire project in the first place. So, and this has been evolving, but the purpose of this project that I see now is bringing the future of programming nearer. We all have slightly different ideas about what the future of programming looks like. And mine are evolving as well, just like everybody else's.
Starting point is 00:01:22 But I think the core idea here is that programming needs to be better. It can be better. And things like this don't happen by themselves. Sometimes it's easy to see progress and reflect upon how the world is just constantly getting better all the time and think, well, if I just wait long enough, someone's going to solve this issue and the world will just be better. And in some ways that is true and you can be complacent in that way and let others innovate for you. But in other ways, I think that we each have responsibility in the areas we care about to bring the future closer and to keep moving things forward. Where I like to think about, a good example of this is Amazon. Because to me, and I think many people, Amazon seems inevitable.
Starting point is 00:02:12 Obviously, the internet will have a superstore where you could buy anything at incredibly low prices. And I don't think Amazon was inevitable. And if Jeff Bezos and his team didn't, you know, through force of will and smarts and effort, make Amazon what it is today, who knows, maybe it would cost a lot more money to buy things and I'd have to send my payment information to a bunch of different providers. Maybe I'd have to wait more than two days for free shipping. Who knows? And so reading the book on Amazon, I got the sense that without these people,
Starting point is 00:02:47 who knows if this company would exist, but now it feels inevitable. And so I think in the same way, well, I think if we succeed and we make programming so much better than it is now, people might say, oh, well, of course, this was the answer. Of course this was going to happen.
Starting point is 00:03:02 But from where I'm standing right now, it's not inevitable that this was going to happen. But from where I'm standing right now, it's not inevitable that this is going to happen. And we need people like the people I interview on this podcast, like me, like listeners like you, to continue moving this forward. So that's what I'm trying to do here. So when I started this research project about making programming better, I used to think this meant building the future of programming by myself. I used to think this meant building the future of programming by myself. I used to think just the longer I sat with a computer by myself, the quicker the future would arrive. But I have a much broader perspective now. I'm realizing that this is a group project.
Starting point is 00:03:44 When I say group, I mean the whole world, this whole community is working on making the future of programming happen. And part of the reason it's a good group project is because there are a lot of moving pieces. There are a lot of technologies. Another is there's a lot of really core, difficult technical challenges here. And then I think potentially what I'm most excited about or interested in is building abstractions that encourage the right ways of
Starting point is 00:04:05 thinking and and it's just really hard to come up with abstractions when you think about the kinds of mediums that have changed the way humans have thought and enabled more powerful ways of thinking there haven't been that many jumps in all of human history the fact that we even wrote things down at all a a phonetic alphabet, Roman numerals was a big deal, but then the Arabic numeral system with zero was a big deal, mathematical notation, Leibniz's notation. There aren't that many of them,
Starting point is 00:04:38 and each one was a huge jump in the thoughts that humans could even think. And I'm thinking that it would be really amazing to create the next generation of those kinds of tools. But it's hard. And we need as many people as possible noodling on these ideas, throwing up prototypes, talking to each other about what they're working on. That's the way we move forward. So the past two weeks, I've mostly been doing research into other people's prototypes, talks, essays, and products. And towards the end of this two-week cycle on Friday, I spent a bit of time prototyping some of my own ideas, which I was getting really excited about. And I'll tell you about that in a bit of time prototyping some of my own ideas, which I was getting really excited about. And I'll tell you about that in a bit. But before I talk about any of the links or my own prototypes, I want to just say that doing research into other people's products and videos and links and essays
Starting point is 00:05:35 was so much more tangibly helpful than I thought. Part of the reason I started this entire project in the first place in a structured way with a podcast and a website is because doing research on my own in a vacuum just felt so unproductive. Like I wasn't getting anywhere. The more links I clicked on and read about, the more links that I would find because each link linked to other things that I hadn't already read. So it just became overwhelming and it seemed like an unending problem where I wouldn't, we're just in a hamster wheel, I wouldn't be moving forward. However, now that I'm doing good note-taking and I'm taking notes about all the links I'm reading and I'm referencing my journal, how they've influenced my thoughts, I can go back and realize, oh my goodness, this prototype idea that I love that I came up with on Friday is a combination of these two other ideas that I saw videos of the week before.
Starting point is 00:06:31 And I didn't realize until I consolidated some of my research for this review episode that those ideas came from there. I thought they just came from my own brain, but I stole them from these other people. So that was a really powerful thing to realize and has made me more excited to continue doing research as opposed to prototyping. Because who knows how many more of these ideas will be sparked by other people's talks and discussions. So, for example, I was inspired by Mark Mahoney's prototype about version control that was optimized for learning, which inspired my thoughts about a work-flowy Git idea. I've mentioned this a few times in different episodes and a lot in my journal. I'll talk more about that today. I was also inspired by Bill Burdick's Leisure video, which inspired my thoughts around blurring the line between viewing and editing apps. I think he did a good job of showing us what the world would look like
Starting point is 00:07:26 if the Chrome inspector was much more prominent in a web browser. And part of why I'm excited about this idea is that when I teach coding to kids and I show them how the Chrome web inspector works and how they can change things, their minds are blown. They love it. And it makes me, you you know i never wondered before his video like why do we hide that away in a place where people can't see that people would love to see that it would i think it'd be really empowering so and then i spent a lot of time this over the
Starting point is 00:07:56 past two weeks working with lambdo which was really great because i've been meaning to look into them more and i finally did the deep dive i installed ubuntu on my chromebook i spent the like two days basically just installing it while i was watching other to look into them more. And I finally did the deep dive. I installed Ubuntu on my Chromebook. I spent the two days basically just installing it. Well, I was watching other videos and whatnot, but I spent the two days installing it. I played around with it. I had some cool Slack conversations with the founders.
Starting point is 00:08:17 Maybe I'll have them here on this podcast. I really loved it for a lot of reasons. I think the reason I loved it the most is that it implemented ideas that I've been meaning to implement myself. But they did it and they did a better job than I probably would have. And yet I still found that their idea, like, you know, the prototype they've come up with is lacking and it is far from what the world needs. Maybe I'll get there in a bit. I'll have to explain why. Oh, well, here, I'll just I'll say briefly i think the reason lambdo and luna potentially you
Starting point is 00:08:46 know i don't really know luna too well but potentially what's and even unison potentially what i find missing from those um while they do eliminate all syntax errors and all type errors and all runtime errors uh they don't enable comprehension. The syntax is just still too hard to read. I've spent years programming Haskell. And maybe if I spent a decade, it would be easier for me to read. But that's not the point. We don't want people to have to spend a decade
Starting point is 00:09:17 learning how to read Haskell code in order to understand a new program. Things need to just be better than that. And so while LambDew is definitely an amazing piece of technology, an amazing prototype, and has moving the conversation forward, I think we still have room to go, which is exciting to me. I was also inspired by struggling with understanding the LambDew code base and even installing it. I was inspired to think more about how intuitive and user-friendly working with software needs to be.
Starting point is 00:09:57 It needs to be you go to a website, codenow.org or codenow.com, and you immediately start coding. Installing other packages is just clicking a button. There's no terminal involved. There's no installing really involved. It works as seamlessly as Facebook. It's just instead of friending someone, you're adding a package. Instead of creating an event, you're creating a object of some sort. One thing I wanted to mention briefly is that I've been really enjoying using GitHub pages and a GitHub repository as a content management system. It's really a flat structure, and I just put my HTML, CSS, Markdown files in this directory.
Starting point is 00:10:38 I link between each of them. I can edit right in the GitHub UI right there, which is amazing. I could also, if I want to make a bigger commit, I can pull up in Cloud9 and edit it there and commit it there. It's all good. I really enjoy it. It's simple. It's clean, easy to understand, easy to get started, free, which is amazing. And what I really love is theub markdown formatter has so when you make a header you can you know when you highlight over a header there's a link button which you click which will link to that that header which i've been using liberally in the past few weeks and i really like that i can link my notes to notes to notes and it's all linked and i really love it um it
Starting point is 00:11:20 makes me a little anxious because i'm worried that I might mess up my URI schema at some point. I want to change where certain files are located. Well, I really can't because I'll break all those links. So I probably won't do that. Potentially I should link to commit hashes instead of linking to the current version of the file. Who knows? And the other thing I'm worried about is that I'll create two of the same headers at some point in time and then I'll break links because it'll
Starting point is 00:11:50 go to the first one and not the second header so I'll have to keep an eye out for that but if you've been wondering why my headers have been gotten longer and longer and become more descriptive the reason is I'm trying to avoid collisions in the future. Okay, great. One more thing before I get into my research. I want to talk a bit about my schedule. So while I was looking over my notes for the past two weeks to create this podcast, I was struck by the fact of how little work actually got done.
Starting point is 00:12:21 Well, how little time I spent on this project. I really only worked for like five or six days, only a few hours each day, but how much I actually got done. So on the one hand, I'm really proud of the efficiency. I produce a good amount of content and insights for a small amount of effort, but I don't think I'm at capacity. I think I could get more done with focus. So where my schedule is at today is I work around two full days a week. When I say two full days, I mean like 16 hours. It might not be a full day of continuous time, although continuous time is important and I try to do that. So, two full days of research here every week. One day a week I spend on the coding space, my after school program.
Starting point is 00:13:04 Then I started with my co-founder Eli Karev and Nicole Kellner. So, I respond to emails. I help on the coding space, my after school program that I started with my co-founder Eli Karev and Nicole Kellner. So I respond to emails, I help with the curriculum, various other tasks, meeting schools and people and whatnot. One day a week, I'm mentoring a few people who are developing the WoofJS programming language and WoofJS.com. So because that's a really wonderful project that I love to see out in the world and, um, I love improving. So, so I, I dedicate that, that kind of time. And then another, like the last one day a week of the work week will be doing research and also like random podcast tasks, emailing people, trying to get them on the podcast, organizing the website, other stuff like that. So like, for example, for my calendar this week, Monday,
Starting point is 00:13:48 today, it's all research recap. And it sounds like I'll probably get done a little early. So maybe I'll have some time for some other podcast tasks. Tomorrow, I will be working on the coding space with other podcast tasks, because I've snoozed so much of the last few days is emails to tomorrow. So I could focus on research on Friday and today, which I think was really great. It's really hard to get to be focused. And I think procrastination is a really useful tool in order to create focus. And part of the reason people have trouble being focused is that throughout school, they've been drilled to not be procrastinators but sometimes procrastination is the thing you need if you want if you want focus especially on research
Starting point is 00:14:30 um my one of my idols richard feinman talks about how he he would always tell people that he was irresponsible so they wouldn't give him responsibilities we could focus on his research and i really admire that and i I hope I see my future telling people that I'm irresponsible so I can avoid certain responsibilities that will take my focus away from more important things. So on Wednesday, I'm going to be doing mostly research the whole day, but I might have to do some random inbox emails and tasks if I don't get them all done tomorrow. Thursday will be all tasks, no research. And Friday will be all tasks, no research. And Friday will be all research, no task.
Starting point is 00:15:12 I've done a pretty good job so far of keeping my Friday sacred for some deep research and thinking. And it worked really well last Friday. Partially with the help of my shower. If you look in my research journal, you'll see that Friday afternoon I was having trouble focusing with technology distracting me. So I hopped in the shower and took a long shower. Good thing we don't have a drought in New York. And I have a waterproof notebook in my shower, so I spent maybe an hour, maybe an hour and a half getting all wrinkly, taking like five pages of notes about different prototypes. And it was a really productive hour and a half.
Starting point is 00:15:40 So hopefully that offsets the waste and water that happened there. So in reflecting about my schedule, I see that there's not much time for real research during the week. So potentially as this moves forward, maybe I'll scale back on some of the non-research tasks. Like maybe I'll take a break from Wolf for a few months. Maybe I'll take a break from the coding space in a few months. I've also been thinking about watching less TV at night or having one less plans with family or friends per week so I can have an extra three or four or five hours every week towards research. I think even just a little bit would be helpful here. So I think that's all the meta stuff I want to talk about. Let's talk about my research. So the most impactful link I think I saw the entire,
Starting point is 00:16:35 or potentially the most impactful thing that happened this entire week was watching Alan Kay's videos about how to invent the future, his Y Combinator videos. And really there was just this one part about those videos. I'm sure there was a lot that I had subconsciously that was good. But this one part that I really took to heart is having a relentless problem focus. In the past, I've seen this advice before, and I intellectually know that you should build a product to solve a problem.
Starting point is 00:17:04 But often in the moment, I get distracted about that, I've seen this advice before and I intellectually know that you should build a product to solve a problem. But often in the moment, I get distracted about that and I lose sight of the fact that you have to solve problems. I'm a technologist at heart and I really like building things for their own sakes just because they're cool, just because they're fun, just because I enjoyed it, just so I could share the code with someone. Similar to how an artist makes art for its own sake. Art doesn't solve a particular problem sometimes, it's just fun to make, fun to share. However when I'm trying to build towards the future of programming, there is no place for this solutionism. And when I say solutionism, I mean looking around at the tools you have in your tool belt, looking at the Lego pieces on the floor, and asking yourself, what can I do with these?
Starting point is 00:17:41 This methodology becomes quite dangerous when you're convinced that someone would find that thing that you happen to be able to make with the tools at hand useful. That's the perfect recipe towards building a product that solves a problem that nobody has, or as Eric Ries says, achieving failure. I've done it many times, and I've seen many friends do it, and it breaks my heart when the smartest, the brightest people we have waste their most precious resources, their time building things
Starting point is 00:18:11 that are art projects basically that nobody will use they don't solve any problem so Alan Kay does a great job of disabusing me of these tendencies for now, but it's a constant struggle for someone like me who just loves building things. So the way he put it is that you have to focus so intently on the problem that you don't even realize how hard it will be to solve that problem.
Starting point is 00:18:41 It's like you need to build a custom programming language in order to make this thing work? Build it. You need to build an operating system from scratch in order to make your vision, your solution to this really hard problem work? Go for it. And the way he put it was a really big kick in the butt for me because I've always shied away from my most ambitious prototype ideas that would take more than just a few weeks to hack together. While this is a decent technique to avoid getting bogged down in the technical details of a bad prototype, it also precludes me from stumbling into a truly breakthrough idea whose subcomponents don't even exist yet, because that's how breakthrough it is. I've been trapped in an innovation cycle where I'm just trying to make things slightly better than they are now, which isn't what we want. That isn't my goal. I'm trying
Starting point is 00:19:23 to make things drastically better. And if I want to make things drastically better, the subcomponents of the solution probably don't exist now, because if they did, someone would have already combined them into the solution. And that's what innovation is, combining subcomponents that already exist. Invention is inventing the subcomponents that don't exist in order to make your solution a reality. And that's what I'm excited about from that message. And one very, very important sub-skill here that I'm realizing I need to personally get a lot better at is recording problems that I don't see immediately solutions to. As an innovator, a business person, someone in the world trying to make the world a better place today, I often willfully ignore the ideas whose solutions seem too far out.
Starting point is 00:20:08 You say, oh, you know, the problem will be solved when we get to Mars. Well, no, no, no. We need to, like, solve problems today. We need to make the world a better place today. That's a moonshot. We shouldn't even think about that problem. We should be working on solving problems that have more immediate solutions. However, now that I am not a business person, or at least in this role I'm not, problem we should be working on solving problems that have more immediate solutions however now
Starting point is 00:20:25 that i am not a business person or at least in this role i'm not i'm working in my own personal r d department it's my job to think about these big problems that don't have solutions yet or not immediate solutions so i need to retrain myself to write down all these big problems and think about them especially when i don't have any clue about how to solve them yet i think that's really, really important. And I've slowly been getting better at that over the last week. So the fruit of being better at this problem-focused thinking is that I've come up with these wacky ideas,
Starting point is 00:20:57 maybe this one in particular that I'm really excited about, that I don't think I ever would have gotten to if I was stuck in my rut of thinking about what can I solve with the tools I have, my solutionism trap. think I ever would have gotten to if I was stuck in my rut of thinking about what can I solve with the tools I have, my solution isn't trapped. So here's how I got there. As I was trying to understand the lambdew codebase in order to do research into it, I realized how with even of my decades of programming in Haskell experience, I was unable to understand or even get the barest glimpse about how it all works together. I think it would take another dozen painful hours in order for me to get a good place with it. Of course, if someone on the team walked me through their code or they
Starting point is 00:21:34 had a bit more documentation explaining how the code worked, that'd help, but it would still be a struggle and it would be many, many hours before I was able to understand how the code even works, let alone customize things or fix a bug. And I wanted to. A bug happened, I wanted to solve it, and I just felt lost. And I'm someone who has the most confidence in the world and the most experience doing this stuff, so imagine anybody with just a few days of experience or a few weeks of experience, it's a lost cause. To be clear, the Lambda guys seem brilliant, and I'm sure their code is really clean and easy to understand.
Starting point is 00:22:13 And that's the point. Even in the best-case scenario, representing a software program as a series of folders containing plain text does not lend itself well to comprehensibility. The way I see it is you have code that's all the way over to the left, and then all the way over to the right is the output, the user interface, the behavior the user interacts with. And if you're a user and you're interacting with the thing all the way over to the right and you want to change something, you have
Starting point is 00:22:39 to travel all the way to the code and pick through it, shuffle through it, and tweak things and see all the way over to the code and pick through it, like, you know, shuffle through it and, like, you know, tweak things and see all the way over to the right how they change. It's crazy. It's crazy how far apart they are. And so my initial idea, metaphor, goal for this problem was what if we could make that distance between the left and the right, the and the the interface that users work with closer together what if you were looking at your app and you could just peel back you know just peel back
Starting point is 00:23:11 from the corner and look under the next layer of abstraction and what if there were a bunch of layers of abstraction you just peel back layer by layer you know component by component you like there's one component is broken you peel back you see if you could fix it at that layer of abstraction but if not you could peel back that layer too i think this is this is this idea that i've stolen from a bunch of different researchers in this space um the idea that if there are good user interfaces all the way down the data itself has a user user interface um but i've never seen it it really done in a in a reasonable way in a in a real um the real context where you have a gorgeous app and you peel it back and you have another usable interface where you can customize the top level
Starting point is 00:23:53 app so that was the problem that i really had no clue how to solve but i was excited by the problem and how powerful it would be if we could solve it and And if anyone, when they're on any app, could just customize it right there, submit pull requests, and see how apps work, hit the clone button and boom, they're off making their own app right there. And you don't even have to go to GitHub. It's just all there. It's all self-contained in the app.
Starting point is 00:24:18 Like, you know, GitHub kind of becomes integrated in their Chrome browser in this weird way. Or even on your phone, if you're using an app on your phone. So I spent a lot of time on pen and paper drawing out what I think this could look like. And I had a few interesting ideas. The idea that got me most excited was
Starting point is 00:24:39 if we think of the bottom layer of this system, if we think of layers of abstraction the bottom layer is are just streams and what i like about this so much is that streams are an unbelievably powerful data type when you have streams you can define your entire app declaratively and reactively there's no mutation of data you just define everything once and that's the way it is forever so so that got me thinking and i eventually realized that what would it look like if every layer of the app all the way to the top were spreadsheets because streams really are just you know spreadsheets and streams of streams could be spreadsheets that contain spreadsheets, and you can filter spreadsheets, and you can aggregate spreadsheets.
Starting point is 00:25:26 And even the HTML elements themselves can be spreadsheets, where you have each attribute is a column, and you could have... And different rows would be sibling elements. And then if you want to have an element with children elements, you could put it in there in its own subsheetsheet. So that was the thought I had. Spreadsheets all the way down with an HTML element viewer on top.
Starting point is 00:25:56 Who knows? This idea probably won't work out, but I'm really excited about a lot of the implications. In particular, if it's spreadsheets all the way down, the database layer, persistence layer probably has an amazing story because SQL is often the database layer of choice for applications. And if things are already in a spreadsheet-like format, you know, that seems like a great story. I also really love this because it forwards the idea that I've fallen in love with where you think of your app as a big event stream
Starting point is 00:26:34 where the data you actually care about is just a reduction of everything that's ever happened. And what's great about thinking about your data like this is there are no mutations in place. You can undo things infinitely as long as you have unlimited space. And it's just a productive way to think about things. It's a very functional, reactive way. And if we could do that all the way to the back end
Starting point is 00:27:02 and all the way to the front end, I think that Datomic is a really good example of this on the back end, we have a really magical system. As a side note, I think it would be really neat if someone made Datomic a hosted version of it because I would love to play with it, but I'm not going to mess with that. That sounds like way too much work to host my own Datomic instance and whatnot. So before I move on, I want to say that while I'm being strongly pulled towards code and building this prototype right now, I am resisting it. I've noticed in the past,
Starting point is 00:27:40 myself and others, that when I want to build a thing and I'm doing it, I get a bit of tunnel vision and I actively avoid researching other projects. I even feel a sense of dread when I hear about another similar product because I see all that hard work and beautiful code going to waste. So maybe there's a healthy way to code my project and also respect other ideas. But for now, I want to stay in this research mode so I can get inspired some more and get a really strong prototype idea before I commit to it and put on the tunnel vision glasses. So I have three other ideas that I've been very excited about in terms of prototypes. And I also feel myself being pulled towards building them immediately. But I'm resisting.
Starting point is 00:28:32 For now. The first one is this workflow-y Git idea that I've written about. I talked about it with my friend Jonathan. And I've gotten a lot of these ideas from other people. I guess the two places where I've gotten these ideas from the most are from the application Workflowy and the application Git and GitHub. And I'm thinking about merging them in an interesting way. So let's step back and think about the problem. One of the hardest things about programming is keeping track of what you're trying to accomplish.
Starting point is 00:29:08 This is harder in programming than in most disciplines because programming has problems that have problems that have sub-problems that have sub-problems. Fortunately, programming also has a slew of mental techniques mirrored in code for dealing with this challenge. The core technique is top-down programming, but whereby a programmer breaks down bigger tasks into smaller tasks in a nested to-do list.
Starting point is 00:29:28 This is why at our after-school program, The Coding Space, we encourage our students to always have a list of steps for each project they're working on. If they're working on one of our guided projects, which we call Untutorials, we create this list of steps for them. Whenever we go to Socratically help a student who gets stuck, we start by asking, what are you trying to accomplish? And if they don't know, we are easily able to get them to focus on the problem at hand by asking, what step are you on? When our students are working on projects of their own design, not one of our guided projects,
Starting point is 00:30:02 we encourage them to create a similar list of steps to keep themselves organized. However, students don't always take us up on this piece of advice, so it would be neat if there was a way for this workflow to be more deeply integrated into the screen, into the development environment, as opposed to on a separate piece of paper, which feels more disconnected. More importantly, when a student works a tough problem that requires a lot of debugging, a simple flat list of steps on a piece of paper begins to not be enough. What you then need is real top-down programming,
Starting point is 00:30:35 the ability to break down problems down and down and down into subproblems, so you can keep track when you're working six levels deep into a subproblem of a subproblem of a sub problem of a sub problem of a sub problem in a frustrating debugging session so you could see oh this is the ultimate problem i'm trying to solve right now and here is how i got here and oh maybe i need to take a step back so that that's the problem and that's a sense of the solution and so here are my thoughts about what a top down programming interface could look like potentially even on woofjs.com slash create, my own programming language and integrated development environment. So the reason I think it needs to exist on a website like Woof and not as a separate tool is because I think it really needs to deeply integrate into the code interface so
Starting point is 00:31:21 that each subproblem that you create a to-do for becomes its own branch of the code interface so that each sub problem that you create a to do for becomes its own branch of the code and so when you click on a different sub problem it checks out that branch from it from a git perspective it checks out that branch and when you create a new to do or sub to do it's just creating branches as fast as you're typing which is very different than the normal normally working with git so each sub problem would be like a branch or a github issue where you could have discussions you could reference other branches and different people you could comment directly on certain lines of code you could review code and then you could submit it to be merged into parent branches you know marking a task as being done so that's all very similar to
Starting point is 00:32:01 git but it's it's integrated with the code. So another thing I've been thinking about, which probably is too pie in the sky, but I think it would be neat, is if it would keep track of the different subtasks you're working on and how much time you were spending on each one so it could notify you when it thinks you're spending too much time on a subproblem. Maybe it'll send you a notification and say, hey, it looks like you've been stuck on this problem for 10 minutes. Maybe you want to try a different angle? Is there another way to solve this ultimate problem you're trying to solve with this sub-problem? I think this could really help developers with the XY problem. The XY problem is when you're trying to solve problem X,
Starting point is 00:32:37 and in order to solve problem X, you come up with solution Y, and in order to solve solution Y, you come up with a whole slew of other solutions, and you lose sight of the fact that you're actually trying to solve problem X, and problem Y isn't the best way to solve it. So the XY problem has you refocus on X, so you can realize that Z is actually a more efficient solution, and you just solve Z and forget about Y. So I think this kind of system could help you think about that more explicitly.
Starting point is 00:33:20 So another reason why I think this could be amazing is it combines version control and code development in a way that allows you to jump right into development. So right now, if someone's working on a complex pull request request it's hard for me to jump in and help you know i could see that they're working a pull request and i can commit to that i could branch their pull request and make certain commits but it's hard for me to jump in because like who knows what part of they're working on next etc but if they had a tree a really long tree you know that their pull request was just one branch but but then inside that branch were hundreds of other pull requests. I could just pop in and complete little helper functions, complete little API things. I think this could really enable collaboration in a way that
Starting point is 00:33:55 Git and GitHub only do one layer deep. This could be infinite layers deep. You can collaborate infinitely in a way that now you can't. You can only collaborate at the pull request level. This you can collaborate at any problem level. And I think another way this could be really helpful is it could allow mentors to really help their mentees get started because they could create this tree of what needs to get done, and the mentee could just go and run at that tree and work on all the problems and get it all together.
Starting point is 00:34:24 And I think that could be a really great platform for mentoring and learning in context. Because it would combine like a classroom-style learning method online, like Free Code Camp or Codecademy, where there's a target little goal, you have to complete this project, make a function that adds up all the numbers in a list great so you do in code academy whatever you move to the next problem it's not very motivating but if that was just a sub problem in a longer list of real problems and it kind of added up to this project being done but at each step it was just a well scoped out problem that you could definitely accomplish that's powerful for learning and mentoring and educating someone, welcoming them into a new code base.
Starting point is 00:35:09 So one open question with a system like this is how permission works. Who is allowed to edit what files and what branches? Is it all like a Google Doc? That seems a little messy. Can you clone someone's entire tree of to-dos and branches? Or are you just creating more branches on the same tree? I'm not exactly sure how that would work,
Starting point is 00:35:28 but I am proud of myself for writing down this problem, even though that is a big gaping hole in the solution. Sometimes I should also think about how Paul Graham's bottom-up programming ideas could relate here, because they are relevant. Another benefit of this system is that it would leave a wonderful breadcrumb trail about how the code was built. I'm stealing this from one of the links I was researching that I mentioned above. I think it could entirely replace comments, because for each little tiny piece of code,
Starting point is 00:36:05 you have not only the name of the task that was done when that code was written, so it's like a commit message but much more granular, but it's also tree structures. You could see the larger task that was being accomplished when that little piece of code was added. You know, infinitely. So I think it could be a really good breadcrumb trail that helps new developers understand how code works
Starting point is 00:36:26 and debugging in the future. So that's this idea, and as you can tell, I'm pretty jazzed about it. And it's also neat because I have this tool that it could integrate into, wolfjs.com. So I think that would be a really fun experiment prototype to do. And after I build it, I could, you know could roll into class and try it out with different students.
Starting point is 00:36:48 I could put it behind a feature flag or something like that. So I'm excited about that idea, but again, I don't want to jump to code too soon. I'm going to keep thinking about different ideas. So I have three other ideas. They're all pretty related. And they are building a more reactive game engine. So WoofJS is a JavaScript game engine, or animation and game engine, similar to ProcessingJS, but it has the abstractions and metaphors of Scratch,
Starting point is 00:37:14 and that's good for two reasons. One, it's good because Scratch's metaphors are better than Processing, they're just great metaphors. And then two, the students who are using this often have come from Scratch, so they already know those metaphors and abstractions, so it makes it even easier to learn the syntax of JavaScript. However, I've been wondering if we could make Woof even better. We can move away from the abstractions of Scratch,
Starting point is 00:37:38 and towards the more modern hotness of reactivity in game development. And I think this would be a fork of worth. It wouldn't be the same product. It would be kind of a separate product. It would probably be a different name. It would be a game engine with different abstractions. Maybe with the same underlying code because I'm the one making them both. But it would be an entirely different project.
Starting point is 00:38:01 And so I have in my journal, you can see, I came up with this with my friend Andrew, I should probably get on this podcast, where I showed him how easy it is in Woof and in Scratch to develop gravity. And so what you do is you create a sprite, and you create a speed variable. And then you create a forever. And in that forever, that loop that happens every render cycle, you decrease the speed by one. And you change the position of the sprite by the speed. And so just like that, the character will now fall with realistic gravity because you have an acceleration of minus one.
Starting point is 00:38:48 And you can mess with the acceleration. And I really love how simple it is. But could it be even simpler? So that forever loop is neat. But what if we defined it all declaratively? So what if we said acceleration is negative one. Speed is the previous value of speed plus acceleration. And the x value is the previous value of speed plus acceleration and the X value is the previous value of X plus the speed that seems pretty clear to me you have to worry about any forever so it's all very declarative and functional
Starting point is 00:39:14 reactive there are some real problems here I don't exactly understand how you'd reference the previous value of a thing and and what is the initial value there are definitely some open questions here, but I'm excited about it. And I think it could also be cool to think about how you could do this with a apparatus-like interface. I think that's how you pronounce it.
Starting point is 00:39:34 The website is aprt.us. So it's this really cool interface inspired by Brett Victor. And I think it's by a guy who works at Brett's research lab and it's very reactive. It's kind of like a spreadsheet-like interface where you define everything in terms of other formulas and you can define these really cool interactive widgets.
Starting point is 00:40:01 But what you can't do is have cycles. So I was trying to create objects that would move on their own like the x position is x position plus 1 but it says sorry circular dependency can't do that so what would it look like if you could do that in that tool what would it look like if you could have gravity in that tool I think that tool could be kind of like
Starting point is 00:40:18 in between unity and woof it could be a really powerful user interface or it could even be a better scratch it could really be a cool way to build games on the web in a reactive way in a way that is very extensible you don't get the spaghetti code like you do in scratch i'm excited about that idea both building a reactive woof js which is a text-based javascript library but a react but reactive and less less Scratch, less imperative
Starting point is 00:40:46 with the forevers, no forevers but also building it in this apparatus-like interface where it's more of a spreadsheet kind of thing less code, more values and I think another place another project that would help me think about this in the right way is trying to build a generic game engine for Elm. Elm was a front-end programming language that I've talked about before, and McMaster University teaches Elm to children, how to make games in
Starting point is 00:41:16 Elm to children, which I think is amazing because it's this exact same thing I'm talking about you know but where I don't like it is at the bottom of their projects they have this section that says don't touch this code this sets up your game just just just customize the way you know how high the gravity is to customize the way the player looks you know it's I find that very disempowering so I don't know if it's possible but I would be very excited to see if you could build a generic game engine in Elm where a kid could build any game they wanted to
Starting point is 00:41:50 and understand the whole thing top to bottom without any starter code, et cetera. So that's another thing that could help me think through all of this. So that's it. So that's where my head's been at the last two weeks. I've done a lot of reading and consuming, a little bit of prototyping and thinking about what's next for me in the next, these next two weeks. I'm going to continue with my researching and reading and
Starting point is 00:42:18 journaling and we'll see how it goes. In terms of what's next, let me think. I really want to take a look at EVE now that I'm realizing that my spreadsheet and streams idea is probably pretty similar. I want to take another look at IMP, which I heard about from the Future of Programming meeting. We have a meetup in New York. I heard about that from our first meeting.
Starting point is 00:42:43 One of the kids there had showed us Imp and how cool it was. So I'll check that out because I'm into spreadsheets too. I still haven't checked out Luna, but I have plenty of other stuff, so I don't need to worry about the fact that that's in private beta. And yeah, that's about where my head's at. I'm sure I'll add more links to this in the future. And I'll probably also want to make sure to continue listening to inspirational-like things
Starting point is 00:43:11 like Morbid Victor Morale and Kay because those people continue to bend my brains in the right ways. Thanks for listening. Again, please reach out if you have things you'd like to contribute to this conversation. You can find me at Steve Krause on Twitter.
Starting point is 00:43:26 My name is spelled S-T-E-V-E-K-R-O-U-S-E. And you can see all of my thoughts at futureofcoding.org. And you can also find a lot of this stuff on github and if you see any typos or things you want to add or correct please make an issue uh fork me and make a pull request i'd love to engage with you however you want to engage with me so thanks again for listening and i will talk to y'all in a week

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