Thoughts from a reflective educator.
I've been learning how to program for a long time, a task that has much in common with mathematics. Both programming and mathematics involve being able to solve problems. Some of the problems in programming and mathematics have well established solutions and other problems do not. On a micro-level, programming involves manipulating code, a task much like the symbolic manipulation often used in mathematics. On a macro-level, programmers and mathematicians both need to be able to trouble-shoot, organize, and communicate their solutions.
Sample code:

When I learned how to program, I taught myself, and I know that as a result, the code I create does not always follow the most appropriate industry standards. I have some unconventional solutions to some of the standard problems in programming, and I have less than optimal solutions for some basic problems in programming. I've yet to develop my own library of solutions, a standard practice in the industry.
On the other hand, I'm not a professional programmer. I program to solve problems I run into in life, and I program for fun. I have many programming projects that I've started and not completed. I'm an amateur programmer. I don't need my work to look exactly what professional programmers' work looks like because I rarely, if ever, share my programming with other people. I often share the results of my programming though, and this has helped build some useful tools for my students.
There are many low-level tasks that I no longer need to reference. I don't need to look up how to define variables or functions, and I don't need to look up loops, conditionals, and other basic parts of the structure of the programming languages that I know. I still need to look up the methods and properties of some higher level objects in the programming languages I know though, and when I program in PHP, I have a reference manual for the hundreds of functions available in PHP always open. I could be said to have developed a certain amount of automaticity in learning how to program, especially for the more basic tasks.
This automaticity was not learned by memorizing programming structures. I didn't develop automaticity by doing practice exercises. I didn't develop automaticity by reading books on programming. I developed automaticity in the low-level programming tasks by programming, by giving myself projects to work on that required me to build my skill, and by repeatedly looking up reference material when I got stuck. I developed automaticity because it is frustrating to write code that doesn't work. It's frustrating to get error messages that are nearly incomprehensible back from the computer when you make a mistake in the structure of your code.
If we look at mathematics education, we see that many, many of the problems given to students which have standard solutions. We expect students to develop fluency in these problems, often before they ever get to see any of the non-standard problems. In fact, in k to 12 education, students can potentially never be given an open-ended non-standard problem. Unfortunately, I believe this approach has failed our students in the past, and I'm not alone.
I'd like to see a system without a focus on fluency and automaticity in mathematics. These are the wrong drivers of mathematics education. Instead of focusing on the lowest level tasks mathematicians do, and assuming that fluency in these tasks leads to mathematical reasoning, we should focus on the most interesting and challenging tasks, and expect that a certain degree of fluency and automaticity will be developed as a result of these tasks. Instead of expecting students to memorize recipes and algorithms, we should allow them to develop toolkits and libraries to use of their own that they can reference as needed. Instead of feeling that every problem students need to do has to be solved quickly or efficiently, we should allow for alternate solutions and methods to be used.

David is a mathematics teacher and a learning specialist for technology at Stratford Hall in Vancouver, BC. He has been teaching since 2002, and has worked in Brooklyn, London, and Bangkok before moving back to Canada. He has his Masters degree in Educational Technology from UBC, and is the co-author of a mathematics textbook. He has been published in ISTE's Leading and Learning, Educational Technology Solutions, The Software Developers Journal, The Bangkok Post and Edutopia. He blogs with the Cooperative Catalyst, and is the Assessment group facilitator for Edutopia. He has also helped organize the first Edcamp in Canada, and TEDxKIDS@BC.
Comments
FeetWetCoding
Greetings Mr. Wees! I came across your blog from a link on Google+. I'm hoping you might have time to check out our free, open source (non-commercial) educational software my wife and I are working on, intended to help make learning C++ a little more fun. It is unfinished, although we are still working on it.
Looking at your blog post here, it occurred to me you might have some interest in it, since you are thinking about trying to find new and different ways to engage students and structure learning. If this is not up your alley, my apologies. We've been working on the project in our spare time, just as a hobby. You have professional experience working with students as an educator, and that's something we just don't have! It is not specifically designed to be used in the classroom, but we'd like to do what we can to make it as useful as possible in that setting, as well as for the software hobbyist.
Our documentation is here:
http://feetwetcoding.com
Any feedback you might have would be so welcome! And if you don't have time, I understand.
Regards,
Robert Holder
Westminster, Colorado
I'm installing your software
I'm installing your software now to check it out. Thanks for sharing. I've always wanted to learn C++, so anything that will make that easier for me will be awesome. I'll evaluate it for use with our students. I'm considering starting a programming club here, perhaps for next year.
Hello
Hi
I'm a programming teacher for a upper secondary school in Sweden (excuse my somewhat bad english).
About the last part, too not force the students to memorize the most optimal solutions.
I've encountered this dilemma several times in my classes. I tell my students that the solutions that they them selfs find are often more valuable than a standard solution. The goal is not optimization, it is problem solving.
Its hard to teach problem solving, some scientist say that you are born a programmer or your not, but as i teacher i can't and won't follow that saying.
I challenge myself to find different ways to teach programming, like Visualization, example Java programming with Jeliot 3-program
or teaching the principles of programming via flow-chart programming, Raptor: http://raptor.martincarlisle.com/
When i learned programming (in school), when i learned a new subject/detail i immediately started to think of applikations for this detail and then i tested it. I got a deep knowledge by doing this.
I hope you continue your quest :)
If you want to continue to discuss mote about programming teaching/learning i'm more then happy to it :)
/Karl
The goal, especially early
The goal, especially early on, is problem solving, I agree. Optimization is itself a form of problem solving, with a very specific purpose. I think you can learn how to optimize your code fairly easily, once you have a better understanding of how to code in the first place. In the same way, once you have discovered one solution to a mathematical problem, it may be easier to find other solutions.
Post new comment