The Changelog: Software Development, Open Source - Coding without your hands (Interview)
Episode Date: December 13, 2020What do you do when you make a living typing on a keyboard, but you can no longer do that for more than a few minutes at a time? Switch careers?! Not Josh Comeau. He decided to learn from others who h...ave come before him and develop his own solution for coding without his hands. Spoiler Alert: he uses weird noises and some fancy eye tracking tech. On this episode Josh tells us all about the fascinating system he developed, how it changed his perspective on work & life, and where he's going from here. Plus we mix in some CSS & JS chat along the way.
Transcript
Discussion (0)
The reason this works for me is I've set up a bunch of little macros
that do kind of standard tasks for me.
So if you go ahead and anyone who's listening and trying to follow along,
the commands that I'm saying won't work for you
because they're custom commands that I've built in.
But I'll essentially just do a little audio demo
of how I would go about adding a couple HTML elements
and some styles for them.
And I'll be doing this with React
because that's what my bindings are set up for,
but ultimately it's going to sound quite similar
to if I was just doing it in vanilla HTML and CSS.
Elm, h1.
Hello World.
Slap Elm paragraph.
Say this is a paragraph example.
Go down.
Slap second.
Style paragraph paragraph.
Rule color red.
Rule font size 10.
Go down down slap second
styled h1 title
rule color brown
yeah I guess that's sufficient
I was trying to like think of other like neat little tricks
but that's essentially it
bandwidth for changelog is provided by fastly
learn more at fastly.com
our feature flags are powered by launch darkly
check them out at launch darkly.com and Our feature flags are powered by LaunchDarkly. Check them out at launchdarkly.com. And we're hosted on Linode cloud servers. Get $100 in free credit at
linode.com slash changelog. This year, we simplified and improved the changelog.com
setup by further replacing Docker Swarm and Terraform with Linode Kubernetes Engine LKE. Not only is this new setup more cohesive,
but deploys are 20% faster
and changelog.com is more resilient
with a mean time to recovery of just under eight minutes.
Interacting with this entire setup
is done via a single pane of glass with K9S.
Linode is our cloud of choice.
We trust them and we think you should build
anything you're working on,
a fun side project, or that next big info move at work with Linode.
The best part?
You can get started on Linode with $800 in free credit.
Get all the details at linode.com slash changelog,
or text changelog to 474747 and get instant access to that $100 in free credit.
Again, leno.com slash changelog.
What's up? Welcome back, everyone.
This is the ChangeLog, a podcast featuring the hackers, the leaders, and the innovators in the software world.
I'm Adam Stachowiak, Editor-in-Chief here at Changelog.
Today on the show, we're joined by Josh Como to share the story of how he codes without using his hands.
Josh is a front-end developer, and earlier this year, he developed cubital tunnel syndrome.
It's a repetitive strain injury in both of his elbows, and as a result,
he can't use a mouse or keyboard for more than a few minutes before burning pain shoots down both of his arms.
Needless to say, Josh didn't choose the path of giving up. And today on the show,
he shares his journey and the fascinating system he developed to continue to code and do what he loves.
So Josh, here you are on the changelog. Thanks for joining us.
Hi. Yeah, it's great to be here. It's exciting.
It is exciting. We're happy to have you.
You've been doing some really cool stuff, not really by choice, but kind of by necessity.
And it's resulted in a cool blog post and very interesting discussion around accessibility,
all sorts of things on coding.
When your hands don't work or they hurt or maybe some people have their amputees,
we get in these circumstances as developers where
our hands are no longer available. What do we do? And you found yourself in that circumstance. You
want to tell that story? Yeah. So I've been, you know, a developer for quite a long time now.
And a core part of that is using your hands. I got to the point where I was having some
unrelated wrist issues. So I went to a physiotherapist, which I had been seeing for a while,
and he gave me some exercises.
And the exercises he gave me made, like,
I injured my nerve doing the exercises,
which there's like a cruel bit of irony there
that I was trying to improve the situation.
Yeah.
Ultimately, it's not the physiotherapist's fault.
It was, what I've come to learn is that it was kind of a ticking time bomb
because I had nerve mobility issues.
When you move your arms, your nerves slide around,
and mine weren't able to do that super well.
What happened is I essentially pulled a nerve,
it got inflamed and irritated,
and really annoyingly, the thing that irritated it the most
was trying to type.
The posture of sitting with your arms bent and typing really irritated the nerve to the thing that irritated it the most was trying to type. So like the posture of sitting with your arms bent and typing
really irritated the nerve to the point that
within like three or four minutes,
I would get this burning in my elbows.
Sometimes it was in my wrists.
I went to the doctor, or rather I zoomed with my doctor
because of the times we're living in.
And he said, essentially,
it's probably something called cubital tunnel syndrome,
which is a type of ulnar neuropathy.
So the idea is you have a nerve that runs from your neck to your pinky, and that nerve is getting
compressed because it's been irritated. So it's essentially just mild burning pain that
progressively gets less and less mild if you don't stop what you're doing. So I was essentially only
able to type in really short bursts. And if I tried to do that for more than like a dozen times
a day, my arm would just be very unhappy with me and the next day it would be worse. So essentially
like for a couple months, I wasn't using computers at all. I essentially took the opportunity to
just like go on lots of walks and play video games because for whatever reason, video games,
like holding a joystick wasn't as bad. I also, of course, experimented with lots and lots of other remedies. So I got myself a standing desk. I saw a new physiotherapist. I
saw an occupational therapist. I tried a whole bunch of different anti-inflammatories. I got
custom splints made, a lot of different exercises, lots of stuff, right? Essentially, I ran the
gamut. I have three or four different ergonomic keyboards, tried a lot of things. None of them
really helped. And then co-worker suggested to me
well why don't you try coding by voice
and of course the initial response that I had to that was
oh my god that sounds awful
because you know, voice dictation in general
is pretty good at taking what you say
and outputting it in English sentences
and I imagine other languages too
but coding is a lot of syntax and grammar and not a lot of dictionary words what you say and outputting it in English sentences. And I imagine other languages too.
But coding is a lot of syntax and grammar and not a lot of dictionary words.
So my thinking was, am I going to have to literally
dictate character by character?
And just how difficult is that going to be?
I quickly learned that it was a little bit less tedious
than I was expecting.
And happily, that's become, I mean, actually, my situation actually is getting better in
the past few weeks.
So I have been transitioning back to typing somewhat.
But for at least the past three, four months, my primary input mechanism has been through
dictation and also through eye tracking.
And we'll get into the details of how all that works.
The eye tracking bit is very interesting.
I went through a very similar circumstance too. I think a lot of developers all that works. The eye tracking bit is very interesting. I went through a very similar circumstance
to you. I think a lot of developers go through this.
Now, not cubital tunnel syndrome, but carpal tunnel
syndrome, which is in the hands.
All forms of RSI,
repetitive strain injury or stress injury,
where just
non-ergonomic typing
or whatever it happens to be, just long
sessions, right?
Cranking out code or if you're a writer, you're writing prose, whatever it happens to be, just long sessions, right? Cranking out code or if you're a writer, you're writing prose,
whatever it happens to be.
People who sit at their desks or even stand at their desks
and just type all day.
A lot of us have these problems,
usually it's because our hands are not in the right circumstance
or whatever it happens to be.
And I was getting that exact same problem
and I was beginning to think like, what if I can't fix this?
Mine was in my left wrist slash pinky, like the outside of my hand. And it would start off,
every day would start off normal. It sounds like yours was like three or four minutes of relatively
normal. And then the pain would begin. Mine would start off until like, you know, 10 AM. I'd start
to feel it by noon. You know, I was ready. I needed that lunch break. And then the afternoon,
it would start to really hurt. And I couldn't find a solution for the longest time. I tried
ergonomic keyboards. I tried, one person said, get those relaxation metal balls that you twirl
in your hand. I can't remember what those are called. Because that'll help you move it around,
take free breaks, all that kind of stuff.
Eventually, I found a solution, which was simple in my case.
My particular problem was merely because of the way I shifted my left hand to reach the lower left hand key, which was the control key on that keyboard.
Because there's tons of keyboard shortcuts, it's the control key.
And so I was doing this, and the listeners can't hear me,
but I'm basically moving my left wrist to the left,
like down to the left, over and over.
And every time I use a keyboard shortcut,
and as a developer, we're copying and pasting,
we're doing all sorts of things in Vim, et cetera.
So I found that all I had to do was switch my tabs,
my caps lock, and my control key.
And it just took that one motion away.
And over time, the problem just went away.
And I was very fortunate for that reason,
because I was thinking, as a developer,
I need a few things, really,
which is way less than a lot of other people.
I need my brain to function correctly.
I need my eyes.
And I need my hands.
That's kind of what we need, right?
Those are the faculties of our body that are most important for writing software. And I started thinking, if I lose my hands, That's kind of what we need, right? Those are the faculties of our body
that are most important for writing software.
And I started thinking, if I lose my hands,
what am I going to do, go find a whole other career?
And so surely you were faced with similar thoughts
of like, this might be the end of the road for me,
because you didn't find a nice little keyboard switch
to fix your problem.
Yours is a much more serious problem than I had.
Yeah, and a couple things I want to stress.
One is most people who develop cubital tunnel syndrome,
it goes away essentially on its own.
Spontaneously is what they say on the media.
It just goes away.
Usually it lasts four to six weeks.
And I think it's like 85% of cases go away
either within four to six weeks, or
like within a couple months with some physiotherapy.
It's very, very rare that it lasts this long.
And so because of that, I don't want anyone to like, panic if they start to feel some
of these symptoms.
Right.
But I didn't really have that much panic myself, because I kept seeing doctors and physical
therapists.
And all of them
said like, oh yeah, that'll get, that gets better in like six to eight weeks. It was frustrating to
keep being told that when longer than that has passed. But it was, no one has said that this is
like a lifelong thing. Like you may have like episodes of it, but it typically like it doesn't
tend to be this sustained long-term issue. So yeah, it was definitely like, there was some panic there,
but by the time it occurred to me that this wasn't going away
in any sort of reasonable time frame, I had already switched to dictation.
So it was a pretty big weight off my shoulders.
Is the state of it, the prognosis currently chronic that it will never go away,
or is it something that you're hopeful that eventually...
Spontaneous.
Well, others have experience, and you mentioned your blog post you're an edge case so right i have a personal
connection to being edge cases in scenarios like that happens to one percent of the people that
ever get this kind of thing like that i'm in that one percent usually but is this something that
you've figured out that is chronic for a long time for you are you hopeful that it will eventually
get better or spontaneously correct itself over time you mentioned your nerves not
acting like everyone else's nerves might in this situation yeah so one of the things that made me
that had started to get me comfortable with the eye you're not comfortable but like settling into
the idea that it may not go away is that i have a like another one of these rare things that i think
is why i'm maybe in this edge case
is that when I bend my arm, my nerve shifts out of place.
It's called subluxation.
The idea is that most people, your nerve sits in a canal,
and if it shifts out of place, it's this constant source of friction,
so the nerve has a harder time healing when it gets injured
because it's always moving around.
That said, it has started to get better.
I briefly mentioned, but has started to get better. I briefly
mentioned, but I've shifted away now. I still use dictation a fair bit, but I'd say I can get four
to five hours of keyboard typing time a day now, which is a lot better than the four to five
minutes. And funnily enough, it wasn't like some exercise, and I don't even think it was a matter
of time. The shift that happened was more mental than anything.
So a bunch of people kept telling me to read this book,
The Mind-Body Prescription.
And the idea with this book,
and it's not generally recognized as actual medicine. It's a little bit on the fringe.
So let me state that right up front.
But the idea is a lot of chronic pain conditions.
So not acute pain, not like the six to eight weeks thing, you break a leg. But chronic pain is often like caused by the brain.
Like essentially you have unresolved emotional turmoil and the brain sees this as an opportunity
to draw your attention to this like physical problem because it can be a little bit less
stressful than dealing with emotional things. Now, I've done a lot of like soul searching. I have yet
to figure out what the underlying emotional turmoil is. But the idea that it could be mental alone has gotten me thinking about things
a little bit differently. And one of the things that really resonated with me was the idea of
this Pavlovian response. So in the same way that for six to seven months now, maybe a little bit
longer, whenever I go to type, I feel pain. And After enough time, that just becomes an ingrained response.
So what finally started working, because I had just stopped typing altogether.
There were months where I didn't have a keyboard on my desk.
That's a bit of a lie, because I kept one wirelessly that I could pull out
just to do annoying keyboard shortcuts sometimes.
But when I started reading this book, I just said,
let me see what happens if I try typing for 20 minutes. And of course, after five minutes, I started to get a little bit of burning, but I pushed through it. I just said, like, let me just keep typing. And over the course of two or three weeks, I just extended that period a little bit longer and a little bit longer. And it was fine. Like I didn't face any sort of negative consequence for that. So I think a big part of it in my case was just this mental conditioning that had happened. I should also say, I don't generally advise people just
to push through. Usually pain is a signal that you should stop doing what you're doing. In my case,
I went for an MRI, I went for an EMG, I went for an ultrasound, and all of these things came back
normal. So there was no structural issue in my case. And no one told me that I shouldn't do this. Like there wasn't
any indication of like, be very careful because it could get worse. The thing that I have been
watching for and that other people should watch for is muscle weakness. So if you find that you're
no longer able to grip things, that's a sign of nerve damage. Similarly, if your fingers start
going numb. So if it's just pain, in my case, and of course, don't trust me, I'm not a
physician. But in my case, pain doesn't seem no one has told me that pain is a sign, in this case,
that I shouldn't be pushing it. Like essentially, if I see the weakness, if I see the numbness, then
stop doing what you're doing. But pain essentially might in this case not be a reasonable reflection
of injury or damage. Yeah, definitely the opposite case of an RSI like carpal tunnel where the more that you
just power through, because a lot of people with carpal tunnel will end up where they
are because they did not address the issue and they just continue to type in the exact
same circumstance until they need surgery, basically.
So we see a lot of people that the only way out of carpal tunnel is a pretty drastic surgery in the hands.
Whereas if they would have found solutions early on and not powered through the pain, then they would have been better off.
So yeah, why MMV and all these cases, we're all different and our mileage may vary.
And I think definitely, I've always been really protective of my own body.
So the moment it started, I'm like, hey, I'm taking a break from computers. Like I was the opposite of that person. I think if you have an acute injury,
then definitely don't try to power through that. But when it gets to the chronic, like six plus
months, right, when you get to a certain point, this isn't an injury that lasts that long,
generally. Like either it heals and it gets better, or it gets worse and worse and worse,
because you keep kind of pushing your body past what it's comfortable.
And not seeing the other symptoms of the condition progressing,
the weakness, the nerve, the numbness.
All of that suggested to me that there's something else a little bit here.
So take us back to the solution then.
So your co-worker said, what about voice dictation?
And you'd never even considered the thought.
I have seen a few other people do this.
In fact, in your blog post, you referenced Emily Shea
and her Python, what was her talk?
Let me grab it real quick.
It's called Perl Out Loud.
Perl Out Loud, not Python.
There was a Python one and a Perl one.
Emily Shea's Perl Out Loud.
And then Tavis Rudd is the Python one.
Yeah, there you go.
A couple people who've trailblazed because they had to.
And I assume you watch those talks and you think,
okay, I can start to devise my own system.
There's software.
Go a little bit into how this works
because you didn't start from first principles or scratch.
There's some software out there.
There's some people that have done this.
And so you started to adopt and adapt these solutions.
Yeah, absolutely.
So yeah, I think Tavis was one of the first people that I saw doing this,
and he essentially did start from scratch. He just came up with a bunch of Python scripts that would process his voice. I mean, I'm sure he didn't come up with a speech recognition,
but all of the processing. And then Emily's talk was super inspiring, because it answered a lot
of the questions I had about, how does this work? What is the process like? How do you deal with homophones?
All of the things that just seem like it would make it really difficult to work with.
The software that I use is called Talon Voice.
There's a free version and there's a paid beta version.
The way it works is you join the creator's Patreon, you get access to the beta.
I don't actually know too much about the distinction because I just went for the beta right away.
It's kind of a monthly cost type deal through Patreon. And essentially the way that it works is
it hooks into whatever speech recognition system you want to use. It comes with its own. You can
also use Dragon, which is kind of the industry standard. I think you can use the built-in one
with macOS. And essentially it will just take what you say and do something to it. So everything that
you utter is processed through some sort of a command.
So the simplest thing you can do is you can say,
say hello world, and it'll output the text hello world, lowercase and spaced.
Say is an example of a formatter.
There are other formatters.
So you can say camel hello world, and it'll output hello underscore world,
or sorry, hello as lowercase and then world with the uppercase, or snake hello world to it'll output hello underscore world or sorry hello as lowercase and then world
with the uppercase or snake hello world to add the underscore you know there's like a half dozen of
those just typical formatters and like that's kind of the idea with everything is you say a command
and then you give that command some text and it's essentially just calling functions right like in
this case we have a function called snake and then the argument to that function is hello world, and then it processes it. It does all the grammar stuff of
shoving the words together or adding syntax. So that's essentially the idea, but it gets taken
a lot further than that. And there is some stuff that comes kind of built in, but the really cool
thing about it too is that everything is modifiable. So when you download Talon, it comes with a bunch
of Python scripts, and those scripts are kind of, they manage every command that you would say you
have access to and you can change. So like if, you know, I want to add my own formatter or if I don't
like the way snake works, I want to have double underscores. You can totally just hop into the
Python script and update that. So it's really, really cool and kind of like unlimited in terms of its
potential, right? It's up to you how much time you want to spend customizing it for your needs.
Yeah, in my case, I've added like maybe a dozen, maybe a couple dozen at this point,
little commands just for my own personal workflow. So writing React and CSS and that.
I don't actually know too many folks in this space that have been using it with
React a lot of the time. Like we mentioned, Emily does Perl. So I just kind of went off on my own
in that very specific, like domain specific way. But a lot of the stuff that it comes with is
really cool. Just another example is if you want to switch windows, you can just say command tab
right on a macro control tab and just like vocalize keyboard shortcuts. Or you can just say command tab right on the macro control tab and just vocalize
keyboard shortcuts.
Or you can say focus application name.
So I could say focus Chrome and it'll switch which window I'm currently looking at.
I wonder if you, do you find yourself less distracted because switching tabs is like
a pain in the butt?
Like focus Chrome.
I just feel like I would switch away to Twitter way less often if I had to verbalize that
move.
I can do it.
For sure.
I can do it second nature with my fingers without even thinking about it.
Yeah, it adds a little bit of friction to just about everything that you do.
So that can be annoying when you're trying to get something done.
It's like you can feel like your brain is now moving faster than your voice.
I come up with typing too, but especially with this.
But yeah, the silver lining to that is definitely that it discourages behavior.
It just doesn't feel as worthwhile to spend the time switching over to Twitter. but yeah the silver lining to that is definitely that it discourages behavior that like it just
doesn't feel as worthwhile to spend the time uh switching over to twitter can you talk a bit about
the phonetic alphabet that you have to that you use i know it's kind of different than so i was
in the military so i'm familiar with alpha you know beta charlie and all that stuff alpha bravo
charlie all those i said beta but i was wrong but uh you're a little rusty but those are
multiple syllables which hence my rust uh and you've shortened it to sort of like you know
single syllable words can you talk through the the alphabet that you have to use yeah so and this you
know just to give people a bit of context as to why this is necessary english is a really annoying
language in the sense that like b and t and p like a lot of our letters sound near indistinguishable
so you'd wind up with a lot of typos if you just went with that
there is that nato-phonetic alphabet that you mentioned
but it sounds almost trivial
the difference between a one-syllable word and a two-syllable word
but when you're rattling these things off
it really helps to be as short and concise as possible
so I didn't come up with the alphabet
it kind of comes with Talon or the Talon community package,
which is the most popular kind of collective resource
of Python scripts for Talon.
And essentially it goes A or bat, cap, drum, each, fine, gust, harp.
I'm not forgetting the letters.
I'm forgetting which order they come in.
The only two-syllable one that I know of is J. J is jury.
Some of them are a bit strange. I is sit, which starts with come in. The only two-syllable one I know of is J. J is jury. Some of them are a bit strange.
I is sit, which starts with an S,
but I guess the main sound is an I.
But yeah, the very first thing that I did is,
so I have a Leitner box,
which is essentially this flashcard system.
It's spaced repetition.
The Leitner box is a tool to practice spaced repetition.
And I used this a long time ago when I was trying to learn Japanese.
I use it a little bit for various things at work.
But essentially, I just took all of these letters and put them on flashcards,
and then every day I would kind of drill them.
And it works well.
It works kind of surprisingly well,
to the extent that when someone asks me to spell something,
I have to make the mental effort to use the actual alphabet.
And I've caught myself a couple times now
just rattling off things that don't make sense.
But yeah, it's essentially just this carefully designed language
where each letter sound sounds unique enough
that I don't think I've ever seen the program get it wrong.
And also, numbers are unchanged.
So you would still say 1, 2, 3, 4.
So that's essentially the calculation that they made,
is just finding unique sounds for every possible character can you spell happy for us
harp air pit pit yank give me another one this was fun red uh that one is tricky because r is red
red each drum oh okay also red is a homophone, because I could have used
the past tense of read, right? I read something.
Oh, right, yeah.
Versus the color red. So that brings us to homophones, right?
Yeah.
Which is another huge problem, isn't it?
It doesn't come up as often as I was worried about.
But essentially, yeah. The one that constantly gets me is cite,
because I might say, like, visit my site, and I want S-I-T-E.
What I wind up getting is S-I-G-H-T. And there's
also C-I-T-E, right, to cite an article. So the way that it works is if you've caught yourself,
if you've said something that has this, you have to select that word, which I can talk about a
little bit as well, and then say the word phones. And if the Talon dictionary only has two matches,
it just swaps them and toggles them. If there's more than two, it pops up a little menu
with them being numbered.
So it would say one site with S-I-T-E,
two site the other way, and you would say pick two.
And then it would just replace the currently selected text
with that alternative.
Selecting text is interesting.
The way that I've done it, and truthfully,
there probably is maybe better ways to do this.
I've kind of just gotten stuck in my ways.
You can say, go left, if you want to move the cursor left, the same as the left arrow on your keyboard.
And you can give that a repetition number.
So if I say, go left eighth, it goes left by eight spaces.
Eighth is kind of a weird...
So they're ordinals, right?
Usually you would describe this as like the eighth of the month.
You wouldn't usually say like do this eighth times.
But the reason you don't just use do this once or you don't say like go back eight
is that eight is the vocalization to put the number eight.
So there's like a bit of a conflict.
So you would say go left eighth or go left fifth or go left 123rd.
And it'll perform that action,
which is moving the cursor left, that many times.
You could also say, like, option left third,
because if you hold option and press left, it jumps by a word.
So if I want to go back three words, I would say option left third,
and then to select the word, I would say option shift left,
because that way it does the option left thing again,
but holds shift to select it.
A lot of mental gymnastics, it seems.
And it's similar to the way you might speak different languages.
We've had the luxury of talking to many people across many boundaries
geographically in this world.
And we've spoken with people who don't have English as their first language.
And when we're done with the call, they're like,
whew, you know, like that was tough.
And Jared and I are like, what was the issue?
And they're like, well, that's not our first language. So the whole time we're just constantly playing
mental gymnastics in terms of which word makes sense and constantly
kind of keeping in check. Do you find yourself in that similar scenario? Because you're sort of
always thinking in terms of the nuances. It seems very
nuanced, very tedious with how you have to navigate via your voice.
Yeah. I would say that the interesting thing about it,
it took me a long time to get comfortable with typing,
just as a human growing up, but also learning keyboard shortcuts with my editor.
It is a bit of a mental...
And actually, this was an experience I had initially.
I found myself, if I was writing a blog post,
the tone of my posts took a bit of time to get right.
Like just the changing how I'm outputting this thing
changes the way I think about it almost.
And that to me was a bit like maybe for two or three weeks
I struggled with that.
It's just like you're so used, like the thinking process
is so tightly connected to the typing process.
It's kind of like if you were to write code on a whiteboard. It's
similar in process, but the output
mechanism is different, so it makes it more challenging.
Happily, that's something you get used to,
so it doesn't really bother me anymore.
In terms of
the frustration with the process, the mental effort,
you get used to it.
Now it's sort of become
second nature. In the same way that
it does require a lot of mental overhead to...
If you were performing the same thing with keyboard shortcuts,
if you ever just watch your fingers while you're doing these complex combinations,
it looks kind of wild.
But it's just a matter of you learned this trick and you've practiced it enough
that now it's muscle memory. It's kind of the same deal.
How would you spell the word break?
Well, it depends on which one.
But let's go with the E-A-K.
It would be Bat Red Each Air Crunch. UI library, stop hacking together data sources, and stop trying to figure out those access controls. Start shipping apps that move your business forward. Learn more and try it out
for free today at retool.com slash changelog. Again, retool.com slash changelog. so we're gonna do some live coding via voice josh and you're obviously gonna lead the way
because you're the one who does this i'm not doing it we're we're not good at this you're
you're clearly good at it you did a demo on your site, which is super cool,
but for audio's sake, just to give the listeners
an example they can hear here on the show,
which is also, what are those called, homophones?
When they're the same word, two different meanings,
is that right?
That's right.
Here, here, anyways.
Here, here.
Take us away, Josh.
Do some live coding for us.
What are you going to do?
Set the stage.
What are you going to do?
Yeah, so I'll give this a shot. I should also say that it's all very, Take us away, Josh. Do some live coding for us. What are you going to do? Set the stage. What are you going to do?
I'll give this a shot.
I should also say that the reason this works for me
is I've set up a bunch of little macros
that do standard tasks for me.
If you go ahead and anyone who's listening
and trying to follow along,
the commands that I'm saying won't work for you
because they're custom commands that I've built in.
I'll essentially just do a little audio demo
of how I would go about adding a couple HTML elements
and some styles for them.
And I'll be doing this with React
because that's what my bindings are set up for,
but ultimately it's going to sound quite similar
to if I was just doing it in vanilla HTML and CSS.
So first I have to make sure that I've enabled it
because there we are.
So essentially what I would do is I would start by saying
elm h1.
Actually, I'm going to code a bunch
because I'm already getting distracted.
I'm going to code a bunch of stuff and I'll explain it afterwards.
Yeah, just code it up.
Cool.
Elm h1.
Title, hello world.
Slap elm paragraph.
Say this is a paragraph example.
Go down. Slap second. Style paragraph paragraph. Go down, slap second.
Style paragraph paragraph.
Rule color red.
Rule font size 10.
Go down, slap second.
Styled H1 title.
Rule color brown.
Yeah, I guess that's sufficient.
I was trying to think of other neat little tricks,
but that's essentially it.
I love it.
Yeah, so that's, it's an example.
So just to explain what I did.
I started by just creating a couple
of...
Sorry, I had to disable my voice thing.
I started by creating a couple of elements.
When I say something like elm heading,
elm is my own little word for element.
I get the angled brackets H1
and it moves my cursor between the open
and close tag. Then I said title
hello world, and title is a formatter that just capitalizes every word.
So I get Hello World as a sentence
but with every word capitalized.
I say slap, slap is actually not my own, it's built into it
which just moves the cursor to the end of the line
and adds a new line.
I actually wish this was a keyboard shortcut.
I find it super, super useful.
You can also just do command right and then enter. So you can do it with a keyboard shortcut. I find it super, super useful. You can also just do command right
and then enter.
You can do it with a keyboard.
But it's really nice to have it as a thing you can just utter.
So I did that to add my heading
and then a paragraph.
When I said styled, I think I said styled paragraph
paragraph, that's another
custom thing that I made.
And this is using style components.
Essentially, it's just a way to create a class.
So the first paragraph is the element that I want to target this for.
And then the second one is the actual name.
So I chose a little bit of a redundant thing.
The next thing I said was styled heading 1 title.
In that case it creates, I think I just said styled heading, which defaults to an h1.
It creates an h1 that is called title.
And then when I said rule color red,
rule is my own little shortcut.
And what it does is the next two words that I utter,
the first word becomes the property,
and the second word, or however many words I put after that,
is the value.
And then I have little formatters to add the pixel tags
if I need to and things like that.
What happens if you mess up?
Don't do that. Don't mess up.
A lot of the times,
I just map from whatever I would do with typing.
So I would just say command zip,
and zip is the word for the letter Z.
So I would just undo using the standard keyboard shortcut.
And if I want to undo it,
you can say command zip fourth,
and you'll press command Z three times or four times.
So that's essentially, there probably is
talent-specific ways to do some of this stuff.
I think you can actually just say undo that,
but I just use the keyboard shortcut because it's kind of the same thing in my mind.
Right.
When you're doing this kind of coding,
having had the ability to do it with your hands, still yet even, but just with some pain at some point, but then via voice, is there a preference? Would you prefer to do it with your hands? Do you find it somewhat, maybe even different in the way that what you're able to create with your voice even? There might be an obvious preference, but I'm just not sure. Yeah, no, that's a fair question. I'd say that overall I do think that I prefer typing.
And part of that too is that I have three or four months of dictation practice
and 25 years of typing experience.
So there is a little bit of an asymmetry there just in terms of practice.
I'd say for about 10 to 20% of the things that I do,
dictation actually is better and faster.
So a good example would be creating a styled component, right? If I was to do that with typing, I would have to type
const, C-O-N-S-T, space, the name of the thing, space equals, space, the word styled, dot,
the element, the tick, I'd have to press enter, a second tick, right? There's a lot of like fussing
about, whereas if I say styled title heading or styled heading title, it's much faster to say that than to type all those characters. So there are cases
in which it's faster, but the cases in which it's faster are cases that I do often enough that I've
taken the time to explicitly write a little Python to have that work. For general case,
if you're doing just general data munging or whatever, like non-standard things,
it does feel a fair bit slower. I would say that I'd estimate my dictation speed in terms of raw
output is about a quarter to a third of my typing speed. Now, that's not to say that my overall
output is a quarter to a third, because I think a lot of programming is thinking and planning,
and all of that stuff is unchanged. So, you know, for like, relatively trivial things like implementing a
mockup where there's nothing too wild in the design, that feels quite a bit slower, because a
lot of that is typing. But if it's like solving some hard problem, it's kind of a wash, because
most of your time is spent like thinking and trying to figure out how to solve this problem.
And debugging is similarly just a matter of like,, like write 15 characters and then test it.
And that stuff doesn't take too much longer.
Is there any context switching that goes on in your brain
when you go between the thinking and the dictating?
Because I feel like as I get into flow,
I'm typing and that is second nature.
I'm thinking the solution,
but I'm not really necessarily thinking the keystrokes and the logistics of getting it into the machine.
But because you have to say those out loud, do you find any context switching back and forth between,
what was I trying to do again? Oh yeah, now I'm going to do it. I have to say this, I have to say that.
Or does that also melt away over time?
It does melt away. A couple people have asked me, hey, I sprained my wrist, should I look into this?
And what I tell people is,
if you are not going to be able to type for two months or longer,
give it a shot.
If it's less than two months, probably not worth it.
Granted, it really depends on your situation,
and this is a broad statement.
If you really need to get stuff done, then yeah, go for it.
But in my case, the first couple of months were frustrating and difficult for exactly that reason,
which is the process, it's like you're tripping over your own feet like the process of actually vocalizing
stuff is making you lose your train of thought and it doesn't you can't get into that flow state
because it's you're so focused on the process but definitely i'd say after that those two months
i've gotten to the point now where um it is kind of just second nature and it's just the same thing
as typing it just it becomes muscle memory i guess can it be a muscle if it's your throat i guess that's a muscle a similar kind of muscle memory
yeah different muscles what about scenarios like you probably couldn't go to i mean i'm sure we're
in a pandemic so it sort of limits this but could you do this in a coffee shop you know could you
there are some limitations in terms of your environment that you can be in to do this
maybe well.
I'm assuming you probably could do it in a coffee shop,
but it might be difficult because does talent know your voice in particular?
Is it able to only channel your voice?
I know whenever I'm speaking to even like phone numbers you call,
like 800 numbers for your bank or whatever,
like I can't have anybody in the background saying things
because next thing you know, option one is press instead of option two or,
you know, whatever, like, you know,
any noise in the background totally disrupts the, you know,
the flow of what I'm trying to do. What does it look for you?
So there's kind of two aspects of that, right?
One is like, how much does the environment affect the technology?
And the other is like, just how can you do this when surrounded by people?
Like the other kind of like, does this bother the people around you?
And is it, is it problematic in that way?
For the first one, actually for both of these,
thanks to Emily's talk, Pearl Out Loud,
I discovered that they sell this thing,
it's like you strap it over your face
and it's like a mask with a built-in microphone.
It looks a little silly,
but I imagine that would kind of solve both of these problems
where it really makes it so that your voice
is the only thing being picked up
and it muffles your voice to the point that like, you're probably not disturbing people around you. And
my snarky answer anyway, because a couple of people have said like, you couldn't do this in
an open office, right? It would be it would make working in an open office miserable. And my thing
is always like, isn't it already? Like, is it really gonna make it that much worse?
Pandemic bonus, you get a free mask out of the deal, right?
I thought that too, like, you know, a few months ago, or a couple years ago now,
it would look a little silly, at least in this country
or this part of the world, to be wearing
this face covering. But now it's just
you stand out if you don't.
You can even style it now.
You can bedazzle it if you wanted to.
You'd be like, yeah, that guy's cool.
So you could, if you wanted
to code in a coffee shop,
what about, I suppose...
Pair programming.
Well, yeah, pair programming.
Or anybody else even around you.
I guess people wouldn't get annoyed.
So if you're working from home, I guess my wife hears me speak into a microphone often.
So if I'm speaking my words to code, probably not that big of a deal.
You're talking about slapping people over and over again.
Slap, slap.
Who's that guy slapping over there?
It really depends on your situation.
I'm very privileged in that I have a dedicated home office
so I can lock myself in here and I'm not bothering anybody.
Certainly there is, when I started this,
my partner would occasionally pop his head in and say,
are you talking to me? What's going on in here?
You can be a little self-conscious too.
You're not used to speaking out loud.
It's like a weird thing.
But in my case, I recognize that everyone's situation is different.
If you have a private space, then that really nullifies that concern
once you get over just the self-consciousness of it.
Can you speak to maybe, since you've been doing front-end for quite a while,
and Ally and these various things that we got to deal with in
terms of front end developers like we're the front line in many cases to implement and care about
accessibility can you talk about maybe your transition from i guess everyday front end or
to someone with this this problem that have to like care about i suppose maybe even more because
you're sort of in the trenches with it.
Yeah, so, I mean, actually,
when I started this, the co-worker who suggested this
to me said, even if it doesn't work out,
at the very least, it's an interesting accessibility case
study, because now it's like
an involuntary
being thrown in the deep end of trying
to use the web without a mouse and keyboard.
I should also say that
it started with my left arm, and I'm right-handed. So for the first little bit, it was actually kind of all right with the dictation
because I still had a mouse and I would vocalize. You can even get clever with that, right? Because
as I'm talking, I'm already planning where my next step is going to be so I can have the mouse
right in position. So the second it outputs those characters, I click and I can keep talking.
You get in this nice flow. But then my right arm started exactly the same thing.
Not sure why.
I didn't have the same kind of initial injury,
but my right arm, probably because I started relying so much on my right arm
because I kept my left arm doing absolutely nothing.
And my right arm had to shoulder all of that burden.
But, sorry, what was the question?
Oh, just accessibility.
The empathy, I suppose, because you always care, but things change. Oh, just accessibility. continue to do your job and to enjoy what you do, you know, it probably has to give you a different perspective on implementing and
caring about being a front,
you know,
bringing a front liner essentially in,
in,
in the ally world and accessibility world.
Like the front enders are pretty much who implements that stuff.
So it's us who cares anyways,
but like you double care now.
Yeah.
And that's,
it has been,
you know,
I would have told you before all of this,
that accessibility was important.
I always knew it was important, but it was theoretical.
I had never watched someone struggle to use a thing that I had built
because I neglected to take into account how they were using computers.
It was always this abstract notion.
I want to do this because it's the right thing to do.
Essentially, you're just following a style guide and just hoping that it works.
Whereas now you get to realize that,
this is actually how thing that people,
this is actually how people use the internet.
And it is awful in a lot of cases, because so many websites have neglected the absolute,
the stuff that you get for free, the little focus outline that everyone hides
because they think it's not cosmetic.
Until I got the eye tracker, and we should talk about eye tracking,
I was essentially a keyboard user in terms of how it worked
because I would say the word tab and it would navigate me.
And I could do the same like tab fifth to jump by five spaces.
But that was my way of navigating because I couldn't use a mouse
because my right arm was bothering me and I hadn't yet discovered eye tracking.
That was like a two or three week period, so it wasn't long.
But it was enough, right, just in your day-to-day internet usage.
That like, oh, this is really awful.
And you have to make educated guesses as to what's being focused right now.
If you have a little area in a side panel that isn't scrolled,
and you want to scroll it, I don't know how to do that.
So I would just not do it.
Or I would pull out a mouse and be cursing the person.
Because normally you would use a mouse wheel, but I don't have a mouse wheel. So there's definitely a lot of like empathy that is given through this experience. And it's
just made me like even more appreciate how important this stuff is. And I think it's so
important to recognize that it isn't binary, right? Like you, it's not that like there are disabled
people, which are other people. And then there's non-disabled people, abled people.
We're all somewhere along the spectrum, and it's not immutable.
It changes over time.
Just because you're not experiencing any disabilities right now
doesn't mean that's going to be the case forever.
Really, the best case, unless we all get hit by a bus,
not to be too morbid, the best case is that we get old enough
that our vision starts to deteriorate, our muscle, what's the word where it's like your motor control? Motor is the word I was
looking for. You lose a bit of motor functionality. So there's a lot of little, like, all of us will
be affected by this at some point. And there's even like temporary things. Like I know that
Jen Luker has made this point that like, if you're holding a baby, in that moment you only have access to one hand
and that changes your experience using the web.
So there's a lot of perspective that has been given to me
involuntarily through this process.
That's the fun side of user experience too,
is that you think about all the scenarios your users might be in,
whether they are disabled or they are abled,
or they're temporarily disabled because they have a baby in their left arm
and they've only got the right arm and maybe their dominant arm,
but still yet they're one-handed temporarily.
That's the fun, I suppose, part of being on that front end,
being in user experience and thinking through those fun things.
But you definitely have a different perspective
having gone through something yourself,
temporary or long-term.
Yeah, I'd say that it's also tricky
because it's not just one thing.
It's not just like, my site is accessible
because it's keyboard navigable.
Because what about people that are colorblind?
Can they use it?
Often you have competing of competing interests.
And I'm really into animation.
And this is something I struggle with sometimes,
where for people that have vestibular disorders,
animation can cause motion sickness
and other kind of, you can get nauseous, get a headache.
But animation can also be like a usability win
because it can make things a little bit easier
to understand for people that have cognitive disabilities.
So there is kind of sometimes trade-offs there.
And fortunately, I think browser vendors and operating systems manufacturers
are starting to become aware of this and giving that control to users.
So specifically with motion, there's a media query,
prefers reduced motion.
And that way users can specify,
hey, I don't want to have any of this sweeping motion.
And then the developer still has to take that into account.
But at least we have that control now.
We can tune the experience for the user.
We shouldn't go too far without talking about the eye tracking
because we teased it twice at this point.
It's pretty intriguing.
It's definitely the most sci-fi part of my setup.
Yeah, so before you had eye tracking,
you were basically tabbing around using keyboard navigation
to navigate
everything, your web browser, your operating system. But then you figured out eye tracking.
Tell us about that.
Yeah, so it's actually part of the same software, Talon Voice. They have support for the eye
tracker. And this is very, very easy to get confused. So I want to make sure to be very
explicit. The device that I have is called the Tobii 5. T-O-B-I-I.
And when you go to the device manufacturer's website,
it's this Windows Hello gaming,
augment your gaming skills kind of thing.
It doesn't look like a mouse replacement at all,
and it only supports Windows.
The idea is that the people who built Talon Voice built custom drivers for this piece of hardware.
So even though the intended purpose of this piece of hardware isn't a mouse replacement,
it functions like that cross-platform.
So it works on Mac, Linux, and Windows.
And the idea is, it's a bar that you strap.
It looks like an Xbox Kinect.
It kind of has that kind of an idea.
You strap it to the front of your monitor,
and it has little infrared sensors.
So it can tell where you're looking, essentially.
It's not the most
precise, but they've accounted for that. So the way that it works is you look at where you want
to click, and you make a little popping noise, like a pop, and it zooms way in. So maybe like
a four inch by four inch, four inch by three inch rectangle zooms way in, and now you're like,
because you're so zoomed in, you can make really fine adjustments. So you move your eye a little bit,
and the mouse moves over maybe four inches in real life space,
but it's like a couple dozen pixels because it's so zoomed in,
and you make the popping noise again to actually perform the click.
You can also say righty if you want to right-click.
I don't think this is intentional, but it works.
You can just kind of do like a...
I don't know if that came out clearly,
but like a double pop, but it works. You can just do a double pop
and it will double click.
That's the idea with that.
It tracks where you're looking.
The nice thing is that it's not activated
until you make that popping noise.
There are settings for this.
You can actually have it be always active.
But then it's super distracting
because you have this jittery cursor
that's always right where you're looking.
It's not the best experience.
So this is like, it's out of the way, right?
You don't notice it until you need it,
and then you make a little pop noise, you get the zoom in.
And all of this happens super quickly.
It probably sounds really tedious,
but we're talking maybe 250 milliseconds between both.
You can do it really, really rapidly.
So people asked you, would they set up Talon if they have some pain?
And you said, well, two months or more.
Otherwise, it's not worth the trouble.
Is the eye tracking in that same conversation?
Or could this be generally useful to be awesome and better at computing, being a computer
person?
Yeah.
Just have it available whenever you want it?
And just like, if I need to pop in and pop out, I can be like super computer person?
That's a good question yeah like i imagine if uh and i don't know how uh if this is a combination that is possible but if you can't use a mouse but can use a keyboard then totally
yeah this and actually i can imagine a bunch of cases right because the mouse requires a lot of
like dexterity and key typing may not um totally i could totally see that yeah because there isn't
like you know the learning curve is really around the dictation the eye tracking you get used to in a couple days
and then it's this nice thing that just works
a lot of people the mouse is specifically what gives them the pain
it's the weight of it and dragging it
and so switching to a trackpad
or sometimes they have those ergonomic mice that are vertical
and it's like a ball that you roll around like that
that oftentimes will be good enough
but if not, but you have no trouble typing then maybe eye tracking is for you yeah and there are what
i've come to realize is there's a lot of mouse interactions that i don't even think of that i
use heavily like dragging and dropping is a good example scrolling like using a mouse wheel is
another dragging and dropping you can do.
I don't do it often enough to remember offhand,
but you say something instead of making the pop noise.
So you make the pop to zoom in, then you say something,
and then you move the mouse and say something else to release it in that case.
And it works surprisingly well.
Scrolling, I don't know.
That's one of the activities that I just use the trackpad for now.
I've gotten accustomed enough.
One of the things, too, when I started, I would still have the mouse and keyboard on the desk, and I would forget.
And I wouldn't remember until my elbow starts burning a few minutes later, and I'd regret it the next day.
So I removed all that stuff from my desk. But now I've gotten comfortable enough, both because it's getting better, but also because I've gotten used to this alternative setup,
that I just always have a trackpad.
If I need to scroll, I'll use that.
If I need to click, I'll just use the popping
and it works pretty well.
I think I would have difficulty
learning how to pop like that so quickly
and accurately.
I can do it once.
I'm pretty good at just the once,
but not two times.
Maybe I can do it. Okay, never mind. I'm pretty good.
I can do this.
Yeah, you just learned bring out Toby
let's do it
he's a convert
there you go
alright
it is the kind of thing
where sometimes
if your mouth is dry
like you start noticing
all the subtle
different environmental
factors of your mouth
that affect that
absolutely
I've got
a less than one year old
so I'm always going
to that kid
you know
so unless my lips
are a little bit moist, it ain't happening.
Like it just turns out into like a buzz or something like that.
So listeners, this is the first time you're getting a lot of effects.
A lot of random noises from Adam here.
Put those together and make a beat.
So Josh, do you ever have voice strain or do you ever feel like you're not mentally exhausted?
We've already talked about that aspect, but what about your voice?
Sore throats or any trouble there?
So this is totally something that was the most frustrating thing in the world
where when I got really into the hang of this,
you're speaking for eight hours a day if you're doing a typical workload.
And my throat very quickly got unhappy with that.
And so I was limited to four or five hours a day before my throat would get sore.
And a couple times I let it get too sore and then I had to like take a couple of
days break. Um, and my solution for that is twofold. One is I got a bunch of law. I got like
the family pack of lozenges. So I was going through a couple of those a day. I also got a
humidifier for my office, which is actually on right now and kind of making a nice little mist.
Um, but essentially just making sure that like the, the humidity in my room is always between 50% and 60%. And drinking lots of water is another thing.
It certainly becomes an annoying thing that you have to deal with.
But I imagine that there are people who can do this.
So many careers involve speaking all day.
So I imagine that it's...
And even in the couple months I've been doing it, I've noticed getting a little bit more stamina there
where my voice doesn't give out so easily.
Yeah, I would expect it to build over time.
I know when I switched to a standing desk probably 10 years ago now,
I couldn't stand all day.
It was like an hour here, an hour there,
and then I built up to where I'd stand in the morning, sit in the afternoon,
and then six months later I would stand for six hours.
And now I don't even think about it years later.
It's just like my legs and my feet are just used to that strain
because I just built them up.
So I imagine five years of this,
and you probably wouldn't even think about it in terms of the strain.
But when you get started, it's got to be annoying,
especially because this is your thing that you're doing to fix your problem.
And now it's causing a brand new problem, right?
It does feel a little bit like,
it's just like everything is problem. It does feel a little bit like, ah, how can,
it's just like everything is going wrong all at once.
Yeah, it can be discouraging, especially because, you know,
it's often, you're in a discouraging situation already.
But I always just kind of try to keep on the bright side
and just think that maybe this is a good opportunity to,
and granted, it also didn't help that this was during lockdown,
so it's like, let's go out and do something.
Well, you can't really do that either.
But just take a moment to be present and enjoy.
Essentially, take it as an opportunity.
You're blocked from doing work, but for myself at least,
I find that I'm always raring to get stuff done.
And part of this has just been being comfortable not doing that
and just living your life. And go make a nice meal and spend time with my partner and,
you know, just like do those like nice things that I always didn't save enough time for.
The hard part about monitoring incredibly complex architecture means that you're probably
monitoring with a dozen different tools. And when something something goes wrong you can waste a ton of time jumping between those various tools just
to figure out what happened that's painful our friends at new relic want to change that and
they're giving you one user and 100 gigs a month completely free to try out new relic is three
products in one platform first you bring all your data from any source into the telemetry data platform.
It's a schemaless time series database, so it runs super fast. It's also fully managed,
which means it scales without being a burden on you or your team. And next, you analyze and
visualize that data in full stack observability, which gives you everything you need for monitoring
and troubleshooting. You can follow an issue from metrics to events to traces to logs in a few clicks.
Then things get even easier with automated detection and incident intelligence.
They have applied intelligence, which analyzes your data and system to make sure those key connections are made for you.
If there's an anomaly and make sure the alert goes to the right person and only the right person.
And best of all, they have super simple pricing to make it easy.
Head to NewRelic.com to get started for free with one user and 100 gigs per month is totally free forever again newrelic.com and by our friends
at equinix metal have you ever seen a problem and thought to yourself i bet i could do that better
our friends at equinix agree equinix is the world's digital infrastructure company and they've
been connecting empowering the digital world for over 20 years now.
They just launched a new product called Equinix Metal.
It's built from the ground up to empower developers with low latency, high performance infrastructure anywhere.
We'd love for you to try it out and give them your feedback.
Visit metal.equinix.com slash changelog, get $500 in free credit to play with, plus a rad t-shirt.
Again, metal.equinix.com slash changelog, get $500 in free credit. Equ with plus a rad t-shirt again metal.equinix.com
slash change log at five hundred dollars in free credit equinix metal build freely So this experience has given you renewed vigor with regard to the importance of accessibility.
Anything else you've learned over the last few months as you put this into place and
been able to slowly move back into somewhat more of regular life as a coder?
But what have you learned through this process?
Yeah, I'd say that there's three main takeaways that I've had.
And the first we kind of just talked about is accessibility really matters.
And it is like a real thing, right?
It's not just some abstract good that you do.
It's not just about getting the lighthouse score to feel good about yourself.
It's about like, is this actually a good experience for people?
And how can I verify that?
So that's takeaway number one.
Takeaway number two is a bit more positive,
which is just that it is not catastrophic
if you're not able to type.
It's not career-ending.
It's certainly inconvenient and it takes a few months
to get used to it, but there's an option here
that is viable.
And I think that's, you know, a lot of people worry, right?
People that might have an experience, like a close call,
and it's just always in the back of their mind, like, what if I lose that? And actually,
you mentioned that earlier. So I think that's super, super common. And hopefully this is a
reassuring little bit of just like, there is an option. It's totally viable, right? I could see
myself doing this if my situation doesn't improve. It's totally like, my career isn't going anywhere.
It's sustainable. It may be tedious, but you think you could do this for 10 years and just
20 years.
That's good to know for people.
If worse comes to worst, this is an option for people.
Yeah, absolutely. I think that if you have enough of a will,
the technology exists to provide a way.
So that's the second thing.
The third thing is just don't dilly-dally with the things that you want to do in life.
I've had this idea in the back of my head for a few years now
that I wanted to start some sort of online education thing.
I've been teaching at a boot camp part-time for the past couple years.
It's always been something I've been interested in.
But in my mind, I had like an infinite span of time ahead of me.
And so, like, I'm enjoying my job just working as like an individual contributor.
Why not keep doing that?
And, you know, this experience, as much as this isn't, I consider this kind of a close call in the sense that like, it's not
catastrophic. My life was never in danger, but it was still like enough of a wake up call that like,
you don't have unlimited output, right? Like you have a finite amount of typing you will do in
your life. And if there's something you want to do, like spend that resource wisely. So I left my
job. I was working as a staff software engineer at Gatsby.
I am now self-employed, and I'm building an online course to help teach, I mean, starting
with CSS, but a bunch of stuff to other developers.
Well, congratulations.
A big move.
Is that scary for you, or is it just exciting?
A bit of both.
I should also say that I'm in a very privileged position, which is that my cost of
living is relatively low. I have a decent amount of money saved up. So there isn't a lot of financial
pressure yet. Now, if we get to like a year from now and things aren't going so well, I expect I'll
feel very differently. But as it stands, I have a comfortable cushion and I'm able to just focus on
this thing that I want to do. Really, I just feel really excited about it. It's certainly a thing
that I've wanted to do for a long time,
and it's thrilling to be able to finally do it.
Yeah.
Well, I'll say you're a good writer.
We found your blog post, and I've seen the other things.
And you have an eye for animation and design,
which I think is enviable.
So you're set up, and you have a desire to educate.
So it seems like you're well-positioned.
That being said, training and education
and this kind of thing is a crowded space. There's a lot of people trying to help developers learn things.
So I'm curious, your angle at the industry or your thoughts on what are you trying to build
and why is it interesting or neat in your mind?
Yeah, so it is totally. I am not going to create a resource for learning something
that is not already prevalent, right?
There's already a million ways to learn everything. But my thinking for this has been twofold.
One is that as much as there is educational resources, none of them are me. And everyone
has their own learning style and everyone has their own teaching style. And so it will be a
sort of, you know, it will appeal to some amount of people. It will not appeal to others. And that's kind of the goal, right?
Don't make something that's aimed to be for everybody,
make something that a smaller segment will really appreciate.
And the second way I've been thinking about this is,
find something that is already taught, but cover it from a new angle.
And so the course that I'm building is called CSS for JavaScript Developers.
It's kind of all there in the name.
So many JS developers, and myself included for a long time,
have picked up CSS incidentally.
You learn about properties as you need them,
but you never take the time to understand at a deeper level
what is the rendering algorithm and why does it behave this way?
You run into a problem, you find the solution on Stack Overflow,
you copy-paste a couple snippets and it works,
but you don't know why it works, and next time it breaks, you won't know how to fix it.
There's so many folks in that position.
And all of the resources that teach CSS kind of teach it from the perspective of
a WordPress developer or someone building a static HTML CSS website.
There's not a lot of how to use CSS effectively with React or Vue or Angular.
So that's kind of the angle I'm taking this at.
And it's not so much, a lot of that is just in the framing,
how you cover stuff.
I try to use analogies that will be relevant for JavaScript developers.
Talking about, for example, the cascade in CSS
is actually just a bunch of spread operators put one on top of the other.
So little things like that, trying to find ways to describe content based on things
that JavaScript developers will already know, I don't think that exists.
So I think that'll be a nice bit of fresh air for people.
I tend to agree.
I think that's an interesting angle.
And there's definitely a market there.
There's lots of us who either don't know CSS, are afraid of CSS, or use it in anger, kind of as I described,
which is like, I'm using it because I need to get this thing done,
but I don't know why this works,
and I'm just going to shove it in there,
and, oh, it's slightly off, I'll just move this one or two things,
okay, there it is, never touch it again, right?
There's a lot of people that aren't like that,
but there are plenty of us who are like that.
Notice I'm using the plural form of the first person
because I've definitely had such feels as that over the years.
That's cool.
I think there's definitely a place for people to come into that space
and say, look, CSS is not just something you have to use,
but it's actually something that you can wield
to great success if you understand it better.
Yeah, and what I think is really interesting
is that there's so many people
that are really comfortable with JavaScript,
whether that's vanilla JavaScript or with an application.
And just imagine if you could have that level of comfort
with CSS, you could build whatever you want.
There's all sorts of doors open now
because you have the complete tool.
I'm assuming you know HTML as well.
You have the complete toolkit.
Now you know how to do web development,
start to bottom or start to end, top to bottom.
So yeah, that's kind of the ambition with this
is to get people to feel comfortable with it
and to enjoy tackling it.
Not to say that I never get confused
and have to spend time debugging,
but I always know no matter what mock-up you present me with,
I will be able to find a way to build it
or I'll have a reason as to why the platform doesn't allow for it.
But even if I get stuck on something,
it's a fun challenge in the same way that it is with React
or with anything else.
It's not this foreboding stressful thing
that takes me out of my flow.
So how did you get over the hump personally with CSS?
What brought you from somebody who was maybe in that camp
or you said you had some frustrations with it at one point
to the point where you're like, I can teach this to others
and you must like it if you want to teach it and expand it, right?
Yeah, I mean it's one of those things that probably four or five years ago,
I was frustrated with not being good at it.
So it was a somewhat concerted effort of not just taking things at face value.
So when you find a snippet that works, don't just copy-paste it and move on.
Poke at it. See why does this not work this way.
Go to the MDN documentation and dig into it.
Understand every property, every declaration has like a whole page on MDN, right? You can go to like figure out flex grow and just learn all kinds of little details about it. And
that's kind of what I did for several years. Like I would just never miss an opportunity to dig into
something and just build that intuition, like a working mental model of how does this property
work? How does it interact with all these other properties that can often be paired with?
Why does min-width do funky things
when it's inside a flex container?
I don't actually know the answer to that question
in terms of why, but I know how.
I know how to use it and how to get it to do what I want.
That's the other thing too.
I don't want to make this sound too theoretical.
It's definitely a practical how to build user interfaces
we're not going to talk about browser vendor decisions
we're just going to talk about this is how to do the thing that you want
and this is how it interacts with these other properties
What's the state of this course so far?
Is it in the works? Is there a landing page?
Is it a buy it all, learn it all?
Is it over time? what's the format?
Yeah, so because I'm a developer and because I don't have enough self-control
I'm building my own platform instead of just using an existing one
I do have a good reason for this though
if you've been to my blog, I really enjoy these interactive experimental widgets
and by experimental I mean you can experiment with it.
When I teach at the bootcamp, if I can find a way to make a little interactive thing that people can
play with—I did this when I was covering spring physics most recently—it's just a really, really
nice way to learn things. And none of the platforms that exist will support this. So I'm building my
own platform. It's going to be kind of a self-paced thing. I'm currently aiming for around 15 modules. I have, I think, three that are in rough draft
shape. So I'm still very early in the process, although I've done a lot of the platform
development upfront. So that's probably like 75% of the way there. And now it's just about
doing the material and coming up with good ways to learn something. The goal really is for it to
be multi-modality in the sense that it's not a video course
where you just sit and watch me talk.
There will be videos, but every kind of content serves a purpose.
So a video might be like a high-level introduction or like a
here's how to use the browser dev tools to do this thing in a way that just is so much easier
to watch someone do it.
Articles are a great way because they're indexable.
You can come back to search for them.
You can skip through them really quickly.
Interactive explanations to poke at something
and develop that internal working mental model.
And then exercises, so opportunities to practice,
challenges to build stuff with a solution, stuff like that.
So it's a lot of different formats that I'm hopefully using strategically
in a sense that each of them will play to their own strengths
and produce a really effective, really efficient way
to learn this thing where it's not going to take too much time
and hopefully optimize for that.
Sounds like you have a lot of work still ahead of you.
Yeah, it's definitely early going.
I'm hoping to launch this thing in February of next year
and I'm starting to realize that's a little optimistic.
But that's kind of the plan.
You can learn more, but there is a landing page.
It's css4js.dev.
It's like a play on CSS in JS,
so it's the letter css-in-js.dev.
You can also go to cssinjs.com.
There you'll learn a little bit more about it,
and you can sign up for updates,
and I'll email you with little tidbits as I go along.
Cool.
So the platform's 75% done, so you only have 75% left.
And then the course is three out of 15, so you have 18 more modules and then you'll be
ready to go.
I am very much aware that that last 20% is actually most of the work.
That's all right, though.
If you love what you do, then it's just more of the stuff that you love.
And that is like,
if you like creating this stuff,
then it's just good.
I'm having so much fun with it.
Especially now that I'm able to actually type
for a few hours a day.
It's just, I'm having a blast
and I'm super excited to share more
about how it's going and what it'll look like.
What about building your list in advance?
I know you blog.
Do you have any blogging plans
between now and then
to sort of help you arrive to a room full of people
versus arrive to a room full of nobody?
It's one of those things where I remind myself constantly
that there is no guarantee that this will work.
It's possible I'll launch this and sell very little
and essentially discover that this is just not
the career change I had hoped it was.
But I do have a blog. The blog has a mailing list.
I think I'm at about 16,000 subscribers now, which I think is a pretty healthy number.
And I do still plan to keep blogging.
My blog post will probably take on a little bit more of a CSS twist
because I blog a lot about Gatsby and React and animation.
And I have blogged about CSS as well, but especially now that I kind of
wanted the two to play into each other so that
people who are interested in the blog posts
will have a resource that they can continue
learning if they like my style and
are interested in it.
Speaking of style, I like how you use sound along with animation.
That's a pretty interesting
thing. I'm sure you'll teach about it, but could you
give us a snippet of why those two play well
together and what you like about it? Yeah. Oh, that's such a good question. So I find that,
I mean, everything has its place and this is not something that I would advocate for everywhere,
but mobile applications are really, really good at reaching in to other human senses, right? So
like on the web, we have one, you one. You can see what's happening, but you
don't usually hear websites.
There isn't usually a sound element.
Mobile apps have three.
You can see them, you can hear them,
and you can feel them because there's haptic feedback.
So I find that there's so many mobile apps that just
do a really good job.
And it doesn't have to be over the top.
A little confirmation sound when you click a button,
or tap a button, I guess, on mobile
can be really, really satisfying. And it's the kind of thing that can make a product feel more tangible and real.
It's the same thing with animation. Things in real life don't just, if you click on a link,
or let's say you have an accordion kind of thing, you click on it and it slides down.
Things in real life don't just teleport or get repainted from one frame to
the next. There's a process there. When things move, you can see them. There's individual steps.
So that's why I think animation is so worthwhile, is it makes a thing feel more real. And sound just
adds that, because similarly, things are not silent in real life, right? If you move a thing,
it usually makes a sound. So on my website, which is just my name, joshwcomo.com, you do have to
click somewhere first
because the web API doesn't let you play sound
until you've interacted with the page.
But if you hover over, I think it's just at the top,
it's called Tutorials, there's a little dropdown that pops out
and it makes a little boop sound.
I should also say that I went to school
for audio recording technology.
My only post-secondary education is a trade school
in sound design or sound recording. I have a bit of a background that gives me the ability to make my own sounds
and edit sounds and essentially just try to come up with things that are really appropriate for
the situation. But I do find that it adds so much to the experience. It's one of those little big
details, right? It's not going to change anyone's life or dramatically change their perception, but it's enough to, ah, it catches your attention.
I dig the speaker, I think.
And when you turn the sound on or off, so that way if you have a preference,
you're like, hey, I don't want any sounds.
I can turn it off, and you get that final sound as it goes away,
which is when it comes back, it's sort of like a little digital shocking,
I don't know what it sounds like.
A trill, I think is how I would describe it.
Is that what it is? Okay.
I mean, that's just my own word.
Those are cool.
I appreciate that.
And that is, you know, I mentioned briefly that there's a time and a place for everything.
Not everyone wants sound.
I've gotten some fair criticism that when you sign up for my newsletter,
there's like a trumpety sound.
And people have mentioned that like their volume was way up
and it was startling and uncomfortable and it woke their baby up.
So I've actually made an attempt to tone some of that down.
Unexpected sounds, yeah.
When you have interaction with a sound button or even a nighttime menu
where it's like nighttime or daytime menu to swap the theme,
that's where you would expect potentially some sound
if the designer or the developer was keen on giving you that.
But I can agree with signing up for a newsletter and hearing a trumpet sound, I'd be like,
whoa, did not expect that.
Yeah, my solution for that, because I do like the sound, honestly, is I've set it to like
25% volume.
So it's not going to be like this overblown kind of shocking thing unless you really have
your sound cranked.
But then pretty much, I think if you have your sound that loud,
you're bound to have some sort of unpleasant experience at some point.
It's funny you talk about the sounds, because I just upgraded to Big Sur.
I'm not sure if either one of you guys have yet or use Mac.
But they've redone all the sounds.
And I like them.
I hadn't even thought about it but the trash can sound
is different.
The bell when you hit the wrong button
in your terminal is different.
Delete is different.
I don't really like the redesign all that much.
I'm getting used to it.
The icons and everything.
It seems like a side grade to me
more than an upgrade.
But the sounds, I'm telling you.
It's worth upgrading for the sounds.
It's pretty good. I'm kind of in the of like i've only played with it for a little bit so i upgraded but didn't have time to actually play with the machine i upgraded on and the one sound
i heard was the deletion sound i was like that's different i don't know if i like it i don't have
time to discern if i like it but so far i'm kind of bummed because they've probably changed more.
What else will I find?
Oh, all the sounds are different.
That's the camp I'm in right now.
Yeah.
You're kind of in the who moved my cheese.
Yeah, don't move my cheese.
And if you do, let me know you're going to and give me an opt-out.
No, these are good sounds.
I think, Josh, if you're a sound guy, I think you'll enjoy this upgrade.
I'm excited to do that.
At least to check them all out.
Curious, since we're on that thread then,
the sounds that you have on your site,
you made those sounds?
What's your process?
What did you, did you use a synth?
Did you use your mouth?
What did you do?
So I should say I've made a few of them,
but actually most of them I got from freesound.org,
which is just an online repository.
It's like a lot of not so good.
You kind of have to like sift a little bit,
like there's a diamond in the rough kind of situation. But there's a lot of not so good you kind of have to like sift a little bit like it's a diamond in the rough kind of situation
but there's a lot of good sounds there
and the ones that I did do myself
were usually with my mouth
so I just mute with my microphone
I record a little sound and then modify it
a lot of this you can get really clever and kind of fun
like on my homepage there's a list of categories
and when you hover over them
they make like a little kind of soft pop sound. And that's actually
the sound of a plunger being unstuck,
but I truncated it. So normally it's like a
and I just kind of took off the
opening sound. It makes this satisfying
little pop. So yeah,
that's totally little fun.
You can be really creative when it comes to sound design.
Very similar to your zoom sound.
My zoom sound? Not
exactly the same. When you zoomed into the screen, you're like Oh, right. It's very similar. It's sound my zoom sound not exactly the same when you zoomed into the screen
it's very similar
it's in the same vein
so I can see why you like it
you have to be careful on your own website
it might start to recursively zoom and unzoom
and get stuck on your eye tracker
popping it off and on
well we'll have to put some of those sounds
into this episode Adam
so now you're on the hook to do some extra editing and work some of his sounds
into this conversation.
We'll have to.
Because we promised the listeners it would happen.
Yeah, totally.
It's happening.
All right, Josh, anything that we missed or forgot or anything else you want to talk about
or questions you wish we would have asked and we failed because we suck at this?
You know, I think we covered everything. I'm really thrilled with the chance to be able to
talk about it. I think that it's, you know, I mean, the main thing that I hope people get out
of this is just some reassurance that if they're worried about having some sort of injury,
this is a totally viable path. And also just don't neglect to make sure you take care of
accessibility because it's super important.
Absolutely.
And I just love the, it's just a very small but a human spirit kind of,
you know, you can't keep us down kind of a thing.
Like, well, we're just going to find a way around this problem, you know.
And we've done that and you've done that.
And it's very cool.
It's a great story.
In fact, I remember seeing Emily Shea's talk back in the day and wanting to get her on the changelog.
And then when I saw your post
and then I saw you reference her,
I'm like, oh, this is it.
Josh has to come on the changelog and tell us about this
because it's such a cool thing
to see people when faced with adversity
say, yeah, I'm just going to figure out something else
and I'm going to keep doing my thing.
And that's pretty neat.
I think that's so much of what we do as developers.
The thing isn't working, we have to find a workaround.
And that's just what I did with this.
And granted, I want to make sure that Emily and Tavis
and the whole Talon community get a whole bunch of credit
because I probably wouldn't have been able to do this
without the existing infrastructure and ecosystem
because it's an overwhelming problem,
but the technology makes it feasible.
So many people just will crumble under their adversity. ecosystem because it's an overwhelming problem but the technology makes it feasible yeah so many
people just just will crumble under their adversity it seems like you've definitely found a way to
thrive and that's obviously enabled by others like you'd mentioned but yeah i admire that about you
that you didn't just say oh this circumstance is terrible i quit you know that you persevered
and then you shared your story which is is the important part. Obviously, we're kind of biased towards sharing stories because we are podcasters,
but we appreciate that about folks in our industry because even though things happen that aren't great
or aren't desirable by everybody or even in circumstances that's just not something you want to be involved in,
that you can still sort of find a hopeful path and share that perspective and story because there's going to be, as you'd mentioned early in
the show, at some point you may have a baby in your arms, you may be 80, you may be in a circumstance
where, you know, you're not abled like you are today. And to give hope whenever that happens,
I think is important.
Appreciate that. Yeah, I mean, it's,. I almost want to shy away and deflect some of that because ultimately it's like, what else would I?
It's kind of, I had no choice.
Of course, I'm going to try to do what I can.
But the point is well taken.
And certainly the hope is that people do have a little bit less weight on their shoulders if this is something they're worried about.
Absolutely.
Well, Josh, thank you so much for sharing your story and sharing your time with us
and giving people hope. We appreciate that. Thank you.
Awesome. Thank you both.
That's it for this episode of The Change Law. Thanks for tuning in. If you haven't heard,
we launched Change Law Plus Plus. If you love our content, take it to the next level by showing
your support. We want to take you closer to the metal with no ads. Learn more and join at We'll see you next week. Thank you. Bye.