Coding. Modeling. Which came first? And what should we be teaching our students? There has been some recent discussion on this from two blogs: Chris Granger who suggests that modeling is the new literacy, and Mark Guzdial who observes that modeling requires coding. Let me begin from the beginning--as an after-school programmer in 10th grade with punched cards and FORTRAN 66. We were introduced to a green plastic IBM template which captured the modeling task known as flowcharting. Flowchart templates promote control flow thinking--these control flow diagrams are models of code. One made a flow diagram first, then wrote code. I don't know whether this is still common practice--to model control flow in pictures, and then proceed to write down code as text. Has this modeling effort been relegated only to the advanced reaches of software engineering courses taken only by CS majors?
Chris and Mark both have valid points. Code is at the bottom layer of modeling. Think of code as modeling with the technology of type. All models are tied to explicitly to types of technology, and so types of media. Consider James Clerk Maxwell's plaster model of Gibb's thermodynamics surface. A new way of understanding thermodynamics--using the technology of plaster of Paris. Typeset equations are another way. If your technology is a typewriter or a keyboard, then your computing model is going to look like code. If you use different technology, your "code" will look radically different -- it may be physical or in diagrammatic form. Most dynamic models we create in the CA Lab are either physical or diagrammatic, but code is indeed at the bottom layer. When I teach process, I cover a combination of control and data flow methods. Data flow thinking is where the process is based on a description of how data are manipulated over time--data flow is a natural way of thinking about computing, and it has the added benefit of weaving in thousands of years of analog computing practice. Another benefit of data flow thinking and modeling is that one comes to understand computer science, and information science, as real sciences--seeing information everywhere rather than remaining glued to a keyboard and the accompanying video. We need modeling and we need coding. But, more than this, we need the respective communities around modeling (e.g., SCS, ACM SIGSIM, IEEE Systems Science, Engineering & Cybernetics) to better connect with organizations devoted to teaching computer science (e.g., ACM SIGCSE). Because these two communities seem lightyears away from each other when they shouldn't be.