Draft: Education & Code Reuse
Apr. 14th, 2004 02:48 pmThis paper draws a parallel between programming and learning science as dynamic processes. While the goals of these two activities are on the surface different, they both consist (when done well) of building complex, abstract logical structures.
Just as it is possible to achieve the goals of programming by a "hack", likewise one can achieve the goals of a particular learning goal by senseless memorization. Both solutions, however, are in general costly in terms of memory(program-size complexity), expensive to scale, lack modularity (hard to edit), and hard to relate/incorporate with other structures.
The challenge, for both problems, is "How to handle complexity". This question has been extensively approached from the side of software engineering, but has not generally been considered on the education side, because the formalization of scientific arguments is generally viewed with pessimism.
PROGRAMMING
Programming is a dynamic process. In order to meet the specifications, the programmer refines his code in an iterative process.
The challenge of software engineering is how to optimize this interactive process, how to eliminate the "busy work". Among the many techniques and paradigms for minimizing time spent, error and confusion, some include meta-programming (teaching the program to program itself), standardized processes and structures (UML, Design Patterns). The latter consists of learning standard solutions to standard problems, and attempting to encode your requirements in terms of standard problems.
While the problem of writing simple, elegant code may be seen as the problem of approximating the Kolmogorov Complexity of your function (the function which the program computes), it can be also seen as one of Communication Complexity: how do we create a meta-protocol which minimizes how much the programmer needs to tell the machine?
Abstraction: (1) the dynamic process (2) the modular structure which makes things more elegant and efficient.
REASONING
Reasoning is, likewise, a dynamic process. One does not construct a theory, an argument or a proof all at once, but rather these structures get refined step-by-step by logically incorporating desired properties.
EDUCATION
It is obvious that knowledge of logic provides the basic building blocks upon which scientific knowledge (and ALL interesting knowledge, I would say) is constructed.
It is in fact easier to encode and remember things when you use logical structures: things just "fall into place".
People construct examples, models (Exner, MvL)
Standard argument forms as "code reuse": mathematicians use standard forms to a very limited extent. I argue that we could benefit by creating and using them a lot more.
, but this is precisely how most students are taught today.
REASONING ASSISTANTS FOR RESEARCH
I am not smart enough. -John McCarthy
The structure of scientific theories can get quite complex, and even experts are expected to make conceptual mistakes once in a while. Since there isn't a standard, it's not always straight-forward to "debug" one's argument.
OUR PROGRAM
Just as it is possible to achieve the goals of programming by a "hack", likewise one can achieve the goals of a particular learning goal by senseless memorization. Both solutions, however, are in general costly in terms of memory(program-size complexity), expensive to scale, lack modularity (hard to edit), and hard to relate/incorporate with other structures.
The challenge, for both problems, is "How to handle complexity". This question has been extensively approached from the side of software engineering, but has not generally been considered on the education side, because the formalization of scientific arguments is generally viewed with pessimism.
PROGRAMMING
Programming is a dynamic process. In order to meet the specifications, the programmer refines his code in an iterative process.
The challenge of software engineering is how to optimize this interactive process, how to eliminate the "busy work". Among the many techniques and paradigms for minimizing time spent, error and confusion, some include meta-programming (teaching the program to program itself), standardized processes and structures (UML, Design Patterns). The latter consists of learning standard solutions to standard problems, and attempting to encode your requirements in terms of standard problems.
While the problem of writing simple, elegant code may be seen as the problem of approximating the Kolmogorov Complexity of your function (the function which the program computes), it can be also seen as one of Communication Complexity: how do we create a meta-protocol which minimizes how much the programmer needs to tell the machine?
Abstraction: (1) the dynamic process (2) the modular structure which makes things more elegant and efficient.
REASONING
Reasoning is, likewise, a dynamic process. One does not construct a theory, an argument or a proof all at once, but rather these structures get refined step-by-step by logically incorporating desired properties.
EDUCATION
It is obvious that knowledge of logic provides the basic building blocks upon which scientific knowledge (and ALL interesting knowledge, I would say) is constructed.
It is in fact easier to encode and remember things when you use logical structures: things just "fall into place".
People construct examples, models (Exner, MvL)
Standard argument forms as "code reuse": mathematicians use standard forms to a very limited extent. I argue that we could benefit by creating and using them a lot more.
, but this is precisely how most students are taught today.
REASONING ASSISTANTS FOR RESEARCH
I am not smart enough. -John McCarthy
The structure of scientific theories can get quite complex, and even experts are expected to make conceptual mistakes once in a while. Since there isn't a standard, it's not always straight-forward to "debug" one's argument.
OUR PROGRAM