Friday, June 19, 2020

How Do We Know Who Is Struggling In Learning CS

One of the interesting points Amy Ko makes in her presentation to Microsoft (CS education in higher education) is that “Most faculty have little insight into who is struggling most into their class, because the ones that struggle are most silent.” She goes on to suggest that took could help make struggle visible at scale.

In the high school classroom most teaches try to be aware of what students are doing and notice who is struggling but it’s hard. Students are very good at hiding the fact that they are struggling. Many just don’t want to admit, especially in front of their peers, that they are having trouble in a class. Teaching online makes noticing struggle even harder!

So what sort of tools would be helpful? That’s what I have been thinking about for a bit.

What are the indications of struggle? Idleness in the IDE? Maybe but sometimes students are very active but not making progress. They add stuff, try it, delete it, and try something else. The “lest throw stuff against the wall and see what sticks method.” So to much activity or to little activity? These are both things an educational IDE could track.

What about syntax errors? This is a tough one because sometimes a single character off will generate a great many errors. I have managed to see error lists move from over 100 to 2 or three after changing one line of code. So maybe look at specific errors? We probably need some research on this.

Number of builds? Some people write a lot of code before doing a build while others run a build after every little change. Seems like an unreliable metric.

Total time spent in the IDE? Maybe although how does the automated system know if the amount of time is due to struggle or to an advanced student adding far more than what is required?

As a teacher, one thing I would like to know is that errors are the most common in a class. That would help me adjust how I teach certain things.

If only students would talk to us!

All in all I love the idea of tools to help teachers see who is struggling and what they are struggling with. I just don’t feel like I have a good handle on what metrics would be really helpful.  Commercial IDEs are never going to care about these things though. Might make a good PhD project for some CS education researcher though.

Dr. Ko suggests that one way industry could help is by “should be supporting the hiring of CS education faculty and the creation of CS education classes to prepare effective CS teachers for K-12 and higher education classrooms.” We still have a lot more questions than answers in terms of teaching computer science.

Wednesday, June 17, 2020

Thoughts on an IDE for Teaching CS

Amy Ko posted a slide deck about CS education in higher education from a presentation she made to a group at Microsoft. There is a ton of stuff in there. I need to read it a couple more times actually. I’ll probably blog some more based on other things she brings up. Issues of equity for example. That one I need to think over a bit more as I process the reality of the world today. But for this post I want to focus on some of the ideas she shared for teaching beginners.

Under the heading “Classes move too fast” she writes “Many introductory programming courses now include a 1) professional-grade programming language, 2) a professional-grade IDE, 3) a professional-grade version control system, and 4) a professional-grade test framework.”

This is too much for many students. In my end of year survey most of my students felt that Visual Studio (a professional-grade IDE using a professional-grade programming language) was fine for them. Not to hard. And a lot of teachers are using GitHub – a professional grade version control system. That is still a lot to learn just to get going though. My students may think they are doing just fine but honestly I spend a lot of time fixing projects because it is far to easy to mess them up. I’m finally beginning to face that truth.

Later in the presentation Dr. Ko talks about making tools that make collaboration and working together easier. How do students work together? How do they do it when they are separated by time and space? That is something we have to think about even more these days.

What is the answer? Well, I’d like to see an IDE and language that creates projects that are harder to screw up for one thing. Don’t ever let beginners use Save As in a Visual Studio project. Doing so is almost a guarantee that a beginner will mess up their project in serious ways. Save As as an option for experts? Yep. We don’t want that for beginners. That’s just the start. Students are always closing windows they think they don’t need but later realize that they need them after all.

And collaboration? GitHub works for some. As I said I know a number of teachers use it with their students. I have had students who used it on their own as well. Awfully smart girls those two. But its got some rough edges. It’s really a powerful professional tool that offers more than most students or teachers really need.  And there are so many options and steps! We need something more simple! It needs to be tied in to the IDE fairly transparently as well.

Pair programming remotely? I’ve tried Visual Studio Live Share a bit.and it has some real potential. Not many seem to know about it yet. It does require  that people have a reliable want to share links for sessions. I’m not sure how it would work if a teacher wanted to look at a lot of student sessions are once. And we are still dealing with Visual Studio or VS Code and their projects.

This last semester I used Microsoft Server Manager to work with students online/remotely. Worked great as long as we were on the same virtual machine. It’s not something I want to give students access to though. I would like that functionality in a different tool. Especially if making the connection was as easy as this one was. It was easier than Live Share. So the tool I would want would probably involve some sort of “server” that was attached to a class that let students find their partners and connect with permission from the other student. Wouldn’t that be cool?

So what I want is an IDE that doesn’t let students mess up their projects easily, does easy version control with minimal set up or steps to make happen, and easy sharing of coding sessions. All built in with an easy set up.

A test framework? That’s a topic for another post.

Monday, June 08, 2020

Setting Up To Teach From Home

This past spring semester was my first time teaching remotely but not my first time working remotely. I worked from home while working in industry for jsut over 9 years. The latter probably helped me set up to teach remotely. Still, I learned a few things about being a remote teacher. I thought I should write it up and see what other ideas people might have to share.

First, you need to work somewhere outside the main events of the household. An office is ideal of course but not many of us have that option.  Still you want to find a place that is not busy when others are home, where they are a minimum of distractions, and where you don’t have to set up and break down your work equipment every day.

If you are presenting with video you want to be aware of your background. To much light behind or from the side can be a problem for the video. You want to know what is behind you. Will it distract others? Will it show things that are to personal to share with the whole world? I know teachers who have hung sheets behind them. That is probably not necessary but you want to be deliberate about what other see in the video.

Speaking of video, you want a good camera. I’ve seen some debate over webcam or built-in camera and I don’t have a firm opinion. If you have a good camera in your laptop or desktop you will probably be fine. In either case, make sure you are centered in the image it takes.

I find that a headset works better than the microphone and speaker built into at computer. A headset keeps out extraneous noise from both your ears and the conversation. It helps avoid distracting noises in the house as well. I know that a few teachers I know have purchased “gamer headsets” and found they work very well. They’re not that expensive either.

Speaking of gamer equipment, a comfortable chair is a must as you will be in it longer than you would be if teaching in person. Several teachers I know have been buying chairs made for computer gamers. What ever chair you get should be comfortable and sturdy.

Screens? You really want, I almost say need, two or more windows. Professional developers argue over which is better – two (or three) monitors or one very large monitor with multiple windows. I suspect that for most teachers a second monitor is less expensive than a very large monitor. Cost aside, personal preference rules in the hardware decision. I used two laptops side by side this spring but I would use one with a second screen if I were doing it again. I might have a second laptop as well since I have several anyway but that would be more of a backup than a principle workstation. Being able to copy things from one window to another is invaluable.

I used to keep one window showing that online meeting with student faces and the second with what ever I was demonstrating or presenting. I also liked to have my student information system, for attendance, in one window and the Zoom or Meet window in another to make taking attendance easier. That was much easier than switching windows on one screen. I did the same thing when grading. Work I was grading in one window and gradebook software in the other window. Since work was all being submitted online this was the easiest way to work for me. Your mileage may vary of course.

I can’t forget the network. Wi-fi works when it works. Wired connections are almost always faster and more reliable (I sometimes lose WIFI when the microwave runs),  It’s not always easy to set up but if you can use a wired connection I do recommend that you do..

Will teachers be teaching remotely in the fall? I don’t know that anyone knows for sure. It doesn’t hurt to prepare for multiple eventualities though.