Skip to content

A new idea for a science core course based entirely on computer simulation

Columbia College has for many years had a Core Curriculum, in which students read classics such as Plato (in translation) etc. A few years ago they created a Science core course. There was always some confusion about this idea: On one hand, how much would college freshmen really learn about science by reading the classic writings of Galileo, Laplace, Darwin, Einstein, etc.? And they certainly wouldn’t get much out by puzzling over the latest issues of Nature, Cell, and Physical Review Letters. On the other hand, what’s the point of having them read Dawkins, Gould, or even Brian Greene? These sorts of popularizations give you a sense of modern science (even to the extent of conveying some of the debates in these fields), but reading them might not give the same intellectual engagement that you’d get from wrestling with the Bible or Shakespeare.

I have a different idea. What about structuring the entire course around computer programming and simulation? Start with a few weeks teaching the students some programming language that can do simulation and graphics. (R is a little clunky and Matlab is not open-source. Maybe Python?)

After the warm-up, students can program simulations each week:
– Physics: simulation of bouncing billiard balls, atomic decay, etc.
– Chemistry: simulation of chemical reactions, cool graphs of the concentrations of different chemicals over time as the reaction proceeds
– Biology: evolution and natural selection
And so forth.

There could be lecture material connecting these simulations with relevant scientific models. This could be great!

P.S. Here are the details on Columbia’s science core course. :

On Mondays throughout the semester, four [science faculty] present mini-series of three lectures each. During the rest of the week, senior faculty and Columbia post-doctoral science fellows lead seminars to discuss the lecture and its associated readings, plan and conduct experiments, and debate the implications of the most recent scientific discoveries.

I took a look at the lecture materials (written by Prof. David Helfand of the astronomy department) and they look pretty good to me. Actually, about half of it is probability and statistics! I’m not quite sure how the mini-lectures fit in, but Helfand’s notes seem like a good start.

I don’t know about the rest of the course, though. Discussing the lecture and readings seems ok, but can you really expect a roomful of freshmen to plan and conduct experiments? I guess I’d have to see what they come up with. And I don’t know what they’ll get out of debating the implications of the most recent scientific discoveries. Debating might be fun but I don’t see it getting them closer to learning about science. Then again, I don’t know that sitting around a room talking about To the Lighthouse will give much insight into literature. The discussion period can be fun, but ultimately I think it functions mostly as a way to enforce that students do the reading.

I’m speaking from ignorance, here, not having ever attended the class or been involved in its planning, so I’m not criticizing the class, just exploring some concepts. Maybe next semester I can sit in on one of the seminars and see what happens there.


  1. ChristianK says:

    Core science computer simulations was the thing I wanted to study.
    I went with bioinformatics with gave me Chemistry/Biochemistry, Biology, Statistics, Computer Science and a bit of math.

  2. Jared says:

    I learned Python for an undergraduate research project. Now I do most of my work in Python and besides being a workhorse for scientific computing – making it incredibly easy to move code to C (via Cython), incidentally – I've used it for all kinds of other work. I find I'm more productive in Python that R/Matlab except when I need functionality in a package/toolbox, which happens from time to time.

    It's not perfect, but in my opinion it'd be a good turn to introduce your students to Python.

  3. Paul says:

    Before college, school seems to be about refining relevant intellectual tools. English isn't about analyzing literature, just growing your vocabulary and reading comprehension. Science class doesn't involve science as a process, it teaches you what we've figured out via science. And so on.

    When college classes succeeded, in my opinion, it was because they got past that and exposed you to the actual field. College math was a thousand times more interesting than long division. Literature involved synthesizing and discussing ideas from a work, instead of reciting the plot. My worry is that in a broad class about "science" you won't be able to actually convey what doing science is like. Computer simulations would have the "neat" factor, but would ultimately be toy programs, unlike the simulations done in real science.

    Rather than trying to design a course broad enough to capture the breadth of science, I'd recommend a course narrow enough to capture its depth. Choose a topic within a field: measuring the mass of galaxies, the thermal properties of materials, the dynamics of evolution, the geological history of your local area, whatever. The first part of the class can be about getting the students sufficiently familiar with the concepts of that field. Then you can have them read actual research papers on the topic, design and run experiments, get them thinking about how you interpret the raw results that come out. Rather than 12 predefined experiments/simulations that are far simpler than anything really run in modern science, shoot for 1 or 2 that are complex enough that interpreting results, or debugging your process, is genuinely interesting.

  4. I love the idea of requiring all students to learn to program. If they're going to learn to swim, they might as well also learn something more practically useful. That said, I worry that coding simulations might be quite difficult without at least a semester of simpler programming beforehand. A simulation of billiard balls sounds rather more complex than anything that was assigned as homework in the Intro to Java course taught by the CS department when I was a student.

  5. Phil says:

    About fifteen years ago, John Connolly, who was at the time the head of the supercomputer center at the University of Kentucky, taught a course that I think was somewhat like you describe. I don't know how it went, but I'll encourage him to comment here and let us know.

  6. dearl says:

    Are these are non-science majors? I think your proposal sounds like it could be a really exciting course if everything goes perfectly, but I worry that it's too ambitious. For example, this

    Start with a few weeks teaching the students some programming language that can do simulation and graphics.

    Assuming these aren't already CS students, unless you're willing to have your students just copy-paste code I think it's going to take them longer than a few weeks to even get the hang of even the syntax of whatever language you choose. You and I may be able to pick up new algol-based languages very rapidly, having already learned several of them, but in my experience of tutoring students new to programming, even the basics take a surprisingly long amount of time to sink in. Not to mention the background in physics required to do physics simulations or in biology to do biology simulations, etc.

    That aside, I would have loved to take a course like this as an undergrad. And I think Python using matplotlib would be a good choice.

  7. K? O'Rourke says:

    Yes, it could be great

    It would mostly be about representation of models and the manipulation of those models. Orders of magnitude better than even ten years ago.

    This is just the second of Peirce's tricotomy – making models physical – there is still speculation (what are good models) and explanantion (what the model, its implementation and manipulation means, i.e. how our other ideas should change.)

    But is likely the biggest block to many in there think – just recall that two children with the sone born on a Tuesday example.

    Sure if you posted outline people would make suggestions.

    Also as the developer of APL once sid when we develop these kinds of materials were really just comming up with what we wish people would have given us when we started out. the people you are doing thsi for probably what need other things..

    Sorry for typos, but rushed.


  8. David N says:

    I hate the idea — unless there's a full semester on all the ways computer simulations can mislead, produce inaccurate results, provide too many variables, etc.

    Computer simulations are obviously very useful when a system has no analytic solution or is otherwise too complex. But they can't replace the experiment. Therefore students should not skip learning the how and why of actual experiments.

  9. Kevin Dick says:

    My mom taught gifted kids for a couple of decades. What I learned from her is that with enough effort, creativity, and experimentation, you can get gifted kids to teach themselves some pretty deep insights into any topic within a couple of weeks.

    I actually think focusing on computer simulation would be a mistake. Give them a complicated, open-to-interpretation problem to solve that allows for multiple learning strategies. Do calculation exercises along the way.

    Here's an example for science:

    Design a siege engine that launches an explosive payload at a pig cadaver.

    Calculate trajectory of the projectile and energy released from explosion. Dissect the damage pig organs. Etc.

  10. Keith Trnka says:

    That seems really ambitious, though I can't know for sure without knowing what the student quality is like.

    The different examples you've given would have significantly different loads on the students. Simple things like making a half-life graph would be easy and reasonable, but they don't really need Python for that. R/Matlab or a TI calculator would be better for that. Concentration of chemicals over time during a reaction might be a step more difficult, but I say that because it's not something I remember being taught in a chem minor. Maybe they covered it in physical chemistry, but that was (I think) a third year course for most people.

    Simulation of chemical reactions is vague; there might be some level at which you could write reasonably simple simulations. But you might be accidentally getting into fluid dynamics for many reactions, if you consider the differences in liquid reactions with and without a stirrer.

    Pool is similar; at some levels there's a chance. If you're doing something like just two balls interacting it'd be fine. The visualization might be suitable for a language like Python even (though I'd suggest writing an API to abstract away the details of rendering and such). If you're talking about a more normal situation though, it could be considerably more different because you probably need to simulate with very fine-grained time steps in the case of accidental interactions along the way to the intended target. Real pool is considerably more complicated than the nice inelastic interactions we like too – you have drag and all sorts of spins involved. Something like raytracing might be more reasonable, but that's not covered for a while in most CS departments.

    The course idea might fly if you abstract a lot of knowledge away behind APIs. One of the downsides is that it requires a lot of domain knowledge from a lot of fields. It can be difficult to get that from faculty in other fields (or even their students).

    All that said, I have to wonder what they'd learn. Would the course explore model accuracy? If anything, I'd say the core of science is methodological exploration. In that vein, I'd suggest to explore somewhat whimsical problems scientifically. For instance, if they got drunk one night and woke up in the middle of the woods somewhere without vision of buildings or anything, how would they react? (Assume there's no cell range) Or maybe methodological exploration of baking – how you'd design "experiments" to adjust a recipe for your specific ingredients, oven, cookware, etc.

    Also, I wouldn't completely give up hope of using some of the classics. It might be interesting to show them the history of science and how it has been affected by various things (printing press, libraries, cities, cars/planes, journals, internet, etc). It'd be interesting to ask them about how the present world would've affected Einstein? Would he have even made it into research? Would he have produced work faster/better due to the internet and google scholar/etc? Would his papers have been accepted or rejected?

    (Sorry for the wall of text, but it's an interesting idea)

  11. Matthew says:

    I really like this, perhaps because I think that as an student I would have enjoyed such a course a great deal.

    I once suggested that course work on a psychology stats intro course might include a program to generate a data set containing a particular effect, of a particular size etc etc. I felt that a successful program would demonstrate a proper understanding of distributions, effects and so on, and that learning programming would be useful to them. The general reaction amongst colleagues was that we shouldn't teach them something that would allow them to cheat on their research projects.


  12. Bob Carpenter says:

    The best introduction I've seen to R is the first part of a book aimed at teaching introductory simulation for all kinds of scientific problems:

    Owen Jones, Robert Maillardet, and Andrew Robinson. 2009.
    Introduction to Scientific Programming and Simulation using R. Chapman-Hall.

    I'd recommend it for anyone who wants to learn R. The bits beyond the intro to R are also very solid, which is unusual in this kind of high-level text. Joseph Hilbe, in his review for the Journal of Statistical Software also highly recommends it, concluding his review by describing it as "one of the most useful books I have read on the subject".

    The main obstacle I see with the Jones, Maillardet and Robinson's book is that it presupposes calc, which is way beyond American first-year general ed classes. It'd be more suitable as a second-year general ed class for science and engineering majors.

    When I was teaching a freshman cognitive science core curriculum class in humanities and social science at Carnegie Mellon, I replicated some well known experiments in class, data analysis and all. For some reason I still don't understand, it fell completely flat with the students. The students were surprisingly good writers, but they had a very hard time coming up with topics and reasoning through the scientific process, even though I went over half a dozen examples before every assignment.

  13. Julia Liu says:

    I am taking a Ph.D level course/seminar on Bayesian Statistics and Marketing by Prof. Greg Allenby from Ohio State University. The course is closely based his book with the same title. The format of the course is quite similiar to what you are suggesting. I am only 2 lectures into the whole thing (total of 12 lectures), based on the homework and projects, we are going to be doing a lot of simulating data according to some pre-specified model, development of R code to do estimation based on computational algorithm. I totally agree with you, doing those simulations and programming really helps me understand the material.

  14. Mark Palko says:


    There are open-source versions of MATLAB (Scilab for example), but if you really want to make this a core curriculum (which, I assume, would include humanities majors), I'd suggest going in a radically different direction and using an open-source version of Excel.

    1. Due to differences in aptitude and experience, a class based on something like Python runs the risk of having most of your students either overwhelmed or bored (even at Columbia I imagine that most of your theater majors have not mastered object-oriented programming). The experience gap would be much smaller with Excel

    2. With a smattering of visual basic for the macros, Excel should easily be able to handle everything you've suggested and then some.

    3. I've used Excel to teach high school students Monte Carlo techniques. It went well.

    4. Spreadsheets skills now fall into the general literacy category. Everybody needs to know.

  15. Mike Anderson says:

    Sounds like a fun course, but I'd be skeptical of calling it a SCIENCE course. Without a solid interaction with actual physical experiments, simulation is just "making $hit up."

  16. I think it's too ambitious to be done well, but still worth trying, perhaps as a 1 credit pass/fail requirement "lab" to the core science (and throw in social science simulations, too).

    For the science core, how about the basic science subjects with really great textbooks?

  17. Mark Palko makes a great point. And furthermore spreadsheet/visual basic simulations should probably start much earlier than 1st year of college as core curriculum.

  18. K? O'Rourke says:

    Mark: Would have some of those Excel spreadsheetsto teach high school students Monte Carlo techniques that you would be willing to share?

    I did a bit of this, but did not want to spend too much time putting together the Excel spreadsheets.


  19. Mark Palko says:

    I'd love to share but I'm not sure how many of those I kept personal copies of (it's been a few years) and I'm afraid they were pretty basic. This was Algebra II, after all and these kids had come into high school about a grade below level.

    Before we got to the statistics chapter, the students had used Excel for evaluating and graphing functions and had done some recursion for things like estimating e.

    For the stat chapter, we went to the computer lab a couple of times and each student set up worksheets to:

    demonstrate the central limit theorem (with multiple graphs to show how sample size affected the bell);

    confirm the formula for standard error;

    solve coin flip and dice problems.

    (I seem to recall a lesson using a Monte Carlo to estimate pi by picking random points in a square and seeing how many fall in an inscribed circle, but I'm not sure we actually got to it.)

    The students grasped the concepts and enjoyed the lessons but I didn't have time to go further.

    If you want more details, you can reach me at

  20. K? O'Rourke says:

    Mark: Would have some of those Excel spreadsheetsto teach high school students Monte Carlo techniques that you would be willing to share?

    I did a bit of this, but did not want to spend too much time putting together the Excel spreadsheets.


  21. Richie says:

    The Software Carpentry course ( is similar to what you suggest. It covers basic scientific computing skills, including Python programming.

    All the content is freely available and well written.

  22. Tom Fid says:

    There are a number of precedents for model-based courses, even in k-12 education ( I think it's a great idea.

    A few thoughts:

    – Modeling even simple things like a pendulum is complex for beginners. This is doubly true if there are discontinuities or discrete events (like the impact of a ball against a surface).

    – Excel is useful for its ubiquity, but it's a lousy modeling tool. There's no way to check units, and you're stuck with discrete time and the hassle of hand-coding integration across rows or columns. It's easy to make mistakes, and hard to audit them. Some of the same arguments apply to R and programming languages. A higher-level tool, like Vensim ( – disclaimer: I work for the co.), Mathematica, Matlab/Simulink, or a number of others would probably be a better choice.

    – A good way to start might be to identify a bunch of small but useful models, and have students play around with them to develop insights about the underlying problems represented. Then move to tinkering with the models – parameter experiments, minor modifications, etc. Once the ice is broken, turn them loose on progressively harder problems.

  23. Aleks Jakulin says:

    There has been an effort to develop a simulations-based approach to teaching sciences, CoLoS (Conceptual Learning of Science). One can get some materials via ColosWiki.

    Maybe worth learning from the experiences of that project, or using some of the many simulations that were developed then.

  24. Brad Venner says:

    A fun twist on this is to start with computer games, and move on to science simulation, as proposed by <a /> Alex Renpenning's <a>Scalable Game Design Initiative. This is particularly good for younger students. I'm attempting this with my 9 year old son using Renpenning's <a> AgentSheets tool.