Archive for February, 2012

Flint’s CS Ed Minor Syllabus

February 10, 2012

Here is my “put up or shut up” CS Ed minor/certification outline.  I have at least minutes of thought into this and about 30 years of CS teaching experience.  The Teaching Methods course does have a rough outline attached (the cut and paste came out a bit funky) because I tried to get my local University Education department to offer the methods course.  They said there was no demand for CS teachers so no demand for the methods course.  The intent of this course of study is not to make good programmers.  It is intended to make a teacher able to understand what teaching programming/CS involves.  I do not think a teacher with only this background could walk into an APCS course and do an incredible job.  I do think they would know what the job involves and how much effort it will take to do an incredible job.

Something like this really needs to be built by a group experienced classroom teachers that have seen the issues.  It is not something that should be built by university professors that have not been in the K – 12 trenches for years.

  1. CSED 101 – Computer Programming for Grades K – 7
    1. A survey of languages, curriculums and strategies for lower grades.
    2. An examination of the CSTA Standards.
    3. Required tools (hardware and software) for implementing a CS program in K – 6.
  2. CSED102 – Computer Programming for Grades 7 – 11
    1. A survey of languages, curriculums and strategies for middle grades.
    2. An examination of the CSTA Standards.
    3. Required tools (hardware and software) for implementing a CS program in 8-11.
  3. CSED103 – Computer Programming for Grades 11 – 12
    1. A survey of languages, curriculums and strategies for upper grades.
    2. APCS review.  Languages and curriculum.
    3. CSTA Standards.
  4. CSED104 – Technical Aspects of Teaching CS
    1. Teach the prospective teachers how to manage and troubleshoot hardware.
    2. How to build a lab from a bare classroom to include internet wiring, switches and power.
    3. Lab management software (LanSchool, Smart Sync).
    4. Purchasing computers for a lab/school.
    5. A zillion other techie things a small school CS teacher needs to know.
  5. CSED105 – Computer Programming I
    1. A programming course in a modern upper level language (C#, Java, Python, etc).
  6. CSED106 – Computer Programming with a Project
    1. A programming course incorporating a device.  Device possibilities like Droid, iPod, Lego Mindstorms, Arduino, Kinect.
  7. CSED107 – Teaching Methods.
    1. Course goal – introduce prospective Programming teachers to the fundamentals of teaching Programming
    2. Pre-requisites – 1 semester programming (College or high school)
    3. Why teach programming?
    4. Course objectives/learning outcomes (Programming Course Objectives.docx)
    5. Programming language philosophies – learn one language well or survey of several languages?
    6. Why kids struggle with programming

    i.      Algebra vs. programming syntax – x=x+1 makes no sense in algebra

    1. Step-by-step (computer) vs. leaps of logic (human)
    2. Bloom’s Taxonomy contradiction – simple is better
    3. Fundamental programming concepts

    i.      Sequence (Process) – Order of execution

    ii.      Decision (Selection) – If-then-else

    iii.      Repetition (Iteration, Looping) – Repeat-until/While-do

    1. Types of errors
    2. Top down/bottom up design
    3. Naming conventions
    4. Commenting and documentation (The Art of Code Documentation.docx, Using PDL for Code Design and Documentation.docx)
    5. How to write good code (Bad code.docx)
    6. Capturing kids’ interest

    i.      Robots

    ii.      Game programming

    iii.      Turtle graphics

    iv.      iPod/Droid apps

    1. Language types

    i.      Line code – Small Basic, VB, RobotC, C#, Java, Corona

    ii.      Drag and drop line code – Alice, Scratch

    iii.      Icon – VPL, Kodu, NXT-G (Lego)

    iv.      Command line

    1. Programming languages for teaching review

    i.      Python, Java,  Alice,  Visual Basic .net,  Lego Robotics – NXT,  RobotC,  GameMaker,  Scratch,  Small Basic,  Kodu,  VPL,  Arduino, Corona

    1. Installing programming software
    2. Grading rubrics (Program Grading Rubrics.docx)
    3.  Programming Assignment goals
    4. Free resources and blogs to watch
    5. Textbooks vs. on-line tutorials
    6. Hardware needs

    i.      Quality of computers

    ii.       vs. Windows

 

CS Teacher Education ain’t what it should be

February 10, 2012

I am cruising the blogs I read and today I saw with some excitement Mark Guzdials mention of a course at Purdue for teaching future teachers methods of teaching computer science.  The course is taught by Aman Yadav and the syllabus is available at http://cs4edu.cs.purdue.edu/license.  Total disappointment.  This course is supposed to prepare secondary education teachers.  It is absolutely amazing what a university CS department thinks is needed for a high school CS teacher.  This syllabus is totally appropriate if we were teaching only the top 1% of the students.  C, Java, Python, Advanced C Programming, Data Structures and Algorithms are all excellent for the APCS kids and above but there is nothing on how to teach the mainstream kids that are just taking a look at CS.  We need CS teachers who have the background to tempt the non-computer non-elite into a CS class.  A well prepared CS teacher should be very familiar with Small Basic, Scratch and languages of this type.  Using tools like Lego Mindstorms or Arduino projects should be part of the mainstream. A prospective teacher should not just be able to program in these languages but able to teach the kids how to program and have fun using these languages.  If we want to reduce the numbers of freshman high school CS students, introduce them to Java early.  That top 1% will hang in there because they love it.  The other 99% will say “ugh” and be done with CS forever.  This syllabus does not teach prospective CS teachers to teach programming, it teaches teachers to teach ubber-geeks.

CS should not be just for CS geek, there just are not enough of them to meet the needs of the US.  We need to attract the average kids into the world of programming because it is fun and has a future for them.  Training CS teachers with a program like this is will attract only the CS geek teachers to teach the few CS geeks in a high school.

I remember ages ago when I showed up at my first teaching job as a math teacher.  I had just spent the last four years learning calculus, ordinary differential equations, abstract algebra (I can still spell group, field and ring) and a few other maths I cannot remember the names of.  All this college math preparation and I was totally unprepared to teach high school freshman math.  In four years of college math I do not think I ever used F.O.I.L. or tried to explain why it is worthwhile remembering the quadratic formula.  A semester long methods does not really cover the issues.

Teaching programming does not mean knowing only how to program.  It means knowing what problems a beginner programmer is going to make and what they misunderstood that led to the mistake.  It means being able to approach a concept at a 14 year old kid’s level, which is not the way it is taught in a collegiate C course.  It means making a possibly dry topic interesting by hooking it to something that would excite a kid.  It means having a clue what to do if hired by a school with 5 Dell GX160s and asked to build a 4 semester CS program for sophomores and juniors.  These are types of topics that need to be a major part of those 19 – 21 credits.  The problem is there probably is NO collegiate CS professors that have ever encountered any of these issues.

Programs like that at Purdue do not generate CS teachers that can get kids interested in CS.  If every kid walked into the high school CS classroom ready for APCS the teacher trained in a program like this would be operational.  You build a strong program by building a strong foundation.  I see no foundation building capability in a program like this.

CS teacher training is such a frustrating topic.  So many stake holders are focused on APCS.  APCS is just too narrow of a scope.  There are just so many other places to take kids in CS that are much more interesting and fun, yet still meet the needs of the US.

CS teacher education gets me a bit fired up.  The most important technology development ever and what is shaping the modern world today and we cannot seem to generate interest to develop decent programs to train teachers.  Stupid.