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.