Coding Resources for non-Computer Science Teachers

At #BLC16 today, several teachers asked for resources to learn to code.  I recently had the privilege of teaching a coding workshop to ten teachers at my school, and loved the power of interdisciplinary exploration of this craft.  I learned so much teaching this tribe which included an art teacher, a Latin teacher, two physics teachers and three math teachers.  I pulled together a list of resources for them, but overwhelmed them because it was too long.  I decided to shorten the list for this post and just give my top ten.

TOP TEN RESOURCES FOR TEACHERS TO INCORPORATE CODING INTO THEIR COURSES:

  1. http://code.org: By far the best place to start, code.org offers tons of wonderful resources and lesson plans for doing an hour of code in your classroom and beyond.  They have great videos that can be used for class, and lots of statistics that you can share with your school to defend your choice to teach kids to code.  Additionally, they have links to many other resources used by teachers from different providers.
  2. https://scratch.mit.edu : Scratch is a fantastic first language with its visual drag and drop interface.  Students can explore other people’s projects and then click “See Inside” to take a look at how the code was created and then “Remix” the project and add their own touches.  There are a huge amount of teacher created resources that utilize Scratch for every subject in school.  This drag and drop “block-based” language is great for all beginning coders.
  3. http://pencilcode.net/: An amazing site for creative teachers to find great lessons and resources for their classrooms.  Students move from “block-based” to “text-based” languages in this easy to use, wonderfully creative web based editor.  You can read about how Beaver Country Day uses pencilcode in all of their courses here: http://www.techtimes.com/articles/24689/20150105/this-is-how-a-innovative-school-integrated-coding-into-all-of-its-courses.htm
  4. https://processing.org/download/: A great starter text-based language that is used by artists, designers, and beyond to create amazing visual sketches.  Look for tutorials from NYU’s amazing Dan Shiffman here.  Find lesson plans for AP CSA from Lowell High School here.
  5. https://nclab.com/: A free program for students that easily moves them from turtle coding in blocks through 2D and 3D modeling in Python.  This website also offers a free SCAD environment for designers.
  6. http://nicerc.org/: Cyber security, STEM and other computer science lessons, both on the computer and unplugged.  Their teacher resources are amazing, and they have lessons that also use Parallax robots.
  7. http://appinventor.mit.edu/explore/: App Inventor allows students to create Android applications that can be downloaded and shared with friends.  The big limitation here is that it is Android specific, but the drag and drop interface is very fun for students to use, and there are many teacher created lessons that can be found for this package.
  8. https://academy.oracle.com/en/membership-join-oracle-academy.html: Oracle offers free training and resources for teachers and students.  All of their resources are free, and they have ready to go curriculum for you to use with your students for computer science.
  9. http://cs50.wiki/This+is+CS50+AP: Harvard’s CS50 Introduction to Programming course has now been mapped to the AP Computer Science Principles and is being marketed as CS50 AP.  The course is incredibly challenging, but an amazing free resource for teachers who want to learn how to code more deeply.  This may not be your first stop when starting to code, but if you get hooked, this will give you the tools to take it as far as you would like.
  10. https://countsp.trinket.io/ap-physics-with-python#/welcome/introduction: Specifically for AP Physics teachers, this set of Python tutorials inspired the physics teacher at my school, and he found it very helpful for designing the sketch below that modeled the path of a roller coaster at Six Flags New England.

 

For my full overwhelming list of resources, look here: https://docs.google.com/document/d/1nhgJFbW2Mz5Kh68tNYos5N9-xOBkfG_KZBi3ALsmMO8/pub

 

Phil Program on the Scrambler

 

I can’t help but add in a few extras for the English and History teachers out there that want to do this:

HUMANITIES and CODING RESOURCES:

Article about coding in English and history class: http://www.slate.com/articles/technology/future_tense/2015/04/building_coding_into_art_english_and_history_classes.html

Pencilcode activity: http://activity.pencilcode.net/home/worksheet/humanities.html

Language learning chain of studios in Scratch: https://scratch.mit.edu/projects/98463980/

One teachers’ Scratch concept map of coding in English class: https://scratch.mit.edu/projects/97659653/

English class studio of projects created in Scratch: https://scratch.mit.edu/studios/1697459/

 

 

And finally, a shout out to Jackie Corricelli’s “Links to Learn” page for students: http://blog.whps.org/corricelli/links-to-learn/

CS50x International Puzzle Day

My students and I participated in the CS50x International Puzzle Day last weekend.  The puzzles were difficult.  VERY difficult!  Most did not have instructions, which my students found baffling!  We spent a class period on Friday doing the puzzles.

I built a pseudo-random name generator in Processing, which I used to draw their names for raffle prizes.  On the list of prizes were CS50x stress balls, t-shirts, puzzles, 3D printed key-chains and more!  Their homework was loosely defined as, “Do more work on the puzzles with your team to the degree that you find it fun.”

Monday morning, I found the outcome fascinating.  In one of my classes, the majority of students had played around with the puzzles, noodling with some ideas, trying to make some connections.  They hadn’t solved many of them, but felt a clear vibe of satisfaction at having made an effort and participating.

In the other class, the students reported that the puzzles were too hard and that they spent very little time thinking about them.  I couldn’t stimulate the same rousing discussion about various approaches to these puzzles that I could in the other section.  In fact, they seemed a little angry that the puzzles hadn’t come with better instructions.

I wondered what accounted for the difference in response: personality, stamina, interest? Was there some way in which I had communicated differently on Friday with these two groups?  The class that had popcorn (I ran out– oops!) was more enthusiastic.  Was food the key to enthusiastic puzzle solvers?  More than half of the enthusiastic class had attended the CS50x AP Hackathon at The Browning School, whereas only two from the less enthusiastic class had attended.  Did that reveal something?

I, on the other hand, spent much of the weekend texting with colleagues, competitively trying to solve the puzzles.  In the end, we felt confident about four of our answers, which I submitted, and on Monday we laughed and continued puzzle solving, even though the “competition” was over.  I talked with them about how much satisfaction we all got from talking about and thinking about these puzzles, and how uncomfortable the lack of directions made some of my students.

In the end, I think showing my students the satisfaction associated with trying to solve a seemingly impossible puzzle, even when you don’t succeed, is something I want to accomplish more often in all of my classes.  I am working with colleagues to find ways to do better with this in my math as well as computer science.  If students walk away from my class feeling empowered to approach very difficult problems and find satisfaction with them even when they don’t quite find an answer, only sawed away at it, I have taught them a skill that will help them in every area of life.  This International Puzzle Day reinforced that for me.

Now, back to working on those puzzles!

Microsoft CS50 Hackathon: NYC!!!

CS50HackHOPPostcardYesterday, I had the privilege of traveling to NYC with some of my students to participate in a Microsoft sponsored CS50 Hackathon at The Browning School.  My students walked in and immediately spotted Harvard Professor, David Malan, and started whispering to each other, “He’s the one from the videos!”  I am not sure they would have been any more excited if they had just spotted Adele.  They truly acted like this amazing professor of computer science was a rock star, and I couldn’t have been prouder.

Soon after that, a few of us were interviewed (It isn’t a true CS50 event without cameras and swag!).  My students made me proud with their confidence and ease discussing their course on camera.  They were so professional!

IMG_20160206_102218083

Professor David Malan started off the Hackathon by handing a bold volunteer a giant yellow phonebook and inviting him to do the now famous CS50 stunt of ripping it in half to find the name “Mike Smith” more efficiently.  He then had us work together to count the number of people in the room.  We epically failed and he announced that it would certainly not be the only “bug” we found that day.

 

Professor Malan also shared that he had never coded until he was a sophomore in college, which was why he was so excited to see a room filled with high school students learning computer science.  I was reminded of the importance of exposing every student to this discipline so that we don’t miss the future professors due to lack of access.

Since my students had not done much coding yet this term, I expected that they would  do the first CS50 problem set, which is in Scratch, but I quickly realized that they felt a little under-stimulated and wanted to be more challenged.  I got them set up on the cs50.io IDE and sent them to a walk-through with Zamyla and another young CS50 star without even having read the problem set.  After that, my students set about learning C and teaching it to each other using the CS50 online resources.  I was struck by how willing they were to put themselves into an uncomfortable situation with no direct instruction from me.  All of these students have had experience coding in some other language, but none had ever used Bash or C.  They were not at all intimidated and went forward fearlessly.  As I wrote in an earlier post, we haven’t coded at all yet this term, and they were eager to get going!

BrowningCS50NYC

As we left the Hackathon, arms filled with candy, pizza, CS50 sockets, t-shirts, bags, and balloons, I was overwhelmed by the generosity I had just witnessed.  Educators from so many institutions were all helping each other’s students, making sure that every student in the room felt supported.  Two of my colleagues in the CS50 pilot had come without their own students, and so adopted mine and were helping them get started with C.  All of us were sharing our favorite tools for the classroom and our hopes for what we will do next year.  I was invited to help plan another Hackathon for next year, and to collaborate online with some of these inspiring teachers.

Last week, I told my students that computer scientists are special because they love to share their knowledge, as evidenced by the prominence of open-source projects.  The community of educators who participated in the Hackathon at The Browning School clearly embody this generosity of spirit, and I was inspired and excited to share a day learning and teaching with them.

 

CS50xAP: Binary, ASCII and Algorithms, Oh My!

It is amazing to me that I am only two weeks into the CS50x curriculum, as I feel like these students and I have already accomplished so much.  As we continued to forge ahead with Unit 0: How Computers Work, our thoughts turned to figuring out how binary and ASCII really work.  We studied the code I wrote for the “divide by 2” algorithm for converting from decimal to binary.  Next year, I might make students write it with some help.  I don’t like that I did all the big thinking on that one.  Students found the Cisco Binary Game very fun and a great way to reinforce binary numbers.  They were all laughing at one point telling me how “stressful” it was!  I told them that they needed to tell their parents, “My computer science teacher stressed me out by making me play a game for homework!” and see how much sympathy they got.

For our next lesson, students wrote secret codes to each other using ASCII.  It was clear that even for 16 and 17-year-olds, passing secret messages is still fun.  Students were amused by the turtle-like speed of the human processor when dealing with binary.  One student joked that she could process about one character per minute.  It led to a great conversation about the fact that the slowest component of a computer’s processing speed is actually the human operator.

We ended the week hearing about the technologies that each student had read about.  Students were required to read three articles from within the last three months about technological advances.  Students were asked to describe the technology and then discuss its possible impact on and value for society.  The discussion was fascinating as we considered things like Amazon’s 30-minute delivery drones and Goldman Sach’s predicton that virtual reality will be bigger than TV in ten years.  I was surprised to find that my students were not inherently more comfortable with the marching forward of technology than I was.  In fact, they might have found Spotify’s new messaging functionality more disturbing than I did!  Overall though, we were all inspired and truly blown away by what people are building and the ways in which their innovations might change the ways we live.  Next week, we get to finish up Module 0 and start coding.  It almost feels too long into the term to start coding, and I can’t wait!

 

Teaching CS50x AP Module 0: How Computers Work

Last week, I finally began teaching the CS50x AP material at my high school.  I trained for this last summer at Microsoft’s HQ, and have been anxiously awaiting the course start date.  After all the wait, the timing seems serendipitous as it aligns with President Obama’s Weekly Address about giving access to computer science to every student in this nation.

The first module of CS50x AP is new, as it is aligned to the College Board AP Computer Science Principles course.  The focus of the module is on how a computer works from a technical standpoint, and it is not something I have ever spent a lot of time on in my courses.  As such, I did a lot of reading and watching videos to prepare, and found myself fascinated by the ways in which computers have changed, as well as how they continue to be very much the same.  Here are some of the highlights of the week:

  • Students helped me attempt to completely take apart my old laptop and an old school computer.  They were able to identify parts and pieces within the machines based on the information that they learned from class.
  • Students and I took a field trip to visit the school’s Systems Administrator, Mr. Anderson.  In preparation for our visit, he took apart a few old servers and showed them the insides of each of the servers.  The students noted that they were just like the PC we had seen earlier in the week, but with duplicates of nearly everything inside.
  • Mr. Anderson impressed the students by discussing all of the processes that he has automated so that the school’s system never needed to shut-down.  He explained the importance of redundancy of both data and parts, and demonstrated how the servers were set-up with the ability to “hot swap” nearly every part in the middle of the school day.  All of this, he told us, was so that he didn’t get phone calls!  I was so grateful to him for helping them see the importance of automation and redundancy.  It was a great visit!
  • Students wrote about computers that they have in their homes using the following definition, “a device that accepts input and automatically produces an output.” I learned about toasters, microwaves, refrigerators, car GPS systems, and all sorts of other fun “computers” in my students homes.

This week, we start thinking about binary, abstraction and algorithms.  I am having so much fun, and from the smiles in class, I think they are too!

Can I start a coding club?

So, I asked the Principal at my son’s middle school if he would allow me to volunteer to start a coding club.  To no one’s surprise, he welcomed me doing this, and was generous in offering the IT department’s help and support with setup in the lab.  My son loves coding, and was so excited that he would get to have me for a teacher.  I asked all the parents that I knew to please encourage their child to sign up… I was worried I wouldn’t get any kids.

Boy, was I wrong!  The first day, the computer lab was bursting at the seams!  Over 44 students showed up (I only had terminals for 29), and several more students stopped by to tell me they had a conflict but planned to come another day.  It was unbelievable!

After a moment of panic (I teach at a private school with 15 students per class, max), I showed the video I had planned about coding in Scratch.  They loved it!

I put some students in pairs, and others at an overflow lab, gave them a handout, and told them to “play”.  They all knew exactly what to do, and the sounds of laughter and joy coming from the room as they started animating sprites in Scratch told me that this had gone well.

I have now committed to doing this every week with alternating groups, so that we do not turn any interested kids away.  I couldn’t be happier.  I am excited to see what these kids come up with!

Final Day: #CS50 Bootcamp: Now, innovate!

bootcamp_day1-4655


Today was the final day of AP CS50 bootcamp at Microsoft.  The amazing staffs of Harvard and Microsoft taught us about all of the tools that are already embedded into the course as resources for student learning.  The vast array (pardon the pun) of lecture videos and online resources will be amazingly useful for my students and I, as we work through this material.  I also feel relieved to know that if I am less familiar with particular quirks of C or the other languages in the course, I can quickly find a short video to play for my students that will easily explain the idea.  Additionally, there are HUGE social networks of people working on problems sets all over the world through the edX course.  I personally submitted a question about a particular problem set and got a useful and correct answer in under five minutes through slack from a woman in New Zealand that was moderating the forum.  It was quite incredible.  New computer science teachers and veterans alike will also benefit from the ability to direct students to a walk-through video of a problem set so that students can move forward without individual help from the teacher, and without being handed a solution.  This will also teach our students how to use resources to learn CS independently, which is a necessary skill for a Computer Scientist.

As an aside, I was totally fascinated by the thoughtful process Harvard used to create the mini-tutorials.  Apparently, each script is passed through the department and vetted by experienced Harvard Computer Scientists for accuracy before being recorded.  The staff writes them to be as short, interactive, and efficient as possible so that students get the nugget they need without extra information. It is very effective.

The pieces of the course that are not yet developed are those for high school teachers like me, who are obviously not at Harvard.  For example, a tool to help with teacher pacing is being created so that we can adapt this twelve week course to the number of weeks that we have in our school year with recommendations regarding essential topics and those that can be optional.  They are also working to break up the problem sets into more bite-sized chunks for high school students with some possible smaller assignments.  Harvard and Microsoft are also working out the process through which teachers might more efficiently grade student work and possibly utilize automated problem set checkers.  We were told that we would also have access to Harvard rubrics for grading the more subjective elements of students’ code.  Finally, a set of videos for teachers about pedagogy are being developed.  Harvard and Microsoft have been incredibly forthcoming about the fact that each of these plans will be adapted based on our feedback and needs.  We will not have all of these in some neat little bundle this year, but that is OK with me.  I think it is actually pretty phenomenal to be trusted with this process, and told that my feedback might influence how this course for high school might finally be built.  Not many folks in this world are willing to share their work before they have fully tweaked it, much less open it up for critique and criticism.  I see it as a sign of boldness and confidence on the part of this Harvard team.

The best thing that Harvard and Microsoft did, however, was to put this highly motivated and brave group of educators together in the same room.  It was INVALUABLE to have face to face interaction with these folks and know that I am part of a tribe.  After just two days, I can tell how thoughtful these educators are and how much they take risks and innovate in order to make great things happen in their classrooms.  We were told that an online forum for teacher communication will be created for all of us to participate, and I truly hope to hear from all of the voices that I met this week through that forum.  Together, we will be unstoppable, and we will be able to create resources that other high school teachers can use in their own classrooms.  I hope to let someone stand on my shoulders, just as I am standing on CS50’s.

Finally, I am excited to see where this journey will take all of us.  None of us know how students will respond to this amazing and rigorous opportunity, yet I feel certain that this innovative group of educators from Harvard, Microsoft and high schools across the country and in Canada will adapt and adjust as needed and pass on their lessons learned.  Harvard has entrusted us with their curriculum and invited us to innovate for our particular environment.  It is a gift that I take very seriously, and I will try to carry out with joy!

More to come as I share how that goes…

Day 0: #CS50 Bootcamp: Hello, joy!

Today was a packed day at Harvard’s #CS50 AP bootcamp here at the Microsoft Headquarters.  I learned so many things about Harvard’s plans for the rollout of AP CS50, and learned that we all have questions that only time will answer.

For me, the question of the day was, “What makes me love CS50 so much?”

As I consider this question carefully, and try to parse what makes this feel completely different from my undergraduate experience in Computer Science, I realize that CS50 is full of joy, and for me, that is its most important ingredient.

Within the first hour of the day, we were treated to a hands-on lecture from the inspiring Professor David J. Malan.  I had a blast trying to follow pseudo-code instructions from my peers to make a peanut butter sandwich. Needless to say, I couldn’t stop laughing when the instruction required me to “Spread the peanut butter with my nose.”  And I will likely never make a PB&J without remembering, you got it, the joy in that moment.

bootcamp_day0-3955

Experiences like these have come to be the trademarks of CS50, and indeed, I am naturally drawn to the theatricality of this course.  Not surprisingly, engaging lessons in which the students actively stand up and become the numbers in a sorting algorithm, or watch a phone book ripped in half to see the size of a problem literally cut in half make the content of the course memorable, meaningful, and dare I say, even fun!

There is also a pure generosity and lack of pretense surrounding this course, which is shared widely with anyone that wants to participate.  Teachers who are participating in the AP CS50 pilot have been asked to provide feedback and contribute to the development of the high school course.  We have been told that Harvard wants to know what we need in order to serve our students.  They have promised to work with Microsoft to create course materials to help us succeed in this project, and seem truly eager to collaborate.  So, here I am, early in my CS teaching career, being asked to give feedback to Harvard and Microsoft! What’s not to love?

I am also excited about the tribe of other high school educators, whose experiences and teaching strategies will contribute to my own classroom in the coming year.  Already, I feel connected to them and look forward to taking on this challenge, and creating something together in a non-competitive, truly collaborative way.  We began our time together doing puzzles and laughing, and now I feel empowered to ask them for help when I need it.

At Harvard, CS50 sponsors a Puzzle Day, Hackathon, and Project Fair to develop this same comfort asking for help among their students.  Students listen to music, have food and caffeine in abundance, and “play” together during these events.  AP CS50 teachers are being encouraged to implement these events at our own schools so that our students can have the experience of “playing” while doing something rigorous and worthwhile.  At the mini-Hackathon and throughout the day today, we were encouraged to document our experience by dressing up to take silly pictures in a photo booth.

Silliness!

As I walked out, folks were trying to see how many poufs they could balance on their heads.  Silliness and extreme productivity coexisted in a beautiful way.  We spent the day tackling complex, challenging problems, and yet there were smiles all around, and an overall feeling of empowerment.

While considering why no one looked daunted by the enormity of the task before us, I was reminded of some research that I read in graduate school about Piaget’s Theory of Play, distilled in Teach Like a Champion as the “J-Factor“:  “The J-Factor will help your students get more comfortable in your classroom and these games will help them understand the information you give them.”  Today at CS50 bootcamp, the J-Factor definitely helped me, and I plan to foster it in all of my classes next year.

It will be a year of joy as I dance and sing through CS50 with my students, and I can’t wait!

Coding Is Exploding!

I have spent the past year trying to find the right way to implement computer science in my school.  With so many choices and different platforms, the job of choosing or creating curricula can be overwhelming for a CS teacher.

At its core, however, computer science is about problem solving and creativity, and it impacts nearly every industry and career that we can imagine.

As I work to provide students with opportunities to create in the world of computer science and code, I look forward to sharing my ideas, successes, failures and most of all, the journey of learning how to teach in an ever changing, exploding world of code.

bootcamp_day0-3955

Day -1: #cs50bootcamp: It’s all about scheduling in schools… what will go if we teach CS?

In case you haven’t heard the biggest news in Computer Science K-12 education these days, Harvard and Microsoft are partnering to bring Harvard’s very popular CS50 – Introduction to Computer Science – course to high schools around the country, with an internal name of “AP-CS50”.  I am part of a cohort of 42 amazing teachers that plan to roll out CS50 in their high schools next year, and I am so excited to be a part of this tribe.  This blog is about my experiences at CS50 bootcamp – Day -1.

bootcamp_reception-15

I spent an amazing evening at the Microsoft Welcome Center meeting other highly driven computer science teachers from across the country, all thrilled to be part of bringing our students a rigorous and exciting Computer Science course.  As I expected, each teacher I met feels passionately about bringing Computer Science and Coding to a wider audience and including a wider spectrum of students in this very important study.

What I didn’t expect, though, was to hear the same story reported to me by multiple teachers throughout the evening.  Each teacher reported that his or her administrators, parents and students all fundamentally seem on board with the notion that coding and computer science should be taught to all students.  Each teacher also seemed to have the needed financial support to implement these courses in his or her school.  Where was the difficulty, then?  With everyone on board with the notion that this needs to get done, what could be the problem?

It turns out that for each of us in a unique way, the problem is SCHEDULING!  Computer Science and coding are not currently in the schedule.  They are not currently part of the curriculum, and therefore, putting them into a student’s schedule upsets the status quo.  Suddenly, the big idea to put computer science and coding into the curriculum is disrupting the Modern Language department’s enrollment, or preventing students from taking another History course, or making them drop an art class.

Should coding and computer science create such a disruption?  Many of us (CS teachers) agree that the core subjects are good ones, and we don’t want to see the loss of great literature and writing courses in high schools as the result of teaching CS.

If we teach and offer more CS, then does that kill the awesome Digital Photography class that someone else created?  Will students now feel that they have one more obligation added on, without any expectations taken away?

These are the questions of the evening, and they are real and significant.  Nonetheless, we need to answer them, which will take creativity, problem solving and persistence.  Conveniently, as Computer Science teachers, creativity, problem solving and persistence are part of the discipline that we teach, so I know that we will innovate to find solutions to these issues in our schools.  I will share any that I hear that are useful here.

More to come from #cs50bootcamp tomorrow.  Time to get some rest so I can code in the morning with some of the world’s best.

– KTO