434: I Love It, It’s Exhausting
Transcript from 434: I Love It, It’s Exhausting with Sarah Withee, Chris White, and Elecia White.
EW (00:00:06):
Welcome to Embedded. I am Elecia White, alongside Christopher White. Our guest this week is Sarah Withee, and we are going to talk about programming languages and pancreases.
CW (00:00:18):
Hi Sarah, welcome to the show.
SW (00:00:21):
Hi, thanks for having me today.
EW (00:00:23):
Could you tell us about yourself as if we met at She's Geeky or some other technical event?
SW (00:00:31):
Yeah, I like to use the term "polyglot software engineer" just because I do software engineering stuff. I tend not to stick in one language. Like, work right now is in Python. I do stuff on the side with the robotics group in Java. I tinker on the hardware things in C++. The tech community space has some management software that is in Ruby. So I do not really stick with anything in particular. I also mentor an all-girls robotics team here in Pittsburgh, and can be briefly seen speaking at conferences once in a while and sometimes other places.
EW (00:01:08):
All right. We want to do lightning round where we ask you short questions and we want short answers. And if we are behaving ourselves we will not say, "Are you really sure about Rust?" or anything like that.
SW (00:01:20):
All right.
CW (00:01:22):
So with Rust lately...
EW (00:01:25):
It came up in class, and so it is on my mind.
CW (00:01:29):
What is your favorite kind of M&M? Past, present or, I will add, future?
EW (00:01:34):
<laugh>
SW (00:01:36):
Oh wow. I am terrible at predicting the future, so I do not know if I will go there. But I do like the crispy M&Ms and also the ones with peanuts, not peanuts, pretzels. Pretzels in them. I do like peanuts, but pretzels are better.
CW (00:01:52):
I did not know there were other kinds, besides the regular and peanut kind. So now I feel like I...
EW (00:01:57):
Whole world is open.
CW (00:01:58):
I need to have an M&M tasting.
EW (00:02:02):
Do you have a favorite video game?
SW (00:02:04):
Ooh, I am playing lots of Splatoon lately. So Splatoon through 2 and 3. I do love the Legend of Zelda games too.
CW (00:02:15):
Favorite programming language for quick little tasks?
SW (00:02:18):
Quick little tasks? Maybe Python.
EW (00:02:23):
If you were a burglar and could only steal something that would cause inconvenience, what would it be?
SW (00:02:30):
Oh, I think I asked one of those on my Twitter Question of the Day once. Shoot. I am looking around my house right now, trying to think what would I do? Maybe take all the light bulbs.
CW (00:02:45):
How many languages do you think most software engineers know?
SW (00:02:49):
Know, as in could sit down right now and write some bit of code in?
CW (00:02:52):
Yeah, let us go with that.
SW (00:02:54):
Okay. I do not know, two maybe, I would average guess.
EW (00:03:02):
Do you have a favorite fictional robot?
SW (00:03:05):
<laugh> I was thinking about this earlier, because I think I saw this as one of the prompts. I am really amused by Marvin, the depressed robot from Hitchhiker's Guide. Not because he is necessarily a really good robot, but I just appreciate sarcasm really well.
EW (00:03:23):
All right.
SW (00:03:24):
And Marvin is particularly sarcastic on a regular basis.
CW (00:03:30):
If you could teach a college course, what would you want to teach?
SW (00:03:33):
Oh gosh, I saw that one. I could not quite think of a good answer. I think I was going to go something completely not tech related and just be random, and might be soap making because it is kind of interesting.
EW (00:03:47):
I saw that you have given a couple of talks about pancreases.
SW (00:03:52):
Yes.
EW (00:03:54):
Pancreasi? Pegasus? No. One of which was a very short !!Con talk, which was pretty good and I wanted to know more.
SW (00:04:09):
I have an artificial pancreas and the reason I have an artificial pancreas is because I am a type 1 diabetic. So basically, my body for whatever reason, we do not really know why, it just stopped making insulin for things. And so I do need insulin on a daily basis, the 24-7 stream insulin pump, all those good things.
(00:04:29):
But I also have an artificial pancreas. This little device talks to my insulin pump and also talks to a glucose sensor that is on me, and tries to do some algorithms to figure out what is happening with my blood sugar at any given moment. Then automatically adjust to give me more or less insulin at any given moment, depending on if I am starting to look like I am going to go low or if I am going to go too high, it will autocorrect for those things.
EW (00:04:58):
It sounds like a rice cooker with fuzzy logic. You want it to go just the right amount.
SW (00:05:03):
Yeah. You measure it in milligrams per deciliter and there are the magic numbers. Normal people, you keep it between 70 and 100 automatically with your own body. Diabetics are usually told to keep it under 180 and above 80 or something, just to be on the safe side. So my pancreas sees what is happening. If it is just climbing up, it is like, "Oh hey, you probably ate something or something is going on that is making your blood sugar rise." We need to counteract that, so we give you insulin and bring it back down.
(00:05:34):
If I start to go trending downward, I am 100 and I am like falling five points every several minutes, then she is like, "Oh! Bad things are going to happen in the near future." So it actually cuts off my insulin supply, to try and save me from ever actually reaching the low. It does a lot of automagic to try and keep me in this magical range that I can define for it.
EW (00:05:59):
But that is just software. Why is that not attached to the pump or to the glucose monitor?
SW (00:06:07):
Good question. It depends where you are looking. In the beginning insulin pumps were- When we think of smart devices, this is actually a dumb device. If you ate you would have to pull out the device and say, "Give me so much insulin, because I ate this much carbs." The glucose sensor will tell you the values of what your blood sugar is right now. But both of these are independent devices.
(00:06:37):
So a bunch of people got together, figured out how to reverse engineer certain pumps and then certain glucose sensors. Then they wrote some scripts to make them talk to each other, essentially, through a separate device.
(00:06:51):
Over time, what has been interesting is the medical device companies have just avoided it, "We do not want to touch this automated stuff." But they have started to see all these open-source hackery people tinkering with things, and actually getting even better than their own products are. They have slowly had to actually change their pace like, "Wait a minute, we might actually have to start implementing some of this."
(00:07:20):
In the past couple of years, Medtronic, Tandem- Is there another one? I do not remember off the top of my head. They have started to release some of their own algorithms inside their devices. Tandem is good. A friend of mine runs it, she really likes it. I have met people that have had the Medtronic one, and they absolutely hate it. They said they would rather go back to older pumps that have been cracked, and use the open pancreas systems.
EW (00:07:50):
I can understand from a medical device perspective, why reading a value and being told value, those are both safe. Somebody else has to take responsibility if anything messes up. But as soon as you connect them, and make an algorithm that is not just a "above this you do that, and below this you do that," it is real- You have to be smart about an algorithm that now is taking responsibility, and makes you liable if it does not work for any one person.
SW (00:08:33):
Yeah. That is the excuse they have tended to use. It is expensive. You got to do a bunch of studies. It is complicated, it is weird, it is hard. But at the same time the open-source people have been testing it on themselves, and there is a blood test you can do. It is called an A1C, but basically the percentage tells you essentially how close in range your blood sugar values have been for the last three months.
(00:09:01):
They found this range is actually a lot better for people that are on these open pancreas systems, than it is for people either doing it themselves manually, which is usually not very good at all, or the ones done by the med tech companies. They are better, but the open-source ones have been really, really, really good.
(00:09:26):
The people that developed the original algorithms, they actually have white papers on them. You can go read these papers, how they did these studies, how they looked at past blood sugar values, and then calculated what the algorithm should be. Then just tested it on themselves, which is totally a thing you can do, because you are not involving extra companies, and you are not doing wide scale research. You are just doing it to yourself, so that is fine.
(00:09:51):
They have just found your blood sugar values are amazing. In fact, my blood sugar values have pretty much looked like a non-diabetic. They just look like a regular person's blood sugar values, because the technology has been that good at doing what it does.
EW (00:10:10):
Part of the reason is because if you have a human in the loop, they are only going to do it occasionally. And if you have a device, it has nothing better to do with its time.
SW (00:10:22):
Yeah, basically. I get a new value from the glucose sensor every five minutes. Every five minutes it just runs the calculations. It is just like, "Is everything still going as expected? If not, give you more or less insulin." It does that 24 hours a day.
CW (00:10:38):
It is very strange to me. I have developed medical devices, so I have some perspective from the medical device manufacturers. But also I am very sympathetic to, "I would like a product that improves my quality of life. And you are not creating it."
EW (00:10:53):
"Because you are too much of a wimp."
CW (00:10:55):
Well yeah, that is the thing is, this market exists and I do know that what those devices are doing takes you from, as you said, one level of safety to another level of safety. Which means a lot more documentation, and a lot more verification, probably a 510k or whatever.
(00:11:10):
But the market exists, and there are lots of much, for lack of a better word, stupider medical devices that people put through studies that go for a long time. So it is very strange to me that they did not look at this before, and say, "This is a good market." And even the monitoring devices, a glucose monitoring device, yes, you have added the human in the loop to self-inject glucose or whatever, but if that screws up, there is a lawsuit there no matter what, too.
EW (00:11:44):
But that is user error.
CW (00:11:46):
Not if the thing is reporting the wrong value.
EW (00:11:48):
Oh, that is true. But it is easier to report the right value. I mean that is a almost provable case.
SW (00:11:59):
Yeah. I have had it mess up where I have gone low, and all my things say, "Nope, nope, you are perfectly normal." I have had gone high when it said I am perfectly normal. Mistakes happen and bodies are weird. It is really kind of impossible to get it perfect every single time.
(00:12:20):
At the same time, this is the only disease and medicine related things I have ever heard of, where basically I am given a blank check in a giant bottle of medicine and they say, "Take whatever you need. Good luck calculating it. Here are some basic ideas on how to get started. Here is what you do if it goes bad. By the way, you will likely overdose, and here is how to counteract that."
(00:12:50):
You do not really do this with a lot of other diseases. It is not two pills a day, twice a day. This is basically a bottle and, I do not know, figure out how much food you ate and take that much insulin for it. Turns out people are not always really great at calculating those, especially if they are not really science oriented. So even taking part of the equations out and putting them on a computer, really helps dramatically.
EW (00:13:18):
That makes a lot of sense to me. I have a question here about open-source, and how it can be hard for non-technical folks to get used to. But then I also remember my mom making graphs and how bad she was at it. So how hard is it to use the OpenAPS?
SW (00:13:43):
It depends. There are multiple types of artificial pancreas system, which is what the APS is. There are several different types. It depends on which one you are using, which ecosystem you are in. So essentially, which pump and glucose sensor and phone you have, depends on how easy it will be in the end.
(00:14:05):
LoopKit is the one that is on iOS. It is compatible with a variety of different pumps. It is usually pretty easy, has a really nice user interface. All the calculations are done on the phone. It uses Bluetooth in a separate little device to talk to the pumps. It is pretty easy.
(00:14:22):
There is also AndroidAPS, it is also fairly easy. It is the one I use now. OpenAPS was a little bit more difficult, because it was basically a Linux device and it ran all the algorithms on it. But it also meant I did not have to do much. It casually ran in the background and I did not always have to have my phone all the time for it. It was a little bit more complicated, because you had to SSH into it if something went wrong, figure out what happened.
(00:14:56):
They say on several of the manuals, you do not have to be necessarily technical or a programmer or anything, you just have to be willing to spend the time to work with the device. All technology, you need to sit down and read the instruction manual. With anything with a bunch of variables, you have to take the time to configure it.
(00:15:22):
The amount of insulin I need per carb is different for me, than it is for you two. Your bodies automatically adjust for whatever you eat. Mine does not. It has changed over time, too, so periodically I have to revisit, is this the same value I think it should be? If every time I eat, I am going low most of the time, it probably means my math is wrong. So I have to go back and tinker with it. You will have that problem whether you have the pancreas system or not.
CW (00:15:56):
Right.
SW (00:16:00):
The pancreas system is nice, because there are ways to figure out how off your values are over time. It has the statistics to see, "You are taking five units per this many carbs right now. We think that is really wrong. You should be doing four units per this many carbs."
EW (00:16:23):
Can you imagine a medical company telling you that? Medical devices company?
CW (00:16:27):
No.
EW (00:16:29):
Because that is too close to medical advice.
CW (00:16:34):
Yeah.
EW (00:16:34):
But it should not be.
CW (00:16:35):
But pacemaker exist, they are autonomous. And defibrillators, implantable defibrillators exist. So there is precedent for automatic autonomous devices that are managing life critical systems.
EW (00:16:49):
But not ones that learn.
SW (00:16:51):
But the other thing is, I can always override something. So if I am going low and the system is not really taking care of it, I can always stop it and-
CW (00:17:01):
Yeah.
SW (00:17:02):
Take care of it too. The pancreas devices, they are external. I keep one in the little pouch, and I wear it on my belt loops or in dress pockets or whatever. But I can always turn it off, I can always override things. I can always tell it, "Quit doing the automated looping system." So it is just back to manual efforts or whatever too. It is not like it is inside me, and I cannot ever touch it. Whereas some of the pacemakers are.
EW (00:17:35):
Were you involved with the development of any of the artificial pancreases?
SW (00:17:40):
I was not. I have fixed a couple bugs, and I started working on a easy to install system for OpenAPS when I was using it more often. It was like log into the device, update all your Linux packages, install this GitHub repo, run the install scripts. And I thought, "This is stuff a person does not really have to do. It is something a computer could. Just plug it in and let a program do that for you."
(00:18:11):
So I started writing something like that, got pulled away from work and a bunch of other mental health things, and I stopped working on it. The devices you use on OpenAPS are a lot harder to find now, so I just have not went back to working on that. I have not really worked on the core of the algorithms or the apps or anything, but I would love to. I have started looking at AndroidAPS's bugs and pondered if I could fix any of them, but I have not contributed there yet.
CW (00:18:48):
So what does the hardware look like? Is this existing hardware that has been jailbroken, for lack of a better word? Or is there a unit that is an open-source hardware unit?
SW (00:18:58):
Yeah, good question.
EW (00:18:59):
Or is it just a phone app?
CW (00:19:00):
Or all three?
SW (00:19:03):
Or multiple combinations of all the above? So OpenAPS was, when I first started, an Intel Edison chip.
CW (00:19:10):
Oh wow. <laugh>
SW (00:19:12):
A system-on-chip. Yeah, Linux. You just SSHed in and all the things. It was attached to either 400, 430 MHz transmitter board, or 900 MHz transmitter board, to talk to whatever kind of pump you were using. It was small, fairly easy to tote around. Intel quit making those chips. Eventually the company that made the transmitter boards went out of business. We can blame the pandemic for that.
(00:19:44):
The next one is called a RileyLink. Instead of being Linux on it, it is just a simple device that accepts Bluetooth and transmits over 400 or 900 MHz. It is essentially like a bridge. It expects your phone to tell it what to say to the pumps, and it will just send those signals. RileyLink was, I do not know, one inch by couple inches and it was half an inch thick, so not too bad. Also really easy to carry around, Tic Tac container sized.
(00:20:21):
The one I use now, it is called an OrangeLink. It is actually in a container that is specifically the size of an AirPods case, able to be carried in cases made for AirPods. Still pretty small, really easy.
(00:20:37):
All of these are open-source, so you can go online and see how they made the boards for them. The RileyLink, and I think OrangeLink is open-source too. You can just go get the schematics, learn how to do them. You could even build them yourselves if you really wanted to.
(00:20:52):
As for the apps on the phones that talk to that device, they are all open-source as well. So LoopKit for iOS is loopkit.github.io. There is AndroidAPS, that is pretty easily searchable. And then OpenAPS, I think is just openaps.org. You can go look at the code, read all the documentation. There are tons and tons and tons of documentation. It is not install it, go figure it out yourself. They guide people through all the settings, and how to configure them for your pumps and your sensors and everything.
EW (00:21:33):
Because this is better. Because this is actually safer.
SW (00:21:37):
Yeah. Like I said, it is not perfect. I still have my days where things go drastically wrong, but they are so much fewer and farther between. It is more accurate. It does tiny little changes over time, instead of me doing a large change after every meal. It is more accurate that way.
EW (00:22:00):
In the beginning, you talked about lots of different languages you work with. Why have you not specialized? That is a terrible question!
SW (00:22:12):
<laugh>
EW (00:22:12):
Let me try that again. What languages do you like best and why have you not specialized? Dang it! I guess I am going to go with that.
SW (00:22:27):
<laugh> I am just picturing now, "Sarah, you have not stuck to one language! What is wrong with you?"
EW (00:22:32):
That is not what I mean!
SW (00:22:34):
I know. You are not the first person to ask this. It just sounds funny that way.
EW (00:22:43):
I do not think it is that weird. I speak C and Python fluently, and C++ with a little bit of a C accent. I have done AWK and BASIC, so much BASIC, MATLAB. You take great pride in speaking multiple programming languages. Do you speak multiple speaking languages?
CW (00:23:13):
That is okay. I was going to say human languages, so that is not much better.
SW (00:23:16):
That works. <laugh> I took French in high school and was pretty good, but that was 20 years ago and I have gotten considerably worse at French. I have started learning sign language, and then stopped, then relearned it and stopped, then relearning it again. Those might be, besides English, the other two languages I have learned for the human side.
(00:23:38):
For computers, it did not start out me going, "I am going to learn all these languages and I am not going to pick one. I am going to do a new language at every single job I land at." It happened by accident, I guess, in that I learned BASIC when I was a kid. Then computers got better. I learned Visual Basic when that came out. I think my first college class was C++ and then Java after that. And then I was learning PHP on the side for something, I forgot what it was, <laugh>. Over time, these little dashes of extra languages got blended into me.
(00:24:25):
When I started getting jobs after college, one of the first places I was at was a bank and they did this rotation program. So I tried different teams, to figure out which one I wanted to be permanently on. One of them was in C#, the next one did some Java stuff, then I think the next one was going to be C# too. I ended up moving jobs over to a PHP job.
(00:25:00):
It is interesting, because I never intended to say, "I am going to do a different language at every job." But I think it has meant seeing so many different ways to do things, and thinking through problems in so many different types of ecosystems, that I think it has made me a better developer. Because I have this wide variety of knowledge on how things are done.
(00:25:28):
So if you throw me into a project, I feel like I usually have a really good range of ways of solving problems. Also, because I have been in so many different languages over the years, I can probably get tossed into almost anything and hit the ground running with little effort. I am not necessarily an expert in any of these languages, but I know enough that I have an idea of what I am doing, and an idea of where to go to find answers to solve those kinds of problems in that language. So I do not always know how to do everything in Python for my day job, but I know where to look to find those answers.
EW (00:26:13):
Is it Stack Overflow?
CW (00:26:15):
<laugh>
SW (00:26:15):
<laugh> That is some of it. But also dabbling in Python over the years, means I know what kinds of packages I might need to look for to do different things. Or I know the different types of what is built in language, what is not built in the language. And can poke around either Python's documentation, or ask the right question on Stack Overflow, I guess. Also search through other types of materials, and understand what do I need to write myself? What can I look in the library for? What is built in the language? Or do I need to pick and choose from different places to assemble a solution?
EW (00:27:04):
Which language would you want to learn more thoroughly?
SW (00:27:09):
Oh gosh, that is a good question. I think possibly something like Haskell just because I have dabbled in it before in a school project, and then I did a job where I learned Scala but I was not particularly great at it. But it is such a different way of thinking about problems, that I really would like to get a lot better at it.
CW (00:27:37):
It is one of the things that learning multiple languages I think did for me, and I do not know that many and ones I used to know I have completely forgotten, but-
EW (00:27:46):
Pascal.
CW (00:27:48):
A recent one I had to do a lot of work with was Swift, which is a more modern language. It is very opinionated about certain things, and it has built-in language features that guide you toward a certain way of thinking about structuring your program. But having learned that and seeing those things, it is easy going back to C or something to say, "This is something I can adapt. This is a design pattern or a way of structuring code that I can adapt." The language does not really have the feature to do it.
(00:28:23):
It feels like each language has its own opinions about a lot of things, whether it be design patterns or how to deal with memory. Those are not necessarily things that are siloed. Once you have learned them in one language, you can like, "I should be more object oriented in this other language, even if it is not an object-oriented language."
EW (00:28:48):
Is there anything from Swift you can use as an example? Was it messages, I think you mentioned at some point? Contracts?
CW (00:28:58):
No, I am trying to think. There are ways of doing early exit from functions and doing what are called "cards". There is the whole function pointery thing about having- You cannot really do lambdas in C, but you can do callbacks and stuff like that. Making things more asynchronous with callbacks and things. That is probably the first thing that comes to mind. There are other things. And Swift is object-oriented, so it is closer to C++ than C.
EW (00:29:29):
But object-oriented. There is no reason why C cannot be.
CW (00:29:33):
Yeah, you have to build the machinery.
EW (00:29:35):
You do not even have to use function pointers. You just have to think about things as objects. And try to corral them into their own little kingdoms.
CW (00:29:45):
So do you find yourself doing that? "Oh, there is this Java language feature, or there is this Java-ish thing, but I am writing in, I do not know, Python."
SW (00:29:54):
Yeah, I do that from time to time. Like we are in a project at work right now, and it keeps reminding me of a whole bunch of problems I solved in a C# web app several years ago. I keep thinking like, "Oh yeah, we did it this one way. I wonder, should I actually try and do it that way here? The problem is really close enough that I should try to solve them the same way."
(00:30:20):
Since it is Python in this job, and C# in that one, I am trying to think what are the equivalents of some of these things? Is it as efficient and tidy to do them a certain way? We wrote some terribly hacky ways of solving the problem in C#, but I also think there were creative solutions. It makes me wonder what is out there. Does Python have any of these kinds of things similarly built in the library somewhere? Can I read about the solution?
(00:30:53):
It is one of those things, I think, if you were an expert in one language, then you are tossed into another one, you might actually struggle a bit. Whereas I have done enough of these languages, I am not really as nervous about jumping around on a regular basis, as I think some people are.
EW (00:31:16):
I know some people are. I am not as nervous as I used to be. I mean, a client asked me to do is something in C# and I was like, "Okay, fine."
CW (00:31:26):
The only thing I would be nervous about, was being tossed into a functional language, because I do not understand that stuff at all. But regular stuff, fine <laugh>. They are all similar. <laugh>
SW (00:31:37):
Yeah. I do think one of the hardest things is the paradigm shifts. You are thinking about a problem in a different way. If you are writing something in Perl and you are like, "Oh, I am going to write Haskell now." It is two totally different ways of thinking, and that is a lot harder, I think, than just jumping to a language that is similar. Which is why I think C, C++, C#, Java, PHP, all those are similar enough you can bounce back and forth between them with little friction.
EW (00:32:11):
Yes. But if you go from Python back to C, suddenly you have no ability to hit the semicolon key.
SW (00:32:17):
Yes. That is also a little different <laugh>.
CW (00:32:20):
Yes. I took a two year long Python break and came back to C for a client. It was a mess for a while! <laugh>
SW (00:32:26):
<laugh>
EW (00:32:27):
If you were starting a project from scratch, is there a language you would choose?
SW (00:32:32):
I do not know. I am very much the choose the right tool for the job kind of person. So I do not know that I would want to sit down and just say, "Oh, I know this one the best. That is what I should do it in." I would probably try to think what does the language work really well in? Whereas the ecosystem of web frameworks or whatever you need around to help you with that.
(00:32:57):
I also would probably think, if I am on a team and there is a bunch of people that have different types of knowledge, what might be the least friction to get any of them up and going in it too.
EW (00:33:13):
Yes, I say that with people who want to do C++ in embedded. "Yes, absolutely, as long as your whole team is writing it." But if you have one person writing C++ and four people writing C, everybody is going to be unhappy.
CW (00:33:27):
That goes for anything.
EW (00:33:28):
That goes for any language. Those two are just compatible.
CW (00:33:32):
I have often been on projects where people- It is a big legacy project. It is in C or C++ and then people come in and want to, "Oh we should rewrite this in blah blah blah." New people on the team. It is like, "Whoa! Dude, you do not know what you are asking."
EW (00:33:48):
Not only are you rewriting all of the bugs, we finally fixed-
CW (00:33:51):
But none of us know how to use this.
EW (00:33:52):
You are asking us to do something we do not know how to do, that is not always trivial to learn. Is there a language you know, that was easier to learn than others?
SW (00:34:04):
Oh gosh, the problem is once you have learned so many, the new ones just absorb a lot quicker.
EW (00:34:12):
The last one you learned is probably the easiest.
SW (00:34:15):
Yeah, and it is hard to judge at this point. I think the first big transition was BASIC to C++. That kind of broke my brain in the beginning. I am like," Whoa, this is weird!" I picked it up, it turned out not to be particularly hard, just different. Then Java was not too hard of a transition after that. Neither was PHP. Then I had a school project that was Haskell and that broke my brain for a little bit. What else? When I took the job that did some stuff in Scala, I had to re-remember some parts of Haskell, but it did not break my brain nearly as much the second time.
CW (00:35:04):
Having seen Haskell.
SW (00:35:06):
Yeah. And like Rust. I have not used it, but I took a workshop on it. Once they explain, "Basically think C++ but a lot safer with types in memory management and all that." It broke my brain in the beginning, but after 30 minutes, "Okay, this actually makes a lot of sense." If I wanted to, I probably could sit down and, a little bit more reading up on it, I could probably get working in it pretty quickly.
CW (00:35:41):
Are there any languages you hate?
EW (00:35:42):
<laugh>
CW (00:35:45):
Not hate necessarily, but if a project comes up, "Oh, this again."
EW (00:35:50):
I would program in Fortran again if it came up to it.
SW (00:35:53):
<laugh>
EW (00:35:53):
That is so sad. I am sorry, Sarah. Languages you hate, not languages that I should, but do not?
SW (00:36:01):
<laugh> Periodically I kick myself when I land in something like JavaScript, but on the server side. Because I tend to think in things like, "You start here and you run all these commands in order." And JavaScript is like, "Nah, I am going to parallelize everything for you." Which is a cool feature, but I have to turn off one side of my brain and turn on the other side of my brain again, and think, okay, when nothing works right, when I have a bunch of empty variables in different places because the parallelization has not filled in the values for those yet, I always have to kick and scream. I am like, "Ah, I have to rewrite this in a different order and doing asynchronous waits and stuff like that." It is not bad, I just always have to kick myself because I end up in the same problems every time.
(00:36:56):
The other thing is Rails. I think it is really cool, but there is a lot of magic that happens. I am one of those people that really wants to understand what I am doing. Sometimes if I land into a problem and then I go find the solution for it and the solution is just, "Oh, add this one line." I am like, "I do not get why you add that line and how this line should work." There is a lot of cool stuff that Ruby is doing, but it is behind closed curtains and you cannot really tell what is happening. So it is not that I hate these, it is just every time I land in them, I find myself scratching my head a little bit more than I normally do.
EW (00:37:41):
Code Thesaurus. What is that?
SW (00:37:44):
Good question. It is an idea I came up with several years ago, hopefully to solve some of my polyglot problems. This was 2016, or something like that, where I was on a Slack community and somebody had randomly DMed me, "Hey Sarah, could you help me with this Ruby problem I have?" And I am like, "I do not actually know Ruby, but maybe I could try and help you find the problem." She showed it to me, I looked at it and I am like, "I am pretty sure your problem is on this one particular line in this spot, but I do not know what the right answer is. I know how I would do it in this other language, but I do not know how I would do it in this."
(00:38:27):
I kept trying to dig. I could not word it correctly on Stack Overflow to get an answer. I could not find it in the Ruby documentation. I could not find it in several different places. And I am like, "Ah, why cannot I just look at these side by side?" The language I know and the language I do not know, side by side. I thought, "Somebody has built this already, right?." So I go looking around the internet, could not really find anything exactly like this.
(00:38:55):
There are cool things like Rosetta Code. It shows you how to solve problems in different languages, but it does not let you compare languages themselves side by side. And people sometimes solve the problems differently depending on the language. I could not find this exact thing, so eventually came to terms, I am probably going to have to be the one to build this thing <laugh>.
(00:39:17):
I call it the Polyglot Developer Reference Tool. You can choose a concept, like functions or file input output or strings or something, and then choose two languages. You can look at how to do a whole bunch of things in that concept, side by side in these two languages.
CW (00:39:38):
That is pretty cool.
EW (00:39:38):
How many languages do you support now?
SW (00:39:44):
I think we are up to 21.
CW (00:39:47):
Should there be 21 languages? Sorry.
SW (00:39:50):
<laugh>
EW (00:39:51):
I do not know. Let us take the best features from all of them, and make it 22nd <laugh>.
SW (00:39:55):
20, 21, 22. Oh, 22 languages. And I know there are a couple PRs to add some new ones in. I think there are two more that are going to get added soon.
EW (00:40:06):
So I can go there and say, "What are the conditionals like in a language I know, like C? And what would they look like in a language I do not know, like Haskell?"
SW (00:40:21):
Yes. You can look up ifs and loops and all that on, I think we call it, control structures in there. When you pull that up, it is how would you do an if, how would you do an elseif, how would you do a switch or a ternary conditional, while loops, do loops, do until, do whiles, for each loops. Sometimes languages do not have these. So we do have the built-in concept of specifying, "This one language does not know how to do this thing."
CW (00:40:54):
This is really cool. Would be very handy when you are learning a new language, or if you are well versed in another language and you have to use a different one. There are a bunch of times- It is like when you are speaking language. When you are learning a spoken language, initially you spend a lot of time translating in your head, "Okay, I am speaking English in my mind, and now what is the French thing?" You construct that, it is not really being fluent, but the same thing happens, I think, with programming languages. "Okay, I think in C. So if I am in Python, then a for loop that I would have in C-" Sometimes that is not the best way to do things, but it is the way to get started with accomplishing it.
EW (00:41:39):
Yeah, it is how we learn.
SW (00:41:42):
I think of it as a good reference tool. So like, "Oh shoot, I am working in Java. String capitalized? Lowercase?" You can quickly go find it out. Also can be that learning tool, "I know C++. Rust sounds really cool. I want to learn Rust." You could read a book or you could skim Code Thesaurus for C++ and Rust side by side, and get a decent idea of how it works. You would not know all the ins and outs of Rust, because it does change some stuff around. But you could at least see, "Here are the major differences between them." And then, as you are maybe taking some other method of learning, you could use this as a reference tool.
EW (00:42:31):
It is a reference. It is a quick reference. It is not an encyclopedia.
SW (00:42:36):
Yeah, I try to make the distinction. It does not teach you how to program, so you have to go in knowing what kind of loop do you want for a particular situation. This will not tell you that. But it will tell you, if you know specifically you want a do until loop, here is how to do it in this language.
CW (00:42:55):
Is this hand- This is obviously not automated, so this is all hand built by contributors and yourself?
SW (00:43:04):
Yeah. I built a lot of the foundational frameworks on it. I am extremely lucky to have had, I think, 120 contributors to this so far, just over the three years I think it has been public.
EW (00:43:19):
I cannot find pointers.
SW (00:43:21):
Oh, I do not have pointers in there. Memory management and memory stuff is one of the concepts I want to add in the near future.
CW (00:43:32):
That will be fun in Swift and Rust with their various unsafe...
SW (00:43:36):
<laugh> Yeah.
CW (00:43:38):
No, it is going to be interesting to see how this-
EW (00:43:41):
That is going to be a very different thing between languages.
CW (00:43:44):
The truth is very few of these have pointers. <laugh>
EW (00:43:48):
I noticed it wasn't there.
SW (00:43:49):
There are also, some of them use references for things, and then there is Java, where if you ask if some object is equal to another, it is not like, "Are the things inside equal?" It is, "Is the memory address equal?" So it is hidden a little bit. If you try to compare two strings, it is really like comparing, "Is this the same string object?" and that is not what you want <laugh>. So it is some of the confusions around that.
(00:44:15):
How languages... How do you look at memory things? How do you create new objects if you want? Then there is the C way, which is like, "Allocate me this much space in memory, please." Not a lot of languages, or at least not a lot of the really modern languages, have that. Some of the, I guess, more classic traditional languages do you have more of that.
CW (00:44:42):
Ooh, Objective-C. Do you have any plans to remove languages like Objective-C?
EW (00:44:46):
<laugh>
SW (00:44:47):
<laugh> No, that is one of the things. One of the use cases I thought is, what about Python 2, that is deprecated but still exists in so many places? The conversion to Python 3 might be important. You can compare Python 2 to Python 3. That is a perfect use case where you do not want to remove old things.
(00:45:12):
I also thought, well what about if you are working, like you two work, in the embedded space? What if you are using an old version of C or C++? You do not want, "Oh well, the newest version is C20 and C++20." I do not know if there is a newer one than that.
CW (00:45:30):
Unfortunately, the new one for C for most people is 99.
EW (00:45:34):
Yes.
SW (00:45:35):
Yeah.
CW (00:45:35):
No, there is a newer in respect for C.
SW (00:45:40):
Quote unquote new. That is a perfect reason. That has been deprecated several times over. But it still-
CW (00:45:45):
Good luck killing it! <laugh>
SW (00:45:47):
Yeah, it is still used. So I think it still needs to exist as a reference.
EW (00:45:53):
If you added anything to C99, where would you put the extra character? It would have to just be called 100, because you only have three characters there. C99 if you add one... All right, I am not going to continue the bit, because he is looking at me like I am... Tell me about your FIRST robotics team.
SW (00:46:15):
FIRST Robotics is an international organization to work with kids of all ages, to teach them robotics and get them interested in STEM things. I have been involved for 11, 12 years now. I started when I lived in Kansas City and I mentored FIRST LEGO League team. They are elementary school kids that build LEGO robots and then take them to competition. The LEGO robots basically drive around the playing field and do different actions. You pick up little objects, or you can hit buttons and something happens. Every time they do one of these things, they get certain points. Teams with the most points win, essentially.
(00:46:56):
The middle school-ish group, it can be middle school to high school, it is called FIRST Tech Challenge. It is robots actually made of motors and metal and all those good things. They are 18 inches by 18 by 18 inches, and they have to do a big variety of tasks, but they are on a 12 foot by 12 foot field.
(00:47:22):
Then there is FIRST Robotics Challenge, which is high school only. They are four foot by three foot by three foot robots, I think. They are on this massive field. It is something like 60 feet by 30 feet, or something like that, I do not remember. It is huge. It is really cool, because besides being cool tech things and, "Hey kids, you get to build robots," it is cool to see, one, them applying things that they learn in school. It is really easy to take a bunch of math and be like, "Where am I ever going to use this?" They actually do get to use math in some of this robotics stuff, which is really nice.
(00:48:01):
The second is, it is fun. Code is sometimes hard. To build a thing and then see, "Yeah, this is the thing I made". It is really virtual, so something like a mobile app is a little bit easier to see what you are doing than, I do not know, something that runs in the cloud, you cannot really hold that code nearly as easily. So robotics is also good for showing kids, "Hey look, you can actually see the stuff you built. You can actually see the programming that is involved, and how these robots respond to all these things."
(00:48:35):
What is also great about the FIRST system is, they have what they call Coopertition. That is where basically you are usually two or three teams versus two or three teams. Who is your teammate now, might actually be your opponent in the next round, or sometime in the future. So you actually have to get used to cooperating with people, and understanding where they are really good at strategies, or what the robot is particularly good at. But at the same time also, "I know the robot does this particular thing really well. How can we strategize around doing something different, or preventing them from doing that as well?" Or something like that.
(00:49:21):
It is cool to be in this environment where despite the competition, they are actively encouraged to be helping each other out in many different ways. In fact there are even awards for being good players in this space. One competition I went to last year, there were a bunch of signs all over the place. It was like a robot tech support, basically, "Call our Texas number if you are having trouble with your robot. Our team will come over and help you diagnose it." That is cool, that this one team said, "We are willing to help any team, whoever they are. We will come in, we will help you figure out what your problem is, help you solve it." That is a cool way to see kids working with each other. I love it! It is great.
EW (00:50:19):
Right now, the competition is over and they have not announced what is going on for next year. Is that right? It is November now.
SW (00:50:27):
Yeah. FIRST LEGO League is in competition season, I will call it. Their competitions are starting now or next month. FIRST Tech Challenge is in competition season next month and January, so December and January. And FIRST Robotics Challenge, their rules are released in January, so they will build through January to March. So it depends on which program you are in, whether you are actively building right now or not.
(00:50:56):
I mentor specifically an FTC team. I am in charge of our team here. And I do a lot of side involvement with FRC stuff. So I will be helping them when their competition time starts, too.
EW (00:51:14):
If someone is thinking about helping a FIRST team, what should they know? What should they do first?
SW (00:51:25):
The easy way is you can go on firstinspires.org and find a team to work with in your area. There is probably a team that exists. They probably would love to have the extra help. You are always welcome to start a team too.
(00:51:38):
If I were to suggest something to people, one thing I hear a lot is from technical people, "I do not know how to build robots. I do not know anything about wiring. I do not know anything about programming." Things like that. I say that, one, the kids are learning, and you absolutely can go in and learn too. I feel like I am constantly learning things all the time. Either alongside the kids, or I am learning it really quickly ahead of time, and then I am turning around and trying to teach it to the kids a week or two later.
(00:52:09):
So definitely do not consider your knowledge level to be a limiting factor on being able to help kids. There are so many resources online too, from teams that share all their plans and how they build things and how they code things, to mentor support networks. There are forums that people post on. Reddit has several sub-Reddits for the FIRST robotics stuff, and as well some other competition teams. So all of that is out there.
(00:52:41):
If you are not exactly a technical person, I have had a lot of parents say, "That looks really nice. I would love to help out, but I am not technical." I am like, "There are so many teams that absolutely could use a parent to help them do things around the side. Take kids to competitions, or be a scorekeeper, or manage some of the money stuff, or help them with presentations." There are so many skills in so many different areas, technical or not, that teams really could use.
(00:53:12):
So if you think it is fun, if you want to help out, I definitely say, "Go see if you can find a team near you, and absolutely help them." I love it. It is exhausting. I spend so many days a week with my teams, but it is wonderful to see them learn, to see them grow, to see them doing all these things that makes them happy. But also it makes me happy too. I definitely have learned a lot through working with kids as well.
EW (00:53:45):
That was a very good advertisement for FIRST.
SW (00:53:47):
<laugh> Thank you.
EW (00:53:48):
I have never really gotten involved with... We did-
CW (00:53:52):
We judged one year, a long time ago.
EW (00:53:55):
But it was a long time ago and we only went to one competition, so we have really-
SW (00:53:58):
Oh, judging is so much fun. I love it.
EW (00:54:00):
It is a lot of fun.
SW (00:54:01):
I have even had some parents say, "I could never be a judge. I would be too biased against my team." I am like, "One, you are not judging your team. You are always opted out of that. But two, it is so cool to talk to these teams, learn how they went about solving the problems they do, to learn about how their team works, to learn about all the different kids and what they are contributing to the different parts."
(00:54:25):
It is so much fun. I just love it! It fills me with great joy to be able to give them awards at the end of the competition, even if they are not my team.
EW (00:54:35):
Switching topics, as I looked at what you have done over the years, one of the things I noticed in your LinkedIn, was that you have bounced around a bit. What are you looking for in your career?
SW (00:54:49):
Oh, that is a really good question. Every time I have had to change jobs, it has always been me asking myself that again, "What do I want? How do I choose a job, what I am working on?" I think some of it is, I have been this code grunt where they are, "Sarah, do this thing!" "Errr." Type, type, type, type, type. "Here you go."
(00:55:16):
Then I have had other times where it is, "Hi, we need this thing. We have not the foggiest idea how to do it." I am like, "Cool, give me that. I will figure it out." I love solving weird and interesting problems, I think. So that is one of the things I tend to look for. If I found myself without a job tomorrow, it is probably one of those. I do not want yet another job where I am building a generic website. It is one of those things I want, "Where can I use my brain and solve interesting problems?"
(00:55:49):
I do like working with people. I know it is a lovely programmer stereotype of, "I am going to lock myself in the basement, and shut all the windows, and bang on a computer for six hours alone." But I really do like working with others. So I definitely look for interesting teams and good people.
(00:56:10):
One of the things I really advocate for now is good culture. I have worked in jobs where I will put in a pull request, and they will like, "Why did you write your code like that?" I am like, "Let us not do that anymore. That does not help me, does not help you." <laugh>.
(00:56:32):
Do I have an industry I want to work in? Maybe there are cool ones I think it would be fun to go for. I think in some ways I have also been burnt out on some things about the tech industry, that I am, "You know what? I will settle for interesting challenges and good people, more so than, stuff in space looks cool, or I want to learn machine learning stuff or whatever." That is where I have settled right now. Ask me again in two or three years, and maybe that will change.
EW (00:57:12):
That is harder to look for. It is easier to say, "These companies work on things that go to space." Most of them also work on missiles, so I will have to make sure that they only go to the right place. But trying to find out if your coworkers are going to be fun, that is a much harder problem.
SW (00:57:34):
Yeah. Turns out people do not usually stick that in the job description <laugh>. "We have four great coworkers and one that could use a little work." They do not usually-
CW (00:57:43):
<laugh>
SW (00:57:47):
I sure wish they did.
EW (00:57:49):
I do not know that I would believe them. I think, "And your coworkers will be super fun!" would be one of those things that I look at the job req and think, "Yeah, no, goodbye." That would just be too scary.
CW (00:58:00):
Depends on your definition of fun. <laugh>
EW (00:58:03):
It does.
CW (00:58:06):
Some people are too fun.
SW (00:58:07):
I have been endorsed on LinkedIn for puns, so I like to think that I am a decent coworker.
EW (00:58:15):
That is really an opening I want to go through. But I do not think you can ask people for puns just off the cuff, because that seems rude.
CW (00:58:24):
<laugh> Top ten puns. Go!
EW (00:58:26):
<laugh>
SW (00:58:27):
Oh gosh-
CW (00:58:27):
No, that is fine.
SW (00:58:30):
That is the embedded podcast? Looks like you all are wired today. Ha, ha. This episode is giving you a lot of spark.
CW (00:58:36):
<laugh>
SW (00:58:36):
Are these puns really feeling negative or positive? Do I sound like a really grounded guest?
EW (00:58:50):
Are you board?
CW (00:58:51):
Bored, bored?
EW (00:58:53):
Bored, board!
CW (00:58:53):
Bored? Oh, board. That is a auditory, not a visual reading pun.
EW (00:59:03):
Yeah. Thanks for the clarification. Clarifications make jokes better.
CW (00:59:06):
No, I clarified myself, because I was trying to figure out why I could not get it at first.
EW (00:59:10):
<laugh>
CW (00:59:10):
It was an explanation of my stupidity, not the joke.
EW (00:59:16):
Thank you for chatting with us, Sarah. Is there anything you would like to leave us with?
SW (00:59:24):
I will come back to the mentoring thing. I have had some people always ask me, "Oh my gosh, you always are doing things. You are always doing the robotic stuff. How are you doing it?" Helping out others just fills me with more energy. I put out this energy, but I get it back. So I would say, "Look for where you are getting energy out of things, and keep doing the things that fill you with that energy, even if you are expending a lot of it." Because I do think the good things will keep filling you up.
EW (01:00:04):
Our guest has been Sarah Withee, polyglot software engineer, founder of Code Thesaurus and FIRST enthusiast. Oh right, and she is a cyborg with the pancreas.
CW (01:00:17):
Thanks Sarah.
SW (01:00:17):
Thank you for having me.
EW (01:00:21):
Thank you to Christopher for producing and co-hosting. Thank you to our Patreon listener Slack group for their help with building my computer. And of course, thank you for listening. You can always contact us at show@embedded.fm or hit the contact link on embedded.fm. Now a quote to leave you with-
CW (01:00:37):
Now, T-shirts!
EW (01:00:39):
Oh, Christopher is right. We are going to put this at the very end. We are going to bury it at the very bottom of the show. Yes, T-shirts are on sale through the end of the year. There will be a link in the show notes, or you can go to Teespring and maybe search Embedded. Christopher is going to try that now. It is not going to work. We will make it work.
(01:00:58):
Now a quote to leave you with. This is what happens when you search for pancreas for quote sources. From Jean Kerr, "I am tired of all this nonsense about beauty being only skin-deep. That is deep enough. What do you want, an adorable pancreas?"