I recently spent some time at a special High School located on the West side of Chicago whose focus is unique among the schools that I know of. They are a start-up Tech High School. Determined to teach “inner-city” youth technology along with the standards of Math, English, Chemistry etc. I’d like to respond to what I witnessed there. This response should be attributed to any and all such schools that attempt to teach modern programming and technology to children.
Now a little background. I spent the last two months of the school year with them. I was on staff to help finish the year for them (their prior teacher was gone and they needed someone to help finish off the year). Now this was critical for them as they needed someone there so they could graduate their first Senior class.
They also warned me. While most of the kids are great. They do have some that are just there because the school is near where they live and their parents see the school as a safe place for their kids to be. “So we have some kids who are not into learning about computers.” And some of them have disciplinary issues.
Now while there I witnessed how the structure that they were using to teach the kids operated. Classes were divided into “periods” and each period was 40 minutes long. Now before each class or “period” could get started your had to do a bit of paper work before hand, you had to take attendance and make sure each kid had to proper dress code attire etc. This “paper work” portion takes up about the first 10 to 15 minutes of your class time. So by the time all that is done and you get your kids to settle down…you’ve got about 25 maybe 30 minutes to actually teach the class.
Let me say that again for you, time to teach a programming class….. 25mins.
Now, a second problem, while most kids were very teachable you did have a number of kids that where problem cases. Disciplinary issues. After all this is a classically Chicago Public Schools charter school. And as they mentioned prior to my coming aboard. “Some of the children are here for other reasons and are not interested in learning computers”. Now these kids would do everything and anything to not do the work assigned for them and loved getting other kids to join in with them.
So why are they in a computer class? They are there because they have no other place to be. And it became the teachers job to effectively babysit for them. Unfortunately, having disruptive students in an already extremely time limited class is a recipe for No-One-Learning anything.
Some kids where always in “detention” in almost every class. So an entirely different approach has to be taken for those kids…I’ll get to that in a moment….
Another problem….no homework. Why in the name of the programming gods do you have a school that has a culture of NOT giving homework? You have class periods of effective teaching time ~30mins and you’re not giving homework? The excuse for this given was that the children don’t have computers at home. On the face of it that would be a compelling argument. After all they are poor kids. But when asked by me in each of my periods…all but one or two kids had computers at home?!
Now for those kids that have disciplinary issues you may be able to take those kids and expose them to different things that can be done on a computer. So instead of looking at code all day they could play with music making tools and various art making tools. If you have a kid that likes to draw then give him a digital pen and drawing pad and encourage him to draw in the computer. Some kids are bored out of their minds and revolt because they feel no one is listening to them. But if your program is so rigid that there is no time for discovery and exploration then all these kids walk away with is…”programming is boring”…..and you have failed (or succeeded depending on what your goals may actually be).
Yeah I said it…”depending on what your goals may actually be”.
Teaching a 21st century topic DEMANDS you not use 19th century techniques.
Part 1: The Problem: memorization, regurgitation and the industrial age.
The current method of teaching children and adults in higher education is outdated. (I am referring to topics related to the Sciences, Math, Comp Sci, and Modern Professional Programming. These are things that I know of and I’m speaking of both my personal experiences as a student in these subjects and as an educator of them.)
- 40min long sessions
- 20+ students per 1 instructor for a 40 minute course
- Poor or un-ideal facilities
- Students with discipline issues mixed in with “good” students
It is foolish to teach people methods of programing that have only existed within the past 20 years on a framework that was originally designed to train people as unthinking factory workers. What is critical to the technology field is to train children how to problem solve. Not just how to do task.
In a daily class, an instructor with more than 20 students constrained to teach in a 25 minute segment, an instructor is going to have only two MAYBE three questions that can be carefully answered to guide the student. That’s answering a question on the prior days lesson, NOT actually going over the current days lesson.
You can not properly teach programing in an engaging way in a class that last only 30 minutes. Period.
The class will very quickly de-evolve into a “I give up this is too hard” from the student’s perspective or a “just copy the code I create for you now and maybe it will make sense later” perspective from the instructor.
Part 2: A Solution: A programming course should have the following load out:
- 8 students per 1 instructor per 2 to 3 hours per day course (three days class - two days lab).
- 1 computer per student in a room that is spacious and not cramped. cables should be neatly stowed and nothing on the floor that students or instructor can trip over.
- The standard for modern Professional Programming is the Mac, period. All machines must be Apple with a virtual machine installed for Windows app development on Windows.
- A very large projector screen should be in front with the ability to be viewed…clearly…at the back of the room.
Class room machines internet access must be white-listed and direct pinpoint access to turning specific sites on and off given to individual instructors. This limits kids from being able to surf youtube when they should be engaged in class work.
I won’t limit what you should be focusing on in teaching topics here. If you want to guide underprivileged down the path of coding apps using proprietary tools and on proprietary platforms like Microsoft go ahead. I’m sure once those kids graduate they will be able to pay for the development tools and constant tools upgrades etc. that that path will eventually lead them down.
Ok, seriously, don’t teach using proprietary tools. Tools should be as open and free of proprietary control as possible. And understand where you want the kids to go…what path you want them to travel down. Are you teaching them fundamentals of programming? Are you teaching them how to build web apps? Are these apps native to one platform? Are they cross platform apps? What is the difference? Why is that important?
You should teach them tools and techniques that are relevant. Example, if you want to teach about mobile app development then teach them how to build apps for the top one or two platforms. At the time of this writing that is Apple and Google respectively.
If you want to teach them web application development then you need to know that world, and be able to predict where that world will be 4 to 5 years from now. How has that world changed in the past? What has changed? What has stayed the same? What will it look like based on that information 4 to 5 years from now? Are you teaching kids to build apps on Microsofts IIS server? Or Apache? Or Heroku? Why?
Do your decision makers understand that themselves? If not why are they your decision makers?
Anyway, for beginning students, depend on open standards tools and languages and avoid proprietary environments as much as possible.
Focus on teaching a specific language….something from the C family of languages…once students understand that language proceed to further development topics with that language….building on the knowledge previously learned.
Do this in a way that engages the kids. Show them how to make things dance on the computer screen. Show them examples of others making money using the same tools and techniques you are teaching them now….this will help facilitate inspiration.
If all a kid sees is code on the screen all day…that’s not exciting. Remember your teaching kids not adults. Engage them.
Your job should not be to teach them a classical computer science level understanding at first. That is boring for a mind used to youtube, xbox and playstation…inspire, encourage and engage them first. Show them things dancing on the screen. Show them animations and how to make them. Turn around time for things created and the results of those creations should be short. Seduce them into creating technology, plant seeds of inspiration, the rest will follow.