Although I largely focus on the principles of responsive design in this course, I also make time to explicitly name and discuss the factors that shape and impact one's CS identity. This is especially important to me in this class because it often contains students who are new to computer science. This means that the opportunity to shape identity for the better is much higher because there are fewer walls to deconstruct at this point in their educational career. I tend to use fishbowl discussions to facilitate the development of a positive CS identity, and have included a sample slide deck just in case you are curious about what these converations look and sound like.
Here is the outline for my Web Dev course:
I ask my students to reflect on the state of their computing identity every week throughout the year. As expected, we start to see a decline in positive computing identities around Unit 5. I'm hoping that more fishbowl discussions outside of Unit 1 can help combat this trend.
I began my teaching career with this class, and boy, has it changed over the years. The AP exam for this class lends itself to trying out different programming languages because the College Board has given instructors the flexibility to choose the language they think is best for their students' success. Given this, I have tried all kinds of languages to see which one works best in the world of novice programming. This list includes: Scratch, Python, Racket, Lua, C++, and JavaScript. I expected Python to be the best choice for new learners because it strikes a nice balance between authentic, powerful and readable. However, my time teaching Python redefined the terms "powerful" and "readable" for me as an educator; powerful quickly became the space is too large to navigate and readable became too many details are hidden from the learner. I actually think that C++ is closer to what new programmers need to successfully understand the machine below but I'm also concerned about switching langauges too often. I believe that learning to program is like learning a new language -- it takes years of studying the same language to really understand the underlying mechanics of the broader set of related langauges, and because of this, I'm sticking with JavaScript. Also, there are some really nifty drawing libraries in JS! These libraries help narrow the scope of the langauge as a whole and more clearly illustrate how programming can be a creative process (yes, yes Python has these too but whitespace is way harder for children to understand than curly braces and semi-colons). In case you're curious, here's the current course outline for my AP CSP class:
For me, teaching AP CSA well is the greatest thing I can do to help level the playing field for underrepresented groups in CS. Why? The material covered in this class is the content typically discussed within the first year of a CS degree program. This level of exposure prior to metriculation has shown to help students persist within CS degrees simply because that's what it takes to be ready to compete. For example, while at Berkeley completing my own degree, I met many people who had been programming since they were small children. These students were (falsely) labeled as "naturals" simply because they had the prior experience they needed to appear as if it were organic talent. Not in my opinion; they just had the competitive edge of starting early! Now imagine how this impacts one's CS identity (it's not pretty).
I think a lot of this can be curbed with quality exposure to programming in middle school and high school. And in hopes of contributing to these efforts, I have developed an AP CSA curriculum around the following units:
TBD: I am scheduled to teach this course for the first time this fall. I will update my thinking around this class after I have had a chance to actually teach a bit. More news soon!