Archive for March, 2019

Using MOOCs for Computer Science Teacher Professional Development

When our ebook work was funded by IUSE, our budget was cut from what we proposed. Something had to be dropped from our plan of work. What we dropped was a comparison between ebooks and MOOCs. I had predicted that we could get better learning and higher completion rates from our ebooks than from our MOOCs. That’s the part that got dropped — we never did that comparison.

I’m glad now. It’s kind of a ridiculous comparison because it’s about the media, not particular instances. I’m absolutely positive that we could find a terrible ebook that led to much worse results than the absolutely best possible MOOC, even if my hypothesis is right about the average ebook and the average MOOC. The medium itself has strengths and weaknesses, but I don’t know how to experimentally compare two media.

I’m particularly glad since I wouldn’t want to go up against Carol Fletcher and her creative team who are finding ways to use MOOCs successfully for CS teacher PD. You can find their recent presentation “Comparing the Efficacy of Face to Face, MOOC, and Hybrid Computer Science Teacher Professional Development” on SlideShare:

Carol sent me a copy of the paper from  the 2016″Learning with MOOCs” conference*. I’m quoting from the abstract below:

This research examines the effectiveness of three primary strategies for increasing the number of teachers who are CS certified in Texas to determine which strategies are most likely to assist non-CS teachers in becoming CS certified. The three strategies compared are face-to-face training, a MOOC, and a hybrid of both F2F and MOOC participation. From October 2015, to August of 2016, 727 in-service teachers who expressed an interest in becoming CS certified participated in one of these pathways. Researchers included variables such as educational background, teaching certifications, background in and motivation to learn computer science, and their connection to computer science through their employment or the community at large as covariates in the regression analysis. Findings indicate that the online only group was no less effective than the face-to-face only group in achieving certification success. Teachers that completed both the online and face-to-face experiences were significantly more likely to achieve certification. In addition, teachers with prior certification in mathematics, a STEM degree, or a graduate degree had greater odds of obtaining certification but prior certification in science or technology did not. Given the long-term lower costs and capacity to reach large numbers that online courses can deliver, these results indicate that investment in online teacher training directed at increasing the number of CS certified teachers may prove an effective mechanism for scaling up teacher certification in this high need area, particularly if paired with some opportunities for direct face-to-face support as well.

That they got comparable results from MOOC-based on-line and face-to-face is an achievement. It matches my expectations that a blended model with both would be more successful than just on-line.

Carol and team are offering a new on-line course for the Praxis test that several states use for CS teacher certification. You can find details about this course at https://utakeit.stemcenter.utexas.edu/foundations-cs-praxis-beta/.


* Fletcher, C., Monroe, W., Warner, J., Anthony, K. (2016, October). Comparing the Efficacy of Face-to-Face, MOOC, and Hybrid Computer Science Teacher Professional Development. Paper presented at the Learning with MOOCs Conference, Philadelphia, PA.

March 29, 2019 at 7:00 am 1 comment

Task-specific programming languages: People aren’t dumb. Programming is hard.

I’ve been thinking a lot about task-specific programming languages lately.  I’m inspired by the work on domain-specific programming languages (e.g., see blog post here), and have been wondering whether we can reduce the cognitive load even further by focusing on programming languages for specific tasks. I’m thinking that we should be applying HCI design techniques (e.g., user centered design) and apply them to the design of small, task-specific programming languages.

But that got me wondering: Surely this is not a new idea.  What do we know about task-specific programming languages? Do students learn generalized ideas about programming from learning a task-specific programming language? How does it change affect or cognitive load if students start with a programming language tuned especially to their task?

I did some literature searches, and found a highly relevant paper: “Task specific programming languages as a first programming language.”  And the lead author is…me.  I wrote this paper with Allison Elliott Tew and Mike McCracken, and published it in 1997.  I honestly completely forgot that I had written this paper 22 years ago. Guzdial-past knew things that Guzdial-present does not.

The paper doesn’t answer any of my questions.  It talks about some surveys and comparisons we were doing, but offers no results.  I have no idea where the data from those surveys and comparisons are today.

Abstract: This research investigates whether there is a difference in the acquisition of programming skills and knowledge as a function of a student’s first language. Our research is concerned with the comparison of task specific languages and general programming languages. In many engineering programs students are first exposed to the principles of computational solutions to problems by means of task specific languages, such as MatLab. They are then either expected to be able to use, or are specifically taught programming using more general purpose languages, such as C. Our question is whether there is a developmental preference for learning a task specific language first, or a general purpose language first. Historically, educators have emphasized fundamentals prior to application. A case could therefore be made that a student should be taught general programming skills in the context of a general purpose language before solving problems in a task specific language. More recently, contextualized educators would prefer the initial learning of task specific languages. Our research anticipates answering the question of the effectiveness of transfer of programming skills as a function of first language learning. The dimensions of this question include but are not limited to, how the languages are used, what types of problems are presented to the students, is transfer prompted between the languages, do students look for surface or structural similarities, and what are the assumptions and expectations of the faculty who teach these languages.

Here’s my favorite paragraph in the paper. Yup, still have all those same questions.

We have developed a comparison of task specific languages and general purpose languages to allow us to investigate ontological boundaries between languages and their impact on transfer. For example, MatLab essentially has no typing. It uses built in types. Whereas, general purpose languages have various types, including enumerated types, and support the construction of complex data structures around those types. Does this difference cause a boundary to transfer? If a student learns MatLab first, will data types be more difficult to learn? If a student learns a general purpose language first, will they be able to transfer their skills to a language that prevents them from constructing many of the structures they have previously used?

I’m still catching up on podcasts that I missed during my move.  One of those was a rebroadcast of an interview with Richard Thaler, one of the founders of behavioral economics and a recent Nobel prize winner in Economics.  He explains the central idea of behavioral economics: “People aren’t dumb. The world is hard.”

So, we don’t think people are dumb. We think the world is hard. I mean, figuring out how much to save for retirement is a really hard cognitive problem that very few economists have solved for themselves. And it’s not only cognitively hard, it involves delay of gratification, which people find hard. It’s just like navigating in a strange city is hard. So, why not try to help? When I first was working with the U.K. Behavioral Insight Team, the first “Nudge unit,” the phrase I kept saying in every meeting with some minister was, “If you want to get people to do something, make it easy. Remove the barriers.” That’s what we’re about.

If we want people to program, make it easy. Remove the barriers. That’s what we’re about. People aren’t dumb. Programming languages are hard.  If we can fix that, we should. That’s what I see task-specific programming as being about.

 

March 25, 2019 at 7:00 am 22 comments

Where to find Guzdial and Ericson Web Resources post-Georgia Tech: Bookmark this post

Georgia Tech has now shut down the web servers that Barbara Ericson and I have been using to share resources for the last umpteen years.  They warned us back in the Fall that they were going to, so we have been moving Web resources over to the University of Michigan.

Here are links to where to find some of our most often accessed resources (not all links and images will work, since some were hardcoded to Georgia Tech URLs):

We do not have everything moved over.  I believe that there were FERPA concerns about some of our websites (that we might be referencing student names), so we were not able to download those. We are recreating those resources best we can. Barbara has now set up a new blog for her AP CS A tracking data (see http://cs4all.home.blog), and I have uploaded my Computational Freakonomics slides and coursenotes to U-M.

Bookmark this post, and as I find more resources in the stash I downloaded, I’ll link them from here.

 

March 22, 2019 at 7:00 am 3 comments

Code Smells might suggest a different and better Notional Machine: Maybe students want more than one main()

There is a body of research that looks for “code smells” in Scratch projects. “Code smells” are characteristics of code that suggest a deeper problem (see Wikipedia description here). I have argued that these shouldn’t be applied to Scratch, that we’re confusing software engineering with what students are doing with computing (see post here).

One of the smells is having code lying around that isn’t actually executed from the Go button, the green flag in Scratch. The argument is that code that’s not executed from the Go button is unreachable.  That’s a very main() oriented definition of what matters. There was a discussion on Twitter about that “smell” and why it’s inappropriate to apply to Scratch. I know that when I program in GP (another block-based program), I often leave little bits of maintenance code lying around that I might use to set the world’s state.

There’s another possibility for code lying around that isn’t connected and thus doesn’t executd properly — it should execute properly. There’s evidence that novice students are pretty comfortable with the idea of programs/functions/codechunks executing in parallel. They want more than one main() at once. It’s our programming systems that can’t handle this idea well.  Our languages need to step up to the notional machines that students can and want to use.

For example, in Squeak eToys, it’s pretty common to create multiple scripts to control one object. In the below example, one script is continually telling the car to turn, and the other script is continually telling the car to go forward. The overall effect is that the car turns in circles.

I was on Kayla DesPortes dissertation committee (now at NYU!). She asked novice programmers to write a script to make two lights on an Arduino to blink. She gave them the code to blink one light: In a Forever loop, they raise the voltage on a pin high, then wait a bit, then lower the voltage, then wait a bit. That makes a single light blink.

The obvious thing that more than half of the participants in her study did was to duplicate the code — either putting it in parallel or putting in sequence. One block blinked the light on one pin, and the other block blinked the light on the other pin. However, both blocks were Forever loops. Only script can execute on Arduino at a time.

On the Arduino, what the students did was buggy. It “smelled” because the second or parallel Forever block would never execute.

These examples suggest that parallel execution of scripts might be normal and even expected for novices. Maybe parallel execution is an attribute of a notional machine that is natural and even easier for students than trying to figure out how to do everything in one loop. Maybe concurrency is more natural than sequentiality.

Something that “smells” to a software engineer might actually be easier to understand for a layperson.

March 18, 2019 at 7:00 am 13 comments

Open Research Questions from the CS Education Research class, February 2019

Each time I teach the CS Education Research class, we have one session where we brainstorm the questions that this class thinks are interesting and still open (see 2017 edition here and 2015 edition here). This is my first time teaching the class at the University of Michigan. It’s a joint undergraduate and graduate class. We have 22 students total (11 from each of undergrad/grad) — which is terrific for a special topics class on education research!

We put up five terms on the white board as seeds for the questions. Questions were placed strategically near a given term or between two terms. I can’t represent between very well here, so I’m going to organize questions in terms of the closest term (by my eyeball of the photos I took of the whiteboards) and close to the bottom/top of the list to suggest connection to next/prior.

These questions are amazing — I’m really impressed by the insights about what’s interesting, quality of questions, and breadth of topics. #proudTeacher

Community of Practice/Identity

Is there a difference in climate between liberal arts and engineering based CS? Does that climate impact diversity?

What factors make near-peer mentors more effective?

Is there a correlation in “defensive climate” in other subjects with factors like % of male faculty, % minorities in the field, etc.?

How can we get CS educators to change their practices?

How does having diverse/representative course staff impact student attitudes about CS and retention in CS classes/degrees?

How do initiatives of active learning bridge the communities of students learning CS from different backgrounds?

How do visually impaired programmers become part of the larger community of programming practice?

How does the ordering of topics in an Informatics-centric CS1 vs. a CS-centric CS1 effect performance on a pseudocode test of overlapping concepts?

Development (cognitive, learning trajectories, teacher, etc.)

Would question proofing before posting on Piazza increase frequency of questions posted and in turn motivate help-seeking behavior?

How do non-CS majors develop their knowledge and practice of debugging?

How does the interest of a lecturer impact how students learn within the course? Should we force tenure-track professors to teach who don’t want to teach? Can student lecturers make the same impact on student learning and attitudes as professional lecturers and/or tenure-track faculty?

Cognitive/Learning Sciences

What are effect of class sizes and teaching methods on CS student learning?

Does teacher belief that their students have (or don’t have) a “Geek Gene” affect student performance?

How do the language learned in CS classes and their relevancy in industry affect retention rate (if at all)?

What is the best programming language for introduction to CS, and how would you define “best”?

Do we want to teach everyone computer science or computational thinking?

Would subgoal-labeled assertion-evidence slides improve student retention in an introductory data structures course?

Empirically, how does increasing the emphasis on reading code (vs primarily writing code) affect student learning? Does a focus on reading make the fMRI distinction on reading prose or reading code decrease faster (that is, with less experience as a function of time)?

What metaphors in teaching lead to the most successful learning of notional machines? What metaphors do students invent, and which lead to the most successful learning of notional machines?

What is the role of communicating the redesign of a CS1 for recruitment (matriculation) and retention? If you improve your CS1 and you tell prospective students that you changed it, does that change recruitment or retention? Or do prior attitudes/opinions outweigh the re-design?

How can we better understand students’ mental models of notional machines?

How do measure student disconnect in MOOCs?

How can we integrate lecture videos with student hands-on practice in data science or programming MOOCs?

Access

Does engagement on Piazza (common on-line discussion forum) impact CS student performance?

Should course staff promote discussions or start discussions on Piazza? Are benefits to students different if it’s staff starting the discussions or students?

How does national or state standardization of CS class topics or curriculum effect enrollment rates and diversity in high school CS classes?

How do parents’ education level/career influence student choices in CS, e.g. ,to take a CS class, to get a CS degree, to seek a CS job, etc.?

Do students with learning disabilities (e.g., dyslexia) view code differently? Could we use fMRI or eye tracking to measure this?

Why don’t more lower-income students go into CS? What percentage of current CS students are lower-income? How many lower-income students have the opportunity to learn CS and don’t take it?

Economics

What would it cost to implement a CS program in all high schools in Michigan?

March 11, 2019 at 7:00 am 11 comments

Barbara Ericson’s AP CS Report for 2018 and her new blog cs4all.home.blog

Barb has written her blog post about the 2018 AP data (see 2017 report here and 2016 report here), and this year, she’s using it to launch her own blog!  Find it at https://cs4all.home.blog/

Every year I gather and report on the data for AP CS from the College Board which is at http://research.collegeboard.org/programs/ap/data/

There was a huge increase in Advanced Placement (AP) Computer Science Principles (CSP) exam takers nationally (from 43,780 in 2017 to 70, 864 in 2018 – a 62% increase). The Computer Science A (CSA) exam also grew (from 56,088 in 2017 to 60,040 in 2018 – a 7% increase).

Source: AP CS Report for 2018

March 4, 2019 at 7:00 am Leave a comment

A crowdsourced blog post about my SIGCSE Keynote: Computing Education as a Foundation for 21st Century Literacy

 

 

I had an unusual (and lazy) idea for my SIGCSE Keynote. I didn’t have the time or energy to write a blog post. How about if I asked everyone to tweet my talk, and I’ll just copy-paste them together? I got a response — too large of a response. There were well over 1000 tweets!

I couldn’t review all of them.  I selected a set that covered the key points in the talk, grouped around topics/order in the talk. All the slides are available on Slideshare.net here. A complete “live blogging” account is here.

Starting out

 

History of Computer Science and Teaching CS to Everyone

 

 

 

 

 

 

 

 

 

 

From Computational Thinking to Scientific, Engineering, and Historical Thinking

Examples: Sound Demonstration and Subgoal Labeling

I had several requests for the code I ran in the demo in JES (which is available here):

def increaseVolume(sound):
  for sample in getSamples(sound):
    value = getSampleValue(sample)
    setSampleValue(sample, value * 4)

def maximize(sound):
 for sample in getSamples(sound):
   value = getSampleValue(sample)
   if value >= 0:
     setSampleValue(sample,32600)
   if value < 0:
     setSampleValue(sample, -32600)

The sound visualization GP project is here.

You can get GP at http://gpblocks.org.

Call to Action

Q & A

Composite

March 2, 2019 at 8:00 am 2 comments

Older Posts


Enter your email address to follow this blog and receive notifications of new posts by email.

Join 7,062 other followers

Feeds

Recent Posts

Blog Stats

  • 1,690,963 hits
March 2019
M T W T F S S
« Feb   Apr »
 123
45678910
11121314151617
18192021222324
25262728293031

CS Teaching Tips