In all honestly I tend to avoid Slashdot. Oh I scan it for the news from time to time but I work hard at avoiding the comments and avoid the Q&A forums. Why? The heat to light ratio is horrible. For every person who adds a solid, thoughtful informative reply there are several who just want to attack the person who posted (especially if it is a request for information), several who want to attack the solid, thoughtful replies, and a whole bunch of people who just want to suggest, with a pretention of expertise, some answer that is just totally ridiculous. I get stuck looking though when someone sends me a link to a topic I know something about and that is important to me. This happened this morning. A friend sent me a link to this post of the forums:
Ask Slashdot: Good Homeschool Curriculum For CS?? Posted by timothy on Tuesday May 31, @07:01PM from the ok-now-track-the-family-budget dept. dingo_kinznerhook writes "I grew up in a homeschooling family, and was homeschooled through high school. ( I went on to get a B.S. and M.S. in computer science; my mom has programming experience and holds bachelor's degrees in physics and math — she's pretty qualified to teach.) Mom is still homeschooling my younger brother and sister and is looking for a good computer science curriculum that covers word processing, spreadsheets, databases, intro to programming, intro to operating systems, etc. Does the Slashdot readership know of a high school computer science curriculum suitable for homeschooling that covers these topics?"
Posted by timothy on Tuesday May 31, @07:01PM from the ok-now-track-the-family-budget dept.
dingo_kinznerhook writes "I grew up in a homeschooling family, and was homeschooled through high school. ( I went on to get a B.S. and M.S. in computer science; my mom has programming experience and holds bachelor's degrees in physics and math — she's pretty qualified to teach.) Mom is still homeschooling my younger brother and sister and is looking for a good computer science curriculum that covers word processing, spreadsheets, databases, intro to programming, intro to operating systems, etc. Does the Slashdot readership know of a high school computer science curriculum suitable for homeschooling that covers these topics?"
There are several comments calling the poster a “troll” because clearly “they don’t know what computer science is” and a bunch of posts critical of homeschooling in principal. Also several people criticize the notion that the Mom is qualified to teach computer science. It takes a while to get to some posts that actually respond in some fashion. And there are a couple of posts that suggest specific books which is good. And replies criticizing those suggested books. But oh boy are there some “interesting” suggestions on how to start. I’ll get to some of those in a bit. But first, I did (against my better judgment) leave some suggestions of my own. I have already heard the usual Microsoft bashing which seems to be required on Slashdot so I’ll probably not bother to go back and read it again for this post.
For younger kids there is a sort of progression. I like Kodu for 7 to 10 year olds. There is some curriculum, not much really but you don’t need a lot, on the web site in the Classroom Kit tab. Kodu is good for getting kids to think about programming or rather, conceptually, the idea that they can tell the computer what to do, have some success and learn as they play how to do planning, storyboarding, critical thinking, problem solving and even be artistic and creative. And its fun.
After that I see three tools that I like for different things: Alice, Scratch, and Small Basic. Alice is from Carnegie Mellon, Scratch from the MIT Medial Lab, and Small Basic from Microsoft. There are whole books on Alice. Hit up Alice.org and take a look. There is also http://www.aliceprogramming.net/ which is all about instructional resources. For Scratch besides the main Scratch web site with its forums and project sharing there is ScratchEd with its resources. And there are other Scratch sites as well. The Scratch BYOB project (out of UC Berkley) allows for some really powerful expansion of Scratch for older students – up through college.
While Alice and Scratch are drag and drop blocks of code as is Kodu, Small Basic is a more traditional programming language. I do like the idea of getting to “real code” early in the process. The Small Basic page on Kid’s Corner has a curriculum for Small Basic. It’s pretty complete and more resources are coming all the time. Lynn Langit and partners have a site with curriculum and videos using what they call design recipes at Teaching Kids Programming which is also well worth checking out.
The Beginner Developer Learning Center Kid’s Corner has long been a site I recommend for home school parents and young people who want to learn on their own. There are a number of kid’s courses for programming (Code Rules which his also used in a lot of after school programs), Creating Your First Web Site Using HTML, Intro to Programming Windows Apps, and Introduction to Web Design. All free and all using software that is available free. And there is more. Spending some time looking though the BDLC Kid’s Corner will turn up all sorts of great possibilities.
Now just in case you got this far because I said I would address some of the other suggestions I read in Slashdot, here you go.
Someone always suggests start them with Assembly language. This works for some people. However if it were likely to work for your child they would 99% of the time gone off and learned all this on their own and would be teaching you. Any one can learn assembly language but few have a good experience with this as the first language. it is sort of like telling someone who wants to be a sprinter that they should crawl with leg weights on before they start walking and then running. Start with something that will be fun and create a good experience and return to Assembly language later on if at all. Not everyone even needs to know it.
Someone also always suggests “give them K & R C” as is someone who needs help finding curriculum even knows that this is the C programming language as documented by Brian Kernighan and Dennis Ritchie many years ago. It’s a great book but it is not, in my opinion, the best way for a home scholar to start. For one thing the C language has more than the average number of ways to bite a beginner in the rear end than most more modern languages. Also you will wind up with doing all your applications as console applications (white letters on a black background) and students are going to wonder when they can write programs that look like the ones they actually use. Since I believe the first course should be about fun, achievement and feeling of success almost as much as learning the most important and basic concepts I do not recommend K & R C as a first language.
Someone on Slashdot recommended an Apple II and an assembler and languages on that. Sounds like someone thinks everyone would learn the way they did. It worked for them right? On the other hand Small Basic will give you all the ease of use the Apple II did and give you a good simple IDE, Turtle graphics (hey remember Logo?) and an easy upgrade path to Visual Basic when a student is ready to go pro.
It is important to remember that the state of computer science is evolving. There are better tools – better IDEs, better languages, better projects, better everything- then there were even a few years ago. Not everyone has to learn the same way everyone who came before them does. People learn at different rates as well. Some people may start with Alice or Scratch and that may be all they ever want to do. Others will decide they want to make serious games or applications that they can sell. Those students will want to move on to languages like Visual basic (bit the graduate button on the Small Basic IDE), C# and XNA (I’ve got lots of links to XNA educational resources on this blog) or functional programming using F# (Learn F# online at Try F#) There are lots of resources for all of these tools.
But please, if you are going to ask someone for advice on teaching programming, please make sure they actually have some experience teaching people other than themselves how to program. For the student’s sake!
I remember years ago that there were math teachers proposing that Geometry should be taught using Euclid’s Elements as the text book. I took a look at Elements and decided rather quickly that there have been improvements in Geometry texts in the last 2000 years. I think the same can be said regarding programming teaching languages in the last 20 years. My days with Assembly were not fun. It is rather difficult to write anything fun in Assembly. And programming should be fun. In most high schools programming is an elective. Electives without a bit of a fun factor get zip for students. Electives with zip students go away. We (the USA) are having a little problem getting kids into programming classes. Sitting in front of a computer for long periods of time writing in console mode does not temp a lot of kids. But give those same kids Scratch or Alice or Kodu and tell them they have to write a game and the picture changes. Purists may claim that that is not real programming. I am not teaching purists, I am teaching kids. Using my years of background and semi-infinite wisdom in the teaching of programming I will make the very controversial claim that the same basics of programming can be taught writing fun games with a fun language as can be taught by beating kids over the head with some antique language.
You know, I am a professional developer that just loved this stuff from early in my life. Taking stuff apart was easy, putting it back together was fun, but then making it do something ELSE was always what I wanted.
In this case, I couldn't agree more with using non-traditional "programming" as a starter. What I was taught in college (my high school didn't have CS electives) was programming can be defined as "defining, re-defining, and ultimately solving problems or challenges using the least amount of work."
By this course of thought, my professor taught us algorithms and then explained advantages and disadvantages against his aforementioned principle. Define the problem. Re-define the problem to make sure you understand it. Model a solution and evaluate it for simplicity. Implement the solution. Re-evaluate your solution and learn from it. While this high-level stuff would blow by a kid's head, the idea of being able to see a goal, set building blocks to achieve that goal, and then evaluate the path you took to arrive is nearly identical in modern programming no matter your language.
It is in this philosophy of Computer Science that I see Alice as a fantastic tool, and I really appreciate the work they did at CMU and abroad to make it accessible and still provide value in bringing CS to the masses.
"[I]f you are going to ask someone for advice on teaching programming, please make sure they actually have some experience teaching people other than themselves how to program."
One of the most aggravating things about talking to people about education is that everyone's an expert, based on their sample size of 1.
I teach kids Android programming.