BRUCE ELGORT: It was the summer of 1981.
I enrolled prior to my freshman year of college in a Fortran 77 class.
And it kicked my butt it really did.
It was a short-term class.
I had to write out my code on this columnar type of paper.
Once I had the solution to the assignment at hand, I then-- whoops--
I then had to punch, using a punch card machine, a stack of cards.
Hopefully, I didn't drop it on the way to the decsystem 10 computer lab
that we had at school.
And hopefully-- whoops--
it's a little delayed here.
Hopefully, when the printout showed up maybe 4.5 hours later, hopefully
my code was right.
But I'm sure you can guess that most times, it was not.
And I had to repeat that process over and over again.
And sometimes it took days to get a simple assignment completed, 1981.
So this course that I enrolled in was much like CS50 is today.
It was a personalized, self-paced, instructional course, again, in 1981.
We had no internet.
We had no screens.
We had a textbook and some TAs.
We also had an honor code that we had to adhere to as well,
again, much like the CS50 syllabus has today.
So March 2021, I receive an email from Professor Sara Read,
at Portland State University.
And she's like, hey--
there was more to the email.
Hey, Bruce, I heard that you teach coding at Clark College.
And would you be interested, during the summer of 2021,
to teach a coding bootcamp using CS50?
And I was like, CS50, what the heck is CS50?
So I did probably like a lot of you did.
I enrolled in CS50.
I was immediately hooked, like you all.
It had accessible content and tools.
And what I enjoyed most was interactive educational theater,
much like was discussed over the last couple of days here.
And it reminded me of my pedagogy that I've been delivering in my classes.
I didn't have the cool kind of props that they have here,
but I had some pretty cool props, OK?
So the course that I taught during the summer of 2021 involved--
it was an eight-week course.
It used five modules from CS50X, and it was
taught to people really not interested in learning how to code.
They were students, graduate students, enrolled in the professional
and technical writing program.
And it was a lot of fun.
There were 20 students at the time.
We weren't using Visual Studio code.
We were using the CS50 IDE.
So again, we used the scratch module.
Everyone loves that.
We spent two weeks on C, two weeks on arrays, two weeks on algorithms.
And then we wrapped things up with HTML, CSS, and JavaScript.
It went really well.
These professional and technical writers would often
be sitting at the table with software engineers,
in the Pacific Northwest, from where I'm from, in what we call Silicon Forest.
So in 2022, I came back, and I reworked the course after the CS50P.
The Introduction to Programming with Python course was released.
And I took it.
I loved it.
It was a great course.
But we did slip in that scratch module in the beginning.
And I also included modules on markdown because that was something
that these particular students would be asked to do most likely at their job.
OK?
So here's a quote from Dr. Read about CS50.
And I'm going to read it here.
And it says, "At Portland State University,
CS50 has been the foundation for a coding literacy course
for students in the master's in professional and technical writing
program.
The CS50 curriculum is an excellent foundation
for all students new to computer science because it
begins by building a conceptual foundation for computing
and coding before immersing students in the challenge of learning
new languages."
But this second part really resonates with me.
"For many students, especially those coming
from outside of technical disciplines, learning the how and the why of
computing and coding before being plunged
into learning the details of new syntaxes and grammars
aligns learning computer science with other ways
of learning that they already practice that, it
can be hard to find conceptual first instruction in computing.
But CS50 leads the way."
And that's from Dr. Sara Read.
So I'm happy to announce that I will be teaching this course again
during the summer of 2024.
And it's going to be mostly based on Python with that scratch introduction
and markdown as well.
So who am?
Right?
I am not a trained educator.
I come from industry.
I went to school and became an electrical engineer.
At a college, I went to work for Underwriters Laboratories, where
I tested things to make sure, that when I used my hair straightener
and stepped in the shower, I wouldn't get electrocuted.
I then went on to work for Sharp, the division that sells the LCD
panels to companies like Apple.
And in UL and Sharp, for the most part, I somehow
morphed, during the evolution of the personal computer and networking,
into IT.
And I also did some other things, did some work for lynda.com.
But I was fortunate enough to have a small boutique software
company that my wife and myself started, ELG, for Elgort, UJI, for Ujifusa.
It's a Japanese name.
We stuck them together, and we created a little software product called
IdeaJam, which we're very thankful for.
So there are some other things.
But I'm a faculty member at Clark College.
And just so you know, I'm from Vancouver, Washington, not
Vancouver, Canada.
I know all of you that I spoke with, all of Canada.
Yeah, I know who you are, all right?
So I teach web development.
I teach seven courses in it.
And one of the courses is, just so you know, Python.
We'll talk about that in a second.
But I teach a two-year degree program in web development.
And it starts, and it's built on accessibility,
making content, websites, mobile apps, that are available to anyone,
regardless of their age or disability.
All right, so Clark College, what is a community college?
Some of you here in the room and on Zoom may not
be familiar with what a community college is.
But it's an educational institution that offers
two-year degrees, vocational training, and certificate programs
to prepare students for the workforce force
and to transfer on to four-year universities.
So Introduction to Programming and Problem-Solving with Python,
these degree programs at Clark, students enrolled in these degree programs
will most likely take my programming class.
OK?
So as you can see, it's a quite diverse series of degree programs.
Students' ages who enroll in these courses
are anywhere from 15 to 80 years old.
It's a community college.
It's open to the community.
So it's quite fascinating having a class with a diverse age
population of students, all right?
It's really a really unique environment for learning.
So when I came to this college back in 2010--
2013, the professor who taught the course
before me was using these two books here, which some of you
may be familiar with.
Anyone familiar with these two books, by any chance?
No?
Oh, I see some hands.
So from 2013 to 2022, we used the John Zell book.
And for a few years when I started there, I was new.
Again, I used this Robertson book for teaching pseudocode.
So idle, the idle, I-D-E, if you want to call it that,
is what we used for many years, from 2013 to 2018.
And then we moved to Visual Studio code and GitHub and GitHub Classroom.
OK?
So here is my course outline, the module structure.
I'm not going to go through them all.
This particular series of modules here is
very similar in a lot of ways to the CS50P curriculum.
What this particular course culminated in
was what we call a Microsoft MTA certification.
Remember that a lot of my students go into the workforce.
And a lot of the companies that they go work for love micro-credentials,
such as these Microsoft certifications.
And thankfully, students had an 80% to 100% pass rate on this certification.
Now, they just didn't take the Python one.
They took a JavaScript one.
They took a SQL one.
There were many of these micro certifications
that they were able to earn.
So last fall, after I took the CS50P course, like I said, I was hooked.
So I plunged in.
I took the dive and converted my course over to CS50P.
And I was scared, just especially with this sea
change of technology and curriculum.
But we started off in module 0.
Module 0 is pre-course of setting up the GitHub and CS50 coding environment.
And then I actually-- no, this is correct.
We spent two weeks learning how to use the IDE.
Folder?
What's a folder?
I'm of the Google Docs generation.
Files?
What, creating files through this thing called the terminal?
So again, we spent two weeks, one on learning
how to use the interface itself, the Visual Studio code
interface, and the second on the first module functions
and variables in CS50P.
And then we carried on with the curriculum from CS50P.
But I sprinkle in some of my labs that I create myself,
such as how to debug, right?
There is material in CS50P about debugging,
but there is currently no prepared curriculum.
So I'm in the process of writing that.
OK?
And then I missed one important thing.
In module 6 is when I get them thinking about their final project
and what they're going to build.
And then we have milestones throughout the course
as they go from idea to a product.
OK?
So then we have finals week.
Again, my quarter is 10 weeks, with one week for finals.
And that's when we do final project presentations.
And I'm thankful, that over the last three quarters,
that during the first quarter, we had 8 out of 40 students
earn the CS50 certification.
We had one in winter.
I'm happy with that.
And then this past spring, we also had 8 out of 20 students.
I'm starting to get my gait, learning how to teach this course.
And you'll learn-- whoops-- you'll learn more about that shortly.
What I'm really happy about is seeing students
go outside of my classroom embracing the CS50 curriculum, such as CS50x, CS50W.
And this particular student earned the CS50P originally with me in the fall.
So this, this is awesome.
All right?
And there are other students.
This particular student was our tutor.
And let's just say, they encouraged a lot of people who came to them.
I made them aware of these other things, these other courses that students
can earn.
But Colin here helped sprinkle the CS50 love with my students.
So I use Canvas.
We use Canvas at our college.
And what I have done is I've consumed all of the CS50P content,
a majority of it, 90-something percent into my Canvas course shell.
The modules resemble that of the CS50P curriculum, the website.
OK?
So how does my class Function I have interactive lectures.
I form small work groups, much like we do in industry, and these work groups,
these groups work together throughout the quarter.
They don't do your typical group activities,
where they are sometimes asynchronous.
But for the most part, a lot of them get them in the same virtual room
and get them talking and meeting, not just filling out Canvas discussion
posts, and stuff like that.
Their roles within the group change each week.
So they each have, they get a taste of, what
it is to perform certain roles within a work group.
Then we have skill-building and practice problems.
These I've brought over from my prior Python course.
The problem sets are those of CS50P.
The labs are ones that I'm creating.
And the labs and the skill building, they're
backed by check50 and submit50 tests, that I've written myself.
And I'm very thankful to Rongxin for answering each and every single email
that I sent him while I've been learning how to write check50 tests.
I have something called learning guide quizzes,
where I immerse them within the content of the course.
And they're able to find what I'm asking for.
And then I have these exit slip surveys, like what was good?
And what was bad?
And it's a matter of checking boxes off.
And they do have the opportunity to provide me with written feedback,
as well, in this exit slip survey, and it's been a very good thing.
So here is the introduction to my module.
This is my Canvas shell.
This is how I structure things.
And I'm not going to go through them.
But I do record each and every lecture.
And I'll show you some interesting tools that I've
developed that I've made available to everyone
here to help deal with these things here.
I do offer David Malan's recorded videos, as well,
along with links to the lecture notes provided by CS50.
And then I have my micro topic videos, micro topic.
That's not right.
But they are small, bit-sized, instructional video.
And I've done this for 10 years, so I have
this collection that I can pick and choose and insert into my course shell.
And it continues on, right?
There's additional material that they need
to read and consume because it's on the learning guide quizzes.
But this unit happens to be on conditionals.
All right?
So let's carry on here.
So I have a bunch of skill-building exercises or practice problems,
again, backed by check50.
They have a lab, Learning About Conditionals, right?
So I take them through a pay stub calculator and how to do things there.
I think I have some screenshots of that, and then that work group
activity that I showed you all earlier.
I then have the problem set.
They have the option to submit to CS50P.
I have my own problem set slugs.
Again, if they want to earn the certificate,
they're going to have to be submitting to CS50, that learning
guide quiz, and that exit slip, OK?
So I stated that the problem sets, I brought in to Canvas, right?
So here they are.
I talk about solutions found on the internet and stuff like that.
But here they are.
Some of you may recognize these problems here.
By the way, this grading rubric is something
that I learned virtually when Carter Zenke showed this grading rubric
from the educator workshop last year.
So I thank Carter for that.
And as you can see, I'm not just saying, here's CS50P.
I'm trying to obfuscate as much as CS50P with David.
And no offense David, but I'm just trying
to make it a Clark College class, with the option if you want to earn.
Well, number one is to learn Python and to be really good at it.
So here, here is that deep thought problem.
And not only is this problem verbatim from the CS50P curriculum,
but I also include little hint videos that I've created
or suggestions for them.
I'm like that rubber duck, all right, so in video form here.
All right?
So again, you can just see this is mostly
the problem from the CS50P material.
Now, what I've been doing for the last couple of years,
I teach at a community college.
Again, students, there are very few prerequisites
other than college algebra and some college English.
But I'm trying to make the assignments as transparent as possible,
trying to give the students talk in a language that they can all understand.
So this is not an assignment.
This is just an example of this shell, this tilt shell
that I've developed-- due date, purpose, skills, knowledge, and then
a series of tasks, and then the specific criteria for success.
And I don't know how well-known this is.
I believe it was developed at Brandeis University.
But I've done over 100 assignments in the seven classes that I teach.
And it's the only way that I create assignments now.
And here is an example of one.
The slides are all available to you to download,
so we don't need to go through it here.
But again, I've gotten a lot of great feedback
and the exit slips and those course evaluations
that I get from students, all right?
And you can see here, it's just an example of that pay calculator.
I teach a lot of students who are blind.
We have the Washington State School for the Blind within a mile of our college.
So all of these images that you and I can see fine here,
they're also made to work with a screen reader, using alternative text.
OK?
So again, there are just some more screenshots here
of this particular lab, of how conditionals
work to create a pay stub calculator.
All right?
And I'll just flip through them here, OK--
and again, check50 and submit50 and stuff like that.
OK, now, this slide here, for those of you
who are familiar with check50 and submit50, I don't know about you
and what your experiences are, but a lot of students
will shoot for or go for using check50 before they even read the problem.
And I don't have a problem with that, but I've collected all of these things
that I've seen.
And let me just share a few of my favorites with you.
Have you read the problem carefully?
Have you created an IPO model, inputs, processes, and outputs?
Have you created code that attempts to fool check50?
How many of you have seen that, anyone, where
they try to write code that just generates print statements matching
the text that they see in the check50 test?
Well, if you haven't, you will.
Have you tested your code before using check50?
Did you run the Python command line to run your code?
Have you reread the problem carefully?
Have you completed the skill-building problems?
They are there for a reason.
And within a particular problem, I reference
the practice problems and skill-building exercises that would help them complete
said problem.
Have you studied the module material?
Have you used Visual Studio code to explain the code to yourself,
as David, Rongxin, and Carter spoke of earlier?
Have you used Visual Studio code to check the style of your code,
again, just recently introduced?
Would it be beneficial to take a break, step away from your computer?
We use Slack within my course.
And these are the types of things that I ask questions, when they Slack me
all throughout the day and night.
And again, have you watched the instructional videos?
Have you asked to help from your work group?
Et cetera here-- so just know that you're going to run into these things.
All right.
Check50, as I spoke of before, if you know Python,
you can write check50 tests.
It took me a little while and a couple emails to Rongxin.
No, that's an overexaggeration.
But I'm putting together some instructional videos and examples
on my YouTube channel about how to create your own check50 tests.
All right?
So what comes next, now that I've done a year of CS50P?
All right, I'm going to embrace the concept
that Carter spoke of yesterday about creating alternative problems
for people who are less comfortable with a particular topic or more comfortable.
The more comfortable will be the CS50-based problem sets.
And I may even offer a third option, OK, just to be more equitable.
The other thing that I want to do is to continue to focus my pedagogy
and incorporate it into the course.
I had 10 years of interactive educational theater
that involved a lot of things.
But I need to re infuse it into this new course here and of course,
get to work with you people here in the room and those on YouTube and Zoom,
to collaborate and communicate.
Because it's only the experiments and the result of those experiments,
that we perform as educators and share with one another,
that we will continue to improve what we do for the people that we teach.
So an example, I've developed quite a few iOS apps.
And this is an example of one here.
It's one that I wrote for the Children's Cancer Association, in Portland,
Oregon.
And it's using the iTunes API, the same API that David demonstrates
in the CS50P lecture on libraries.
So I'm trying to bring all of my industry experience into the classroom,
using things that are not-- not that David's material is not relatable,
but to an actual application.
And I have plenty of these, including the software
that we developed to infuse, again, into lab assignments.
So I've got some helpful tools that I want to share with you all.
The first one is this submission tracker Google Sheet.
And this particular Google Sheet that I developed is a fork.
It was based somewhat on someone else's prior work.
And it's available to you.
It's in the links on the Notion site, the educator site.
And I've provided a set of instructions here for you to follow.
There is no code whatsoever that you need to modify.
I come from a background of shipping production software,
so I did the best that I could here.
And you may recognize these.
These are CS50 submission slugs.
These are going to get auto-generated auto-magically through a menu option,
that I'll show you shortly.
And the next thing is these would be the names of students here,
that I blurred out.
And you can see the result that they achieved on each and every problem.
And not only can you see the results, but these are links.
These are hyperlinks, and you can click on them
and be brought to that particular problem that they solved.
All right?
The other thing that you can do here is select a particular problem
and update the scores for that particular problem.
OK?
And the menu options that are available in the upper right-hand corner--
get assignment slugs, update student roster.
You can pull in the roster from submit50, update all scores,
like redo everyone's grades, and update a single assignment
that I showed you earlier.
The next one, and this is kind of serendipitous here.
This is a submission downloader with compare50 support.
And after this particular conference ran last year,
somehow I got in touch with a gentleman by the name of Phil Bowman.
And if you remember the Phil sort with David yesterday,
there's Phil right there.
And I took this wonderful code that Phil developed,
and I modified it to work with CS50P.
And it's made my life a heck of a lot easier.
Not only can I pull down particular assignments
and see each and every student's work, but it also
will run compare50 and show the graphs that I
believe Rongxin showed us yesterday.
So Phil, I'm very grateful to you for this software.
And you can see Phil's name in the comments there.
So it's in the link, so you can go download this, OK?
The other tool is a Visual Studio code snippet extension.
I find that students, no matter how many times you
tell them to enter their name and the name of the file and the date,
and whatever it may be, at the top as comments and maybe some starting code
for a student to get started with, I wanted a way
to infuse snippets into the classroom, into Visual Studio code.
And what I did there is I developed an extension.
It wasn't very difficult.
And students can install it in their Visual Studio code.
And as a result, they can type in some pset, for Problem Set.
And then when they do that, they can get this information here.
They can tab through and enter in all of the specific information regarding
the problem.
And there are other snippets in there as well.
But you can just take this extension, fill in the snippet--
this is a JSON file here, JavaScript Object Notation--
fill it in and have it installed inside of your code space, OK?
By the way, this is the code.
This is the link to that extension code.
The next thing I have here is what I call a clickable transcript tool.
I record my Zoom meetings.
And as a result of recording, Zoom gives you what's called an SRT file.
And I believe David spoke about SRT files yesterday.
They're closed-caption files.
And what I wanted to do is to create something that allowed students
to maybe search for a word in the course shell
and then see where it was talked about in class,
exactly where it was talked about.
And using this tool-- this is a website that I wrote.
And this works right now with Panopto videos.
As soon as I get back, it's going to work with YouTube videos.
But you just give it the URL of where this video lives
in your learning management system.
You upload the SRT file, and out pops a clickable set of HTML
that you can paste in to a learning management system page.
And then students can use the search facility of the learning management
system.
Because without this, when students go to search for something in Canvas,
the learning management system, the only thing that they're going to find
are things like quizzes, pages, et cetera.
So this totally opens up the Canvas shell
to what occurred during classroom time.
OK?
So I don't know.
We're at 11:11, 11:11.
I want to open it up to any questions, feedback,
and hopefully, give some answers here.
Anyone?
If you're raising your hand, you need to raise it higher.
[LAUGHTER]
Because I don't see that.
Well, so Vlad, anything that I need to--
oh, I mean, Charlie?
AUDIENCE: No, not at the moment in the chat,
although quite a few laudatory comments from people just complimenting
your tools and work.
BRUCE ELGORT: Oh, thank you.
Well, CS50 changed the game for me.
It totally-- check50 and submit50, I tried to write my own testing tools,
using GitHub actions and other things, and it was a pain in the butt.
It wasn't check50 and submit50.
Once I wrap my head around those tools, I'm hooked.
And why not use?
I'm out of the mindset where I have to write everything myself.
OK.
Questions?
I'll ask one more time, Charlie, nothing?
AUDIENCE: Yeah, I'm still checking, but I'll get back to you if there are.
BRUCE ELGORT: All right.
Is anyone-- oh, yes, Ken?
AUDIENCE: So you talked about those micro topics,
that phrase you just coined.
How long did you make those videos?
BRUCE ELGORT: Yeah, so Ken asked the question.
The micro topic videos that I talked about,
those videos can range anywhere from 60 seconds to 5 to 15 minutes.
And there is just one other thing.
This came up in discussion at breakfast.
And let me just see if I can show you.
Because amongst those tools that I just showed you, there's one more tool.
And let me see if I can get this to work.
I'm taking a little chance here.
So you can see I have a simple Python program here.
And I do a lot of remote teaching.
And one thing that I'm able to do now, I don't
know how well it shows, but Kate, as you can see here in this for loop--
I'm just using your name as an example--
where I can get behind the code, I don't need to do the mouse wiggle,
as they say.
Look over here, over here.
I can get behind the code.
And it's not only for code, but it could be for anything on my desktop.
I can then also do things like--
hold on one second here, if I can type the right key.
I can also emphasize my hands.
And I can also, if I need to, draw around things, not that I'm
a good drawer, but I can also draw.
And it's totally changed the way that my Zoom-based meetings work because I'm
not relegated to a box in the corner.
I'm in their face all the time.
So Charlie, any last questions before we--
AUDIENCE: Quite a few "awesomes" and "thank yous" and "amazing" in the chat
for you.
BRUCE ELGORT: Oh, well, well, thanks for that.
Let me just want to thank everybody here for their time and the networking,
not only to you in the room, but to the people on YouTube and Zoom.
And reach out.
I love to collaborate.
And take the tools that I develop.
Give me feedback.
Give me comments.
Tell me what I can improve upon.
And that's all.
Thank you for your time.
[APPLAUSE]