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.
Robert Holder says:
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
April 24, 2012 — 1:09 pm
David Wees says:
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.
April 24, 2012 — 1:59 pm
Karl Andersson says:
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
April 24, 2012 — 4:13 pm
David Wees says:
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.
April 24, 2012 — 5:45 pm
Sue King says:
Our district’s elementary teachers having been involved in PD for math instruction provided by Dr. Riccomini from Penn State. (I have just joined the district as Dir of Elem. & Sec Education and have a background in mathematics). I am a bit concerned by what appears to be an over-emphasis on math facts and ‘automaticity’ (that appears to be extended beyond simple math facts). In some of the materials shared with teachers, Dr. R. does mention the need to develop conceptual understanding, but there seems to have been limited focus on how to do that and what it looks like in a child and a great emphasis on timed math fact practice, testing, charting results, etc. My wonderings right now are whether or not most teachers of young children understand the progression of students understanding addition, subtraction, mult., & division PRIOR to drilling them on facts. Do you have any thoughts about that?
January 22, 2016 — 2:29 pm
David Wees says:
Hi Sue,
Without looking at the specific resources you mention it would be hard to comment on them, but virtually everyone agrees that conceptual understanding is important but virtually no one agrees on how conceptual understanding is developed.
I recommend, if you are looking for useful teaching-facing resources to address one version of conceptual understanding, that you check out the instructional activities developed and shared through the University of Washinton at http://tedd.org/?tedd_subject=mathematics. You can see some sample tasks for this instructional activity at a secondary level at my project’s website at http://math.newvisions.org/instructional-activities.
I hope this helps.
David
January 22, 2016 — 9:27 pm