Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Programming-based learning

  1. May 9, 2006 #1


    User Avatar
    Science Advisor

    I just gave a presentation today on my team's server which we are writing in Java as part of a plugin to an existing application, the other parts being done by other teams. In the course of this presentation I realized just how well I know the code: I know useful information on virtually everything written in the whole server program, which is about 3000 SLOC (source lines of code, defined as non-comment, non-blank lines of code) or about 5000 lines total including comments and blank lines, covering 30 different classes and six different packages. Objectively speaking this is a small program (though the largest I've ever been involved in writing). Not only do I know my way around almost all the code, I know it with just about absolute rigor; you can't write a working program without being almost absolutely rigorous.

    Now what if the program had been some kind of mathematical construct instead? Then instead of knowing my way around some program I'll probably never use again after this semester (not that the experience isn't good), I'd know a good amount of math, i.e. permanent knowledge. And I'd know it to a higher degree of rigor than is demanded in any of my other classes. And any moderately skilled novice programmer must have the same learning ability, or else they would not be able to make working programs either.

    At the moment I tend to perceive a math problem that takes a few pages to solve as "long." Our program printout would be about a hundred pages, and any professional programmer would call it small.

    Is there a teaching theory that makes use of this--a math curriculum from a very basic level onwards, centered around implementing as much knowledge as possible as working programs? I am aware there are math courses that deal with Matlab or Mathematica (for some reason I have not taken one yet) but at the undergraduate level I'd imagine the amount of code written is usually very small and only supplemental to the course material.

    Somehow, with training, people have the ability to be astoundingly good at writing programs, producing very large volumes of very rigorous work. Education should capitalize on this.
  2. jcsd
  3. May 18, 2006 #2


    User Avatar
    Science Advisor

    This is not absolutely math related, but anyway, it's on the same subject as the OP. Yesterday I was talking to my professor for theory of computation, and he said that he once taught a class in data structures at Duke. He had never taken a course in data structures (he had been a math major, though having done programming for years he was familiar with the subject) so he looked around to see what books there were. He discovered that the prevailing teaching method was extremely stupid, on the order of "This is a stack... now write a ten line program using a stack. This is a queue... now write a ten line program using a queue." Instead of doing that, he created his own course where the students wrote an interpreter for Pascal excepting the branching or loop structures, and each part of the course was to write a program (incidentally using a newly-introduced data structure at each stage) to implement another part of the Pascal language. Each new module the students wrote had to integrate with all the earlier (working) modules.

    He said he had 24 students in the class. 8 of them dropped by mid-semester, 8 of them failed, and 8 got A's. Of those that got A's he said that several came back years later expressly to thank him for teaching that course--it gave them a lot of confidence in their abilities, even if they never continued in computer science.

    What that shows, I think, is that if a student is dedicated enough to succeed, a serious programming project really feels like making something real. You do not depend on the whim of graders, and the standard is the very solid one of "works" or "does not work." If you don't absolutely know what you're doing, you can't write the program--as simple as that.
    Last edited: May 18, 2006
  4. May 21, 2006 #3

    I can personally testify to this. As a student last year, I created a math application that could do anything we were learning, which was eventually built up into data modeleing/pattern finding/equation solving semi-full featured piece of software. A side affect was a very firm understanding of the underlying concepts, because, inorder to code for something, you need to fully understand it.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook