The Changelog: Software Development, Open Source - The Story of Atom (Interview)

Episode Date: February 24, 2017

Nathan Sobo, founding member of the Atom editor team at GitHub, joined the show take us all the way back to the beginning of Atom to learn where it came from, the founding team, the problem it solves,... on through to shipping 1.0 and beyond.

Transcript
Discussion (0)
Starting point is 00:00:00 Bandwidth for Changelog is provided by Fastly. Learn more at Fastly.com. I'm Nathan Sobo, and you're listening to The Changelog. Welcome back, everyone. This is The Change Log, and I'm your host, Adam Stachowiak. This is episode 241, and today, Nathan Sobo, one of the founding members of the Adam Editor team at GitHub joins the show. Nathan takes us all the way back to the beginning, where it came from, the founding team, how it was formed, the problems it solves, on through to 1.0 and beyond. We got three sponsors today, Linode, Hired, and Compose. On Valentine's Day, our friends at linode made some big announcements they now
Starting point is 00:01:06 offer a one gig plan for five dollars in high memory plans starting at 16 gigs of ram for 60 a month the super popular two gig plan they have which is ten dollars now has upgraded storage from 24 gigs to 30 gigs this is a huge announcement for linode and puts them in areas they've never been at this point their ram offerings across all their plans are double what most competitors offer at the same price. What does this mean? Simply put, you get more for less. Of course, Linode is our cloud server of choice, and everything we do is hosted on Linode servers. Head to linode.com slash changelog.
Starting point is 00:01:42 Use the code changelog2017 to get $20 credit. This code has unlimited uses. Share it with your friends, blog about it, tweet it, whatever. Once again, head to leno.com slash changelog. And now on to the show. All right, Jared, this is a show. I think we've been a year and a half, maybe, planning on this to some degree. What do you think?
Starting point is 00:02:10 We've been wanting to talk about Adam for a long time. A long time. We've been talking to Katrina Owen behind the scenes about this show and just various conversations to find the right person to share the story. And Nathan. Nathan's the person. How are you, Nathan? Doing great. Yeah. story and Nathan. Nathan's a person. How are you, Nathan? Doing great. Yeah, so Nathan Sobo,
Starting point is 00:02:32 a founding member of the Atom editor team at GitHub, and we love to go deep into the history of projects, especially when they're as epic as Atom is, and hear about the beginnings. So tell us about the start of Atom and your relationship to the project. Did I say it's a text editor? I think I said that, but... I think you said it. Y'all know Atom. It's a text editor, open source. Yes.
Starting point is 00:02:52 Very cool. Go ahead, Nathan. So yeah, I think the startup for me would probably be different than the start for GitHub. I've wanted to build a text editor since right after I graduated from college. It was like, I guess that was, I graduated in 2005. And I went to work for one of my professors, I was like, taking one of his comp Ling classes. And the first thing that he had me do was to take this first order logic model of English grammar, and make it work. It was a logical model. So he was basically programming in first-order logic. And he wanted me to take his logic and
Starting point is 00:03:33 animate it and actually turn it into a real program that functioned. And so one of my first tasks in doing that was to parse the first- of logic language that he had created that was only sort of working in his mind or working on paper and at the time i was a super big fan of this blog called lambda the ultimate you guys ever heard of that blog yeah not me it's it's way over my head i started reading it and i feel like i should go uh make a crud app or something. Yeah. And it was way over my head for the most part at the time, you know, but some of it I understood and all of it was interesting to me. And they talked about this formalism called parsing expression grammars, which was, you know, top down recursive descent parsers with mimoization. So I ended up grabbing a framework
Starting point is 00:04:23 that was based on that. There were only like a couple at the time. And it was such a mind blowing distinction between that and like the lex and yak situation that was going on in my compilers class a couple years prior to that, that I got really excited about parsing expression grammars. And somewhere along the line, I came up with this idea that it would be really cool to have a text editor that had one of these parsing expression grammar engines sort of baked into it so that in a really convenient way, you'd be able to express the grammar for any language, and then the editor would give you a parse tree, and you'd always have access to that. So I sort of had that idea in my back pocket and then later moved to San Francisco. And after living there for a little bit, I'm like,
Starting point is 00:05:09 okay, I'm going to start working on this text editor. And so I started with the grammar piece, building like this parsing expression grammar engine. And I got a certain way into it and I open sourced it. It was this thing called TreeTop, which is a parsing expression grammar framework for Ruby and open sourced it and then got busy with other stuff for a while. And basically it never became a text editor. It always stayed like a parsing library. But that desire to build that system
Starting point is 00:05:43 that was sort of syntactically aware editing stayed alive in me. And a while later, I decided like, OK, it's time I'm going to do this. And my plan was to move to Boulder and work halftime for Pivotal. And then the other half of the time, work on this open source text editor that I wanted to build. And I talked to a friend of mine and he said, that sounds great, but like you should go go pitch GitHub and see if they'll want to like hire you to build this editor. So I tracked down Chris Wanstroth, the CEO of GitHub at the Million User Party, which was like a crazy raging event at, was it at Mighty or some club in San Francisco.
Starting point is 00:06:31 And I tracked him down and pitched him kind of quickly on this idea. And he had remembered me from TreeTop. Like I gave a talk at RubyConf 2007 that he was at. And so he was intrigued. And he said, we got to get coffee. So a couple days later, I met him and Corey Johnson, another GitHub employee for coffee. And they revealed to me that they were also interested in building a text editor. And in fact, had been building one for, I think, a few weeks actively at that point. Although Chris had sort of dabbled with another editor called Atomicity.
Starting point is 00:07:11 Well, the same editor, depending on how you look at it. In years prior, they were getting serious about really doing it. GitHub was in this big expansionary phase where it was taking off, but it was still like... I mean, I was employee 50, so it was still pretty small. But it was clear GitHub was taking off and they were kind of excited about broadening their horizons and seeing what else they could do. And so this text editor that Chris had always wanted to build
Starting point is 00:07:34 was on that list. Just looking at the library's IO page for your treetop project, and you said it always just stayed the library but never became the text editor that you wanted it to to be shouldn't discount what a success story it really is if you look at the dependent repositories on this you have chef you have less you have uh some base camp projects depending upon it you have uh andrew cantino's uh hugen which was previously on the changelog a lot of projects using treetop so So no surprise, I guess, that Chris would know you from that. So interesting how you kind of build yourself a little bit of a resume
Starting point is 00:08:10 of somebody that can do this kind of work. Yeah, it was, you know, I never really intended it to be anything other than a text editor. So it was kind of weird how that worked out. And the weird thing was, is that I never really worked on it. I like wrote it, gave a talk about it. And then this guy in Australia, Clifford Heath, sort of took over maintenance of it. And I never touched it again. Wow. That's the beauty of open source right there. Worldwide, right?
Starting point is 00:08:34 Somebody in Australia you never met and he can pick up the ball and run with it. And that's really cool. Yeah. The Wired article. So Adam was featured in Wired around the 1.0 release date, which was middle of 2015. And in that article, it states that Chris had, Chris Wanstroth, CEO of GitHub, had imagined this editor. He loves Emacs. Emacs, of course, very powerful, but written in Lisp, and you extend it by writing Lisp.
Starting point is 00:09:02 And Chris wanted kind of an Emacs style thing with modern technologies, web technologies, and he had imagined it in 2008. Right. And so then we find him meeting up with you in 2011. It sounds like at that time, it's starting to gain steam. How did he pitch it to you? I know you pitched him on the idea of a text editor. What was his initial description of here's what we are building.
Starting point is 00:09:24 We'd love for you to help us. This is what it's going to be like. What was that pitch? Well, pretty quickly, they showed me this video of it. I mean, they gave me the basic rundown of it's going to be a web based editor. And at that point, the editor I wanted to build was like aligned with him in sort of every way spiritually. But the idea of building on web technology did not, had not occurred to me. And when he told me about it, I was almost ready to be like, no, thanks. I'll,
Starting point is 00:09:52 I'll go build an editor, uh, not on web technology. Um, like I wanted it to be mainly done in native code with like a Ruby extension interface. And so he pitched me on this web thing. They showed me this video with a cool um god who larue that song going in for the kill was real popular at the time does this video still exist and can we watch it probably does somewhere yeah i could probably try to dig it up and see if it's in my email or something. Chris probably has it. But it was this demo of the prototype that he and Corey had kind of cooked together using Ace, which they'd already been using on.com. Ace is another web-based editor interface.
Starting point is 00:10:37 And they were doing it in a Safari or WebKit window on the Mac with this very primitive bridging to the Objective-C layer. And they cobbled together something pretty cool pretty quickly, actually. So anyway, that was sort of my intro to it, doing interesting things with GIST online, if I recall correctly, and then they booted up
Starting point is 00:10:58 some little JavaScript with an asteroid ship flying around inside the DOM and shooting dom nodes uh so you could call that you could actually take over you could plug in a page and destroy the page with this thing is that what you're talking about yeah totally so they were like destroying their text editor from within with this little ship flying around yeah i think that was in that video it all kind of blurs together but um
Starting point is 00:11:25 so yeah then they sat me down and showed me the code and it was kind of funny um it almost felt like they were more worried that i was going to judge their code harshly than determining whether or not they wanted to hire me to work on this thing was like that's that's weird it's backwards right Yeah, but I kind of didn't let on. I just kind of noted that to myself. Good plan. Don't tell them. So yeah, I mean, in pretty short order, it was like I had an offer to,
Starting point is 00:11:58 I mean, it went from my plan to move to Boulder and work on it six months a year and then like consult six months a year and then like consult six months a year. And that plan was a bad plan because it involved underestimating the cost of living in Boulder and the cost of building a text editor. But anyway, I went from that to getting hired to just build open source stuff full time. And what in my mind, like I did, yeah, I don't know. It was just kind of blew my mind and I was incredibly excited. But my girlfriend at the time, now wife,
Starting point is 00:12:32 I had already kind of told her, yeah, we're moving to Boulder, we're doing this. And so she was so enamored with the idea of moving to Boulder that we still ended up moving to Boulder and I just worked remotely for GitHub, which I don't know, it was a mixed bag. It was really lonely for a while, just working on this secret project kind of all by myself out in Colorado. Yeah. Anyway. That leads me right into what I was just thinking about, which is, you know, here you are, you're in Boulder now
Starting point is 00:12:59 with your then girlfriend. She's very excited. You probably want to be outside enjoying the mountains and whatnot. But you have this ambitious project on your plate and you just said that you were the only person working on it. And so... Me and Corey were both working on it, actually. So there were two of us. Okay, so there are a couple people working on it,
Starting point is 00:13:16 but a small team. Yeah. And it's an ambitious project. I mean, just to pin some timelines, this is end of 2011, call it 2012. 1.0 shipped in 2015. So we're talking about a three, four year period. How do you start when you're like, all right, you just sit down, you got you got treetop, but that's right in Ruby. You're not going to reuse that. I wouldn't think so.
Starting point is 00:13:40 Ambitious project, where do you start? And then how do you like order and prioritize features when you're first getting that off the ground? well i mean they had a little bit of code that was already running that was built on top of ace and so the first if i recall correctly like one of the first things i took an interest in was can we make this thing behave like Vim? So I started thinking about that and researching that. And that's like a crazy place to start, I guess. But pretty quickly, the idea for the key binding system came together, which was so yeah, I guess the logic was like, okay, well, if we're going to do Vim, and that was more like, okay, we're just sort of, I don't know, trying this idea on for size.
Starting point is 00:14:25 And so the idea was that the editor should be radically extensible. Like that was what everybody wanted. And so I thought, okay, like if this thing is going to be radically extensible, let me think of something that feels like a real challenge from an extensibility perspective, which would be like really nailing modal editing. And then what problems would we need to solve to overcome that challenge? And pretty quickly, yeah, the key bindings was sort of the first thing that came to mind. And so, yeah, the idea of associating key bindings with selectors and then bubbling keyboard events
Starting point is 00:14:59 up the DOM and matching against those selectors and basically integrating tightly with the DOM for key bindings and that we needed multi-stroke bindings. And so we started working on this Vim idea like pretty early on in the thing. And then at some point, I just got like frustrated with Ace.
Starting point is 00:15:17 And I don't remember why, probably because I was full of more hubris than I have now after being beat up by five or six years of this process and i was just like we need like let's take control of this thing like we want to control the editor itself like the actual editor rather than like cobbling things together with ace and there were apis that were missing that i remember wanting i don't remember honestly the specifics of what led to that probably fairly hasty decision um and so from there it was
Starting point is 00:15:45 like okay let's load a file and get it on screen now let's get a cursor now let's move the cursor around yeah it was very just like feature at a time um we probably worked on it for maybe a year i don't remember multiple months before we started working in it full time and what drove us was basically like what were we used to from other editors that we were dying not having like that was like kind of forcing us out of adam back into vim basically it was the editor i was using at the time and just picking those features off one by one so yeah that was sort of what drove the agenda. And it was pretty fluid. Of course, couldn't spend that much time on any one thing. It was like, get something quick, working. You know, I think Adam, especially right after we launched, like before 1.0, but even to this day, although I think we've either dealt with the worst of the issues or have a few,
Starting point is 00:16:43 but like performance was not anywhere close to the top of my mind during this early period. It was just like, get something working. Yeah. Yeah. Who was the user at this point? Was it more like you two,
Starting point is 00:16:55 you, you three? Was it like, who was the base you were trying to build? I know obviously developers at large, but like who was the first user you were building for? Yeah. Just us.
Starting point is 00:17:08 That was a, it was like, can we make an editor that we can tolerate working in for a day? And then I don't remember. It's too bad I should have studied these timelines. But Chris was one of the earliest, earliest users. I remember him posting something to GitHub with like a screenshot or something of him deleting his like emacs rc which was made filled me with a good feeling you know like okay this is really on board with this thing wow um where was cory coming from you said you were a vim user yeah cory was also a vim user i think um although he he was really involved in lua i remember that background he wrote a pretty cool like lua hack for the iphone that would let you run like build iphone apps in lua so i think he had like also sort of a similar background in kind of lightweight text editor e things although
Starting point is 00:18:00 he had some background in game development he worked foris, but we were both in Vim at the time. I'm not, I don't remember his editor history prior to that. And I spent a lot of time in like, Vim was actually a pretty new adoption for me at the time. And it was part of what was like motivating this like editor urge that had been dormant for a while was being so excited about kind of the, what felt like boundless potential of
Starting point is 00:18:26 vim and emacs and so frustrated with like i don't want to learn this vim script right you know like it just felt really annoying to me to have to worry about that learning that language to do anything and so as a result i always kind of felt like I got pretty proficient in Vim, but I always kind of felt held hostage in my own editor or something. Like I had this nerd tree. I had a bunch of plugins and like sometimes they'd break and I have to figure out, you know, I just always kind of felt like I wasn't in full control. And that really drove this over the edge to actually do it. I'm with you on that. I'm a Vim user from back in college years.
Starting point is 00:19:05 So almost 15 years now I've been using Vim. But I'm one of the only people that I've ever met, and maybe you're number two now, who has like a very good working knowledge of Vim, but still like is frustrated and doesn't love it and would prefer something else. And Nerdtree and plugins that are slowing things down and breaking.
Starting point is 00:19:23 I've always, I felt comfortable in Vim, but I've never felt like this is the end-all be-all, which is what a lot of other developers, they do. They get into Vim, they learn it really well, and it is the best thing ever for them. I've never felt that way. Yeah, and to be clear, I respect them and Emacs, but yeah, I never did feel in control, if that makes sense.
Starting point is 00:19:46 So it sounds like it started very experimentally of course you're going to experiment with architecture uh early on but even the features were very i don't know we call them organic or maybe even call them ad hoc a few people just like you know what do we love from these other things or what are we missing from these other things did you have an idea like we need to hit this you have milestones or was it like chris would email you guys every once in a while and say, how's it going? And then you'd give him an update. I'm just curious on the internal structure of how you go building something like this. Because it took a while, but so far it's turned out really well.
Starting point is 00:20:14 Maybe we can learn a few things from you. I mean, it was really... So I had worked for Pivotal previously, and Pivotal is all about XP. So you sort of have this backlog of like individual things you want to make happen and you do the minimum thing that could make that thing happen. It's kind of, I mean,
Starting point is 00:20:33 there's probably more sophistication to it than that, but that was kind of my attitude. And so like to start with, it's like, okay, well, if you don't have a cursor, you can't edit text, right? I mean, those features just wrote themselves, right? Like get text on the screen't have a cursor you can't edit text right i mean those features just wrote themselves right like get text on the screen get a cursor moving around get the text editable but then there were some things that we planned like i was like okay like we want to have multi-cursor support let's do that early because if we don't then everything's
Starting point is 00:21:01 going to assume one cursor and it'll evolve the wrong direction. There was a little bit of strategy involved there, knowing that we wanted to support soft wrap, folds, all those basic things. Those were things that I did early because I knew that to be a respectable text editor, at least in my own eyes, we would need to support those features and that they were weird enough
Starting point is 00:21:23 in their impact on how APIs looked and stuff, that getting them in early was really important. But I mean, if you think it just took us a while, I mean, Atom still, honestly, if you don't add something like Nuclide or some of the other extensive packages, like the core of Atom is still like a pretty basic feature set. And none of it is hyper original in terms of the features themselves right like we needed a command palette a way to run commands you know that had its own web oriented twist and atom but that was a feature that you know other kind of lightweight text editor rather than ide ish editors had a tree view i mean mean, it was all pretty just obvious stuff
Starting point is 00:22:06 that we needed to be productive. It was basically like the stuff that we used in Vim ported over to Atom for the most part early on. Find and Replace saw like an iteration. I was kind of enamored with this text editor, Sam, that had this crazy like regex language for doing searches and like searches within searches and crazy stuff.
Starting point is 00:22:29 So our original search and replace interface was kind of like command liney. And then another guy, Ben Ogle, who joined later in the project was like, this is ridiculous and wrote something that looked a little more like what Sublime offers, which is a little more GUI oriented and stuff. But in terms of deciding what to do when, it was pretty loose. It was like just whatever felt intuitively like the most pressing need or the thing that was missing most. And it proceeded like that for a really long time.
Starting point is 00:23:02 And in terms of like what the MVPvp we were going to ship was like i mean this is probably a testament to my youth and hubris at the time but like i wasn't even really worried about that at all it was like chris told us just build something awesome he gave us no timeline and he didn't really even i mean on, he did check in more regularly. But like as GitHub heated up and things got busy, like the duration would get longer and longer between check-ins from him. And I don't even think a lot of people at GitHub knew what the hell was going on, like what we were doing. And I have to assume that most people just assumed like it was never going to ship which was never my intention like well you were like in a it seemed to me like a big r&d kind of situation where you've got a lot of dreams you got a lot of talent to bring this to fruition but you really had to sort of like poke at various different things in terms of features or ways to go to to kind of catch your ground and in a lot
Starting point is 00:23:59 of ways it seems like you were very much in like r&d rather than like knowing exactly what you want to build and you know because if you know exactly what you want to build you can build it faster i don't know i mean i had a pretty strong sense of what i wanted to build i think the trouble was like how to build it and i don't know maybe we should have built it faster i mean a lot of times i when i'm in a bad state or whatever i'm like oh I suck like this is taking so long and it's still not even where I want it to be so I feel like I mean our the plan for me the rough back of the envelope plan I mean a lot of this still isn't even done was this hyper social hyper collaborative editor and end with the syntax awareness stuff which also isn't in yet although it's in progress
Starting point is 00:24:45 we can talk about that later but like so i had this vision of like a really good general purpose text editor that looks like textmate or sublime but is extensible and flexible like vim or emacs plus having this like layer of syntax awareness that's scriptable baked into it plus being hyper collaborative and like social coding aware which is what i uh pitched chris on and what he was excited about yeah and having real-time collaborative editing like that was sort of my list that was actually like my mvp for a really long time but then like the MVP of the MVP is when we need a usable text editor if we're going to do anything. Period. And so
Starting point is 00:25:29 that on its own, I honestly don't even think Atom was exceptionally usable the day we made it public. It was traumatic to me to launch it because in a lot of ways, I was embarrassed by it that's interesting
Starting point is 00:25:46 but i think it was good ultimately that we did because like i think you've got to develop things in the heat of public scrutiny i mean it's not comfortable um but i think it's was critical to us like informing our decisions going forward from that point what's the saying if you ship something you're not comfortable or if you're embarrassed about what you ship, then it's a good thing because there's always room to improve. What's the, do you know what I'm talking about, Jared? There's a term, there's a phrase out there that's something like that. I think it's like, if you're not embarrassed when you ship, then you waited too long.
Starting point is 00:26:18 Yeah, that's it. It's exactly it. And on that note, that's a great place to pause because we had our first break coming up. So let's take this break. When we come back, we're going to dive much, much deeper. Love the direction we're going. We'll be right back.
Starting point is 00:26:31 Our friends at Hired want to help you get your next job that much easier. Searching for a new job is stressful, scary, and time-consuming. Recruiters try to sell you on all the roles you don't want and job boards feel like a black hole. Sometimes you get through the entire process only to find out at the very end that salary, company culture, or other details don't match what you're looking for. Hired is different. They're an intelligent talent matching platform for full-time and contract jobs in engineering, development, design, product management, and data science. Instead of endlessly applying to companies hoping for the best, Hired puts you in full control of when and how you connect with interesting opportunities. After completing one simple application, top employers apply to hire you.
Starting point is 00:27:16 Over a four-week time frame, you'll receive personalized interview requests and upfront salary information so you can make informed decisions about the opportunities you'd like to pursue. And if you're concerned about privacy, don't worry. Hired hides your profile from your current and your past employers. The best part, Hired is free. It doesn't cost you anything.
Starting point is 00:27:37 In fact, they pay you to get hired. Our listeners get double the normal $1,000 hiring bonus to find your next chapter on Hired. Head to hired.com slash changelog. Don't Google it. This URL is the only way to double the hiring bonus to $2,000. Once again, Hired.com slash changelog. And now back to the show. All right, we're back with Nathan Sobo talking about this awesome text editor, Adam. And Nathan, you've got a great history with this project. I love how serendipitous it was that this all came to be.
Starting point is 00:28:17 And we've been talking about the direction it's gone and how you've gotten there, the feature set, the R&D, the initial inspiration. But now you've got some years behind you. I think it's current version is like 1.14, you know, some years behind you. You're, I think it's a current version is like 1.14. I believe that's correct. Yeah. You know, you got a team behind you. What is the landscape of the Adam team now?
Starting point is 00:28:34 So it was you and Corey now who's involved. So I guess I could give you the, should I give you the succession of kind of how it's grown over time? You think? Yeah, please. Yeah. So,
Starting point is 00:28:44 yeah. So it was me and Corey and then working out for the longest time. And before it launched, Kevin Sawicki was another GitHubber that was working on some other apps that ended up being used internally, but kind of never reaching the light of general population, kind of joined our team, chewing at the edges at first.
Starting point is 00:29:04 I remember one of the first things he did is he wrote a wrap guide package, which to this day is its own package, which is kind of funny because it should probably just be a feature in the text editor. I mean, it doesn't really warrant a package, just a single line at 80 characters or whatever. But that was like one of the first things he did is implement this wrap guide package. And he kind of merged into the team. And for the longest time, it was us three. And then at some point, we acquired another company, easel.io. And Ben Ogle is the head of that. And that was like a cool web based graphics tool that I think went through Y Combinator and stuff. And we acquired them. So he joined our project and he brought a real i don't
Starting point is 00:29:46 know like a brand facing i mean i've always been really into the brand too but he actually like executed on it in terms of and that was as we were getting closer to being launched publicly so kind of defining our user facing story changing us from kind of a project to a product. A lot of that, I think, had to do with Ben and made a huge contribution there. So then we launched and I'm worried I'm going to forget people. Also the chronology. At some point, Corey left the project to do some other stuff and it was smaller for a while. And then, yeah, interestingly, my sister's boyfriend multiple years earlier had wanted to work on this other project with me and had was a physicist and then only ever programmed in fortran and i just gave him basically access to the repo and was like okay and he started making
Starting point is 00:30:42 contributions like he taught himself javascript and ruby and like started going contributions. He taught himself JavaScript and Ruby and started going to town. And so right before I joined GitHub that year before, I'd spent multiple months. I was working on this other project that he joined me. He was just out of college at that point, and we worked together, and I sort of mentored him. And then one of the last things we worked on together in sort of this mentorship phase was my idea for an incremental parser. And so he got really
Starting point is 00:31:13 intrigued by the idea, read a bunch of papers from Berkeley. And sort of while I was starting Adam and building Adam, he started working on that system, like an incremental context-free grammar-based parser. And so at some point, we hired him after him doing a period of contracting. And then the next team member was this guy, Antonio, Antonio Scandura. And... Great name. Yeah, great name. Great guy. Wow, yeah.
Starting point is 00:31:44 He opened a pull request actually i think it was an issue where we didn't support our soft wrap lines like didn't support preserving the indentation level on the soft wrap segment of the line which yeah in retrospect was terrible um but we just didn't we hadn't gotten around to implementing that and so he had like pinged me on an issue and was like hey i'm I'm using Atom. I want to fix this problem. Do you have any guidance about how to fix it? And I brought up this idea about phantom tokens.
Starting point is 00:32:13 And we went back and forth like one or two times. And then he had a pull request that was super high quality that he opened. And he sort of just committed himself to building stuff for us for multiple months. And I finally, I don't remember what strings I had to pull, but like we finally hired him as a contractor and then eventually as a full-timer. So he joined the team. And then more recently in like the past, I don't know,
Starting point is 00:32:42 I think year and a half, we've hired Katrina, Uchako, Michelle Tilly, and Ash Wilson to work on GitHub integration, which is something that we've always wanted to do. It's just been a really long time coming. And so those three are working on that. And I'm really excited about what's coming together on that front. So anyway, the team today is kind of, we also hired a Windows expert. So where is the team at today? I don't know how interesting that whole narrative was, but we kind of have a group that focuses on what I kind of call like the platform of Atom, which is like the part of Atom that other people are building on. But it also like leads into Atom, just the basic bare bones Atom installation. So that's me, Antonio, Max,
Starting point is 00:33:32 and Damien. And Damien also has like a focus on Windows stuff, although he's starting to delve into connecting to this language server protocol that Microsoft got going, and that's going pretty well. So that's the core set of people. And then we have another team of three people that are working full-time on this GitHub integration, Git interaction. And then we have Simon, who's our designer, and he kind of bounces around between us and Electron.
Starting point is 00:34:01 I mean, the story of Electron is actually pretty interesting, too. We could talk about that as well. It sounds like this is like a full-on product team now. Which is what I was trying to get at. I was like, you know, you started out serendipitously reaching out to Chris at the million-something hackathon. I forget what that was. It was like a million-user party. There you go.
Starting point is 00:34:20 It was like a million-user GitHub user. Right. And so you track him down. You're like, hey, man, I got an idea. This is what I'm known for. He's like, OK, cool. You know, you're employee number 50. You and Corey are hacking on this thing.
Starting point is 00:34:31 You have really not much of an aim in terms of like inspiration from Chris saying, hey, go do this. It's just more like build the best editor you can. Right. And then now you've got, you know, as you're laying out here, a full on team that's very product focused. You got integrations going on. You got, you know, various pieces around platform, different different platforms going on, being extracted from Electron. You know, that full story there. Yeah.
Starting point is 00:34:56 So Electron's got a whole team on its own, which was originally just me and Corey and Kevin as well. And well, Chang. So, yeah, I mean, a big like sub story of this entire thing is like, how the hell are we even going to do this? Because when Corey pitched the idea of this hybrid desktop web app, like the technology did not exist
Starting point is 00:35:16 to do that. Like we'd something kind of cobbled together with the WebKit views that you can do inside of Cocoa applications, but it was not cross-plat. And so that was like a, I mean, that was a massive- Why didn't you guys just use Electron?
Starting point is 00:35:30 Yeah, because, exactly. I wish it would have existed. That's what I would have done. That's what I would have done, hey. So I remember like just trying to figure out like how the hell are we going to do this? And like, I'd done some C++ in college, but it definitely did not equip me
Starting point is 00:35:46 to dig into the Chromium code base and figure out. And to me, it was like our original integration with the underlying operating system all went through this objective C to JavaScript bridge that was something enabled by the WebKit API, only on the Mac. And it was all synchronous because we didn't have an event loop.
Starting point is 00:36:09 And it was just, yeah, it was really cobbled together. And for the longest time, I was like, we got to have access to the NPM ecosystem. And so if we're going to have access to the NPM ecosystem, then I really meant we had to have Node APIs because all those modules use Node APIs top to bottom. So if meant we had to have node APIs, because all those modules are used node APIs top to bottom. So if we were going to have node APIs, that meant it had to be v8. And if it was v8, then that meant it had to be chromium. So that really quickly set my sights on getting
Starting point is 00:36:37 this dream of like this mashup between node.js and Chrome working working because what we had wasn't cross-platform. They knew it was a priority for all of us and it didn't have an event loop and the library ecosystem was tiny. And the whole point of having the thing in JavaScript was to tap into this huge library ecosystem. So we started with this Chromium embedded framework, which was not it.
Starting point is 00:37:02 It was like a step in the direction of Chrome, but it sort of abstracted us away from Chrome. And then I started poking around and researching, trying to dig up what I could find on who did Node and Chrome integration and found this project from the Intel Research Laboratory in China, Node WebKit, which you may have heard of.
Starting point is 00:37:23 It's like a competitor to Electron. And, you know, downloaded it. I don't remember, built it or whatever. It was really early in that project's evolution as well. And like, Atom just was crashing. Like we couldn't keep Atom running. And I remember like poking around and some IRC channel or whatever. And at some point, Cheng, who had been like an intern, I think, at that Intel Open Source Technology Center, emailed me and he's like, hey, I love GitHub, you know, blah, blah, blah, like, I want to work for you guys. And so at that point, we had like one Skype call with him. And we could barely communicate communicate because I don't speak Mandarin and he spoke English, but it wasn't a lot. And I just, I think I emailed Chris and I was like, Hey, we have to contract
Starting point is 00:38:11 this guy. I don't know. I somehow managed to contract him. And at that point it was like the communication barrier I knew was so high. The time zone difference was massive. And so at that point I was just like here are the specifications like it needs to run like i need access to node apis from inside of a browser window and i need to be able to like from a callback from like you know listing the directories on my file system i need to be able to mutate the dom like it has to be seamless go for it yeah and so that was sort of how electron was born like i think we've gotten some criticism or whatever for like not iterating on node web kit and like honestly it wasn't intentional it was more just like okay i had this person that wanted to work with us for us and be
Starting point is 00:38:57 paid by us that i couldn't communicate with and if even if i could communicate with was in a different time zone i just needed like a simple target to aim him at. And so that was basically just like build me a system that's custom designed for exactly the needs of this application, solves no other problem and is only responsible to us because that was all we had time for. And so we didn't really know it was going to become Electron. We called it Atom Shell.
Starting point is 00:39:22 He wanted to call it Direwolf, but I'm like, I don't want to call it Direwolf. It's something boring. Direwolf? Yeah. that's a bad name game of thrones we really bonded over game of thrones but yeah right on direwolf makes sense then but yeah so it was adam shell for the longest time it was just the shell of adam which is where electron kind of came from like the orbital shell stuff we have a show we actually did an entire show on electron back in gosh i guess it was august of last year so for those who want a deep deep dive with zeke zicalianos about electrons history which some of it overlaps a little bit of course because as you said you you guys pulled it out um i remember when it was adam shell that might have even been
Starting point is 00:40:00 public at a certain point but yeah that's episode 216 we'll link that up in the show notes so for those who want to continue down the electron path check out that episode as well great sounds like you had a lot of i mean obviously a lot of challenges and it sounds like even harder than i was thinking it was so trying to build a desktop class and a desktop apps with web technologies post electron like i said it's it's it's a relatively straightforward endeavor in fact you've even empowered other people who are competitors in the sense of like competing text editors to you know get to where they want to go much faster than than y'all could um because the platform wasn't there yet but have you found i'm thinking about performance but i'm sure there's probably other ways as well.
Starting point is 00:40:47 Have you found even to today, even with Electron, now that it's, you know, abstracted and stabilized and worked on by many people, have you found that there's an uncanny valley or draw like major drawbacks still with using web technologies and building desktop apps? What are your thoughts on that? I mean, performance, I feel, is a challenge. Although we can go into why I don't really think
Starting point is 00:41:11 it's actually that big of a deal. But other than that, I don't really feel an uncanny valley surrounding it. Most of the facilities that we need from the underlying operating system are available or pretty easy to get access to through like native extensions which you can just load via npm so i'm pretty happy i mean api wise i mean even now we're like working on taking advantage of some new apis in chrome that like completely
Starting point is 00:41:37 changed the game of the editor of the text editor rendering and make things so much more efficient that just weren't available. So I think that's maybe the... Do you have a for instance on that? Like, for example? Yeah, so like one of the biggest challenges was there was no way for me to detect when an editor became visible. Because an editor could be anywhere,
Starting point is 00:41:59 like it could be embedded inside of someone's package on a tab and then someone switches tabs and that editor is invisible and then some piece of state changes that changes the font size which changes the line height etc etc so i need to perform all these measurements for a variety of reasons uh in order to render only the visible text not all the text but only what's visible to the dom because the dom can't handle 10 000 lines of text and so anyway when only what's visible to the DOM because the DOM can't handle 10,000 lines of text. And so anyway, when the editor becomes visible, if the fate of things have changed, if the font size or something has changed, I need to remeasure. But I had no
Starting point is 00:42:34 API available to me until like this latest version of Electron that we're upgrading to that could tell me, oh, the editor's become visible. So for the longest time, we just, we had to pull. So that's always the debate. And like always the challenge for me, oh, the editor's become visible. So for the longest time, we just, we had to pull. So that's always the debate. And like always the challenge for me is like, I don't know, maybe I should follow worse is better philosophy, like more, but I really wanted the editor to be self-contained so that if you put the editor on the DOM somewhere, the goal would be it works. And we haven't always achieved that, but like that was always the goal. And so it needed to detect for itself it became if it became visible i didn't want the user of the editor to have to inform it
Starting point is 00:43:10 so anyway that api that now will let us do that is this thing called intersection observer which just landed in chrome but it's just kind of crazy to think and there are still things like what if i want to observe the computed style of a particular node and be notified when it changes um like that would be really nice for the editor as well because then no matter how it got styled i would be able to detect if the computed font size blah blah blah changed and remeasure but like as of now there's no way to do that and so yeah to me that's probably one of the key frustrations is just hitting places where still as amazing as they are and as many amazing things as web apis enable they're like these sometimes holes where something i need and i can't get it like measurement another
Starting point is 00:43:56 one you know at this particular character what pixel position is that at horizontally considering ligatures etc etc there's like really not a good API to answer that question efficiently, sort of like short of putting the content on the DOM and asking the question. Right. So, yeah. We definitely end up against that one as well.
Starting point is 00:44:17 Let's go one last question on the technical side and we'll head up to our next break. We have lots more to talk about, including your favorite packages and themes and must-haves. We also want to talk about the future. It has you to project a little bit into the future for us for Atom.
Starting point is 00:44:33 But on a technical level, now this is like superficial technical level, because just looking at the repository, you have 75% CoffeeScript and 25% JavaScript. Now, CoffeeScript has fallen out of flavor with many developers, especially with ES6 and such things, adding many of its features. Curious the history on CoffeeScript and the current team's opinion of it. So the history was when I showed up, you know, n weeks into adam's development they were using coffee script and that was chris and cory and at that point in time i think all of github.com's code base was done in
Starting point is 00:45:12 coffee script and you got to kind of transport yourself back to what 2009 or whatever point this decision was made yeah i mean es5 was for a ruby programmer at least, ES5 was, oh, God, I got to assign crap on the prototype. And like, what is this? And so CoffeeScript to Ruby programmers, which is what we all were, like seemed so appealing. It seemed to fix a lot of problems and make things more convenient. And it was just like, yeah, it seemed like a cool idea. You know, fast forward five years-ish, JavaScript's evolved tremendously.
Starting point is 00:45:51 And yeah, you're right. CoffeeScript is kind of, to me, it feels a little like a dead end. Like it's not standard. It's worked on by way fewer people than JavaScript. Every feature it really offers that's a positive is now in JavaScript. And there are plenty of things that it does that drive me up the wall. So our official policy is like no new CoffeeScript.
Starting point is 00:46:13 Now there are instances when we have to dig into some stuff that's written in CoffeeScript and it's like a small change and I'm not down to run this decaffeinate script and clean up the output to get it converted over. Like it's just not what I'm up down to run this decaffeinate script and clean up the output to get it converted over. It's just not what I'm up for that day. But slowly but surely, we are gradually converting everything to standards-conformant JavaScript. That's sort of the official policy at the moment.
Starting point is 00:46:41 It's kind of a file-by-file basis. Right, or more like library by library, but occasionally file by file, like in core and stuff like that. Yeah. Yeah. Interesting. Interesting. One last question. This one seems like it's a non sequitur, but it's kind of looping all the way back to when you said you brought on, I can't remember his name, but the product focused kind of the brand. Yeah. Who's no longer with us. He's moved on to other brands. That was Ben Ogle. Yeah. Okay. So Ben Ogle. So Adam has a great brand. It has a great design as the marketing pages are really good. The documentation is really good. And I just curious about the naming the was Adam
Starting point is 00:47:18 from the beginning. I know Electron got renamed from Adam shell to Electron, but we love naming stories. So tell us a little bit about the brand, the design, the naming. So the original name of Chris's project was Atomicity. And I do not know why he named it that. Like, I don't really get it. I should ask him. But it was Atomicity. And I believe it was like before I was hired, they made a command line script or whatever to launch it from the terminal. And they're like, Atomicity is really long. They just made it Atom, right? Because remember at the time, it was like you could launch TextMate with Mate. You could launch Sublime with Subble. And so like the simplest shortening of Atomicity was Atom.
Starting point is 00:48:00 And then that name was like, oh, that's a much better name and so like right around the time i was hired i think we renamed the repo or something to adam and just did the rename and then the branding just kind of grew out of that because we were interested in like the atomic era like adam it's this physics thing and like winded so that was sort of the 50s kind of came to mind which like i don't know, it's not like retrofuturism isn't exactly new, but we really liked that angle of like the atomic era. And so from that, I think we hired an illustrator at some point, it didn't really pan out, but he did some really cool atom graphics, like wallpapers and stuff that were sort of in this retro
Starting point is 00:48:42 futuristic theme. and i remember making like pinterest boards with like all of these posters from general dynamics from the 50s and you know those cheesy like advertisements that are like hand-drawn yeah about like how the world is a better tomorrow and the house of tomorrow blah blah blah like and at some point like so we had different people involved like uh that github animator who's still like i think the lead animator at github did some graphics for us but they seemed just a little too like cartoony and at some point we worked with another designer inside of github and gradually evolved toward yeah just that simple atom disc or whatever
Starting point is 00:49:22 yeah i don't know if that gives a good narrative. We have the Adam video, a little commercial we did for 1.0. I love that video. That video is so awesome. I can see the zooming out though, so I'm not sure if somebody inside the Adam team started to do this stuff, but even when you zoom out further, you've got GitHub Universe, and you've got GitHub
Starting point is 00:49:40 Satellites, you've got this sort of maybe physics perspective towards naming with uh with with github these days because it's like you know that's like atom is like this you know one of the smallest type of structures we have in our universe and you got obviously planets and satellites you got this sort of space physics kind of perspective towards naming electrons yeah yeah that i don't know how that really emerged i mean adam was named adam kind of before a lot of those themes came out and a lot of those things were named there was this really like wallpaper running around inside the company of the github
Starting point is 00:50:19 universe wallpaper where like there were like different planets like one planet looked like cuba and the other one looked like the octocat and i think that sparked a lot of excitement so i'm actually like you'll have to talk to designers to get a sense of how intentional all this has been but adam was accidental to some degree because it was atomicity it's always intentional when they write it up in the history books you know it's true we thought of it all a long time ago. It's a long, it's a plan that we've had laid out and we're just executing our plan.
Starting point is 00:50:49 Well, I teed up a break earlier and we didn't take it because we wanted to ask you about the name. So let's take that break now. And on the other side, Nathan's favorite packages. We'll talk about themes. We'll talk about the ecosystem and the future of Atom. We'll be right back. Production ready, cloud hosted databases. That's what Compose is all about.
Starting point is 00:51:08 Compose.com. Check them out. Pick your flavor. Mongo, Elasticsearch, RethinkDB, Redis, Postgres, FTD, RabbitMQ, SilaDB or MySQL. I talked to Greg Koberger, founder of ReadMe, about why they chose Compose. Take a listen. So we actually weren't using Compose at first. We had our own Mongo database set up on AWS. We were just going through a checklist of things that would just kill our company. You know, it's not to be overly dramatic, but there's a few things early on that can just destroy a company and there's no coming back from. And pretty much every single one of them was around data loss or whether it be stolen or just deleted. I don't do DevOps.
Starting point is 00:51:49 I'm a programmer and I can, you know, navigate my way around the command line. But I did not believe that I had the skills to make sure that I wouldn't just delete the database by mistake or that my backups wouldn't at some point, you know, just stop working. You know, every single scenario that I saw, like, you know, waking up and seeing that something bad had just happened, they all involved the data. If we pushed a bad, you know, push bad code
Starting point is 00:52:13 and it broke something, that can be fixed. But kind of data, either theft or loss, was the two things that I just was petrified of. It took, you know, 30 seconds to get started with Compose. We went to the site, signed up, moved over within minutes. It was fast. The interface was great. We could browse stuff online.
Starting point is 00:52:32 But kind of the biggest reason why we started using it was just scared that we were going to lose everything. If you're ready to give Compose a try, our listeners get 60 days free. Head to compose.com slash changelog to learn more. Make sure you use that URL. That's the only way to get those 60 days free and now back to the show all right we are back with nathan so we're having a fun conversation about adam and nathan i'd like
Starting point is 00:52:57 you to talk a little bit about where we are today and where we are going so you probably have you have thousands maybe maybe a million, I don't know. You have lots of users. You have people who love Adam. You also have a lot of people who are holding out. They love their Vim, perhaps their Sublime Text, and they're waiting for, you know, X, Y, or Z feature or performance to improve or these other things. So tell us the lay of the land in terms of where Adam is moving. Yeah, sounds great. So I mean, milestone zero for me has always been that we need to be a fantastic, just basic text editor.
Starting point is 00:53:31 Like, yeah, we're super extensible and you can do crazy stuff in Adam that really isn't possible anywhere else. But like, as a user, not a package author, I've always wanted it to feel smooth, feel lightweight and fast. And like, I think we've improved dramatically from even when we went 1.0 on that front. And there are improvements landing in every release or every other release.
Starting point is 00:53:54 But that's something that we're going to be continuing to focus on to round out, at least for like the first few months of this year. And I still think we could keep working on it. But in terms of scalability, we have a bunch of architectural changes coming that I think we're going to scale us up to like multiple gigabytes of text. We're already up to like 40, 50 megs before there are problems. And it's not just gigabytes for gigabytes sake. But I think when you increase the value of N, you end up discovering performance problems that, while not egregiously bad at smaller file sizes, are kind of like this sort of low-grade sand in the gears. So that has been a focus and will continue to be a focus.
Starting point is 00:54:33 And it's an incredible amount of work to get there. So that's one piece of it. But then transitioning out of that to basically add some of the first real big features that have landed in Atom for a long time. So first and foremost on the roadmap is pretty nice Git and starting the beginnings of, but it will then continue to be iterated on Git and GitHub integration. So basically being able to open up a panel, see what's unstaged and staged, stage lines back and forth, discard hunks, create commits with a nice Atom editor, and then more interesting interaction with understanding collaborative state on GitHub.
Starting point is 00:55:12 And my dream, although it'll take a while to get there, and this is going to kind of be like V1, iterate to that dream is for a lot of tasks, you won't really have to leave Atom to do collaboration. Take a while to get there, but that's where we're headed. So that's one area for expansion that I'm really excited about. So by collaboration, are you talking about like a Google Docs style? You had, you know, I'm looking at mine, you're looking at yours, and we're live editing the same file? So that's definitely something I want to do. That's not really in progress that I had a, I did a bunch of research in that area. so that I can't really put a timeline on but I can definitely say that like
Starting point is 00:55:50 more async style traditional github collaboration will be happening this year and I think there'll be a natural outgrowth from that into the real-time stuff I mean there's been a huge debate in the team of just like even even how real time is presented. Are you like full on pair programming? And if that's true, like, what do we do about things like the app that you're working on is on one person's computer, like when they run, when you run that app, what happens, et cetera. So like when it gets into real time and it's definitely somewhere I want to go, I see it as kind of maybe to start with this kind of little flirtatious outgrowth from some async collaboration that you're already having on a pull request or
Starting point is 00:56:30 something if that makes sense like you're going back and forth in comments you're seeing that stuff come in and then you're like all right why don't i just code with you and then maybe for the scope of a more limited scope working together but that's all a twinkle in my eye right now. The GitHub integration is actually, you said, underway. Right. And so that you're talking about not just Git operations, but actual integration into your public and private repos and maybe pull requests and issues. Is that the kind of stuff you're referring to? Exactly.
Starting point is 00:57:00 Exactly. And I'm really excited about what it's going to be like to be able to get a sense of like, say I have a pull request open and I'm editing some text and someone comments on the pull request and I'm like in that file and I just see a little thing pop into my gutter like ding, someone commented. Just this sense of like immersion in the collaborative experience has always been like what I pitched it, you know, even to get hired is taking a while to get to the point where I felt we could even start on it. Any concerns with distractions at that point though? Like, uh, well, we'll have to see. Yeah. I mean, I can just think of like the age old cartoon, which is like, you know, programmer there with spaghetti in his mind interrupted, boom, spaghetti's gone kind of situation. So it's like, you know, that little notification might be like a whole new problem.
Starting point is 00:57:46 Oh, totally. And I mean, maybe you won't want that notification. Maybe some people will, some people won't. Maybe the whole idea is terrible. But I think what is true is like if I'm viewing people's comments on my pull request in my text editor, I'm going to be happy about that. Yeah, me too. Because it means I can respond to those things in situ. Right.
Starting point is 00:58:04 You know, I don't have to like tap over to my editor and deal with it. So just like a tighter integration of that entire flow for Atom users is our goal. Any plans for pairing type stuff? So, yeah, I don't know. There's nothing planned. There's dreams. I mean, Antonio is still in school and has to do a thesis in Italy. So he's probably going to work on researching like the real time text collaboration technologies.
Starting point is 00:58:31 There's like operational transformation. There's also a conflict free replicated data types. Those are kind of like the two leading theoretical foundations we're working with. But like, I don't know, like we already have a pretty nice server back end for a lot of valuable stuff so we're starting there you know uh yeah but that's the more async world but yeah i grew up as a programmer pairing and i still pair you know decent chunk of the time so i'd love to make that work someday so you mentioned around the performance concerns, you mentioned that, you know, you guys are going extreme lengths to test performance bugs and to isolate them and find different ways you
Starting point is 00:59:10 can improve performance. But do you have anything else in terms of performance that you're going to also be working on over the next year or so? Well, the biggest thing is this. So one of the ways that we're addressing performance at long last is by dropping key pieces of the system down into C++, which is great because V8 is written in C++ and has a pretty extensive API from that native side of things. And so, so far, we've basically dropped a menagerie of balanced tree implementations and splay tree implementations down to C++. For example, the patch layer is this data structure that aggregates change. So in the text buffer, when you open a transaction
Starting point is 00:59:51 and then just make random edits anywhere in the file, at the end of that, how do we report to event listeners what the aggregate effect of all that change was? And the answer is not like if the before and after. So yeah, that's been a structure we've had in C++ for a few months now. Something that's been there longer is the marker index, which is a data structure that tracks logical regions. So if you have a word highlighted and then you paste text above that word, making sure that the highlight remains stable over that word and we understand the impact of that change on that region. So those are the kind of things that have been there previously. And what we're
Starting point is 01:00:29 working on now is taking more down into C++. So actually dropping the entire text buffer implementation down to the native layer and doing where possible, because in some cases, like if you're on a remote file system and different packages do different things doing the io from the native layer storing all the text as this giant immutable buffer and then representing changes made as as these patches that i described previously that are aggregated sets of changes that are composed on top of that underlying immutable text. That'll be the gateway to this feature we call snapshots, which is basically like, let me freeze the contents of the buffer
Starting point is 01:01:11 at a point in time. And that gives us a stable, something stable that we can implement, find and replace, scanning and populating an index of where the results are, which is when people search for like space in a multi-thousand line file or something crazy we still block on that so that'll get us that in the background nice and then the thing i'm most excited about is snapshots are the gateway for
Starting point is 01:01:36 what we're going to start to do hopefully in the next few months here is to integrate max brunsfeld's new parsing system into atom in a proper proper way. So the parser needs, obviously, a stable input stream, like the stream can't be editing out from underneath it. So that snapshots feature will enable the parser. We already have some pretty cool prototypes going, but the idea is, yeah, to achieve that original dream that I had back when I started Atom of always having a syntax tree available for any language you're happening to be editing so that packages can do things like, oh, let me inspect if there's like a has mini class method call
Starting point is 01:02:14 in this class that I'm looking at here. And you can just walk the parse tree to do that at any point in time. And then that code could like query the database and figure out what the columns are. Those kinds of, I think the combination of ad hoc package code with like a really reliable well-formed syntax tree could produce some pretty cool stuff so that's another thing i'm pretty excited about and we've i mean we currently use this reverse engineered textmate syntax highlighter
Starting point is 01:02:41 and it's not the fastest thing in the world. I think TextMate's is probably faster than ours, but no matter what, they're all based on Oniguruma or Regex's. It's just not that fast, whereas Max's parser can crank through a jQuery, and I think it was like 40 milliseconds. And then each additional edit, it's incremental, which means you type and you only pay for the kind of changes that you made. So each additional edit is like one millisecond or something.
Starting point is 01:03:11 And so, yeah, like our budget is about 16 milliseconds for any action to happen in order to feel responsive. So we're kind of within that budget. And I'm excited about what we'll be able to build on top of that. The other big theme, I guess, that will be supported both by this integration of this new parser and then also some work that other team members are doing on talking about language server protocol that VS Code started is just moving more in the IDE direction in terms of having
Starting point is 01:03:42 those kind of integrated language-aware features. But I want to be careful to keep Adam feeling lightweight, feeling more like him or a text mate, and have those things kind of unfurl as needed, but then stay out of your way when they're not. I want to keep that vibe of a text editor. That's a good move. I agree.
Starting point is 01:04:01 That's the holy grail is like, give me the power features when I want them or know i need them but don't feel like they're you're a huge honking ide right keep it light keep it fast right another thing we're working on is right now actively is startup time so technology we're using is this thing called v8 snapshots where you can load with some limitations run a bunch of javascript load and run a bunch of JavaScript, load and run a bunch of JavaScript and then tell V8, hey, serialize your state. And you get like this blob of binary. And then when the Atom window is born, it can be born kind of with this blob of already
Starting point is 01:04:37 evaluated JS just there in memory. So we're actively working on that right now. We had to go through every package that was still using jQuery from the good old days and remove jQuery because it does all this DOM interaction when it's evaluated that was breaking our snapshotting. But that's finally done. So yeah, I don't know. I still have this pretty big passion and people may doubt it because it's taken a while, but these are big problems to solve yeah to get this thing feeling like a sublime or i mean it's never going to be vim because it doesn't run in the terminal and it you know wasn't its core wasn't built in the late 70s early 80s but like i think
Starting point is 01:05:17 we can feel a lot lighter and snappier and and that's always a goal so you have a lot of big goals a lot of performance sounds like you're putting a lot of efforts into that project for us you know this is maybe a five six-year-old project now in terms of like heavy development project out double it go five years from now and in your you know in your perfect world what what is adam then both in terms of like how it works and then also its place in the programming community i mean are you going for utter world domination what's your goals i mean i i'm not utter world domination really doesn't matter to me like if people are happy
Starting point is 01:05:56 using whatever they use then like i'm happy for them and as a programmer i would never want to like yeah whatever it's fine use what works So world domination doesn't matter. But in terms of, I mean, my goal with Atom has always been to build the editor that I want to use for the rest of my career. And until it is that definitively, like I'm not going to stop. And honestly, that is going to probably take another five years, at least. So I mean, one big dream is an IDE, but not like feel like a text editor, but have the same kind of power as an IDE, but then also be democratized that experience. So, you know, use a simple JavaScript DSL to define the grammar for some newcomer language. And you've got really awesome facilities that are the foundation for doing refactoring or further semantic analysis, et cetera. So definitely moving into those kinds of language aware capabilities. That's one pillar
Starting point is 01:06:52 of it. And then the other pillar is never having to leave Adam to kind of do your day-to-day work in programming land, at least. So I don't know if everybody at GitHub, I haven't asked, but agrees with me on this, but I would like Adam to almost feel if you wanted it, if you kind of opted into that layer to kind of feel collaborative, like it feels like an extension of the GitHub experience, if that makes sense. So that, you know, a collaborative development environment is kind of my thought, like an environment for developing that inherently acknowledges that there are multiple people working on whatever you're doing at the same time with you and exposes valuable information about what's going on and puts you in touch with those people at appropriate times, keeps you away from that information when it would be distracting as you brought up. But yeah, what does that look like? And that's a little hand wavy right now.
Starting point is 01:07:46 Like, I think we're just starting to explore that. But yeah, social coding in your editor is another big vision. And then, of course, fast, snappy and lightweight. And of course, real time collaboration. So that's part of that big vision is, yeah, basically like, I mean, the vision I've always had is like, I love pair programming at Pivotal, like just hanging out all day, two keyboards, two mice and one monitor working with somebody. And I think it's a really powerful paradigm and it would be great to sort of enable an
Starting point is 01:08:20 online version of that. What's the next step for someone listening to this? That's like, yeah, I can actually hack in this area. I want to get involved with this project. Is it a GitHub thing? Is it an open thing to the community? How I know you've got the, what is called again? It's the flight documentation.
Starting point is 01:08:40 Flight manual. Yeah. I mean, I think that's great, but I mean, that's a great way to get involved, like learn about things around Adam. But what other ways do you provide inroads to, you know, provide onboarding contributors and. So the idea is that as much as possible, we really want to, like, anybody that wants to make something possible in their text editor, that they can do it basically via Atom's APIs. So we have thousands of packages that are published right now. And a lot of the core features in Atom, like the tree browser, the tabs, find and replace,
Starting point is 01:09:23 the thing that brings up like the most recently changed files the command t basically like the file search all these things are implemented as packages so great way to get involved is you know implement a better one of those or implement some new piece facility and like you don't need anybody's permission no one has submerged your pull request i mean you can publish that tomorrow and people can start using it and getting value out of it. So that's one layer, like the least friction layer of collaboration.
Starting point is 01:09:54 And then the next one would be, yeah, opening a pull request on either Atom Core or one of our like hundreds of different repositories that comprise the finished system when it's all combined together. So all the different features are pulled out into their own packages, et cetera. I mean, I think we're getting better,
Starting point is 01:10:10 but historically, there's not that many of us and there are a lot of people that want to get code merged. And so the problem sometimes with that is just pull requests. We're just inundated and we don't have time to make forward progress on the core of the system and review every single PR and merge it in a timely manner. Just why,
Starting point is 01:10:28 like if a package is bugging you, like work it, maybe we'll just adopt the entire replacement that you create wholesale. Like we maintained a package of Vim mode and somebody forked it and made them mode plus. And now I think in the read me, we just link everybody there and auto complete, same thing.
Starting point is 01:10:44 Auto complete plus auto complete was junk and someone replaced it. And now it's in the readme, we just link everybody there. And autocomplete, same thing. Autocomplete plus autocomplete was junk and someone replaced it. And now it's part of core. So I think in general, as an open source model, like that kind of modularity approach is ideal because it means people can do whatever they want to do. I mean, all the way up to Facebook, that's built basically an entire IDE in the form of Nuclide on top of Atom. And I use it, like when we're writing the C++ code of late, I use the Nuclide debugger. It's really great. It connects to LLDB, gives me a graphical view of it. They've got a diagnostic system to relay like linting reports. They got their own tree view. They completely replaced Atom's tree view with their own thing. They've got their own command T that has like all kinds
Starting point is 01:11:29 of cool features. And we're talking to them about upstreaming some of this stuff. But obviously they have the priority of like serving Facebook as an organization, building their ID tooling and upstreaming is part of that. But they have a lot of other things to do. But anyway, that's an example of like how far you can take it if you want to i've heard go plus i haven't actually used it because i haven't written go um but that gets really great reviews in terms of facilities that it extends adam with so to me that's the best place to start is like build a package but there is that thing like if there's a particular missing feature or piece of adam that's driving you bonkers like i mean we merge pull requests quite a few constantly but there's just always more
Starting point is 01:12:09 created than we managed to merge well if you're listening to this if you haven't been there yet adam.io a lot of good information there i love the the video too we didn't even cover the video but we're a little late on time to go deep into that. Just going back into that whole 50s nostalgic advertising. I love the creativeness that you all have on the GitHub team to do the new branding around. You've done stuff on Atom and Universe and Satellite. I think it certainly fits the bill, so to speak. Thank you. Yeah. Well, thank you so much for coming on the show, Nathan. It's been a pleasure talking to you. I know that it's been a long road and we don't blame you for the timing
Starting point is 01:12:46 as we've said a couple of times during the show. You have had a hard job to do what you've done. You led a great team and you've done something really awesome. So we look forward to the future of Adam along with you.
Starting point is 01:12:55 Thanks for coming on the show, man. Thank you so much. All right, that wraps up this episode of The Change Log. Special thanks to our sponsors, Linode, Hired, and Compose. Also, thanks to our sponsors linode hired and compose also thanks to fastly our bandwidth partner thanks to jonathan youngblood for his editing skills on the show great master cylinder for the awesome beats if you're excited about our new show
Starting point is 01:13:16 js party head to changelog.com slash js party the first few episodes are out there on the feed introducing our hosts subscribe on on iTunes, Overcast, and on Android. Thanks for listening.

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