Thursday, June 13, 2019

Teaching Students to Yearn to Learn

Summer time is time for me to do a lot of thinking about my teaching practice. I've been doing a lot of reading and a couple of quotes have helped me in my thinking. Two of them are about leadership and I see them as having applicability in education. A good teacher is a leader - trying to lead students to learn. The first quote is about using coercion.

“You do not lead by hitting people over the head — that’s assault, not leadership.” – Dwight D. Eisenhower

Grades are, or can be, a bludgeon. Sometimes teachers use grades as a way to force students to do work. I hate doing that. It feels like a metaphoric "hitting over the head." It may get students to do some work or at least to hand in something but it seldom really leads to real learning. That leads to the second quote I have been pondering.

“If you want to build a ship, don’t drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea.”
― Antoine de Saint-ExupĂ©ry

Leadership is largely about teaching students to yearn to learn. A good teacher leader develops internal motivation in their students so that they want to develop the knowledge and tools one is trying to teach.

One of the things I have observed is that students who have a say in the projects they take on are much more motivated to learn the things they need to know to complete them. Getting students to want to learn is much more effective than trying to force them to learn so that they can get good grades.

Wednesday, June 12, 2019

Different Kinds of Professional Development for Computer Science Teachers

What to teach and how t teach are different questions. The first is all about content knowledge and the second is about pedagogy. For the most part it feels like professional development for CS educators is focused almost completely on content knowledge. A great many teachers are coming to computer science from teaching other subjects. There is this idea that a good teacher can teach any subject once they have the content knowledge. I’m skeptical. Computer science is not quite like other subjects. It’s more like teaching vocabulary and novel writing at the same time. We’re teaching how to write a novel to people who not only have never read a novel they don’t even know what the words mean.

Do I exaggerate? perhaps a little but the point is that we probably shouldn’t assume that teaching CS is the same as teaching other subjects. There is not a lot of professional development on how to teach CS.  We sure could use more of that.

Although if I am honest, we could use some deeper content knowledge training as well. It seems like most of what we see is pretty basic and designed for beginning teachers. But we all need more research based knowledge about how to teach what we do know.

BTW, Garth Flint had a nicely related post on his blog https://gflint.wordpress.com/2019/06/10/cs-professional-development-in-montana-where-should-it-go/

Tuesday, June 11, 2019

Join the Online #CSed Conversations

At it’s best, social computing is a conversation that moves in a positive direction. The more people who participate the better the conversation and the more benefit for everyone involved. For computer science teachers, who are often alone in their school. opening and participating in online conversation can be a real benefit. These conversations can cross boundaries of time, space, and even online environments.

A recent example. Garth Flint wrote an end of year post (Last Day of School And Done with Java) that I lead to a post of my own. (How Well Can You Code the Projects You Assign Students?) Mike Zamansky wrote a follow up post of his own. (Do It First ) All of these posts were also discussed in Facebook and Twitter. And of course there are comments left on the various posts. So there are multiple ways to participate in the conversation.

No one has to participate in all the conversations or all online tools/communities to benefit though. Things, especially good ideas, tend to propagate across paths. That’s how networks work after all. There are enough people who act as transmission nodes that the best knowledge and the best ideas tend to move around pretty widely. Everyone benefits from this. People who lurk (read and don’t respond) learn a lot which is an almost invisible benefit. At least it is usually invisible to the people who are writing but it is probably pretty visible to the students whose teachers take what they learn and use it to better their own practice.

Still I wish more people took an active part in the conversation. Be it a comment on a blog or Facebooks post. A tweet with a link and a comments.Tweets in a Twitter chat.  Or an original blog post of their own. (I REALLY wish more CS teachers blogged about what they are doing.) How ever people participate we all benefit.

Computer science educators tend to be a very supportive community. Jump in with both feet.

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.”

Friday, June 07, 2019

How Well Can You Code the Projects You Assign Students?

Garth Flint had another good post today (Last Day of School And Done with Java) He lists some interesting projects he assigned and writes about some lessons learned. Any time a teacher learns from student projects I count that as a double win. But one of his comments really resonated with me. Garth writes “I did only two of the six assignments myself.  With the others I saw the solution so did not code them up.  I should have coded them up just so I could answer questions better for the students. “ Highlight mine.

Some years ago I wrote a couple of editions of project books for both C# and Visual Basic. (I may update them this summer if I have time.) People seemed to like them and I received numerous requests for coded solutions. I had them and usually provided them. I really think that teachers should always write their own solutions though. In fact, the less you know about programming the more you should code up your own solutions. As Garth pointed out in his post, when you code your own solutions you can better help students.

And if a project is a good learning experience for students it will also be a good learning experience for a teacher who is working on their own skill and knowledge base.

I’ve got a ton of programming experience and know a lot of tricks techniques that I would never expect beginners to know. So I try to write solutions using the tools and language constructs my students will have at their disposal. This helps me understand what issues students are likely to come across. It saves me time later.

Of course students are clever and think of ways to do things that an experienced coder would never come up with so I learn some new things from them. And the smart kids look up features we don’t cover in class and build “interesting” solutions. That’s all good. Better than good really. I’ve actually come up with several new to me ideas from students.

To be clear, I don’t want every student to write their solution the same way I write mine. I want to see some creativity and imagination. But I also don’t want to have to admit I have no idea how to implement a solution of my own. Well, not often anyway.

Since I teach several level of CS from our freshmen course which only has a few weeks of programming to our APCP P course with Programming Honors in the middle I sometimes code up several solutions. Some things that are possible with limited tools are much easier with more advanced tools. Arrays for example can be a powerful tool. I wrote about this a couple of years ago at Taking Things To Another Level  where I talked about revisiting a popular freshmen project later in Programming Honors.

It’s summer break and I’ll be doing some coding. Trying new projects to see what students will need to know to code them themselves. I’ve been looking forward to having the time to do this for moneys.