Sunday, July 7, 2019

Summer Learning

Summer Learning

I didn't attend the CSTA conference or the ISTE conference, and admit that I wish that I could.  I enjoy conferences, attending sessions, talking to the speakers, visiting the booths, and finding those connections with others.  However, my summer learning is proving to be very comprehensive, deep, and best of all I get to sleep in my own bed every night!

I attended the one day RockCS conference at the beginning of the June.  What a great day of
Jake Baskin presenting at RockCS
learning!  It kicked off with a keynote from CSTA executive director, Jake Baskin who reminded us all of the value in getting together as CS teachers since we are often CS islands at our schools without others to lean on and learn from.  Then I attended a full morning of cryptography with Python which had many great teaching tips for introducing students to Python as well as getting into some simple crypto algorithms.  At lunch we had a second key note from Ruthe Farmer of CSForAll who did a great job of reminding us about equity in our classrooms as well as some hands on computing making a simple circuit -- I might need to bring this into my classroom to start the year in August!  The afternoon was spent learning about using the Agile development process and scrums in the classroom for projects and also about equipping students for the workforce.

The second week of June, I was at Colorado School of Mines for a class on Web Design and JavaScript.  This course was very timely as I will be teaching a class on Web Design next semester, and I need to develop better Java Script skills and experience before the semester begins.  I appreciated that students taking the course were given pre-class assignments so that we could hit the ground running when we arrived at class.  As a result we touched on HTML/CSS for part of day one and then dug into JavaScript for the remainder of the class.  The lectures were brief and to the point, and the labs we took part in were open ended enough that if we finished early we could explore other areas.  The class covered a variety of topics from driving actions from HTML elements such as buttons, to fun animations using the Canvas element.  After the class we needed to complete a post-class assignment as well.  I appreciated the good teaching strategy of making these assignments be independent.  I completed one on forms processing as that is something I want to dig into for the class I will teach.

The third week of June was a custom class on learning to use SolidWorks with an eye towards industry certification of CSWA (Certified SolidWorks Associate) plus the fun of using a 3D printer.  This class was personally much more challenging for me.  It was open-ended and student driven -- yep, I work much better with structure and deadlines.  The other part that challenged me was using a new tool, SolidWorks.  I struggled with placing elements, zooming in and out as needed, rotating the elements to see things from different angles.  I was fortunate to have an expert available (CATT) as I had questions and struggles.  This definitely showed me that my students will also be going through some struggles that can hopefully be turned into product struggles, and making sure that I have enough check-ins to make sure that students aren't struggling in silence and becoming increasingly frustrated.  Again a timely class as this will be one of the offerings for the Independent Study class that we will be offering at Pinnacle.

The last week of June, I was back at Colorado School of Mines for a class on Cryptography.  This was more of a traditional class with longer lectures covering some heady mathematics concepts that I haven't used since I was in college (back in the 80s).  The class was sprinkled with labs that had me using Linux with the openssl commands and libraries.  This was a great class that really made me push hard to keep up with the topics of symmetric and asymmetric ciphers, hash functions, and digital certificates and keys.  While these topics are not ones that I will be directly teaching my students, I do have ideas on some possible demonstrations.  Also, I find that teaching topics that I feel completely comfortable with does not push me to think deeply and taking a class like this is invaluable to me.

Finally, I will be taking one more class on data science at Colorado School of Mines in mid-July.  This will be another class that I won't be directly teaching but hope to come away pushing my thinking and a demonstration or two that I can bring to my classes.  The class will be using Python and a new package for me, Pyret.  So I am looking forward to it as well.

I am grateful for all of the many opportunities for CS professional development right in my backyard.  A big shout out to Dr. Tracy Camp and all of the classes she creates with the C-START program.  One of these years I would like to get to CSTA and ISTE, but until then I want to keep my brain engaged over the summer months to avoid a summer slump for me!

Sunday, June 2, 2019

Summer Learning: Java Sciprt

This Week at Pinnacle

The first full week of summer break is complete!  I had to make a trip back to school to ship off 4 of the CTE laptops to have Dell fix an issue.  Since I was back in the building, I also stopped by my classroom to see how it looked after the demolition was complete.  Yep!  All of the long desks that were fixed to the floor and to the wall are gone!  So my days of walking up and down long aisles of desks are over.

With the new design the total number of students in the room will drop from 26 to 20.  There will be individual desks so the placement of desks can change depending on what is happening in the room.  There will also be room for a table with a PC and laptop for practice repairs and another table to be a 3D Printer station.  Finally, a couple of off-to-the-side work areas for students working on projects that want to be (or need to be) separated.  I will be saving off a few of the PCs that are being removed to start the PC repair area (Thanks for the suggestion Garth Flint!)

Learning JavaScript

One of the wonderful things about CS Education is that there is always something new to learn.  This summer's topics are IT Administration (which I blogged about last week) and JavaScript.  I plan to dig into JavaScript in three ways -- an online class, an in person class, and a weekly meetup.

In order to teach the new Web Design class next year, I need to pick up some JavaScript skills this summer.  I have been listening to the Syntax podcast by Scott Tolinski @stolinski and Wes Bos @wesbos for almost a year.  While this has opened my eyes to many things happening in the JavaScript world, I have only been listener and not a practitioner.  So to start my JavaScript journey I am taking the 30 day challenge and using a free online course from Wes Bos to build 30 JavaScript projects in 30 days.  I am hopeful that some of these projects might be able to be converted into something I can use in my classroom as well.

I am also planning to attend a in-person class at Colorado School of Mines.  The class is coming up  in two weeks, but I am impressed already as there is a set of pre-class homework to complete.  The C-START program at Mines is an incredible offering for Computer Science teachers in the Denver area.  Combined with the CS Education grants that are offered by the Colorado Department of Education, these classes can be taken at no charge.

The final way that I plan to dig into JavaScript is by attending a weekly Meetup in Denver -- The Coders Workshop which is part of the BootCampers collective.  I have attended one meeting and am impressed with how it is run.  Meetings begin with a lightning talk on a topic that typically shows up on technical interviews.  It moves into a introduction of the topic of the day.  Then the bulk of the meeting is spent working with others on a challenge.  The first topic was 2D arrays and algorithm design.  The people at the meetup are a great mix of professionals in the field as well as currently learning JavaScript on their own or in a bootcamp.

Image from pixabay.com

Sunday, May 26, 2019

More than programming

This week at Pinnacle

Finals are done and the grades are finalized.  Before leaving for the summer I packed up my room because it is receiving a remodel.  The current classroom has three long rows of desks that are a attached to the floor and connected to the wall on one side.  It means that I need to walk up and down the rows in order to check on students' work and to answer questions.  There are no short cuts or quick ways to get from one student to another.  The remodel will remove the long rows of desks and replace them with individual student desks.  Best of all the old tower PCs that run slow and take so long to boot up each day are being replaced with spiffy new laptops.  I am one happy CS teacher!

I had students draw up different room designs and there were many creative submissions, but we are going with one that has room for a hardware/ PC repair area on one side of the room and a 3D printer on the other side of the room with desks and a small quiet collaboration area in a corner.  It has all of the areas that I hoped for.

High School CS:  More than programming

As we build out a Career and Technical Education (CTE) CS program for Pinnacle High School, it needs to be more than languages, programming and web design.  Some students are interested in careers in CS but are not interested in a university degree either because of cost or because some students simply aren't interested in staying in a classroom setting for another 4 years after high school. 

To ensure that our program meets the needs of all students, we will be starting a new class for students to learn the basics of being an IT Administrator.  Because this isn't in my area of expertise, we will be using an online course from TestOut

Again, because this is not my area of expertise, I am running through the course this summer and putting together a class structure to go with the online course.  As I walk through the material I am very impressed with their LabSim environment.  Students learn concepts through online lectures and notes, such as attaching disk drives to a server and configuring a RAID array.  Then they can practice this in the LabSim environment where students can virtually remove items such as drives from a shelf, attach the drives with SATA cables, and then use the system to configure the RAID array.

Finally, with the classroom remodel we will have space for a table where we can performs some actual hands on work with systems to put into practice the concepts from the lessons and LabSim environment.  As we all know, reading something is good,  being able to look at things in a simulated environment is much better.  But when we actually try to attach cables, put in screws, and configure items on an actual system things go wrong and that is when some excellent learning occurs.

The net is that I am very impressed with the courses offered by TestOut and I am excited about the new offering that we can provide to students at Pinnacle!


Sunday, May 19, 2019

Python and Robotics: Edison

This Month at Pinnacle

I've been absent blogging for a while.  It's been a busy few weeks with our last programming competition at Lockheed Martin, getting ready for the AP CSA exam, graduation, and a trip back to Iowa to see my niece graduate college.  This year Pinnacle sent two teams to compete at Lockheed Martin's Code Quest programming competition and our novice team placed just out of the trophy range, coming in at fourth; and our advanced team also did well.  It was a beautiful day and I must say that the Lockheed Martin facility has some beautiful views from their patio area!  Many thanks for their continued leadership in putting this competition together.  We just finished the AP CSA material with a week and a half to spare for final reviewing.  Nine students took the AP test, and the students I saw after the test came out and gave thumbs up, so I am hopeful that they were prepared enough to do well.  Graduation was a fun event and I am so happy to see that three of the graduating seniors are considering CS majors in college.

ECS Unit - Robotics with Edison and Python

In Exploring Computer Science we are finishing our last unit which is on robotics. For this unit, we use Edison robots.  Students learn about the basics of robotics and then move through a set of lessons provided by Edison.  I have students work in pairs to program the robots and complete lessons which I have moved into a set of Google Forms. 
make use of

The robotics lessons are powerful because the students get to write code in an easy to use web-based IDE and then see real-world physical results of their computer program running.  After completing a set of lessons, I turn the students loose on creating their own unique projects where they have their robots play music, move, and flash LEDs.  Edison has a fun feature that allows students to create a String to play notes and create a tune.  For students that don't read music, I provide a set of strings that students can use for that portion of the project.  Students that do read music enjoy creating their own tunes as well as adding to the collection.

Most of the students have enjoyed putting together a set of movements that create a fun dance.  In some cases, they build representations so that the robot's moves are coordinated with the music.  Then they add flashing lights.

At the end of the dance when the music and movement have finished, most robots get programmed to listen for clapping and when the clap sensor is activated the robot will come out and take a bow.

Changes for Next Year

As with most units, there were things that went well and other things that didn't.  Overall, I count the unit a success with a lot of good learning happening.  I suspected that some students would be very engaged by the robots and want to move ahead quickly, so I made the unit a discovery set of lessons.  For the engaged students, this was more than enough, but those those who were less engaged, the lessons alone were not enough.  Next year I will allow students to move at their own speed but I will also be doing explicit instruction. 

I added the Google Forms this year for answering the questions in the lessons.  I will continue to use these next year but I also want to change these up a bit.  Right now each lesson has 3-5 forms with 3-5 spreadsheets.  This meant that when it came to entering grades, I spent 30-45 minutes flipping through multiple spreadsheets and summarizing them on a single sheet of paper.  Next year I want to add some result collections so that results are summarized in a single Google sheet.

Finally, the dance project is very engaging for the students and I want to add a second project checkpoint in the middle of the lessons that will give students another chance to get their creativity going.  Overall a good unit and many thanks to the folks at Edison!


Sunday, April 14, 2019

Girls Who Code

The Jawas and Pinnacle High Security at Colorado
School of Mines Coding Competition

This week at Pinnacle


Yesterday Pinnacle students competed at the Colorado School of Mines programming competition.  You can look at the competition problems by clicking the letters at the top of the columns at this site: https://mines19.kattis.com/standings.  I was very happy to see our students coding, coming up with strategies to solve complex problems, and ending up with good results in the middle of the pack.  The competition is divided into two parts, with lunch in the middle.  During lunch, the teachers get to see how the students are doing, and the Pinnacle students were excited to talk about strategies they were using to solve the coding problems.  Of course, they wanted to see if I had suggestions which I normally offer in class, but couldn't in this setting.

The time during the competition I alternated between getting caught up on grading and chatting with some of the CS teachers that attended.  As a first year AP CSA teacher, it was a valuable time to get some strategies for better ways to teach different concepts.  We also had an update from Dr. Tracy Camp the CS department head at School of Mines and a great resource CS teachers in the Denver metro area.  She talked about the learning opportunities for professional development over the summer as well as offering visits from CS students at Mines to come out to area high schools for one-time sessions or ongoing support.

Girls Who Code

One of the challenges we have at Pinnacle with the CS program (and true for many programs in High School and College) is that we have good gender diversity in our entry classes with about a 50/50 ratio of boys to girls -- mostly because 9th grade students don't have much choice in their electives but are placed.  Sadly, that ratio does not carry through to the upper-level classes.  Looking at the picture at the top of the page is indicative of our dilemma.  As a small school, we have only 9 students taking AP CSA, but only one of those students is female.

When I brought this up with the CTE Advisory Committee, they had suggested looking at starting a club or something like that for girls only.  One of the committee members graciously offered to act as the facilitator.  Tomorrow we will be holding the first meeting of the club.  The meetings will follow a standard format -- 5 minutes to learn about a woman in technology; 45 minutes to work on long term project, and 5 minutes to wrap up on what was accomplished and what comes next.

We are getting a late start for this year's club, and hope to use this year as a trial and to get girls initially interested in going forward with a club next year.  We are hoping to be able to have 8-9 meetings before the end of the school year.  As a teacher, I am excited about the prospect of having a club for our girls that is lead by a woman who is currently in the CS field.  A role model is so important so that students can ask questions and hear about the challenges and triumphs in a field that most of the Pinnacle students don't know about or have role models.

Since we have not yet started, I can't comment on our successes, but I am very impressed with the organization and the support that is provided.  The Girls Who Code organization performs its own background checks and then provides education through a set of webinars and previously recorded sessions.  They have a relationship with Weebly so the girls end up with a website that they can point parents and friends to as well as document the work that they are doing.  Looking at the projects, I see I nice variety that are good group projects that seem to be large enough to be "project-worthy".  The biggest concern I had going into this was that the outline and support would be more of a skeleton and not a fleshed out model.  That is definitely not the case!  In addition, they offer small scholarships to cover things for meetings such as snacks or other incidentals.  It is good to see a well thought out model that is easy to fit into. 

I'm looking forward to this!

Images from me and Girls Who Code
 

Sunday, April 7, 2019

Setting directions

This week at Pinnacle

April is one of those months when I feel least motivated to be at school.  The weather is getting nice, the yard and gardens need to be cleaned up after the winter, and I would rather be outside rather than inside.  But it is also the time of year when year-long and semester-long projects are coming to a close.  But April is also one of those months when I look forward -- to summer and to the next school year.  I am planning out the agenda for the CTE Advisory Committee and how to change up the classes for next year.  But classes and the school year continues.

This week we have kicked off the final unit in Exploring Computer Science - Robotics.  The students use Edison robots and program them with Python programs using the Edison library.  The first week is always rocky as students get used to the process of downloading programs and there are always some robots that aren't working right or batteries need replacing. 

The AP CSA students are nailing down their final concepts with 2D Arrays and Recursion.  We are tackling some labs that are more challenging and giving them the confidence that they really can do this -- as well a few moments of sheer panic when a problem seems too difficult.  These students are also getting ready for their programming competitions.

The Game Design students are finally getting to a point when their scenes and characters are interacting with scripts and their games are beginning to feel like games.  Both the students and I were a little worried that we might not get to this point -- but it seems to be coming together.

Setting Directions

Personally, one of the parts of being a Career and Tech Ed teacher that has proven to be the most fulfilling for me has been the Advisory Committee for the CS Program.  Being a CS teacher at a small school (or almost any sized high school) means that you are working alone and isolated.  You are part of the electives department administratively but have little cross over with the other teachers.  The twice-yearly meeting with others in the Tech industry is a breath of fresh air, a chance to find out what is currently happening, and where the industry is headed.  I am also fortunate in that the Advisory Committee members are doing so much more than just providing advice. 

The committee for Pinnacle's CS program has been incredibly supportive and have offered much more than twice yearly advice:

  • A field trip to have CS students see, ride on, and learn about the tech and programming to make driverless vehicles
  • Invaluable help and much time spent getting a start on a tech club for girls
  • Advice, research, and help to redesign the CS classroom

The spring meeting will have four focus areas.  The power of the Advisory Committee is that two of the topics can be lead by members:
  1. At a previous meeting, the advisory committee discussed ways to improve the number of girls that take the upper-level CS classes.  One of the committee members has taken the lead on starting up and facilitating a Girls Who Code club at our school.  So we will get an update on the progress here.
  2. At a previous meeting, the advisory committee brainstormed ideas on changes for the CS classroom.  Another committee member researched possibilities for furniture for a new classroom as well as possible layouts.  He then suggested that the students try their hand at designs for the classroom.  We will be reviewing the student designs at the meeting.
  3. Technology Showcase - Our school has a phenomenal art department and each year they have an art show to put on display student works.  One of the things I would like to do is something similar for the tech projects that CTE students in the CS program are completing.  I would like this to occur next April with the meeting of the Advisory Committee and have members be the judges of the showcase and hand out awards.
  4. Workplace Opportunities - The last area that I would like to expand the program towards is providing students interested in going into the CS field, the chance to do some job shadowing or even an internship.  This will be the first conversation and I am interested in hearing their ideas and connections for these types of learning experiences for high school students.
So, while I would like to be outside gardening or bicycling, I am also excited about the opportunities that are coming with the next CTE advisory committee meeting.

Image from pixabay.com

Sunday, March 31, 2019

Spring break and Tax time

A petrified stump of a redwood
at Florissant Fossil Beds
National Monument

This week at Pinnacle

Spring break!  It was a good week -- the garden is ready and waiting for improved weather, I took the dogs on a short trip to visit the Florissant Fossil Beds and do some hiking, and even managed to get some school work done.  Visiting national parks is a favorite past time to see some beautiful scenery and also learn about history, nature, and the diversity this country offers.

I begin each break with intentions of completing three or four projects for school.  I end each break completing one.  I think I need to set more realistic expectations!  But the one completed project is going to be great.  I had been thinking about introducing my students to GitHub and encouraging them to start looking for open source projects that they can learn from and contribute to.  But I hadn't found a hook.  Then I read a couple of blog posts and watched the videos created by Mike Zamansky here and here.  I now have GitHub education set up and have my first assignment on abstract classes ready to publish today.  I had planned to dedicate an entire post to this but decided that I didn't have anything in addition to offer, so I point you to the posts and encourage you to take a look at this for CS classes.

Taxes

With the return to classes this week, seniors are in the last five weeks of high school careers.  It is always a challenge keeping them on track and focused through to the finish line.  Some seniors are ready to be done and move on to the next phase of their life and others are uneasy and feeling unprepared for what comes next.

When I started at Pinnacle five years ago I taught all math classes.  Over the last four years, Pinnacle has added one CS class to my schedule and removed one math class from my schedule.  This year I am teaching only one math class (Business and Consumer Math) and it will be removed from my schedule next year.  We use the curriculum from Curriculum That Matters.  The first semester is spent on personal finance and starts students out by finding a job and preparing a resume, then students are in a job and receive a paycheck each week.  Gradually weekly bills are added as students write checks after they find an apartment alone or in small groups, shop for a car, split utility bills, and shop for insurance.  Each week students balance their account by adding in a paycheck and subtracting out their weekly bills.  Unexpected things happen that cost them money if they haven't purchased insurance.

During the second semester, students look at the math behind setting up a small business.  But during the second semester, we also cover some other topics such as taxes.  The class is offered as a credit recovery class for students who have failed a math class along the way and need to double up on math their senior year.  But I feel the skills are valuable for all students and think this could easily be offered to all students as a senior elective.

This week is part three of a look at taxes.  The first week looks at the federal budget and how our tax dollars are spent.  The second week has students prepare a federal 1040 tax form following a W-2.  And this week is part three which I added and has students prepare the Colorado state tax form DR 0104.  Although most students who are working, typically use one of the online tax filing products, I feel it is good for them to see the parts of the tax forms and how complex it needs to be to handle all of the different ways that people earn money, take deductions and calculate the amount of tax owed or refunded.  We also step aside and discuss the options that wage earners have by setting their withholdings and choosing to keep track of their own money and paying taxes in April, or letting the government keep track of the tax money and likely getting a refund in April.  We look at tax brackets and how our progressive tax brackets are set up to make things "fair" and then discuss if students think it is fair or what would make it fairer.

I admit that I am excited to be teaching all CS classes next year but also will miss teaching the content of this class.

The petrified tree image is my own.
Tax image from pixabay.com

Sunday, March 24, 2019

Game Design: Triumphs and Challenges

Spring break has arrived and is very welcome!  It has been a busy few weeks with some days off due to March snowstorms; a programming competition that I decided to not take the students to because of weather; and a nasty fall on the ice which slowed me down.  All that goes to say, spring break is welcomed, indeed.

Spring break does come with a to-do list for school, though.  The final project for Python which was supposed to be due the week before break ended up getting pushed back to the day before break because of the snow.  So there is a good deal of project grading to get done, I want to follow up on a blog post from Mike Zamansky and get GitHub setup for use with my AP CSA class, and I want to get out to Meetup on JavaScript to start getting ready for the web design class for next school year.  Then I want to plan my vegetable garden and get in a little side trip to the fossil beds in Florrisant National Monument. 

This week I want to circle back and reflect on the Game Design class.

Game Design Triumphs

I have been following Garth Flint's blog posts on the Game Design class and have been impressed with the things that he and his students have been accomplishing.  There have been many challenges with the class this year, but the students have been accomplishing many good things as well.

We have been using the Unity Game Design Tool for the class.  Together we have worked through several tutorials and examples.  But I have also given students time to work on a project of their own creation.  Although I am not sure that we will have time to finish the games before the end of the year, most students have finished tile layouts for a 2D game and built characters outside of Unity.

As you can see on the right, some of the characters, such as this one, are well developed and have a good idle mode for gameplay.  Cathyna is the character developed by one student who is also offering his skills to help others develop characters for their games.

Game Design Challenges

Teaching Game Design does come with a unique set of challenges.  The first challenge was learning C#, but that was a challenge I was comfortable with.  I have always enjoyed programming and learning a new language was actually fun.  The part that I am most excited about is introducing this sophomore and junior students to CS concepts such as the Singleton Design Pattern, inheritance, and method overriding.  These are challenging concepts and giving students an introduction earlier is great and I am hopeful it will make for an easier time with AP CS down the road.

A tougher challenge is learning the Unity tool.  There are many things that are needed in the game design that are unfamiliar to me: the nuances of the physics engine, rigid bodies, and colliders.  Because these concepts are not familiar, I stumble and make many mistakes with the students.  I am a firm believer in being a life long learner, but also admit that I don't feel comfortable learning in front of the students.

Finally, the biggest challenge for me has been fluidity of the tool and environment.  It seems that many times I pick out a good tutorial to demonstrate a particular concept and work through it over the weekend.  Inevitably I come to a point where something doesn't work -- often because I am running a later version of Unity than the tutorial was created with.  I turn to the Unity Forums, Stack Overflow, or Google in general.  In some cases, I can find a workaround that lets me complete the tutorial.  Then we can do it as a class with the caveats introduced.  In other cases, I can't find a workaround and I have to abandon that tutorial.  The worst case is when I am working through a longer guide and split it into 3 or 4 class periods and only go through the first half initially and then run into the problem that doesn't have a workaround and having to stop the tutorial.  Frustrating, indeed!

It is exciting working with a tool and in an environment that is fluid and evolving.  This is the environment that students are headed towards.  However, it is not ideal for teaching and working through things together -- and having a teacher who is a bit of a perfectionist and wanting everything to be "just perfect".  

I will admit that I am somewhat relieved that I need to offer an additional section of Exploring Computer Science next year and that this class is not being offered.  Nevertheless, it is a good learning environment for student and teacher!

Sunday, February 24, 2019

For Loops, Snakify and PyBites

This week at Pinnacle

Build Your Future at Google CSSI
The AP Computer Science class had a guest speaker this week.  A student who graduated last year came back to talk to this year's students about her experience at Google's Computer Science Summer Internship.  The three-week internship is available for graduating high school seniors who plan to major in computer science or a related field the following year.  Students are flown out to one of Google's campuses and spend three weeks learning about HTML, CSS, and coding and then during the final week, they build an app that is deployed.  During the three weeks, they learn from and work with Google engineers.  Not only do they learn the technical topics listed, but they also dig into soft skills such as networking and resume building.  Google makes a concerted effort to get underrepresented groups in the summer internships.  After that presentation, the students were excited to look into the possibility of taking part in this year's internships.  Vanessa finished her time with us telling the students about what the first year of college is like for a Computer Science major.

For Loops

Last year when I asked students what comes to mind when they hear the word "loop", the first response I got was, "a roller coaster".  That wasn't exactly what I was expecting but we went on a long discussion which finally came back to computer programs and the idea of a repeated structure.  This coming week we will be starting the lesson on loops again, and I will look forward to where the discussion leads this time. 

This is always an interesting lesson in the unit because we get to the point where students have enough language under their belts that they can start to come up with their own ideas of programs they would like to write.  But this is also the time when programming challenges become more complex, and students can get frustrated when their first, second, or third try to write a program doesn't work, and then doesn't work for a different reason, and then works but produces an incorrect result.  A big dose of patience is required for students and teacher!  Lots of encouragement and coaching that we learn the most when we struggle through something is good advice -- but it usually isn't heard when you are in the middle of the struggle.

I haven't had time to convert my Python code together notes to use the new style of subgoal labeling, but I am attaching my notes with comments only, and the completed version here.  We typically go through these notes on the first day and then work on daily challenges where each of these ideas are expanded and become more complex.

Practice

I typically have two types of practice.  The first is where students work together on practice problems in Snakify.  They can learn on their own, together or from each other.  This typically means that some students pick up the concepts quickly and code quickly, others get some direction and complete the projects with help from me or other students, and some just type in the answers by looking at someone else's screen.  I grade these assignments for completion.  Even the act of typing in the code gives the students exposure to the concepts, so I do assign a minimum grade to these.

Then there is some type of creative assignment that each student completes on their own and allows them to add thoughts and ideas that are their own.  It also means that every project is going to be different.  This is where I can see how well students have mastered the content.

Given that students pick up the concepts at different paces, I usually have some extra projects or websites available for students to dig into when they finish early.  Yesterday I learned about a new one PyBites by listening to the Teaching Python podcast.  This is a great podcast and I encourage every CS teacher to take a listen!  I have logged in and started worked through the first Bite.  This looks like a great site to plug my more advanced students into.  As a plus, it will get them into using GitHub.

One challenge that elective teachers have is that they are mixed grade levels.  Many freshmen work really hard to get through the material and need every possible minute to get all of the work completed.  Some of this is knowledge and some of it is study skills and use of time.  Upperclassmen typically finish the assignments quickly and are either interested in more advanced work or ask if they can work on something from another class.  I am OK with either as long as they are willing to help some of the other students at various times.

Whatever way you look at, the loops lesson and the coding problems can be long and winding and have some difficult dips and turns just like that roller coaster!

Image from pixabay.com

Sunday, February 17, 2019

CS Careers

Sometimes, four-day weekends come at the right time (or the wrong time).  On Wednesday, I could feel myself getting a cold, and it settled in by Thursday afternoon, the beginning of my four-day
weekend.  Good news -- I have a four-day to get better and don't have to teach while sick.  Bad news -- I have a four day that is now mostly occupied by laying around the house, sleeping, and taking in lots of fluids.  In between naps, I read an article that was posted on FaceBook by a friend and former co-workers from IBM Rochester, MN:  AS/400 The most Amazing Product You Have Never Heard of.  Reading the article brought back some good memories of the beginning of my career as a programmer and the AS/400 system that I had the privilege to be part of.  It also reminded me of the times that my students successfully take me off-topic and get me talking about my CS career instead of teaching a new topic in Java, Python or C#.

CS Careers - Presenters

While the students do consider it a success when I go off topic and discuss something from my past career, I try to keep it on topic.  Last week we were discussing the importance of reading each others' code to try to find a bug, but also just to read the code of how someone else solved a problem.  I
recalled logging off of the "green screen" that I worked on every day and carrying a large stack of accordion paper with printouts for an I0, I1, or I2 (what we called our inspection reviews for high-level design, low-level design, and code).  I also recalled the sense of pressure that comes with having a group of your peers go through your code in great detail and ask you questions about particular code choices.  On the opposite side, I recalled when you caught an error in someone else's code and the good feeling of identifying an error earlier in the development cycle and saving hours should the error be caught later or worse yet having an error that was identified in the field by an end-user.  I relayed that when you caught an error it was a sense of helping a co-worker and making a better product, but when that error was in your code I would have the feeling of being "caught" and needing to fix the error and provide some type of explanation.  I ended that discussion remembering when an error was identified in my code in the field by a major car manufacturer and the pressure that comes with getting a bug fixed quickly when every hour results in lost revenue for a customer.

While names like AS/400 don't resonate with students today, it is important to provide students with ideas about what a career in CS is going to be like.  Students often ask about a career in programming, "do you just sit in front of a computer all day, every day?"  Helping to dispel those myths and paint a more realistic view of a career in computer science is valuable for students.  In addition to providing snippets of my past career, I try to bring in different presenters each year to talk to students about careers in CS.  I have two major goals in lining up my presenters.  First, my students have to listen to an "old white guy" every day, I try to find presenters that are better reflect my students -- younger, people of color, and women as well as men.  Second, I try to find presenters that can talk about brand names students recognize or technologies that are currently in the news.  This year I am trying to bring in presenters from Google and another from a company in the blockchain, cryptocurrency market.

CS Careers - Field Trips

The students also enjoy hearing about my time working at the plant in Rochester, MN and the year that I spent working in Guadalajara in Mexico, and the trips that I have taken to Europe and Australia to present and to find and solve problems.  Students learn that in some cases careers in CS can take them outside of an office or even around the world.  They also have great fun learning about the language errors I have made while visiting or living in these locations!  When trying to use the Spanish I was learning and intending to say excuse me (desculpeme), but having it come out as escupime (which doesn't make sense but roughly means spit on me).

In addition to finding outside speakers, I try to take my upper-level students on one field trip and my freshmen students on another field trip.  Lining up field trips that can show careers in CS and still be an interesting tour, is challenging.  This year I am working with a manufacturer of driverless vehicles for the upper-level students and a visit to a co-location and data center.  These visits are valuable as well.  Students get to see first-hand what workers in the field do on a day-to-day basis and see where they work.  This sense of place and the idea that careers in computer science are not something that only involves sitting at a desk and looking at a computer screen all day.

CS Careers - Job Shadowing and Internships

One thing I am not doing currently, but something that is on my to-do list is to begin lining up job shadowing or internship experiences for students who are seriously considering going on to study.  Having our high school program be part of a Career and Technical Education (CTE) program has really brought home to me the importance of providing these authentic experiences for students so that they can not only learn about coding but can see what careers in the field look like.

I recall becoming very interested in computers and programming while I was in high school, but not having any real idea of what a career in computer science would be like.  I was fortunate in that I landed in a career that was interesting and rewarding, but my hope is that for my students they can make an educated decision on whether computer science is going to be a good career choice.

Images from: ibm.com


Sunday, February 10, 2019

When Things Go Wrong: We Learn

This week the students in TSA (Technology Student Association) raised some money by running the concession stand at our high school basketball game.  It's fun to spend time with the students outside
of class, and also to see our athletes compete. There is time to talk about their interests and plans for the future.  It was also encouraging for me to hear that at least one other of the AP CSA students is at least considering a major in Computer Science.  I'm not quite sure why, but I always count it as a win when I hear of a student deciding to pursue a major in CS which I enjoyed and hope that these students find a rewarding career programming, as I did.  It was a good week...until Thursday when I was reminded again that we all (teachers included) have many opportunities to learn from mistakes and none of us has all of the answers.

When Things Go Wrong

On Thursday, students had a studio day and were finishing off their final labs and reviewing for the
upcoming test on ArrayList, references, and OOP.  One of the students was stuck on a lab trying to load elements into an ArrayList.  The loop he had written looked for an item in an empty list.  If the item was not found, it would be created and added to the list.  If the item was found, the counter in the item was increased.  However, since the list was empty the loop checking for the item was never executed.  I pointed this out and we decided to add an if statement before the loop and check for an empty list and then add the first item.  Problem solved!

Then we ran the code and received a ConcurrentModificationException.  I was stumped.  This was a single threaded program, multithreaded programming was not something we would be covering, so the error made no sense.  We looked at the Javadoc for the error and saw that this exception could also occur if an item in a List is changed while iterating through the List.  OK, that explained the error but not how to fix it.

We Learn

After struggling with the error for some time, I finally went back to my desk and looked at the
solution for the lab.  I had not noticed the get...() method immediately below the load...() method.  The get() method was already implemented and just waiting to be used.  After updating the code, it worked fine.  We spent some time reasoning through why the solution worked and the original code could potentially cause problems -- changing a list item while iterating through the same list could essentially pull the rug out from under yourself.

This proved to be a great learning experience for all of use.

  1. We learned about the list iteration and changing list items.
  2. We learned about the ConcurrentModificationException
  3. My students learned that even when you have been coding for a long time, you can still run into things that stump you.
  4. And I learned that although I like not looking at the solutions to the labs provided with my AP CSA curriculum, I had best do this from now on!
There is an important lesson for me -- wanting to always have the answer is not always the best way for students to learn.  A struggle is good!

Sunday, February 3, 2019

Competition: Collaboration and Edge Cases

Last week I took a day off mid-week.  I had a doctor's appointment and thought that was a pretty good reason to take a day off since I have been fortunate and not been sick all year.  It's amazing how a day off can improve your outlook, give you some extra rest and let you catch up on things that have gone undone with the busy-ness of the start of a new semester.  It is also great when you come back and see a large number of Google classroom assignments were turned in.  Students made good use of the time!  The only problem was a small ding to my ego when students tell me how great the substitute was and to be sure and get the same person again.  But it is affirming knowing that students can get work done on their own without the prodding, encouragement, and reminders that I provide daily.

Competition as Collaboration


This week we firmed up our teams for the upcoming programming competition season.  Our school is sending teams to three programming competitions this year:  HP Code Wars, Colorado School of Mines programming competition and Lockheed Martin Code Quest.  The students seemed excited about it, I had considered assigning teams but decided to let the students choose their own teams.  It was interesting to watch as they discussed who would be best on a team and jockeyed for positions.  The competitions all appear to require 2-3 students per team.  And the competition is a time for students to hone their collaboration skills.

One of my favorite times as a teacher of the AP Computer Science class is after a lesson when the programming labs have been assigned.  I assign a set of 3-5 programming labs with each topic and grade these by checking off student solutions as I look at them with the students (one of the benefits of having a small class size).  I encourage the students to work together to reason through the problems and come up with solutions.  The typical scenario that I see is students diving in individually or with one other person on the problems.  Then after working for a little while, they begin to get up and walk over to another person or group to discuss what they are doing and hear what another person or pair is doing.  One thing that helps is that this group of students have been together for many years and take many classes together -- they get along well and make a high functioning team that complements each other.

This collaboration is such a valuable skill.  And I do see the programming competition as another time to learn and develop this skill.  In 26 years of working in the IT industry, I never worked individually, it was always on a team.  I have worked on small teams and large teams that were divided into sub-teams.  Some teams were local and others were remote.  Communication, collaboration, and a team that enjoys being together were keys to the high functioning teams that I was a part of.

Competition and Edge Cases


Another benefit that I see coming from the competitions, is developing in students more complete thinking about edge cases.  It seems that most or all of the problems of the competition provide a simple test case that will verify that your code works for a default scenario without any exceptions or error cases -- the "happy path".  Then the judging inputs will test out various edge cases.  This causes students to start to think about and anticipate the exceptions and to make sure that their code works in all cases.

Now that it is the second semester of AP CSA, the coding problems are becoming more challenging and it is easy to create a program that works for some but not all test cases for a programming lab.  Designing these test cases can be challenging for young coders (and old coders!), and the idea of a test-driven design is important as I looked at some of the TDD research around this a couple of weeks ago.

I am not a competitive person by nature, so the whole idea of going to a competition to beat other teams is not particularly high on my list of things I want to instill in the students.  However, I am excited to see them develop better collaboration skills and thinking around edge cases.  I hope we are able to complete lots of the challenges in the competitions!

Image from pexels.com

Sunday, January 27, 2019

Learn, Practice, Improve

Last night I went to our school's performance of "Little Shop of Horrors".  It was so fun to see some of my students in a different light.  I was also impressed by the performance and the talent of these
students -- I have some very gifted students!  As teachers, we see students in the classroom on a daily basis with their struggles and successes with the material we teach.  Last night was a great opportunity to see students shine in a different way.  They took a lot of time after school and on weekends to learn their lines and the music, practice over and over, and improve until they have a performance to be proud of.  And those themes of learning, practicing, and improving is the topic for the week,  But I am reminded that we are all so much more than what we see in the classroom.

Learn, Practice, Improve

We have learned the basics of Python in Exploring Computer Science -- input(), print(), int(), float(), explored the math module and I was very pleased with the speed that we were moving through the material and hopeful that this year we would be able to get further in the language than last year.  My typical approach to learning is to code together with the students and talk about the concepts and the code as we write a program that has lots of starter comments and we fill in the code as our notes.

The practice part of each unit is to complete a set of step by step instructions included with snakify.org and then either complete projects in Snakify or complete projects that I have come up with for the students.  These projects are all the same and students can and are encouraged to work together.  After listening to @teachingpython podcast by Sean Tibor (@smtibor) and Kelly Paredes (@kellypared), I have started to do 5-minute challenges to start each day with a 3-5 line program that the students need to write and then we review together.

Finally, each student completes some type of independent project that lets them be a bit creative but also shows that they can complete an assignment using these basic concepts.

How much practice is enough

I was ready to quiz over the basic material and move on.  Then on Friday, I had the students complete a 5-minute challenge of a four line program which included importing the math module, ask the user to enter a radius, calculate the circumference of a circle and display a message with the result.  With one of the two sections of ECS, I spent over 15 minutes on the 5-minute challenge.  Thank you @teachingpython!  These 5-minute challenges are a valuable formative assessment, and very quickly told me that I need to have some more review before we move on.

I am creating some additional review programs for the students to complete.  But it does go to show me the importance of these formative assessments and that from year to year and even from one section to another additional practice may be required.  And just like the Little Shop of Horrors, once the students have learned, and practiced they can improve their skills and perhaps learn something new that may become a new interest just like theater!

Image from pexels.com

Monday, January 21, 2019

Code Testing as a Teaching Method ... and THE EGG

On Friday, the students in Exploring Computer Science were working on a "Studio Day" (a term I borrowed from our art teachers to replace work day), I was circulating through the classroom, helping students with questions, encouraging those that needed a little push, and reminding some students to get back to work and
No these are not the eggs that broke the internet!
crank some code.  As I approached one group of students, a picture of an egg flashed from the screen and the code was back.  I encouraged the group and moved on.  I thought that was an odd thing to have on the screen -- usually, it is cars, clothes/shoes, or makeup that are more popular than me and not an egg!

Over the weekend I learned about the egg that broke the internet, and how a picture of an egg became more popular and had more likes on Instagram than a picture from Kylie Jenner.  I enjoy seeing what is popular with students and why.  Voting up a picture of an egg seems to be one of those things that students do, just to have fun.  But I also think it shows them that they can have power with their vote, and I hope that their enthusiasm with voting in Instagram to change things carries through to adulthood and that they value the importance of their vote and the power it has.  No, this blog is not turning political -- that vote can be left, right or center -- but our votes do have power!  And in the end, a very important purpose of the school system is to educate our citizens.

Code Testing:  Education Research

On Friday, I had a conference call with the Career and Technical Education (CTE) Advisory Committee for our software engineering program at Pinnacle.  We had a new member join, so I had everyone introduce themselves and as I again heard Anita Wall introduce her role at IBM working with companies and their Software Quality and Assessment, it reminded me about the importance of testing and that this was an area that I was not emphasizing with my AP Computer Science A students.  So I did a little digging over the weekend.  I read an interesting education research article by a set of professors (Edwards, Shams, Cogwell, and Senkbeil) from Virginia Tech University:  Running Student Tests Against Each Others' Code: New Life for an Old "Gimmick".   And a second article by Edwards, Using Test-Driven Development in the Classroom.

The article discussed the importance of making sure that students write test cases for the code they write and that these test cases have good/complete code coverage.  The article begins by suggesting that students test their code with the test cases that all other students have written.  This is a powerful idea in that all students get to look at each others' code as well as the test cases that others have written.  It not only expands their thinking about the code, but it also expands their thinking about what makes a good test case.

The authors also discussed the value of using a tool such as Web-CAT to show students what the code coverage of their test cases is.  The tool can be used for grading but it can also be used to show students how well their test cases actually test their code.  That is a bit more than I need, so I plan to take a little time to show the students EclEmma and what a code coverage tool looks like.  The authors also discussed the difficulties doing something like testing other students code with their Runner classes if students do not use the same method signatures or if solutions are only partially implemented and do not compile.

Implementing the Research in the Classroom


I am using the A+ Curriculum for the APCS A class and am very happy with it.  With all of the Java classes my students write for their assignments, there is always a set of starter code for the class and a separate Runner for executing and testing the class.  Some of the assignments specify a complete set of test cases that must be included in the runner and other assignments only provide one test case and direct students to add more test cases.

The next unit we start digging into what reference variables are, although we have been using them for quite some time.  We will look at reference variables and arrays of references.  The code students will be writing is becoming more complex and looking at what constitutes a good unit test of the code becomes increasingly important.  I plan to initially have students work with partners and have each student write the code and a set of tests for the code.  Then they can exchange classes and test each others' code.  Because there is a set of starter code for each assignment in A+.  And the start code includes class declarations and method signatures, students will have the same starting point.  Unless they go in and change method signatures (which does happen sometimes), all students should be able to test each others' code.

Along with that, I will have students setup EclEmma to have them look at code coverage.  The discussion that needs to accompany it will be the difference between code coverage (each line of code is executed) and testing edge cases (what happens with an array of zero elements, one element, repeating elements, etc.).  While testing and code coverage don't seem to be topics that are heavily covered in the AP curriculum, it does seem worthwhile to expose students to these practices.  Testing is a good thing -- even if it is not as popular as THE EGG.

Photo from pexels.com

Sunday, January 6, 2019

Ice Castles and Code Tracing / Reading

Dillon, CO Ice Castle
It's the last day of Christmas break before tomorrow's work day and students' return on Tuesday for the new semester.  It was a wonderful break of catching up with family and friends as well as some fun activities.  Last night was a great final trip to Dillon, CO and a walk through an full scale ice castle (https://icecastles.com/dillon/) with friends.  The ice castle was beautiful with lights coming through the ice making it glow in different colors.  The end product was beautiful, but it was very slowly built up from a set of scaffolding with lights built in and then layer and layer of water turned to ice.  It is  a good metaphor for the building up of skills needed in the AP Computer Science A class.

Also, over break I had the opportunity to do some reading.  One very good blog post from Austin Cory Bart was a CS1 Literature Review (https://acbart.github.io/2019/01/01/cs1-lit-review-review/).  This blog post is a look at what I want to do with one of the topics from the literature  review:  Code reading and tracing. 

Starting the new Semester

I plan to start the new semester with a review activity that covers all of the topics we visited during the first semester with a special look at some of the most complex or difficult parts for the students.  In the non-AP version of programming that I taught in previous years, I did this as a code along activity where we wrote code together to go through these concepts.

Enter the Literature Review...  One of the early topics covered was the importance of code reading leading to good or better code writing.  Code reading is not something I have emphasized.  The concept makes sense.  Students who are good writers also tend to be those who read a lot.  The same concept can be true for Computer Science as well.  Reading code can lead to better writing of code.  Extending that idea, reading good, well-written code is important.  In the same way that reading abbreviated text messages or poorly written text does not lead to good writing skills.

I plan to combine the code reading assignment with think/pair/share which is something I use fairly often in my lower level classes.  The Literature Review also covered the importance of collaborative experiences which is an important soft skill in the working world of IT.

Code Tracing and Reading

One of the confusing points for me was references to Code Tracing and Code Reading as two different things.  So I went back and read one of the research articles, Relationships between reading, tracing and writing skills in introductory programming by Mike Lopez, Jacqueline Whalley, Phil Robbins, and Raymond Lister (https://opus.lib.uts.edu.au/bitstream/10453/10806/1/2008001530.pdf).  To me, code tracing is the equivalent of knowing the meanings of words and code reading equates more to the idea of reading for comprehension.

Code tracing is the ability to read a line(s) of code and explain what it does:
a = 4;
a += 5;
Add 5 to the current value of a which is 4 and set a to the new value of 9.

Code reading is the more advanced concept of looking at a block of code and being able to explain what it does.
sum = 0;
for (int i=1; i <= 10; i++)
     sum += i;
System.out.println(sum);
Sum the values 1-10 and print out that sum.

Beginning of the Semester Activity

With those definitions in mind, I see that my students have plenty of opportunities to trace code but not that many opportunities to read larger amounts of code for comprehension. Students can read small blocks of code such as the example above, but not many opportunities to read an entire class and runner for comprehension.

The code example that I am using is Rainfall.  The class stores the name of a city and an array of monthly rainfall totals.  The class processes the array to calculate min and max months, total and average rainfall and a standard deviation.  The runner class reads in CSV lines from a file and then processes the lines using the comma as a delimiter.  Students will also have the opportunity to review code again that does formatted printing as it is a topic that still confuses several.

The methods in the Rainfall class are things like get1(), get2()... and several variables are set to x and y.  Students will be assigned methods to read and review.  Then they will work with a partner to compare and together assign new method and variable names that are descriptive.  After that I will have the students discuss their assigned methods with the class.

Here are the classes and data file that we will use:
Rainfall.java
RainfallRunner.java
rainfall.txt