
Microsoft Open Source with Kim-Adeline Miguel
Kim-Adeline Miguel discusses her work on VS Code's Python extension, bringing TypeScript to Redwood, and the evolving landscape of JavaScript tooling.
Episode Description
Kim-Adeline Miguel discusses her work on VS Code's Python extension, bringing TypeScript to Redwood, and the evolving landscape of JavaScript tooling.
Episode Summary
In this episode of the Full Stack Jamstack podcast, Kim-Adeline Miguel, a software engineer at Microsoft working on the Python extension for VS Code, shares her journey into programming and open source. She describes how a practical decision to study computer science in France led to a career spanning Denmark, Canada, and eventually Microsoft in Vancouver. Kim explains how she found the Redwood project through CascadiaJS and volunteered to help introduce TypeScript to the codebase, kicking off an iterative community effort. The conversation moves into her day-to-day work on the VS Code Python extension, where a small team triages GitHub issues, manages weekly sprints, and builds features like IntelliSense, debugging, and test running—all written in TypeScript that interfaces with Python tools. A substantial portion of the episode explores TypeScript's growing dominance over alternatives like Flow, with all three hosts debating when to use strict types versus inference, how readability should guide typing decisions, and the blurry line between interfaces and type aliases. The discussion also touches on Azure's entry into the Jamstack space with Static Web Apps, WebAssembly's potential, and Christopher's recurring enthusiasm for React Native on every platform imaginable.
Chapters
00:00:00 - Meet Kim-Adeline Miguel
Kim-Adeline introduces herself as a software engineer at Microsoft, where she works on the Python extension for VS Code. She recounts her contributions to Redwood, primarily introducing TypeScript to the project and experimenting with Azure PostgreSQL integration, while joking about spending recent months watching Redwood's rapid evolution from the sidelines.
The conversation turns to Kim's origin story in programming, which began with Visual Basic classes in high school and solidified through a French engineering school where computer science was simply the subject she performed best in. After earning her master's in software engineering, she worked in Denmark before relocating to Vancouver, following a pragmatic career path rather than a childhood passion for coding.
00:04:41 - Finding Redwood Through TypeScript
Kim shares the story of how she discovered Redwood while searching for conferences to speak at in 2020. After joining the CascadiaJS Slack, she spotted a tweet from the Redwood team seeking TypeScript contributors and volunteered despite having no familiarity with the project itself. Weeks later, the team followed up, and she found herself committed to writing the initial TypeScript types for the codebase.
Christopher adds context about how the TypeScript effort became a relay of community contributions—Kim wrote the first types, Christopher handled the next batch, and later contributors picked up the remaining work. This illustrates Redwood's collaborative ethos, where partial contributions are valued and iterative progress is the norm rather than expecting any single person to complete a massive task alone.
00:07:25 - Working on VS Code's Python Extension
Kim describes her role on the Python extension team within Microsoft's developer division, explaining that it's a small group of four or five people managing a constant flow of GitHub issues alongside feature development in one-week sprints. She encourages users to upvote issues to help the team prioritize, and outlines the extension's key capabilities including IntelliSense, debugging, test running, and linting.
The hosts then riff on the difference between job titles like engineer, programmer, and developer, with Kim noting how Microsoft normalizes everything under "software engineer" with numbered levels. Christopher jokes about calling himself a "web wizard," which leads to a fun tangent about the historical origins of terms like wizard and webmaster in early internet culture, from Netscape developers to MIT hackers.
00:12:05 - VS Code Architecture and Python Tooling
Christopher asks how the Python extension actually works within VS Code's Electron-based architecture. Kim explains that since VS Code is built on TypeScript compiled to JavaScript, all extensions must also be written in TypeScript, which then interfaces with native Python tools installed on the user's system. The extension communicates with a language server and integrates a debugger shared with Visual Studio.
This naturally leads into a brief tangent on WebAssembly, with Anthony explaining how it allows languages like C++ or Rust to compile down to code that runs in the browser. The discussion highlights the evolving boundary between languages and platforms, setting up the later conversation about Azure and the Jamstack ecosystem's growing reach.
00:14:24 - Azure, Jamstack, and Database Adventures
The hosts discuss Azure's positioning in the Jamstack landscape, with Kim highlighting Azure Static Web Apps as a new offering that combines serverless functions with frontend hosting. Anthony draws comparisons to Netlify and Vercel, noting that Azure's enterprise client base gives it a unique angle as major cloud providers increasingly embrace Jamstack principles.
Kim then recounts her experience setting up an Azure PostgreSQL database for Redwood, admitting that as a frontend-oriented developer, the database configuration was the most challenging part—not because of Redwood's integration, which was seamless, but because of her own unfamiliarity with database administration. The hosts bond over the universal developer experience of dreading database setup, doing it once, and hoping never to repeat it.
00:20:04 - The Rise and Reign of TypeScript
The conversation shifts to why TypeScript has become so dominant in the JavaScript ecosystem. All three hosts agree that the developer experience benefits—autocomplete, IntelliSense, and type safety—are the primary drivers. Kim notes that TypeScript's resemblance to C# makes sense given its creator also worked on that language, and she admits she can no longer comfortably return to untyped JavaScript.
The discussion gets more nuanced as they debate strict typing versus compiler inference, with Kim arguing that readability should take priority over exhaustive type annotations, especially in open source projects where community contributors need to understand the code. Christopher raises the practical question of who should write types for JavaScript libraries, acknowledging the ecosystem is in a gray area between maintainer responsibility and community-driven DefinitelyTyped contributions.
00:28:52 - TypeScript Across Frameworks and Flow's Decline
Anthony brings up how TypeScript adoption varies across frameworks, noting that Angular baked in TypeScript from its 2.0 rewrite while the React community long relied on Facebook's Flow and PropTypes as alternatives. Kim observes that TypeScript eventually overtook Flow, and Christopher attributes this to a momentum effect—once most of a project's imports are typed, developers naturally gravitate toward adopting TypeScript themselves.
The hosts also touch on the subtle differences between interfaces and types in TypeScript, a perennial source of confusion. Anthony connects interfaces to object-oriented concepts from Java, while Christopher and Kim acknowledge that despite their similarities, interfaces offer extensibility that types don't, making the choice between them a recurring topic of debate in the TypeScript community.
00:31:04 - WebAssembly, React Native, and Closing Thoughts
Kim shares her interest in WebAssembly as a potential way to speed up the VS Code Python extension, while Anthony highlights existing WebAssembly projects like Blazor and Figma. Christopher steers the conversation toward his signature topic—React Native—advocating for JavaScript controlling everything from mobile apps to desktop applications, including Microsoft's own React Native Windows efforts.
The episode wraps with lighthearted banter about React Native Web, Windows apps, and Minecraft editions before Kim shares where listeners can find her on Twitter, GitHub, and the Redwood community. The final moments feature an off-topic conversation about the famous Xbox Series X fridge meme, capping off a relaxed and wide-ranging discussion about the modern web development landscape.
Transcript
00:00:00 - Kim-Adeline Miguel
Did you dream of JavaScript-like world domination in JavaScript?
00:00:14 - Anthony Campolo
Why don't you introduce yourself? Welcome to the Full Stack Jamstack podcast, Kim. We're happy to have you.
00:00:20 - Kim-Adeline Miguel
Hi. Thank you for having me. What do you want to know?
00:00:25 - Anthony Campolo
Just tell us a little bit about yourself. Like, who are you? What do you do? Anything like that?
00:00:29 - Kim-Adeline Miguel
I am Kim-Adeline Miguel. I am a software engineer at Microsoft. I work on the Python extension for VS Code.
In terms of Redwood, I was active mostly a couple of months ago. A lifetime ago on the Redwood timescale. I mostly introduced TypeScript to the codebase, and I also did a little bit of tinkering with the Azure PostgreSQL database.
Recently, I've mostly been watching everybody play around with Redwood. A lot of watching Redwood, watching Brexit, watching the US elections. Just sitting there and being like, what is going on?
00:01:06 - Anthony Campolo
And you did give a talk about Redwood fairly recently, so you have contributed something.
00:01:10 - Kim-Adeline Miguel
That's true. I gave a talk. It was on Twitch. The recording is not online anymore. I did write to them saying, hey, you said you would put it on YouTube. And they were like, yeah, we need to edit them, so it'll get there maybe one day.
00:01:23 - Anthony Campolo
Yeah, it can take a while.
00:01:24 - Kim-Adeline Miguel
It did happen.
00:01:26 - Anthony Campolo
Cool. So you touched on a lot of the things that I want to get into in this episode. But before we dive into all that stuff, I'd like to just get people's history, how they got into programming, what kind of sparked their original passion in this. So, when was the first time you were exposed to programming?
00:01:43 - Kim-Adeline Miguel
The first time I programmed was in high school. I think it was ninth or 10th grade. There was some kind of optional module where we would do Visual Basic for two hours every other Friday. It was fun. It was all right.
But what actually brought me where I am today was that computer science was the subject I sucked less at in university. I went to an engineering school where you could learn mechanical engineering, chemistry, or bioengineering, or urban planning and computer science. Computer science was the subject I was best at, so I was like, you know what? I'm just going to do that. And also, you earn a lot of money and it's easy to find a job, so it was a very practical decision.
Five years later, I got my master's degree in software engineering. Since then, I've been working as a software engineer. Very traditional path.
00:02:37 - Christopher Burns
Good old Canadia.
00:02:39 - Kim-Adeline Miguel
Oh, so for that—
00:02:41 - Christopher Burns
Was in Canadia.
00:02:42 - Kim-Adeline Miguel
Canadia. So I got my master's degree from a French university. I am French, and then I worked in Denmark for three years. Then I moved to Canada four years ago, something like that. And I've been working in Vancouver ever since.
00:02:56 - Christopher Burns
The better side of Canada?
00:02:59 - Kim-Adeline Miguel
Yeah. West coast, rain coast.
00:03:01 - Anthony Campolo
Cool. So when you're programming in college, what kind of languages were you working with?
00:03:05 - Kim-Adeline Miguel
So we did a little bit of Pascal. Is that how you pronounce it?
00:03:09 - Christopher Burns
Pascal.
00:03:10 - Kim-Adeline Miguel
Pascal. Yeah. I think we did C++ as well. That was the first time I touched Subversion. I still don't know how it works. My first foray into source control, it was like, I don't know what is going on. Seems to be a recurring theme today.
We did a little bit of web development like HTML, CSS, JavaScript, of course. I also did some Lisp, something like that, and some Java. I am glad I haven't touched Java in a while.
00:03:34 - Anthony Campolo
Well, that's cool. It sounds like you got exposed to a really wide range of different languages. That's especially cool that you did web development stuff, because that's something that I feel like I don't usually hear people who study in college say that they cover in the curriculum.
00:03:48 - Christopher Burns
I think it depends. I learned almost identical languages in university in the UK. Instead of Pascal, I learned Haskell. I don't know if they're similar, but I don't know.
00:04:02 - Anthony Campolo
That would have been more similar to Lisp than Pascal.
00:04:05 - Christopher Burns
There you go. I totally get what you mean about C++, C, and C#. They're just not my languages.
00:04:12 - Kim-Adeline Miguel
I didn't like the low-level part of it, the memory management part of it. Memory management? Don't talk to me. Pointers? Don't talk to me either.
00:04:19 - Christopher Burns
What about O notation?
00:04:21 - Kim-Adeline Miguel
And these are the concepts we learned in second or third year of university, right? And these are the only things that matter if you want to work at a big company. And even then, they don't really matter because, well, I'm here today at Microsoft.
00:04:33 - Christopher Burns
You learn about O notation just enough that you can formulate the question on Stack Overflow.
00:04:41 - Anthony Campolo
Exactly. How did you find your way to Redwood? Did you hear about it on a podcast or see a blog post about it? What was your first exposure to that?
00:04:50 - Kim-Adeline Miguel
So my first exposure to Redwood was the long way, or I can give an abridged way.
00:04:55 - Anthony Campolo
You can give the long way. Podcasts are for the long way.
00:04:57 - Kim-Adeline Miguel
Yay! Okay, I get to talk. So I was looking for conferences to speak at this year, because before 2020 happened, in 2019 I was like, okay, next year I want to do public speaking. So I'm going to look for conferences. What can I talk about?
I can talk about JavaScript and TypeScript because that's what I work on daily. I can talk about Python because it's also something I work on regularly. So I found CascadiaJS, which is a JavaScript conference in the Pacific Northwest. So I'm like, cool. I'm going to take a look at it, join their Slack workspace, and see what's going on.
One day they retweeted Redwood. It was probably David behind the scenes there asking for contributors to their TypeScript efforts. So I was like, oh yeah, TypeScript. I know what's going on. I can probably do something. And so I was like, okay, I need to create a Discourse account.
[00:05:52] And I'm like, hello, I'm new, but I can help with TypeScript. I have no idea what you're doing, but I can help with that. It would probably also give me some good practice. And everybody was like, cool, we'll get back to you whenever we need help. And I was like, that's fine. I tried anyway. And so I moved on.
A couple of weeks later, they pinged all the people who said they could help, like, hey, we're ready for TypeScript now. Oh, so they actually did not forget. So now I actually have to commit. Okay. I was like, okay, fine. I said I would help, so I actually will help.
That's where I first contributed to Redwood, introducing the TypeScript types and then adding a few things here and there, staying not too far from Redwood, speaking at community meetups, and also playing around with Redwood and Azure, because there wasn't a lot of Azure integration at that point.
[00:06:46] And just, yeah, being there.
00:06:48 - Christopher Burns
With my journey to Redwood, you wrote the initial types, and then I wrote the other types that hadn't been typed. Then I left all the hard ones for the next person to come along and just finish the situation.
The point of this is it's iterative. You don't have to do everything. You can just do what you can, and that is enough. Kim did the first, I did the middle, and I think Pete has done the rest of them in some of the forms now.
Yeah, types are magical because you can just leave them as any or unknown if you don't know.
00:07:23 - Kim-Adeline Miguel
Very forgiving.
00:07:25 - Anthony Campolo
Talking about TypeScript, this kind of segues into you work for Microsoft, and you said you're on the Python VS Code extension. Sounds like a pretty cool project to be on. So can you talk a little bit about what your day-to-day is like, what kind of stuff you're working on?
00:07:39 - Kim-Adeline Miguel
I'm not on the VS Code core team, so I'm part of the developer division, which works on developer tools. That includes Visual Studio, VS Code, among other things, and also TypeScript, the language itself, and other tools as well.
We are a team of four or five people working on the extension: a couple of developers and a project, product, or program manager (PM). First, we start the day with standup and we triage issues every day. Every day we triage issues on GitHub because we have users who come to us via the VS Code issue reporting system. They also open issues directly on GitHub. And sometimes we also have internal issues as well. So there's a lot of external presence that we have to manage.
Our sprints are one week long. It's all a balance between fixing existing issues, adding improvements and enhancements depending on what users want and prioritize. If any users of the Python extension in VS Code are listening, please go upvote the features and issues you would like to be resolved faster because the community helps us prioritize what we should work on.
[00:08:46] And then because I'm an engineer, I write code, do my little coding things. That's pretty much it. Sometimes we have meetings as well at Microsoft.
00:08:56 - Christopher Burns
What's the difference between an engineer and a programmer?
00:09:00 - Kim-Adeline Miguel
I haven't seen any programmers.
00:09:02 - Christopher Burns
Am I an engineer? Am I a programmer, or am I both?
00:09:05 - Kim-Adeline Miguel
I mean, I wanted to say I'm a code monkey, but maybe that's a bit disparaging to all people who write code.
When you get hired, your titles are somewhat normalized. There is a hierarchy between all the titles, right? So when you start writing code, then you're a software engineer no matter where you are.
So I feel that if you're a programmer, you might be like a consultant, maybe being sent away to work on clients' projects, I don't know. But I know that the people who write code are software engineers. They're software engineers, and they're software engineer II. And they're senior. Then there's principal. Then there's the people who you never see because they're way too high up in the hierarchy and stuff like that.
00:09:44 - Christopher Burns
Some companies would say, oh, all of our programmers are programmers, and then other companies will say, like, they're all engineers, but they never define if it's the same role because you could literally look at two different job adverts. They're asking for all the same thing. But one company says you're an engineer and the other company says you're a programmer or a ninja.
00:10:05 - Kim-Adeline Miguel
You're a rock star.
00:10:07 - Anthony Campolo
What if you're a developer?
00:10:08 - Kim-Adeline Miguel
Yeah, I guess developer is the more appropriate word. But yeah, I guess all titles, as I've seen so far, are software engineers. Then you can be like, I'm an engineer, look at me, I engineer things.
00:10:20 - Christopher Burns
I like to go with the term web wizard, more original.
00:10:24 - Kim-Adeline Miguel
Is it like Clippy but for web?
00:10:26 - Christopher Burns
Do you know about, Anthony, why wizards exist in the web world?
00:10:30 - Anthony Campolo
Are we talking about, like, wizards as an old school hacker kind of term?
00:10:34 - Christopher Burns
When it was, like, Netscape, the developers were called wizards by default. The term "web wizards" was what they were called, the people who would program websites, really. That could totally be fictional. Off the top of my head, that's what I remember.
00:10:50 - Anthony Campolo
The book about the history of the web is called Where Wizards Stay Up Late. Wizards was just a term that people used to use for, like, it was kind of like hackers. So there's a lot of nomenclature around this stuff going back to the 50s and 60s that kind of was based around MIT and stuff like that. I think that's where wizard came from.
00:11:07 - Christopher Burns
There you go. Maybe there's a source of truth to what I just said.
00:11:11 - Kim-Adeline Miguel
Really? I thought it was from the installation wizard window. You know, the very first thing back in the day when you tried to install software, it was called a wizard. That would take you through all the steps for installing software.
00:11:25 - Anthony Campolo
They still use that term, like a wizard for a kind of GUI way to set something up. Yeah, that's still a common term.
00:11:32 - Kim-Adeline Miguel
Yeah. I thought it came from that.
00:11:34 - Christopher Burns
Something in my mind says it's like, or is it a webmaster, not a wizard? Yeah. Maybe it's webmaster.
00:11:40 - Kim-Adeline Miguel
Yeah. Webmaster. Yeah.
00:11:42 - Anthony Campolo
Webmaster is definitely a term. Yeah.
00:11:44 - Kim-Adeline Miguel
It's okay. That's how legends are born. You can't rewrite history now. You can say you're a web wizard.
00:11:51 - Christopher Burns
I would love to say that I'm a web wizard. Just put that as my LinkedIn title. I'll magic away all your problems for money.
00:12:00 - Anthony Campolo
There's nothing stopping you. You can make your title whatever you want it to be.
00:12:03 - Kim-Adeline Miguel
Yeah, exactly.
00:12:05 - Christopher Burns
One of the interesting things: you work on one of the VS Code teams. So you are writing JavaScript to compile Python, or is it just for an IntelliSense system?
00:12:19 - Kim-Adeline Miguel
So VS Code is an Electron app. It's written in TypeScript, which is then compiled into JavaScript. So for any extension to work in it, it has to be written in JavaScript or TypeScript. That's why the Python extension, the C++ extension, the Docker extension, all the extensions are written in TypeScript.
We integrate with Python tools. We execute some tools for the user, like linting and IntelliSense. We have a language server running as well that can provide completion, IntelliSense, and other helpers when you write your code.
We also have a test runner that can discover and run your unit tests. We have an integrated debugger, which is actually the same as the debugger for the Python tools in Visual Studio, where you can debug your code, set breakpoints, add conditions, what have you. You can debug a process running independently of VS Code and stuff like that.
We can run Python files as well. So it's mostly interfacing between VS Code and Python tools.
[00:13:23] You'd say it's written in TypeScript.
00:13:25 - Christopher Burns
Python tools is obviously written in Python.
00:13:27 - Kim-Adeline Miguel
Yes.
00:13:28 - Christopher Burns
So it's JavaScript communicating with Python that's installed onto the system.
00:13:32 - Kim-Adeline Miguel
Yes.
00:13:33 - Christopher Burns
Not that the Python code is being interpreted in JavaScript and then outputting JavaScript to understand it.
00:13:42 - Kim-Adeline Miguel
No.
00:13:42 - Anthony Campolo
Yeah, that would be like WebAssembly.
00:13:44 - Christopher Burns
I don't even know what WebAssembly is.
00:13:47 - Anthony Campolo
Basically everything can compile down to JavaScript because it's like a bytecode that compiles to JavaScript. So you could write Python or any language you want, and it would compile down to WebAssembly, which is essentially compiling down to JavaScript.
00:14:01 - Christopher Burns
I don't even know how that would run on the internet.
00:14:04 - Anthony Campolo
You don't have to worry about it. It's not up to you.
So yeah, WebAssembly is interesting, but let's bring it back to your work at Microsoft. You were also saying that there wasn't a lot of Azure integrations with Redwood. I was kind of curious, just more broadly, how you see Azure fitting into this whole Jamstack kind of world.
00:14:24 - Kim-Adeline Miguel
I feel that Azure right now is a very traditional cloud provider, kind of like AWS. It provides databases and other ways for you to store stuff, but it's starting to pick up in terms of Jamstack. One of their new offerings is Azure Static Web Apps.
It basically allows you to deploy from your Git repo, and in the cloud it offers you not only serverless functions, but also a way to host and scale your frontend, which in a nutshell, in broad strokes, is what the Jamstack is, I think.
00:15:04 - Anthony Campolo
Yeah, it sounds like it's a service that is meant to be similar to what you would get from something like a Netlify or Vercel, in terms of a really easy way to get your frontend up on the internet. You don't have to worry about deployment and all that stuff is done for you. Yeah, that's really great.
I haven't tried it yet, but it's definitely something I'm interested in because I think it's interesting how Azure, they're in a position where they have a lot of clients from Microsoft, so they're kind of in the enterprise space. I feel like everyone's looking towards this Jamstack space and seeing who's trying to suss it out.
00:15:40 - Kim-Adeline Miguel
Yeah, definitely.
00:15:41 - Anthony Campolo
It's kind of interesting to see the big players and how they're coming at it.
00:15:45 - Kim-Adeline Miguel
Yeah. I don't know if AWS or GCP have something similar. They probably do because everybody has the same things over and over anyway, but it's really interesting that Jamstack is not forgotten, right? They're getting to it. Maybe not as fast or as readily as Netlify, Vercel, or other Jamstack providers, but they're getting there.
00:16:07 - Anthony Campolo
Yeah, it's like how Angular eventually made a static site generator. Scully just took them a while.
00:16:12 - Christopher Burns
I just really wanted to say a controversial joke, but I won't say it.
00:16:17 - Kim-Adeline Miguel
You can't say that and not say it.
00:16:19 - Christopher Burns
I know, but it's really bad because it's like tinfoil hat. I've not had my COVID vaccine yet, so I wouldn't know to look at it yet.
00:16:29 - Kim-Adeline Miguel
I don't get it.
00:16:30 - Anthony Campolo
Yeah, I'll get it.
00:16:31 - Christopher Burns
All the anti-vaxxers in the UK think Bill Gates is putting chips in the vaccines.
00:16:37 - Anthony Campolo
Uh oh. That's funny. This is a long-standing thing. Actually, I remember a dude when I was on tour like four or five years ago trying to tell me this. This was back when the Ebola virus was going around or something. He was trying to tell me that it was all a Bill Gates plot.
00:16:54 - Christopher Burns
I was like, what? The biggest thing going around in the UK is like, oh, it's all Bill Gates. You know, he's putting chips in you. But Elon Musk is literally drilling holes in brains and attaching something to the brain. But I don't know, it's just a joke.
00:17:10 - Kim-Adeline Miguel
Yeah, something about 5G towers as well.
00:17:14 - Anthony Campolo
Going along with the Azure line, you did the integration with Postgres DB. I'm always really interested in database stuff, so I think this is cool because Redwood was kind of architected around Postgres anyway. The tutorial has you do Heroku Postgres. So I'm curious, hosting it on Azure, they're both Postgres, so I would assume they would be similar, but you never know with this kind of stuff. How hard or easy was this integration?
00:17:43 - Kim-Adeline Miguel
I think it was rather easy. I guess I have to preface that with the fact that I am not a database-managing person. I have no idea what it does. I'm much more comfortable doing frontend. So this was also a way for me to learn how to set up a database, right? And as you said, since it's also Postgres, I found myself thinking, okay, this might be an introduction to setting up a database.
It wasn't so difficult. The most difficult part was knowing which settings do what. Of course, if you know how databases work, then it's like a walk in the park. If you're like me and you're like, what does this button do? I need help. Then it's going to take a little bit of time.
What took the longest was actually writing the article and taking nice screenshots. It was all done in a couple of hours, and it would have been so much faster if I knew what I was doing.
[00:18:35] But it was really pretty seamless, like both setting up the database and then plugging Redwood into it. The process is basically the same as what is outlined in the tutorial, which is very well written and very thorough. So there were really not many hurdles, except for the ones I set up myself. Really selling my skills here.
00:18:58 - Anthony Campolo
You got up and running. Anyone who has messed with database stuff, they know the struggles.
00:19:04 - Kim-Adeline Miguel
Yeah.
00:19:05 - Anthony Campolo
It was funny that just yesterday they had the whole server-side React thing dropped, which is a huge deal.
00:19:11 - Kim-Adeline Miguel
Yeah.
00:19:12 - Anthony Campolo
Swix was doing a live stream and he was like, how do I get Postgres set up?
00:19:17 - Kim-Adeline Miguel
Yeah.
00:19:18 - Anthony Campolo
Shawn Grove was on the live stream, giving him step-by-step instructions. It's true. The stuff isn't simple. And the database layer is so crucial and so consequential that people, I feel like they kind of shy away from it because they're like, I don't want to touch the database, you know, because that's where you could break something.
00:19:37 - Kim-Adeline Miguel
Yeah.
00:19:37 - Anthony Campolo
Like you said, you just have to get in there and poke stuff, and eventually you figure it out.
00:19:42 - Kim-Adeline Miguel
It's also a lot of set it and forget it. So you dread doing it, you do it, you cry a little bit, and you're like, okay, I never have to do this ever again. And the day you have to do this again, you're like, oh no, this is happening again.
00:19:57 - Anthony Campolo
When you have to write hundreds of lines of Webpack config and you're just like, don't want to do this.
00:20:03 - Kim-Adeline Miguel
Yeah.
00:20:04 - Anthony Campolo
We've talked a little bit about TypeScript and how that was kind of your foot into Redwood. I think it's definitely a great way to get in for people who know TypeScript, because the team is definitely not a TypeScript crowd, and they're kind of learning with everyone else.
I'm curious, just your opinion on why you think TypeScript is such a big deal right now in JavaScript.
00:20:26 - Kim-Adeline Miguel
That's a very good question. I cannot speak on behalf of the JavaScript community. So actually I would like to hear both of your points of view before I get to answer. Maybe I'll steal some of them.
00:20:36 - Anthony Campolo
We've talked about it on the show quite a few times. For us, it's the developer tooling that comes along with it: the autocomplete, the IntelliSense, the documentation. You get a lot of really nice stuff for when you're actually developing with it. I'm sure Chris probably has more stuff than that.
00:20:54 - Christopher Burns
I would agree that the Redwood team is very type-unknown. See, this is TypeScript. It's easy to work out what something is. Is it a string? Is it a bool? And I think IntelliSense and documentation and types can be really helpful in terms of DX experience.
It also is super helpful. You define something as a number and it's never going to swap to something else. Or you define something as a string and it stays as a string. The thing that always gets me is when there's a boolean as a string, but it could also be unknown. So you have a string that's unknown that has a boolean value. How do you work that out? Are you literally then going to be doing an if statement in a string, i.e., is this true or false? It gets really complicated sometimes.
A lot of the time we forget how JavaScript is because I work so much on TypeScript projects that when I actually start touching normal JavaScript, I feel like half my toolset is missing.
[00:22:18] This is the hard thing. While we had multiple type systems like Flow and TypeScript, everybody's now just going one way and that way is TypeScript. But Microsoft has built a very good community and it's very open.
But then it comes down to the thing: who should write the types if it's not written in TypeScript? Is it the maintainers' responsibility to write the types, or is it the community's? We're currently in this very gray area. There's this whole type repo that sometimes you add a type and it works, and other times it doesn't. And what happens if it doesn't work? Then it's module any.
00:23:04 - Kim-Adeline Miguel
Yeah.
00:23:05 - Christopher Burns
So you don't deal with the types. I feel the hardcore TypeScript people, I guess I kind of sit in there, are like everything should be typed as far as possible. But sometimes it's also good to slowly work into it. You may say just the props would be typed at the beginning of a component, and then you slowly add types into where the props come from.
So from there, it's like, where does TypeScript help the most? I would say with the shenanigans of JavaScript.
00:23:40 - Kim-Adeline Miguel
Yeah, definitely. So I guess I have an opinion that's similar to both of you. Look at that.
I feel that TypeScript really helps straighten out what you should expect from your code. As you said, a boolean as a string or something that can be undefined or null, or maybe a string, or maybe an empty string. What am I dealing with right now? Do I need five if conditions? It's really helped a lot.
When I started using TypeScript in the beginning, I was like, why does this look like C#? Then it turns out because the person who created it also worked on C#, right? So it makes sense.
Now that I'm used to types, I cannot go back to the wilderness of JavaScript and having everything all over the place and having to double-check every single thing. But yeah, if you have types that are incorrect, they're useless, then you might as well put any everywhere.
00:24:29 - Christopher Burns
But any is a good way to get started.
00:24:32 - Kim-Adeline Miguel
It's a good way. But you basically, it's just JavaScript at this time. You don't have the safety net of using TypeScript. You're just adding types for the sake of it. You change the extension of your file from JS to TS and you put any everywhere, and then call it a day. It wouldn't be TypeScript.
And then, yeah, you said some people like typing everything all the way. I feel that it might be too restrictive. I personally like relying on the compiler inferring things itself. This way, you know, if the assumptions you made when you typed the first things are actually correct, if the compiler can understand your types, it means that you typed it well.
If you're forcing types all over the place, then I feel there's something missing in your logic.
00:25:16 - Christopher Burns
Just to give an example of it being inferred and strict would be that you're going to create a new variable, but you just leave it as, you don't add a type. But then where it comes from, the data it's being made from is already an int. For example, the compiler will go, I got data from an int, so this is going to be an int.
But you can say, no, this is a string. It will then, when compiled, say, now I'm going to convert these ints that come in into a string. So you can leave more things to be inferred. And that's why I think using types and interfaces in the props normally works really well to start trickling things down.
00:26:07 - Kim-Adeline Miguel
Yeah, definitely that works.
00:26:10 - Christopher Burns
One of the questions that I have is if you say TypeScript is this Goliath that I think it is, and then we say, how much knowledge do you have of TypeScript and all the things it can do? I would literally place myself five out of ten. I know it can do so much more than just the basics of typing. It can obviously do unions and so much more.
00:26:39 - Kim-Adeline Miguel
Yeah.
00:26:39 - Christopher Burns
Do you find you go out to look on how to learn to do those types, or when you have a problem that needs solving, then you look for that solution in TypeScript?
00:26:51 - Kim-Adeline Miguel
Looking for a solution in TypeScript from the get-go, or looking to solve the problem and then adding types?
00:26:57 - Christopher Burns
For example, you could put an interface and then you could put angle brackets with, like, T and an arrow. That's passing props into that type, the same kind of thing. They're more complex than just the standard typing in an interface.
00:27:15 - Kim-Adeline Miguel
I will usually try to solve the problems using basic types first, like an interface or some type that declares a union or something. The more complex types and more complex operations using TypeScript, sure, they're more powerful, but they're also a little bit less readable.
At least in the Python extension for VS Code, since it's an open source extension, we also need to be mindful of the community looking at our code and wanting to contribute, wanting to help write code. So sure, I could probably use obscure types and flex my TypeScript mastery. I'd say I'm at like five, five and a half out of ten as well. Like, there's so much you can do. But I feel that readability is more important, at least again in the work that I'm doing. We don't need powerful types. We don't need super complicated interfaces or other complicated types.
00:28:10 - Christopher Burns
You just get lost.
00:28:12 - Kim-Adeline Miguel
Yeah, exactly. And then it's just like a mix of T, U, and V and you're like, what is going on in there? It's been a while since I said, what's going on in there?
00:28:18 - Christopher Burns
My favorite one is like, which one should you use, interfaces or types? They're both the same thing. Or are they?
00:28:26 - Kim-Adeline Miguel
I actually looked this up every so often. There are some finer points to it.
00:28:32 - Christopher Burns
Interfaces can be extended when types can't be.
00:28:36 - Anthony Campolo
Yeah, because I think of an interface as being something object-oriented because interfaces you have in Java. So when I learned a little bit of Java, I learned interfaces and abstract classes. So that's why I kind of think of that more as an object-oriented thing and not so much a type thing.
00:28:52 - Christopher Burns
Have you written much TypeScript, Anthony?
00:28:54 - Anthony Campolo
Not a ton. I've played with it a little bit and, like I said, I learned a little bit of Java. So the concepts from typing Java carry over to a certain extent, but it's not exactly the same.
00:29:06 - Christopher Burns
The other thing with TypeScript is it's so varied. You would almost say that React TypeScript is its own subsection of TypeScript. You could write TypeScript in Angular, and I think that's completely different to how they lay out their files.
00:29:24 - Anthony Campolo
And when they transitioned to Angular 2, which is now just known as Angular, TypeScript was essentially baked in. So everyone who has been using Angular has been using TypeScript for many years.
And because Facebook created Flow, there was always kind of this disconnect between the React community and TypeScript. And people would also do PropTypes, so they had workarounds that allowed them to not necessarily need TypeScript.
00:29:49 - Kim-Adeline Miguel
Yeah.
00:29:50 - Anthony Campolo
As TypeScript has just continued to expand, it's now eating into the React ecosystem.
00:29:56 - Kim-Adeline Miguel
It took over Flow. I don't really know how that happened, though.
00:30:02 - Christopher Burns
I think it was, I know this sounds so bad, but more people just asking for files to be typed. Because if you look at your project and 90% of your imports are already typed, you would then think, maybe I should use TypeScript. But if 10% are typed, then you're not really gaining so much.
So it's kind of like the effect of, there's a fancy word that is not coming to me.
00:30:29 - Kim-Adeline Miguel
When the ball starts rolling, then it has more.
00:30:33 - Christopher Burns
Momentum. Whatever it is.
00:30:34 - Kim-Adeline Miguel
Inertia. Yeah. Momentum.
00:30:37 - Anthony Campolo
Inertia. Yeah.
00:30:38 - Christopher Burns
Inertia. Yeah. There we go.
00:30:41 - Kim-Adeline Miguel
I told you, I'm not good at mechanical engineering.
00:30:45 - Christopher Burns
It's funny because we both did a computer science degree and we're both kind of like, oh, we don't know how these things work. We just code.
00:30:53 - Kim-Adeline Miguel
Yeah.
00:30:54 - Christopher Burns
Anthony, who did a boot camp, is like a walking encyclopedia of how everything works. And it's just like...
00:31:02 - Kim-Adeline Miguel
I know, right?
00:31:03 - Christopher Burns
I just don't get it.
00:31:04 - Anthony Campolo
Sometimes certain people are just kind of curious and want to dig into the more theoretical stuff. As you always say, I'm all theory. Yeah.
I'm kind of curious, Kim, if you are interested in other open source projects. Because obviously you've contributed a little bit to Redwood, and the stuff you're doing with Microsoft that's already very open source focused. But I'm just curious what else you're looking at in the landscape and what you find interesting.
00:31:30 - Kim-Adeline Miguel
Like open source in general and general trends? So I would like to see Redwood 1.0. I am eagerly waiting for it and to see what's going to happen.
But then earlier we also talked about WebAssembly. I know Chris is maybe going to be upset, but I'm actually curious to see how it's going to turn out. Right now you can write Rust and C++ and C. I think they can be compiled to WebAssembly.
So this is kind of a work-related interest. We were looking at how to speed up the Python extension. So we were toying with the idea of using WebAssembly one of these days if it became possible, because then it would be, yeah, blazingly fast. But it's nothing more than a far-fetched dream at the moment.
00:32:17 - Anthony Campolo
Well, Blazor is already on WebAssembly right now.
00:32:20 - Kim-Adeline Miguel
Oh wow.
00:32:21 - Anthony Campolo
As a way to write C# in the browser. That's a Microsoft thing as well, so I'm not sure how familiar you are with that.
00:32:26 - Kim-Adeline Miguel
I've heard the name. I don't write C#.
00:32:28 - Anthony Campolo
Yeah. It's basically for people who are long-time C# .NET developers.
Steve Sanderson is the guy who did KnockoutJS, so it's got a good pedigree. And for me, I'm also super interested in WebAssembly. So anytime I hear of a project that's built on WebAssembly, I kind of make a mental note of it. Figma is another interesting one that is actually doing WebAssembly.
00:32:49 - Kim-Adeline Miguel
Oh, is it? Wow. Okay.
00:32:51 - Anthony Campolo
Yeah. It's a C++ app.
00:32:53 - Kim-Adeline Miguel
Oh, I see. I thought it was only a web app.
00:32:55 - Christopher Burns
So WebAssembly is basically like, oh, I can compile anything to JavaScript.
00:33:01 - Anthony Campolo
Yeah. Essentially it's to compile down to an assembly version of JavaScript. So you can write any language and have it run in the browser. Because the thing is that JavaScript has always been the only language that runs in the browser, which is why it's kind of taken over and become the thing that everyone writes in.
And so by creating this, people are already compiling down to JavaScript with things like Elm and other languages. So this was a standard that all browsers would implement that would allow anyone to write to this spec. And it's been in all the major browsers for over a year now.
00:33:37 - Christopher Burns
I prefer JavaScript controlling everything. That's my favorite method of JavaScript. Get JavaScript to rule over native code with React Native. It's the pinnacle of my JavaScript career.
00:33:50 - Kim-Adeline Miguel
And do you dream of JavaScript-like world domination in JavaScript?
00:33:54 - Christopher Burns
I just love the horror. Sometimes when people say, like, what's it all written in? And you're just like, oh, it's all TypeScript, that's all JavaScript. And they're like, but efficiency.
00:34:06 - Kim-Adeline Miguel
Exactly.
00:34:08 - Christopher Burns
Electron and all of these things, you're like, JavaScript. It just works.
00:34:13 - Kim-Adeline Miguel
But it's so slow. But this app is using too much memory.
00:34:17 - Christopher Burns
Wow.
00:34:18 - Kim-Adeline Miguel
We'll get there.
00:34:19 - Christopher Burns
We'll get there. But we can all have problems with this code chugging. Sometimes it's really bad. Every time my VS Code chugs, I instantly go, I need to delete 20 plugins. And then I'm typing, and I'm like, where's that gone? And it's like, I've deleted that.
Then I'm searching through the repository to find the plugins that were doing that thing. It's just cry times. Maybe we'll see a day where this code gets recoded in something like React Native.
00:34:54 - Kim-Adeline Miguel
That'll be interesting. I'm curious to see how it goes. I am not privy to those details, so I can't tell you any of it.
00:35:00 - Christopher Burns
If you're ever curious about what Microsoft is doing with React, you should look up React Native Windows for Windows. See, this is where it doesn't make sense because it's called React Native Windows. But then there's also React Native macOS, I think it is.
00:35:17 - Kim-Adeline Miguel
Yeah.
00:35:18 - Christopher Burns
They run like five streams of React Native now. The last time I checked, Windows Office was all built on it, from their Windows apps to their phone apps to their web apps. So look into it, and I also learned more about it.
Why would you want to run React Native on the web? Because it's less about the DOM tree and more about the views. You think about the interface differently. I've been trying to defend my opinion some: why React Native Web should be a thing.
00:35:52 - Anthony Campolo
Yeah, this is Pete's favorite topic. He finds a way to work it into every episode.
00:35:57 - Christopher Burns
Done. React Native should be on everything. As I say, just get JavaScript to control everything and then I'll be happy.
00:36:06 - Kim-Adeline Miguel
Is this a gimmick of the podcast? Now that Chris has to put React Native on every episode, like some kind of bet somewhere?
00:36:13 - Christopher Burns
Sadly, no, I wish. But I did say that. What did I say? I think I said that to Tom. It was like, what do you want from Redwood? I'd like to see React Native Web, not React Native. Just React Native Web.
00:36:25 - Anthony Campolo
Just React Native Windows. That's what everyone's really asking for. Redwood. Just. It's what Toby needs.
00:36:31 - Christopher Burns
You say that with all you Mac people, but like the community of Windows apps, if you run Windows every day, it's like the bomb. They're so much better. The last time I checked, that was like a month ago. Windows apps have come a long way since Windows 8, when they were introduced. So I defend them now. Minecraft Windows 10 Edition, much better than Java. Come at me.
00:36:58 - Kim-Adeline Miguel
Oh, man, that one was so painful to deal with. That's also kind of why I stopped playing Minecraft.
00:37:04 - Anthony Campolo
Thanks so much for being here with us, Kim. As we close out, is there anything else you want to talk about? Anything you're excited about?
00:37:12 - Kim-Adeline Miguel
No. Thank you for having me.
00:37:15 - Anthony Campolo
Just give us your information, how people can get in contact with you, and how they can follow you.
00:37:20 - Kim-Adeline Miguel
Oh, sure. People can find me on Twitter at Kim Madeline underscore M. I'm also on GitHub, but there's nothing really interesting there. Otherwise, they can catch me in the Redwood Discord and the Redwood Community forums.
00:37:36 - Anthony Campolo
Awesome.
00:37:37 - Kim-Adeline Miguel
Awesome.
[00:38:09] That is pretty cool. Do you think it works on that Xbox fridge as well? Okay, so this is a big meme.
So the Xbox, you know, the black one, I think it's the Series X. Then people compared it to a fridge, kind of like when they compare the PS5 to a router.
And then they made a whole, I think there was, like, Snoop Dogg who got an Xbox-shaped fridge with actual Xboxes in it and other stuff. Yeah, there is an Xbox fridge.