Showing posts with label APCSP. Show all posts
Showing posts with label APCSP. Show all posts

Monday, July 07, 2025

Thoughts on Advance Placement Computer Science Results

My Facebook feeds are full of teachers discussing the results their students received on the AP CS exams. Lots of the thrill of “victory” and the agony of “defeat.” I can relate.

The thing is that most of the results are a lot more dependent on the students than the teachers. If the student does the work all course long they are likely to get a good grade on the exam. If they didn’t do the work, especially if they cheated a lot, they are not going to get a good grade no matter what the teacher has done. Even if they did the work a lot of factors the day of the exam can make a big difference.

Sometimes a student takes the exam sick or while over tired. Somethings their boy or girl friend broke up with them the day before. Sometimes the student just doesn’t care about the exam. None of those factors are under the teacher’s control. I had a class of very smart students who all just decided they didn’t care and would blow off the exam. Nothing I could do about it. Guidance wanted to blame me but fortunately there were no long lasting consequences. It was my first year teaching the course and I was given another chance.

Speaking of that first year, my assistant principal, who had taught several AP courses, assured me that it takes most teachers three years to really get the hang of a specific AP course. I believe him. I see too many teacher beating themselves up after their first year teaching AP CS. Most of them have done their best with what they had in the way of curriculum, professional development, and the students who show up in their classroom. They should be happy with the good scores. And happy to have survived. They can learn from this year and move on.

Most of all, remember that the AP exam is one test on one day. Using it as a determination of success for the teach or of the student would be a huge mistake. Life is a marathon not a sprint. Most students will not know for years how much they really learned. It’s usually more than they think after the exam.

Monday, April 21, 2025

Different High School Computer Science Strands

A recent talk by Bjarne Stroustrup at Stanford has sparked some conversation in the Computer Science Educators Facebook group. The talk itself doesn’t seem to be available but it was reported online at The Stanford Daily - C++ creator Bjarne Stroustrup reimagines how coding is taught

There is a lot there and I agree with some things in the article and disagree with others. I have less enthusiasm for C++ as a teaching language, especially in early courses,  for example. I’s like to share some thoughts on the idea of different strands and early courses for different audiences. These are initial thoughts intended to start discussion. I am open to the ideas of others.

First off, I understand that the idea of different first CS courses is difficult at the high school level. Stroustrup seems to be focused, as it seems most university CS faculty are, on the university level. Offering different courses is easier there as the size of both faculty and students tends to be larger. I do think that, where possible, high schools should give the idea some thought.

Stroustrup suggests three strands:

One would serve nonprofessionals, or those who only want basic tools. The second caters to scientists who want to focus on application-based programming instead of theory. The third emphasizes engineers or specialists who want to dive deeper into the complexities of software engineering.

I think universities need a strand for scientists who want to delve into theory. Regardless, I think high schools should consider a different set of strands.

One strand would be less theory and more applications based. Probably using Python or R with a focus on libraries more than theory. Statistics could be included as that would be particularly useful for students in the liberal arts. Skip the data structures that computer scientists love so much. Not everyone needs to spend a lot of time on those. Know what they are and where they fit in but not deeply how they are implemented. It’s more important to understand concepts like normalizing data and how to use libraries.

The second strand would be more theoretical for those students who want to be computer scientists and/or software developers. My time in industry taught me that theory is a lot more important than many self taught developers want to admit. There may be a place for C++ here though I would prefer that early in the strand start with C# (or Java if you must). This is where one would get into data structure implementation, Big O and optimization, and theory of computation.

I do think that in high school either strand should start with something like APCS Principles. It is a good base to start with. True multiple strands are very difficult in most high schools of course. If I had to pick one strand it would be the first one. Why? Because that would serve the most students well. Keep the AP CS A course for the serious CS geeks (my people) and make sure that teachers allow those students to go beyond the basics in the other courses where possible.

We need more students with computing skills and knowledge than we need high schools to turn out computer scientists.

Friday, December 27, 2019

Looking Back on Computer Science Education 2019

Christmas break for me until 6 January 2020 and with Christmas over I have some time to think. 2019 was an intere3sting year in CS education. States continue to adopt more CS in K12. Teachers are still in short supply but so to are schools looking to hire them. Schools or perhaps school administrations and school boards, are slow to roll out more CS education. It looks like more schools are offering it which is great. But they are net requiring it so while they meet to checklist of offering CS it is still not for everyone. It’s going to take a while.

AP CS Principles continues to grow in enrollment. I try to get excited about that but it’s hard. AP courses attract too small a subset of the over all population. While there is much to like about AP CS Principles I can’t help but believe we need some more interesting CS courses. Something with depth and an interesting and motivating outcome. The Create task is not that.

Every year I think that the Internet of Things will take off in CS education. The mix of bytes and atoms seems like a natural to me. That didn’t happen in 2019. Perhaps because there is no one promoting it.  I plan on retiring from the classroom in the spring. Maybe after that I will have to time to really dig into it. Who knows, maybe I’ll come up with some good project ideas.

Cloud computing grew a bit in interest in 2019. Amazon Web Services has done some great work on this. Uptake has been slow but at some point it may take off. The problem with cloud computing, and perhaps IoT, is fitting it into the curriculum. It doesn’t fit easily in either AP CS course and too many teachers are working and teaching too many preps to adopt major new topics.

Artificial Intelligence took a jump in interest that surprised me a bit. There was a huge birds of a feature on the topic at last summer’s CSTA conference. AI for K12 has its own website, mailing list, and lots of people interested. See AI4K12.org for more on that.

What sort of Artificial Intelligence can you teach in K-12? Mostly how it is used, how to use existing AI tool and machine learning training systems. Developing real AI takes a lot of math that not many K-12 students have yet. Still, it is very important that students learn this much. The need to know what AI/ML is, how it is used, and discuss the ethnical considerations involved.

As always,the new year is full of potential. K12 CS is on a growing path that seems to have some momentum behind it.  I can’t wait to see what it brings.

Thursday, December 12, 2019

Explain This Confusing Code

My major task today has been finishing off the semester exam for my Advanced Placement Computer Science Principles students. They’re not happy about having an exam but that’s life. Writing a good exam is difficult. Fortunately I have some previous exams to work with. Some I wrote, some other AP CS P teachers wrote. I’m getting close to done. I want to have AP exam style questions to help my students prepare for the actual AP exam in the spring but of course the main purpose is to put a grade in the grade book. OK I’m half kidding. I seriously want to get a handle on what information they have learned and what I should review before we move on.

Coincidently someone posted a question for the AP CS A question bank on Facebook asking for help with explaining it.

How does this evaluate for Java: x / 10 % 2 ?

This is exactly the sort of question that had one of my APCS A students some years ago say there were a lot of examples of poor coding practice in the AP Exam. And this, in my opinion, is a terrible coding practice. I can understand why the question may be attractive to some. The whole order of operations thing. Students should understand it. But good coding practice is to avoid ambiguity and this code is loaded with ambiguity.

Is this integer division? 10 looks like an integer to me. Making it 10.0 would make it look like a floating point number of course. How do you make “x” look like a specific data type? This is not FORTRAN IV where it would be a double since it doesn’t start with a letter from “i” through “n.” And remembering the order of precedence between modulus and division? Who has room in their brain for that to be top of mind?

This makes a great discussion question. A great question to emphasis the need to use parentheses to remove ambiguity. There is no way it would pass code review in a professional development environment though. At least not a review I want to be part of.

Well, I should go finish writing my test and trying to avoid writing horrible questions.

Sunday, August 18, 2019

And So It Begins–School year 2019 2020

Tomorrow (Monday) I will meet the new freshmen in my study hall. And I’ll finish getting my room ready for the new school year. First day of real classes is Tuesday. And I am not as ready as I would like.

I have a day by day plan for every day of the semester (even the year for my AP CS Principles class). Lesson plans last until they run into actual students so there will be adjustments. There always are. It’s my 5th or is it 6th year teaching honors programming so that is more settled than anything else. I still make changes as I go along because not every class in the same as any other. And who wants to do the same thing year after year anyway.

It’s my third year teaching AP CS Principles and I am making big adjustments in the schedule over last year. I am hopeful that I’m going to get it better this year but who really knows.

My third year for teaching Mobile Application Programming and I am switching from AppInventor to Thunkable. AppInventor has given me a lot of issues with the emulator and most of my students have iPhones and Apple is dragging their feet on allowing AppInventors iPhone software. Thunkable already works with iPhones, though without support for some features I would really like. Plus it seems to connect to phones more reliably. We’ll see how it goes. I’m adapting project ideas as I go along. That’s not completely new but it is not without risk.

At least I only have three preps. Last fall I had four. I also have more free periods as I am teaching a reduced load (at my request) and that should help a lot.

Are you ready? Have you begun already? Let’s do this thing!

Sunday, June 09, 2019

Change the Programming Language, Change the Course

A recent Facebook post suggested changing the language for Advanced Placement Computer Science A (what some of us annoy others by calling AP Java). This comes up regularly with lots of people suggesting their favorite language. Changing the programming languages means changing a lot more than the language though.

Different programming languages have their own idioms. Their own way of doing things. Programming languages and the concepts one can teach with them are closely related.The change to Java (and to some extent C++ before it) was based on a desire to teach more object oriented programming and design. The language was picked after the concepts to teach were chosen.

I wonder how often we (CS teachers) pick a language first though. DO we pick the concepts to teach based on the languages and the programming idiom we are familiar with or do we  think wider?

My honors programming course is largely a warm up for AP CS A and preparing students with the concepts they’ll need is a goal. I use C# rather than Java though because it seems to me (without the sort of research based evidence I should probably look for) that it has a lower cognitive load than Java. It seems to work for us.

My APCS Principles class is using the curriculum and tools developed by code.org. It uses their block based App Lab with the option to use/view JavaScript. This language and tool does appear to be based on the concepts rather than fitting the concepts in after the fact. So I’m happy with that.

One thing I will be pondering over the summer is what concepts should I teach. Am I teaching the right concepts or should I change them? What about cognitive load? I was re-reading How to choose programming languages for learners: Reviewing JavaScript and Ready by Mark Guzdial and his points about cognitive load really resonate with me.

Block languages do seem, based on evidence, to have lower cognitive load for beginners. I’m less comfortable with them; probably because I’m so old school. Student attitudes towards them are mixed with some really loving the low cognitive load and some having trouble taking them seriously. I have to keep in mind the concepts I want to teach as well.

No matter how I look at it though it is never as easy as “just teach the same things the same way but with a different programming language.”

Monday, April 29, 2019

Game of Thrones and Computer Science

I confess that I have not watched a single episode of Game of Thrones.  That doesn’t mean I am oblivious to the social impact of the show. My online social media is full of it. So when Rita Tillson Vasak linked to this Slate article explaining why a recent episode was so hard to view I jumped to read it. The article talks about data compression and how a lot of compression made it hard for a lot of people to really view the scenes.

It talks about data compression in a way that assumes the reader has a clue as to what they are talking about. It uses the term “lossy video compression” and talks about the layers of compression involved in getting the digital image to your screen. I wonder how many people read that article without comprehending it very well. Hopefully my Advanced Placement Computer Science Principles students would get it all.

We talk about compression in AP CS P. I’ve also played with lossy compression with my Programming Honors students (Lossy Text Compression Project ). I talk about compression in terms of text, images, video, and music. I think students mostly get it.

Rita suggested this article as part of review for the APCSP exam (coming in less than two weeks!) and I think that is a great suggestion. I may use it next year when we talk about compression as well. I think it is a good visual and discussion as to what can go wrong in our attempts to get the most data through the smallest “pipe” in the least amount of time.

Showing specific examples of the effects, positive and negative, of computer science technology when it also ties into a social event can make a great impression.

Thursday, March 14, 2019

Awards I Wish We Didn’t Need

Last week my school was told we had earned the College Board’s Female Diversity award for both Advanced Placement Computer Science A and Advanced Placement Computer Science Principles based on how many female students we had in those courses last school year. Yeah!

We’re one of two schools in the state to get this recognition. That’s a bit disappointing. The more I thought about it the more I thought how sad that getting to adequate female representation was so rare that schools were getting special recognition for it. Are there similar awards for other AP courses? Are their awards for schools for getting to Male Diversity numbers in courses were male students are underrepresented? Is that even a thing?

Don’t get me wrong. I am thrilled that we have good representation of female students in our AP CS courses. And I’m not shy about sharing news of the College Board's recognition. 

It’s hard to get solid APCS enrolment period. I teach at a private Catholic school that requires four full years of religion. That has a serious impact on electives. We have even better female representation in our lower level CS courses because we require a full year of CS for graduation. AP CS is going to be an elective so we have to have a good environment to get students to want to fit it in.

With cultural norms the way there are, a lot of female students are encouraged to follow other academic paths. World languages, for example, fit the stereotype and it often feels like that is a more common, if not natural, path for female students. And the boys seem to be less excited about languages.

Our goal at my school is to ensure that all students are comfortable and feel like they belong in computer science courses. We are careful about room decorations. You’ll see women in computing highlighted in posters and bulletin board items for example. I think the most effective effort it that teachers encourage all students, reassure them that they mistakes they make don’t mean they are stupid or incapable, and include projects that are not gender biased. You know, be a good teacher.

For now we all need to make efforts to include a more diverse set of students. And it is nice to be recognized for the success of those efforts. But I’ll tell you, having a diverse group of students is all the reward I really need.

Tuesday, January 01, 2019

Happy New Year 2019

I’ve been thinking about this post for the last several days. My usual practice has been to start the year with a list of things I want to watch in CS education during the coming year. As I look at last year’s list (see Looking Back on CS Education in 2018) I don’t see a good list for this year. The things I’ve been watching have largely matured. The next big growth area is not clear to me.

Sure we’re making progress in getting computer science education for more and more people. Of course there is more to do and room for growth but it feels like momentum is going to carry us through.

So this year I am thinking about what I can do to give my students an edge. What can I shoehorn into my curriculum that will go beyond the average. There are people who way ahead of me of course. Doug Bergman and David Renton at Porter-Gaud School are doing amazing things. A number of the career/technical schools I know of have room in their curriculum for a lot of things I haven’t been able to fit into mine. Likewise, there are a number of magnet schools covering some really advanced topics. Most of these have more room in their curriculum for CS than my school. That means I need to do things differently.

I suspect that most teachers at comprehensive or college prep schools have some similar time limitations. We have room for only so many courses. In may case I have what seems like a lot of options. We teach some programming in our freshmen course (it’s only one semester long and we cram a lot in already). I have a one semester honors programming and a one semester mobile application programming course. In both of those we get students to the point that they can do interesting things and then the semester is over.

We offer both Advanced Placement Computer Science courses. They're both a full year long but it feels like they are pretty constrained. I only teach the Principles version so playing with APCS A is a moot point for me.

The AP courses are a problem of sorts. As they say, a blessing and a curse. Parents and administrators love them. They help make schools look good to parents. They make students look good to college admissions officers.  There is lots of well-developed curriculum and professional development for teachers. What’s not to like?

But you wind up teaching to the test. It’s almost unavoidable. Your curriculum plan has to be approved by the CollegeBoard for starters.  While you can get clever about things like projects, tools, and for APCSP even languages there is always that constraint about what is on the test that you have to focus on. If APCS is the only course one teaches you probably have the type and energy to get really creative. If you teach four different courses (as I do) it can be a bit overwhelming to make big changes to the AP CS course.

The path of least resistance (for me teaching APCSP) is to use the developed curriculum and teach using that. The code.org APCSP curriculum, which I am using,  is pretty amazing for teaching that course. Since I have two other courses I teach alone based on self-developed curriculum there is some strong motivation to spend time on those.

What I want to squeeze in somewhere are cloud computing, Artificial Intelligence, and Virtual Reality development. I don’t really know enough about any of these to know how hard it will be to fit any of them in or where they would fit logically. If I had a year long course after my honors programming class that wasn’t constrained by the AP curriculum I would recruit a group of smart curious students (plenty of them around) and we’d all learn together. Alas, that is not currently an option for me.

My current thinking is to try and learn more about one or two of these on my own and by the summer have an idea where I can fit some of it. Amazon Web Services has AWS Educate which I have signed up for. It has a bunch of free resources and training. Seems like a good place to start learning the cloud. It looks pretty well set up for teachers as well. SO that is the cloud piece.
Next is either VR or AI. VR requires some hardware to do right as far as I can tell so I have to factor that in. Both AWS and Microsoft have some AI that can be used. Since I already know about the AWS resources I may start there with AI.

VR is pretty exciting as well and there are some great resources for using Unity with C# for that. I already teach C# using Visual Studio so going the VR route may be a good option.

I hope to get my current semester long courses in good enough shape during the school year that I can really deep dive into the cloud, AI, and VR over the summer. Not that I will wait until then to start but that will be when I can get deepest. And of course the search for resources for my own learning, for teaching, and for making this stuff fit goes on all the time. Let me know if you have links to share.
So basically my message is, 2019 has some serious potential.

Monday, December 31, 2018

Looking Back on CS Education in 2018

The last few years I have written start of the year posts about things I want to track in Computer Science education in the new year. Last year’s post is at Computer Science Education Things I'm Watching in 2018 At the end of the year, like today, I write about how those things tracked over the year.

The first thing I wrote about last January was Advanced Placement Computer Science Principles. I was half way through the year teaching it for the first time at that point. Now I’ve been through a whole year and am half way through the second. APCSP grew a lot and continues to grow. Curriculum from Code.org, Beauty and Joy of Computing (BJC) from UC Berkeley, and Mobile Computer Science Principles (Mobile CSP) from MIT continue to be top curriculum in use. It’s a heady time for AP CS. At this point APCS P is pretty settled into many schools and looks to grow even more. The existing “canned” curriculum and related training are key factors.

The next big item I was following was K-8 Computer Science Education. This is still an up and coming area. The #CSK8 twitter chat has been my best window into this area and it continues to grow. The first chat of 2019 will be 2 January 2019 at 5pm PT and 8PM eastern US time. I didn’t attend ISTE in 2018 and that is usually my other deep dive into K-8 CS. But K-8 CS continues to grow as the CSTA Annual Conference and local professional development events like the 2018 CSTA New England Regional Conference.

State Standards continued to grow as more and more states adopted them. In the last year or so my home state, New Hampshire, adopted new CS teacher certification guidelines, state standards, and passed a law including computer science as part of the definition of an adequate education. Other states moved forward as well. I confess I spent a lot more time looking at NH than other states.

It was a good year for computer science education in general. Here’s hoping we continue to see progress in 2019.

Monday, October 22, 2018

The Imperative to Teach Ethics

Ethics has been on my mind a lot lately. Last week, the ACM had a Twitter chat around the ACM Code of Ethics using the hashtag #ACMCodeOfEthics.It took place during the school day but I was able to take part for a while during lunch. It was a good discussion. Coincidently, Kara Swisher had an OpEd post in the New York Times titled Who Will Teach Silicon Valley to Be Ethical?

There was a time when my biggest concern about the software industry was the poor quality of software (still a concern) These days I worry about the ethical quality of the companies producing that software. This is not a new concern. Years ago I heard the (now former) CEO of a large company talk about his “values coach.” That he needed some one to coach him on the companies published values was unsettling. Kara Swisher talks about “chief ethics officers” to help companies stick to ethical practices. That concerns me as well.

Companies adopt the ethos of their leadership. If they leadership needs someone to tell them that they are pursuing unethical activities there is a problem. And that problem is going to become endemic throughout the company regardless of a chief ethics officer.

We need to teach ethics long before students grow up to become CEOs. I took a look back at the Computer Science Curricula 2013 (CS2013) Final Report today. Yep, all the talk about ethics I remembered from task force meetings was still there. Ethics and professional practices are listed a Core Tier 1 topic. That is the highest of the three levels of importance for undergraduate computer science topics. That means all undergraduate computer science programs should teach ethics!

The discussion in the document talks about the fact that having it as a stand alone course may miss students in some programs but that it can and should be integrated in many, if not most, other courses. In some ways I think integrating it into other courses should be a standard practice with or without a standalone ethics/professional practices course. Context matters.

During the discussion on Twitter last week it was pointed out that many don’t see the ACM Code as having answers to specific questions. That’s probably true but I don’t think it is possible to write a code that answers every specific question. Rather I see the code as a place to start asking questions. How does what is being discussed fit in with ethical practices?  What are the trade offs? There are always trade offs. How do we balance those trade offs to the side of the betterment of society?

Where does that leave us who teach prior to the college/university level? Can we leave the teaching of ethics to the professors? Given the number of people I hear from who say they are unaware of specific ethical practices courses or mandates to discuss ethics in other courses I don’t think we dare. And let us not forget about all those people who bypass university completely! No, we’ve got to teach it.

We’re not going to get many stand alone computer science ethics courses in high schools. OK I teach at a Catholic school and Ethics and Justice is a required course for our juniors.  Ethics shows up in the course description of several of our courses and that is great. But as I said earlier, context matters. I am not going to assume that these other courses are sinking in.

High school courses seem like silos to many students. “Why are we learning Binary in computer science that is a math topic?” is a question I hear regularly. Ethics have to be part of the discussion in computer science courses. It fits nicely into Advanced Placement Computer Science Principles. I think that was/is intentional. We have some great conversations about ethical issues in that course.

What I want, what I think society needs, is for people to regularly think about the ethical impact of computing. Computing is changing every aspect of our lives. Without thinking about the ethical consequences of these changes we risk everything. 

should

Tuesday, October 16, 2018

Lossy Text Compression Project

My motto has long been "steal from the best" at least when it comes to teaching resources. Today I found a good project from Code.org. I'm using their Advanced Placement Computer Science Principles curriculum and we are currently learning about data compression. image

Code has created a Lossy Text Compression app (See image or visit link). that students can try out. The code is also available which is very nice.

The algorithm is to keep the first letter of every word and then remove all the vowels to create a new, compressed message.

Now the app is really nice and because  the code is available several students modified it to try different things out. One of them just changed the message to report 100% compression. No surprise there of course.

I am thinking that I may have some of my coding students (in my classes that are not AP CS P) write their own versions. It is a fairly easy string manipulation exercise which makes it good for beginners. Parsing of text is a good thing to learn anyway. It also lets me bring data compression into the class discussion and I see that as a big plus.

Besides, I just really like string manipulation projects.

Friday, September 28, 2018

Girls in APCS Research

Are you an Advanced Placement Computer Science teacher?

Are you concerned about increasing the number of women in computing? 

Are you willing to help out a fellow teacher with a research project?

If so, please find the time to help Derek Miller. There is a link after the introduction to Derek and his project.Thanks.


Derek Miller is a computer science teacher from the suburbs of Chicago and has been an AP grader for five years. He is currently working on his dissertation and needs as many AP Computer Science teachers as possible to take a 20-minute survey. The results of the survey and follow-up interviews with a handful of participants will hopefully generate some ideas to help recruit and retain more girls in computer science classes. All participants will receive the research results so hopefully everyone will learn something by taking the survey. If you have any questions, please let Derek know by emailing him at Z1717366@students.niu.edu.

Girls in AP CS Survey Link

Friday, September 21, 2018

What Makes A Great High School Computer Science Program

Not long ago someone asked on Facebook for great HS CS programs to visit. Three schools came up quickly and repeatedly. Two are large magnet high schools and one was an impressive private high school. I know something about all three schools and they are doing really good things. They all have an edge though. Some selectivity in students for one thing. The public schools are large with multiple computer science teachers. These are not always things that are possible. Many schools are small, underfunded, take anyone, and have other limitations. So what is the hope for them?

What is a great computer science program? How do we define it?  Can it exist in a smaller school?  Does it require lots of courses and lots of students? Is Advanced Placement a requirement for a great HS CS program? It all boils down, in my thinking, to what result does a great HS CS program show.
Perhaps I should start with my idea of what great outputs are. I think the best programs turn out students who a) really want to study more computer science and b) are well prepared for learn with a solid base of understanding.

Not that all students go on to take more CS. No, I don’t want everyone to take CS. There are a lot of other interesting and important things to study. But if some students decide to take more CS that’s a great thing. If we give them a head start with knowledge that is probably the difference between an adequate CS program and a good CS program.

Great? Hum, what more is there? Perhaps a great program give students the opportunity to learn and produce outside the box if the standard curriculum.

How do you get there? The more I think about it the more I think that the difference between adequate and good and on to great is the teacher. What is a great CS teacher? I think there are several factors. I think domain expertise is very important. I think teachers who are great teachers can get very good results without great subject matter expertise but I’m not sure they can have a really great program. Not until they learn more themselves. Yes, this is a problem. But a workable one.

I think great teachers are willing to admit that they don’t know everything. I know that seems contradictory with the last paragraph but it is not. Computer Science is too big for one person to know it all. A poor teacher, confronted with a question they can’t answer, says “we’re not going to get into that.” A good teacher says “let’s learn about that together.” or “Here are some resources. Come back and teach me.”

A good teacher may teach the same, solid way every year or every semester.  A very good teacher changes what they are doing constantly. Seeing what works and refining it and tossing what doesn’t work. And they don’t count on just their own expertise. They seek out professional development, they read blogs and research papers, and they participate in the larger CS education community.

What about curriculum? I have mixed feelings about the Advanced Placement curriculum. Some days I love the range of topics in AP CS Principles. Other days I wish I could go far deeper into specific areas.  AP CS A, well, let’s just say I am not a fan. At the same time I am realist enough to know that the AP designation plays well with parents, students, and administrators. It is the only way some schools will ever get an advanced CS course.

Can an AP course be part of a great HS CS program? Probably. A lot of people define at great HS CS program as one where a lot of students get 4s or 5s on the AP exams. I find this a narrow definition but I also think that teachers can do some creative things even with the nature of the AP program. It’s just harder.

Career Technical schools often don’t offer AP courses. On the other hand they also have students for 2 or even three solid years with the flexibility to cover things their own ways. Students come out of these programs ready for, if not jobs, paid internships. They also have good preparation for the CS part of higher education and strong motivation. Like the magnet schools I wrote about above they are largely self-selecting though. I think teachers in comprehensive schools can learn from these programs though.

At Career/Technical schools there is a clear purpose, a practical purpose, for what students learn – a job. We don’t often “sell” the reasons for what we teach in CS in comprehensive schools. “It will help you in college” is a bit abstract sometimes.

A great HS CS program helps students find their own motivations. This means projects that are meaningful to students. Students have some agency in selecting their projects, the concepts they are learning, and the tools for that learning. This too takes some courage on the part of teachers. I think it also takes some willingness on the part of administrators to allow for some courses that are atypical. Perhaps even dropping AP CS! Great CS programs will know about the boxes but be willing to move outside of the boxes when it is appropriate. Or to expand the size of the boxes they live in.

How do you define a great HS CS program? Are you part of a great CS program? If you are part of a program that is good or just OK, what do you think you need to make the program great?

Wednesday, June 06, 2018

Looking Back At APCS Principles–My First Year

During a conversation with my dean, he said it takes about three years to really get teaching an Advanced Placement course down pat. I don't know if that is the right number but it is surely more than one. This past school year I taught APCS Principles using the curriculum from Code.Org. It was a life saver. I had four preps this year and two of them were first time for me. Well one of them wasn't completely first time but I was doing a complete starting from zero rewrite of it. So there was a lot of work to do.

The tools supplied online were really quite good. The simulators were amazing and let me do some things I could not have done without them. Code's videos, some of which I used in other courses as well, are just outstanding. High production values, outstanding and diverse presenters, and just the right length to not lose kids. In all honesty, a properly motivated students could probably use it as a self-passed course. They would not get as much out of it as being part of a class but they would do ok.

We had some great discussions in class which I think were very valuable. I had three students from China which made talking about issues like censorship and government control of the internet, among other things, extra interesting.

There are a few things I know I need to do differently next year though. The performance tasks are a big part of what I need to do differently. I gave the Explore task in the start of the second semester. That has to get moved to first semester. That will give me some more flexibility in the second part of the year.

Like a lot of people I made the Create task due at the official “drop dead” date set by the College Board. Huge mistake as panic set in and only an extension owing to system glitches on the College Board site made it possible for all the students to submit. Next year, we’re doing it earlier. No midnight deadlines on a system that will be overloaded.

I also need to work on making sure the students understand the requirements on the performance tasks better. Now I had to be teaching to the test and that is what I’d be doing. At the same time they REALLY need to learn to read and follow requirements. That is an important lesson. That makes me feel better about it.

My students all come in with previous programming experience but what I found this year was that was somewhat uneven. I have to be more aware of the students who are not as into coding as others. APCSP is about a lot more than programming but I don’t want students to miss out on that piece. I may reorder some things in the course around that as well. I need to get more programming in before I assign the Create Task I think.

I still have a bunch of processing to do and I hope to talk to other teachers at the CSTA Conference next month. I figure that knowing I have to do things differently is half the battle though. If you taught APCSP, with the code.org curriculum or with something else, I hope you’ll share what you learned about teaching it in the comments. 

Friday, June 01, 2018

Micro:Bits and Teaching Networking

This year i taught advanced Placement Computer Science Principles with a mix of high school juniors and seniors. Because of the schedule I had the juniors for several days after the seniors were done. The challenge was to come up with something useful and interesting to keep them busy and learning.  I looked at the classroom set of BBC Micro:bits and thought – networking! Obvious right? OK maybe not but I had been thinking about the ability of these little devices to communicate using radio signs and this seemed like a good opportunity for some experimentation.

I broke the students in to groups of two and three and asked them to create an app that used communication between two of the devices. Other than pointing them to the MakeCode for Micro:bit app for Windows (in beta - requires Windows 10 though there are also iOS and Android versions) and the MakeCode web site I didn’t give them more instructions. Hey, it’s an AP course!

A few students decided to use the Python editor from the Micro:bit web site but most used MakeCode. The MakeCode students used a mix of the block editing and the JavaScript editing. I think having options was a plus as students worked with what they were most comfortable using.

On one hand the students didn’t quite get to the level of application I had hoped for. I wasn’t any help there so I think I need to dig deeper into this myself over the summer. Time was an issue as well since the end of the year brings a lot of interruptions.

On the other hand, they did learn a lot. Several students told me they learned more sending between actual devices than using a software simulator. The Code.org APCS P resources I used have an outstanding simulator which the students did use. The devices made it more real, dare I say solid, to the students. One student suggested starting with the simulator and moving on to the devices for deeper learning.

As I listened to them talk about their projects under development they discussed things like throughput and bandwidth as well as how to encode information. These are all topics we had discussed during the year of course. Here though was a practical application and visuals that really brought things home. There is something about pressing buttons and seeing lights on another device light up that brings extra meaning.

My thinking now is that I will be bringing these little devices out earlier next year. We’ll do some networking with them for sure. Maybe some other projects as well. They seem motivating and interesting. Finding thinks that students want to use, want to learn more about, and which reinforce concepts is a wonderful thing.

Thursday, April 05, 2018

Thoughts on where CS education tools come from

TouchDevelop is being retired. It’s not the first tool with educational use to be retired by Microsoft. Or from other companies either. While I have used TouchDevelop with my students I was getting ready to move to MakeCode anyway so it is not a fatal move for me by any stretch. I know other teachers who have been using it more extensively who are going to feel some pain though.

I tend to divide CS educational tool sources into four categories.

Professional tools that are useful in education. In this category we see things like Eclipse, Visual Studio, and other development tools that are being used to create real products. These tools are not going anywhere anytime soon. Companies, both those that use them and those who create them, have a vested interest in supporting and improving them.

University developed tools. This includes things like Alice and Scratch but also BlueJ and Snap! and, well, far too many to mention. These are also likely to stay around for quite a while. People tend to build careers around them and use them to attract graduate students who use them, enhance them, and generally want them to be around.

Education companies. Companies like Tynker and Birdbrain are included in this group. As long as these companies can make enough money to keep going their tools will be around.

Industry Research Projects This is often the most state of the art and cool new things. On the other hand they are the least to be around for a long time. AppInventor was originally one such. Fortunately for educators who adopted it, when Google was done with it they were able to hand it off to a major university where it continues. TouchDevelop is another. Hear though, when the researchers moved on to new ideas there was no similar handoff. Both the Touch Develop web app and cloud backend are open source under the MIT license:

There is no indication that anyone is going to take it on though. I always assumed this day would come to be honest. Industry research groups have changing priorities and in some ways that is a good thing. I could argue it is a very good thing in terms of advancing the state of the art in computer science. It’s sad for us in education who aren’t always as quick to adjust as industry is.

As one tool fades another grows. MakeCode is pretty cool and there is a lot there learned from TouchDevelop, the Micro:Bit and educational uses of them both in there. Microsoft is developing a sprite-based game engine for MakeCode and a new course on game programming, in the spirit of CCGA (an interesting curriculum based on TouchDevelop.). One hopes it will be available in some form for teachers to learn it this summer.

I’m not sure where the materials developed by code.org fit into my classifications though. They are a non-profit with industry funding but they are neither industry or academia.  They have some great stuff though. I am using their CS Principles program for example. Chances are I’ll retire before they “go out of business” so I can probably depend on them plenty long enough.

Nothing lasts for ever though and change is the most constant thing in computer science. So we have to learn to adjust and change our tools and our curriculum, probably, a lot more often than educators in other disciplines. At least we’re not going to get bored.

Monday, March 19, 2018

Advanced Placement Computer Science is a necessary evil for #CSforAll

Two controversial assertions in that title. That APCS is necessary and that it is evil.  I thought about leaving this post at that and seeing what sort of conversation started but that didn’t work on Facebook so I figured it would not work here either.

To start things off I should say that I am not a fan of the AP CS program. It’s too limiting. It is too tied to an end of the year test for me. The AP CS Principles course has more freedom than the AP CS A course does but still depends on an end of year test (and two performance tasks). Those performance tasks take up a lot of class time. I really like project based learning and I would love to have more time for larger projects. APCS courses suck the air out of the environment for other, more interesting to me, long term (year long) courses. I think there are better ways to prepare students for later CS education and careers. That’s the evil part.

On the other hand, the Advanced Placement brand carries a lot of weight with school administrators, school boards, parents, and other interested parties. It’s often an easy sale to these people as an argument for a new CS course.  If  we want to see “CS for All” APCS can be very helpful. But is is still necessary?

We have some well accepted starter courses in high school CS. Exploring Computer Science for one. Code.Org’s CS Discoveries is gaining some fans as well. They’re both good starters. In some ways I think they may ultimately lead to more high school Computer Science than AP CS will. But we’ll always want an advanced course to be the capstone of sorts. Should AP CS be that course(s) or should we have something more open-ended and less constrained by an exam?

What would you like to see at the top of the high school CS curriculum? Is AP CS the right answer? Is it a necessary course?

Monday, January 01, 2018

Computer Science Education Things I'm Watching in 2018

This time of year I like to think about what might happen in the year ahead. 2018 looks to be an interesting year for computer science education. There is a lot of momentum going and we'll see how it continues or not. A few specific things I am interested in though.

Advanced Placement Computer Science - Wow! did AP CS principles take off in 2017. Will that growth continue or was there just a lot of pent up demand? What is APCS P going to do to enrollment in APCS A?  I'm not sure anyone really knows. Chances are that both will see increased enrollment this year. How much is the question. AP CS is driving a lot  in high school CS education. It has credibility (deserved or not - a separate question) and that makes it easy to push into schools passed principals and school boards. In a sense it is a path of least resistance.

K-8 Computer Science Education -  This is the exciting place in CS education. APCS is boring. Sorry but it is. We're teaching high school CS the way we've always taught it. In K-8 we have a lot of people who don't have a lot of history teaching CS. They are teaching something new to them in many cases. They are looking to teach CS more like they teach other courses. Plus they are looking to make teaching and learning CS interesting for themselves and their students. This is where I expect to see teaching innovation. This is where we'll see teachers using robots, micro:bits, Android, and more hardware devices.
I've been following the #CSK8 twitter chat during the last year. There is a lot of excitement and interest in doing fun things in CS education at the lower grade levels. That twitter chat is a must participate event if you are interested in CS in the younger grades. BTW as I write this the next #CSK8 twitter chat is about physical computing and will happen on 3 January 2018 at 5pm PT and 8PM eastern US time.

State Standards - More states are writing state-wide standards all the time. The trickle in 2017 may turn into a flood in 2018. How will that play out I wonder? What will the K-8 standards look like especially. Will the make CS required for all or just offered to all? I suspect different states will take different paths. It's going to be a lot to watch. My home state of New Hampshire is working on standards and I'll be taking part in that effort. I hope all the states continue to involve classroom teachers in this important work.

So what do others think will be the interesting things to watch in 2018 regarding computer science education?

Tuesday, December 05, 2017

Some Thoughts on Drag and Drop Block Programming

I’ve toyed with drag and drop or block based programming for a bunch of years now. I even keep a list of block programming platforms. But this year I am really using them a lot with students. It’s been a real learning experience for me and my students. I’m using AppInventor with my mobile application programming students and code.org’s AppLab with my APCS Principles students. Now the AP class is using AppLab with JavaScript now but we started with the blocks and the interface is still very much drag and drop related.

I’m thinking about this in two ways. One as for my own projects and one as a teaching tool. I’m old school – started programming with punch cards and FORTRAN – so I confess that I am still most comfortable doing my own programming in traditional languages (mostly in C# these days with some Visual basic depending on my mood0. For for students things are different.

First the good. In many ways my mobile apps students are doing more advanced things than my Honors Programming students (C# there). For example connecting to Amazon’s API is a snap in AppInventor. Setting up things like nested code is also very easy. Syntax problems are pretty much not an issue. So we are covering a lot of concepts. That’s all great. I wonder how it will translate for learning text based languages. My AP students all have previous (to applab) experience with text based languages so they are not a control group for me.

One the down side, debugging block based code is different for me. I’m used to traditional debuggers and I haven’t figured out how (or if) that can be done in AppInventor. So of course I go old school with taking code out or adding messages in different places. Error messages in AppInventor are an area where I am facing a learning curve. The idiom is different and I’m teaching myself so it can be slow at times. Next time I teach this it will be better though as my students are showing me a lot of bugs learning opportunities. Still I have had the AppInventor emulator crash with no usable error message and that is a problem. I want to see if I can get some cheap devices to use next year. I think that will make some things better.

UI formatting is an other area I am struggling with. I think this is both a lack of experience and practice with the tool combined with different limitations on a mobile device screen. I am less than happy with my UI for my Windows Phone app which I wrote in C# and Visual Studio which suggests I need help with small screen UI design anyway.

In any case the students in my mobile app class are learning a lot (I think) and enjoying the course (I think) which are good indicators of success. I’m pretty happy with that. I’ll use AppInventor for future sections of Mobile App Programming.

I still feel like blocks are best for small apps and for beginners. Yes, I know people make some pretty sophisticated programs with them but I struggle to wrap my head about that being as easy as text based languages. Maybe 45 years of experience writing text based code is a learning disability for me. Or maybe I just need the right teacher? I’m taking blame here and trying not to blame the tools.

Today block programming languages seem to be mostly designed as teaching tools and they are good at that. I think a lot more has to be done to really make them usable as general purpose languages for more complicated large projects. I do think they can get there even if the path isn’t obvious to me.