Reuven M. Lerner Profile picture
Oct 15, 2020 20 tweets 4 min read Read on X
Some thoughts on teaching online (a thread).

Background: I've done corporate #Python and data-science training for 20 years. Even before the pandemic, I taught live, online courses (via WebEx and Zoom) at least 1 week/month. I also offer many video (recorded) courses.
My work slowed down in April-May, when companies didn't know what was happening.

Training is now about where it was before. Except it's 100% online.

I teach everything from "Python for non-programmers" to "intro to data science." 5 days/week, 4-8 hours/day. All online.
I've learned a lot in this time, and want to share these thoughts with others — learners (no pun intended), teachers, and training managers.

Also: I teach adults at companies. I have huge respect and sympathy for schoolteachers who have been thrust into this world.
Live video, for all participants, matters. I know, it's a bandwidth hog. People don't want others to see their kitchen/children/dog/bad hair/PJs. But everyone on camera means more attention, seriousness, and questions. It makes a big difference to the learning.
Company culture matters. Some companies have done online courses for years. For many others, it's completely new. The difference is clear. At some companies, my students obviously don't pay attention, putting my window in a corner while they do "real" work. It's frustrating.
Keeping people engaged matters. An instructor who reads a slide deck is bad in general, and absolutely horrible when teaching online. Find ways to keep them interested, attentive, and participating. Fill the (virtual) room with your enthusiasm. Encourage tons of interactions.
For example: I haven't used slides in many years. Instead, I live-code into #Jupyter while teaching. If they ask a question, I can answer it, live-coding as part of the course.
(As a geeky aside: I use "gitautopush" to make my notebooks available in almost real time to my students, which allows them to review what I've done without asking me to scroll up and down.)
Also: When I review an exercise, I invite people to send me (privately) non-working code for public review. The fixes are usually small. And the odds are good that others made similar mistakes, and can learn from the discussion.
Which reminds me: Encourage people to keep the chat public, not private between the student and the instructor. Lots of people chatting privately doesn't make for a group learning experience.
Even before the pandemic, companies were trying to figure out how to incorporate technology and the Internet into training. But even the companies that are most interested in using technology have recognized
that there's no substitute for live interactions with an instructor.
With the pandemic, and with lots of people working from home (and often dealing with children), my clients are experimenting. I'm experimenting along with them.
For example: I used to only give full-day courses. Many clients now request half-day sessions. This has been surprisingly successful, especially in an era when I don't have to worry about travel time.
(Of course, it means I need to plan and budget my time more carefully. I don't have a full day to adjust my timing, if something goes over or under.)
Some clients have asked for 90-minute courses on specific topics. It's hard, in that time frame, to balance content, lecture, and practice. But these allow people to take courses even when juggling home issues, which is good. And they fit more easily into my schedule, too.
I've also had growing interest in mixed-mode courses: Companies are buying my recorded classes, supplementing them with live office hours for Q&A or in-depth discussions. These give everyone lots of flexibility.
That said, many employees don't have the discipline, time, or interest to watch an 8-hour video course. (And some of mine are even longer than that.) Which brings us back to square one.
The technologies that I use, Zoom and WebEx, are good but need to be better. Zoom is trying hard to improve; I've recently seen numerous small-but-important changes. I certainly prefer it as a solution. WebEx is clunky and stiff, and has more screen-share delays.
The training industry isn't going away, but it is changing. We all need to be willing to experiment -- teachers, employees, and employers -- and to shed things that aren't working.
I'm curious to hear what others are experiencing and saying. I'm sure that my experiences aren't unique.

And hey, if your company wants some Python training... hit me up! I'd be delighted to chat.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Reuven M. Lerner

Reuven M. Lerner Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @reuvenmlerner

Nov 15, 2022
So you've learned #Python. Now what?

Lots of people ask me how they can translate their knowledge of Python into a new career path. The thing is, no one is looking for people who know Python. Rather, they're looking for people who know how to solve problems using Python.
Consider this: No one will hire you to speak a foreign language. But they will hire you to:

• translate to/from a foreign language
• conduct business negotiations in a foreign language
• be a tour guide in a foreign language
• edit advertising copy in a foreign language
The foreign language skills are necessary, but not sufficient, to put your career on a new trajectory.

Similarly, knowing Python is necessary, but not sufficient, for improving your career.
Read 12 tweets
Nov 14, 2022
Did you know that #Python only supports two kinds of arguments?

I don't mean data types. Python functions (if we ignore type hints) don't care about those. Rather, there are only two ways that Python can take arguments and assign them to parameters.

Let's back up a moment.
When we call a function, we can pass it one or more arguments. These can be:

1. Positional arguments, assigned to parameters based on their positions and
2. Keyword arguments, assigned to parameters based on explicit name-value pairs.

That's it! There are no other types.
For example, consider:

def add(first, second):
return first + second

It has two parameters, first and second. We can call it with two positional arguments:

add(10, 20)

We can tell that they're positional arguments, because they are just values.
Read 11 tweets
Oct 14, 2022
In #Python, what's the difference between:

x = [i ** 2 for i in range(1_000_000)]

and

y = (i ** 2 for i in range(1_000_000))

Do x and y have the same values? Are they interchangeable?

The answer, as always, is: Yes and no.
x is a list. We know this because we assigned it the result of running a list comprehension — that's what the [] indicate.

y, by contrast, is a generator. We know this because we used a generator expression — which looks the same as a list comprehension, but uses () instead.
So no, x and y aren't the same type.

But lists and generators are both iterable. So if we're planning to put x in a position where we'll iterate over it, you can use y instead.
Read 7 tweets
Oct 13, 2022
Given this #Python 🐍 code:

x = 100

for i in range(100):
x = i ** 2

print(x)

What will be printed?
Answer: 9801.

It's easy to assume that entering an indented block means you've entered a new (local) scope.

But you haven't.

In this code, there's only one x. We assign to it both outside and inside of the loop.

There's no function, so there's no new, local scope.
Moreover, i (the loop variable) isn't private/local to the loop, either — it remains defined, with a value of 99, after the loop exits.

And x ends up being 99 squared, aka 9801.

If this code is in a function body, both x and i are local.

If not, they're both global.
Read 4 tweets
Aug 1, 2022
Hi there! 👋 I'm Reuven, and I've been teaching Python and data science around the world since 1995.

Just about every day, my students ask great questions.

I tweet the best ones (and my answers), especially when they force me to rethink what I know about Python or teaching.
I share content elsewhere, too:

— My weekly newsletter about Python and software engineering (BetterDevelopersWeekly.com)
— My YouTube channel (YouTube.com/reuvenlerner)
— My weekly newsletter about corporate training (TrainerWeekly.com)
— My blog (lerner.co.il/blog/)
I'm also a frequent conference speaker. Some of my best-known talks are:

— Practical Decorators, PyCon '19:
— Function Dissection Lab, PyCon '20:
— Generators, coroutines, and nanoservices, EuroPython '21:
Read 13 tweets
Apr 25, 2022
In today's #Python class, someone asked which was faster, given s = 'a b c':

x,y,z = s.split() # unpacking

or

fields = s.split() # explicit assignment
x = fields[0]
y = fields[1]
z = fields[2]

Let's find out! A thread...
First, let's put these two snippets of code into functions:

def unpack():
s = 'a b c'
x,y,z = s.split()

def assign():
s = 'a b c'
fields = s.split()
x = fields[0]
y = fields[1]
z = fields[2]

Why put them in functions? To disassemble them!
import dis
dis.dis(unpack)

My favorite part is this:

10 UNPACK_SEQUENCE 3
12 STORE_FAST 1 (x)
14 STORE_FAST 2 (y)
16 STORE_FAST 3 (z)

Unpacking is one bytecode, followed by three assignments.
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(