WEBVTT captioned by hannah, checked by sachac
NOTE Introduction
00:00:01.380 --> 00:00:06.319
Hi everyone, my name is Jeremy Friesen, pronouns are he/him,
00:00:06.320 --> 00:00:07.879
and today I'll be talking about
00:00:07.880 --> 00:00:11.519
mentoring VS Coders as an Emacs-ian.
00:00:11.520 --> 00:00:14.999
A little bit of background, since 2015, I've mentored
00:00:15.000 --> 00:00:16.559
about 40 software developers,
00:00:16.560 --> 00:00:19.239
many of them in career-transitioning roles,
00:00:19.240 --> 00:00:21.739
oftentimes from boot camps.
00:00:21.740 --> 00:00:26.739
I've also managed a couple of small software development teams.
NOTE Framing approaches
00:00:26.740 --> 00:00:30.599
So I want to think about mentoring and the framing approaches.
00:00:30.600 --> 00:00:32.939
We all don't know what we don't know.
00:00:32.940 --> 00:00:36.419
So while mentoring, I like to be curious---asking questions,
00:00:36.420 --> 00:00:37.659
I like to be visible,
00:00:37.660 --> 00:00:41.939
and I also like to pair so that we can share.
NOTE What are you looking to learn?
00:00:41.940 --> 00:00:45.299
When I start, I like to ask the following type of question:
00:00:45.300 --> 00:00:47.119
"What have you been wanting to learn more of,
00:00:47.120 --> 00:00:49.359
get better at, and improve on?"
00:00:49.360 --> 00:00:52.939
Then I like to ask further questions to get an understanding
00:00:52.940 --> 00:00:55.159
of where they've been, where they're going,
00:00:55.160 --> 00:00:57.279
and what they'd like to achieve.
00:00:57.280 --> 00:01:00.139
Later I'll ask coaching questions, "what's going well,"
00:01:00.140 --> 00:01:01.419
"where are you getting stuck,"
00:01:01.420 --> 00:01:05.999
and "if you change one thing, what would it be?"
NOTE Make the work visible
00:01:06.000 --> 00:01:09.839
So like many people, I shifted to remote work in 2020,
00:01:09.840 --> 00:01:13.159
and I've noticed a higher collaboration in remote work,
00:01:13.160 --> 00:01:15.919
when folks make their work visible.
00:01:15.920 --> 00:01:18.199
So to do that I host office hours,
00:01:18.200 --> 00:01:20.679
I try to attend other people's office hours,
00:01:20.680 --> 00:01:23.439
and I'll open up a Slack huddle and just code by myself,
00:01:23.440 --> 00:01:29.319
but let folks know, please hop in.
NOTE Hop in and be curious
00:01:29.320 --> 00:01:32.039
I like to pay attention to other huddles that start.
00:01:32.040 --> 00:01:35.239
If they're going still for, like, 45 minutes or so,
00:01:35.240 --> 00:01:36.799
I'll hop in and say hello.
00:01:36.800 --> 00:01:39.399
It's even odds that they're moving along just fine
00:01:39.400 --> 00:01:40.799
or that they're stuck.
00:01:40.800 --> 00:01:43.279
So by hopping into the Slack huddle,
00:01:43.280 --> 00:01:45.479
I'm helping with a common problem.
00:01:45.480 --> 00:01:47.199
How do you know when you're stuck?
00:01:47.200 --> 00:01:50.639
This is something that---as a manager---folks want to know,
00:01:50.640 --> 00:01:53.439
how can I get unstuck faster?
00:01:53.440 --> 00:01:57.119
As a human, it can be frustrating to be stuck for a long time,
00:01:57.120 --> 00:01:58.599
but you also learn stuff
00:01:58.600 --> 00:02:00.759
when you're dealing with the hard things.
00:02:00.760 --> 00:02:03.219
So you really need to balance that time,
00:02:03.220 --> 00:02:07.159
and I find hopping in, just being a gentle presence,
00:02:07.160 --> 00:02:10.359
with yes... an agenda, but just to say hi,
00:02:10.360 --> 00:02:15.879
is crucial to help the team members move along.
NOTE Pairing is for sharing
00:02:15.880 --> 00:02:17.239
Pairing is for sharing.
00:02:17.240 --> 00:02:19.919
When I pair, I like to let others drive.
00:02:19.920 --> 00:02:22.239
They're typing and working to resolve the problem.
00:02:22.240 --> 00:02:24.599
I'm giving guidance, asking questions,
00:02:24.600 --> 00:02:27.119
maybe thinking through a refactor.
00:02:27.120 --> 00:02:31.159
I'm also spending time observing how they interact with their editor.
00:02:31.160 --> 00:02:35.839
In the moment, I try to limit advice to, like, one concept.
00:02:35.840 --> 00:02:37.799
A lot of folks don't know that `Control-a`
00:02:37.800 --> 00:02:39.719
will take you to the beginning of line.
00:02:39.720 --> 00:02:42.679
Just sharing that is huge sometimes.
00:02:42.680 --> 00:02:46.919
Just gently do it and let it float there.
00:02:46.920 --> 00:02:48.919
And assuming we have a regular mentoring session,
00:02:48.920 --> 00:02:50.399
I'll make sure to ask how they're feeling
00:02:50.400 --> 00:02:52.679
about using their tools afterwards.
00:02:52.680 --> 00:02:55.679
I would love to get to the point where they ask,
00:02:55.680 --> 00:02:58.759
"You saw me using my editor, what is something
00:02:58.760 --> 00:03:00.959
I could learn?"
00:03:00.960 --> 00:03:03.859
I'm working on getting to that point.
NOTE Editor functions
00:03:03.860 --> 00:03:05.199
While pairing, I like to pay attention
00:03:05.200 --> 00:03:07.439
to how folks handle the following.
00:03:07.440 --> 00:03:08.559
Where do they want to go?
00:03:08.560 --> 00:03:10.759
How do they get there?
00:03:10.760 --> 00:03:12.079
Here they are, now what?
00:03:12.080 --> 00:03:13.599
How do they summarize?
00:03:13.600 --> 00:03:15.239
I know what I can do in Emacs,
00:03:15.240 --> 00:03:17.399
and I assume that VS Code can do something similar.
00:03:17.400 --> 00:03:23.239
It's a matter of helping the mentees find those packages and plugins.
NOTE Where do they want to go?
00:03:23.240 --> 00:03:24.239
Where to go?
00:03:24.240 --> 00:03:25.759
Search within a project.
00:03:25.760 --> 00:03:27.999
Everybody knows about this, but one thing
00:03:28.000 --> 00:03:29.799
that has been really critical for me
00:03:29.800 --> 00:03:31.959
has been the arrival of `Orderless`.
00:03:31.960 --> 00:03:34.759
A little quick demonstration.
00:03:34.760 --> 00:03:40.719
If I look, and I have this "chicken" and I do "spell",
00:03:40.720 --> 00:03:42.200
I have found one, and they don't have
00:03:42.201 --> 00:03:43.380
to be in the right order.
00:03:43.381 --> 00:03:48.039
In fact, I can go back, and "spell" is there.
00:03:48.040 --> 00:03:52.759
Super easy, helpful, so I don't have to think about it, the order.
00:03:52.760 --> 00:03:54.719
Search across projects.
00:03:54.720 --> 00:03:59.519
Cross-repository searching is super-simple in Emacs,
00:03:59.520 --> 00:04:02.739
and I've never seen anyone do it in VS Code.
00:04:02.740 --> 00:04:05.639
I'm also trying to introduce folks to command-line tools
00:04:05.640 --> 00:04:07.959
such as RipGrep and SilverSearcher,
00:04:07.960 --> 00:04:10.639
not just to look in the project, but to go one directory up
00:04:10.640 --> 00:04:11.999
and look across projects
00:04:12.000 --> 00:04:15.059
because sometimes when you're working on lots of different projects,
00:04:15.060 --> 00:04:19.959
there might be solutions or ideas that come from there.
00:04:19.960 --> 00:04:23.239
Also notice that a lot of people use directory trees to navigate,
00:04:23.240 --> 00:04:25.599
but I favor the fuzzy text.
00:04:25.600 --> 00:04:27.759
So I can do something like `Command-t`
00:04:27.760 --> 00:04:31.279
and start looking for things in there.
00:04:31.280 --> 00:04:33.759
I just type the name of the file.
00:04:33.760 --> 00:04:35.319
I use `consult-projectile`,
00:04:35.320 --> 00:04:39.539
which has a lot of really cool functionality.
00:04:39.540 --> 00:04:43.079
The big one being I can type `r`, recent file.
00:04:43.080 --> 00:04:47.719
I can type `p` and jump to a different project,
00:04:47.720 --> 00:04:53.439
so it's a quick navigation tool that I've not seen in VS Code.
NOTE How do they get there?
00:04:53.440 --> 00:04:56.519
Next up is how do they get there?
00:04:56.520 --> 00:04:58.959
I like to use LSP for the languages,
00:04:58.960 --> 00:05:02.879
and I bound `M-.` to this
00:05:02.880 --> 00:05:05.519
and jump back and forth to definitions.
00:05:05.520 --> 00:05:09.439
I just showed `projectile` or `consult-projectile`
00:05:09.440 --> 00:05:12.859
and its super-amazing multifunction finder.
00:05:12.860 --> 00:05:15.519
Also another one that I am very avid about
00:05:15.520 --> 00:05:19.519
is the jump between definition and test.
00:05:19.520 --> 00:05:22.839
I bind that to `Super-.`
00:05:22.840 --> 00:05:25.839
and it helps me jump back and forth
00:05:25.840 --> 00:05:28.519
between my production code and my test code---
00:05:28.520 --> 00:05:32.119
especially in Ruby, there's an idiom for that.
00:05:32.120 --> 00:05:36.639
There is plugins in VS Code that does this correctly.
NOTE Here they are, now what?
00:05:36.640 --> 00:05:39.399
Next up, now I'm here, what do I do?
00:05:39.400 --> 00:05:44.599
Word completion, Emacs just knocks everything out of the park:
00:05:44.600 --> 00:05:48.199
`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`.
00:05:48.200 --> 00:05:52.079
Sometimes it just hurts to watch people type stuff
00:05:52.080 --> 00:05:54.319
that they could quickly expand
00:05:54.320 --> 00:05:56.299
because there are words within the code.
00:05:56.300 --> 00:05:57.919
Another one is auto-formatting.
00:05:57.920 --> 00:06:00.039
Tree sitter...its arrival is great.
00:06:00.040 --> 00:06:01.479
I assume this is going to get better.
00:06:01.480 --> 00:06:04.919
I love highlighting a region, hitting `TAB`, and it's just formatted.
00:06:04.920 --> 00:06:08.760
I've seen a lot of VS Coders... that doesn't work for them.
00:06:08.761 --> 00:06:11.079
Don't know why, trying to get them to see it.
00:06:11.080 --> 00:06:12.900
Multi-cursor [`multiple-cursors`] and `iedit`...
00:06:12.901 --> 00:06:14.799
took me a long time to explore `iedit`,
00:06:14.800 --> 00:06:17.839
but the practice... but practicing was huge,
00:06:17.840 --> 00:06:21.479
and it has transformed my approach to coding and typing.
00:06:21.480 --> 00:06:24.519
Folks know about multi-cursor editing and editing-in-region
00:06:24.520 --> 00:06:27.919
but make sure that they are aware of it.
00:06:27.920 --> 00:06:29.719
It's important.
00:06:29.720 --> 00:06:32.619
Next up is inline searching.
00:06:32.620 --> 00:06:35.199
My beloved Textmate... it was the first thing.
00:06:35.200 --> 00:06:38.439
In fact, it was why I chose not to use Emacs in 2005
00:06:38.440 --> 00:06:41.679
and went with Textmate.
00:06:41.680 --> 00:06:43.759
This is something quite simple.
00:06:43.760 --> 00:06:49.999
I can do `search` within here, and I can see "introduced",
00:06:50.000 --> 00:06:52.239
and it will show me the line.
00:06:52.240 --> 00:06:54.119
What I like about that is when I'm in code,
00:06:54.120 --> 00:06:56.319
I can see the neighborhood of other things
00:06:56.320 --> 00:06:58.359
and get a good idea of what's around.
00:06:58.360 --> 00:07:01.639
Yes, there is `occur-mode` that can be super useful,
00:07:01.640 --> 00:07:03.839
but I'm used to the Textmate in it.
00:07:03.840 --> 00:07:06.639
I just love it.
NOTE How do they summarize?
00:07:06.640 --> 00:07:08.679
Next up is how they summarize.
00:07:08.680 --> 00:07:11.719
I've seen a lot of bootcamp graduates write commit messages
00:07:11.720 --> 00:07:14.379
by going to the command line.
00:07:14.380 --> 00:07:17.039
In my experience, commit messages written in the command line
00:07:17.040 --> 00:07:18.199
tend to be terse.
00:07:18.200 --> 00:07:19.159
They miss something.
00:07:19.160 --> 00:07:23.479
So I try to really quickly shift folks to use their text editor,
00:07:23.480 --> 00:07:24.399
encourage them and
00:07:24.400 --> 00:07:28.039
teach them about `$GIT_EDITOR` and `$EDITOR` for the environment variables
00:07:28.040 --> 00:07:30.999
so they can make their commits from the command line.
00:07:31.000 --> 00:07:34.199
And if not there, help them improve how they do VS Code.
00:07:34.200 --> 00:07:35.919
My little screed at the top:
00:07:35.920 --> 00:07:38.959
the interface for VS Code's commit is trash.
00:07:38.960 --> 00:07:44.439
It is why I stepped away from VS Code when I was exploring editors.
NOTE General strategies
00:07:44.440 --> 00:07:48.439
Next up, my goal is to encourage folks to use editors for writing,
00:07:48.440 --> 00:07:52.059
to think about owning that tool.
NOTE Commit to one item of learning each week
00:07:52.060 --> 00:07:54.679
I have them try to learn one thing a week.
00:07:54.680 --> 00:07:55.919
Maybe they aren't going to learn it,
00:07:55.920 --> 00:07:57.799
but just not to overwhelm them
00:07:57.800 --> 00:07:59.879
and find those high-value things.
00:07:59.880 --> 00:08:03.719
Jump to spec, jump to code... super-valuable
00:08:03.720 --> 00:08:06.519
because I see folks doing it a lot during the day,
00:08:06.520 --> 00:08:10.079
and it can really speed up the transition time
00:08:10.080 --> 00:08:12.759
and keep the focus between the test...
00:08:12.760 --> 00:08:15.479
what you're trying to test and what you're trying to define,
00:08:15.480 --> 00:08:18.959
which can get lost if you do the tree navigation.
NOTE Practice within your knowledge domain
00:08:18.960 --> 00:08:22.879
Also I encourage people to practice their domain knowledge.
00:08:22.880 --> 00:08:27.159
I learned a lot about programming by doing a bunch of things
00:08:27.160 --> 00:08:30.019
related to RPGs---role-playing games.
00:08:30.020 --> 00:08:33.119
I did this previously in Ruby---dice rollers, note takers,
00:08:33.120 --> 00:08:35.879
random table lookups---and now I'm doing it in Emacs.
00:08:35.880 --> 00:08:40.519
Knowing the domain helps me set aside the problem space
00:08:40.520 --> 00:08:41.999
and then explore how I code
00:08:42.000 --> 00:08:47.119
and how I can implement things differently.
NOTE Note-taking
00:08:47.120 --> 00:08:51.239
Note-taking: pay attention to how folks create a fleeting note.
00:08:51.240 --> 00:08:54.639
It can be excruciating as they try to figure out
00:08:54.640 --> 00:08:55.599
"where am I going to put this?"
00:08:55.600 --> 00:08:56.159
"What file?"
00:08:56.160 --> 00:08:57.659
"Where does it go?"
00:08:57.660 --> 00:09:01.759
Emacs, we have the *scratch* buffer or anything else,
00:09:01.760 --> 00:09:07.119
but ask them about their note-taking habits
NOTE Help them navigate the proprietary software tar pits
00:09:07.120 --> 00:09:11.639
and help them navigate the proprietary software tar pits.
00:09:11.640 --> 00:09:14.359
We know that anything that is venture-capital funded
00:09:14.360 --> 00:09:16.039
will eventually collapse.
00:09:16.040 --> 00:09:20.919
We know that things that don't have a sustainable business model
00:09:20.920 --> 00:09:22.399
without surveillance capitalism
00:09:22.400 --> 00:09:25.299
is going to also have problems.
00:09:25.300 --> 00:09:28.559
Encourage folks to think about how they're owning their notes.
00:09:28.560 --> 00:09:30.639
Do they place true value on those,
00:09:30.640 --> 00:09:33.119
or are they things that are kind of ephemeral?
00:09:33.120 --> 00:09:38.519
And then help them find the thing that makes sense for them.
NOTE Help show the joy of holisting computering
00:09:38.520 --> 00:09:43.239
Put another way, I want people to think holistically
00:09:43.240 --> 00:09:47.739
about their generalized "computering" environment.
NOTE Playing is for staying
00:09:47.740 --> 00:09:50.079
And I also think about the reason why
00:09:50.080 --> 00:09:53.679
I've stayed a software developer for 25-years plus
00:09:53.680 --> 00:09:57.999
is because I approach all of this as play and storytelling.
00:09:58.000 --> 00:10:02.439
Sometimes happy byproduct is that I ship features and documentation
00:10:02.440 --> 00:10:05.199
and help people get stuff done.
00:10:05.200 --> 00:10:07.959
Yet I don't tell folks to use Emacs.
00:10:07.960 --> 00:10:10.719
Instead, I'm doing my best to show a myriad of reasons
00:10:10.720 --> 00:10:14.899
for why folks should consider Emacs.
NOTE Conclusion
00:10:14.900 --> 00:10:18.739
In conclusion, ask questions.
00:10:18.740 --> 00:10:22.399
Find a person who is a VS Coder and just say,
00:10:22.400 --> 00:10:23.879
"hey, I learned something new."
00:10:23.880 --> 00:10:26.719
We play this game all the time, me and my coworker Kirk.
00:10:26.720 --> 00:10:27.699
I love it.
00:10:27.700 --> 00:10:31.479
Another goal is showing the malleability of Emacs,
00:10:31.480 --> 00:10:34.399
how easy it is to extend.
00:10:34.400 --> 00:10:36.679
And obviously there's so much more than what I've highlighted,
00:10:36.680 --> 00:10:38.719
but then again, that's Emacs.
00:10:38.720 --> 00:10:44.200
Thank you, and I look forward to your questions.