## Numerate degree subjects should include exposure to a variety of computational software

In common with many higher educational establishments, the University I work for has site licenses for a wide variety of scientific software applications such as Labview, MATLAB, Mathematica, NAG, Maple and Mathcad– a great boon to students and researcher who study and work there. The computational education of a typical STEM undergraduate will include exposure to at least some of these systems along with traditional programming languages such as Java, C or Fortran and maybe even a little Excel when times are particularly bad!

Some argue that such exposure to multiple computational systems is a good thing while others argue that it leads to confusion and a ‘jack of all trades and master of none situation.’ Those who take the latter viewpoint tend to want to standardize on one system or other depending on personal preferences and expertise.

MATLAB, Python, Fortran and Mathematica are a few systems I’ve seen put forward over the years with the idea being that students will learn the basics of one system in their first few weeks and then the entire subject curriculum will be interwoven with these computational skills. In this way, students can use their computational skills as an aid to deeper subject understanding without getting bogged down with the technical details of several different computational systems. As you might expect, software vendors are extremely keen on this idea and will happily parachute in a few experts to help universities with curriculum development for free since this will possibly lead to their system being adopted.

Maybe we’ll end up with electrical engineers who’ve only ever seen Labview, mathematicians who’ve only ever used Maple, mechanical engineers who’ve only ever used MATLAB and economists who can only use Excel. While the computational framework(s) used to teach these subjects are less important than the teaching of the subject itself, I firmly believe that** part of a well-rounded, numerate education should include exposure to several computational systems** and such software mono-cultures should be avoided at all costs.

Part of the reason for writing this post is to ask what you think so comments are very welcome.

I think Universities should limit themselves to Standards / Open Source Software:

1. C / Java.

2. Python / R / Julia.

3. C++ / OpenCL.

That’s is…

This way will see a major speed up in the evolution of those tools (Especially Julia and Python).

“I firmly believe that part of a well-rounded, numerate education should include exposure to several computational systems”

Yes, yes and YES!

During my years as an undergrad at a Faculty of Statistics (mid 90s) I have been taught SAS and only SAS. R was not huge back then. I thought SAS was all I needed to master as a statistician and that “all the relevant routines were available in SAS”. Of course I couldn’t be blamed for this, I was a student and professors should have exposed students to several alternatives.

During my PhD I have been trained in a biomathematics research group who was pushing staff to use their own software package written in MATLAB. Therefore I have only used MATLAB for several years and the consequence was that I have been tied to it and has been very difficult (and stil somehow is) to force myself to use any other alternative software/language. I still feel quite ashamed for creating packages written in MATLAB as I am aware that a considerable chunk of people cannot use those for free (unless these are 100% compatible with, say, Octave).

So, yes, students need to know the existence of several computing franeworks. Need to use the major ones at least once during their studies so to create their own informed judgement. Preferably should not be forced to use a proprietary system. Should be taught the importance of using an open-source software and be able to look inside each line of code of a software implementation.

I agree. Multilingualism is said to have many cognitive advantages and this probably applies not only to natural languages, but also to programming languages/systems. Indeed it may be even more important for the latter, since it is much more likely that the students’ future work environments will have a variety of computational systems which may change relatively frequently. Learning to cope with that multiplicity is itself a useful skill that is better learnt in the more forgiving school environment than on the workplace.

On the other hand, one cannot spend all the school time learning twenty different computational systems. So there is a trade-off and the optimal strategy will vary across disciplines.

In some engineering fields it does seem that MATLAB is all they are ever going to use, so teach that and perhaps just add a sprinkling of one more system for mind-expanding purposes – either something close-to-the-metal like C/C++ or something more abstract like a functional programming language.

In economics there is no standard environment (my guess: Stata and Matlab dominate, followed by SAS; GAUSS and Fortran use has declined considerably; R and Python seem still quite rare; Mathematica and GAMS have (separate) niche followings; Excel is mostly for business students, but of course everyone uses it now and then), so multilingualism is much more important.

At my University we indeed got a course in Mathematica right from the start. Most later courses requiring a lot of computation indeed used Mathematica exclusively, with some exceptions where they stuck to their own language (C for large simulations, IDL for astronomy). Problems occurred for students following a Masters course, with a Bachelors from a different University, where they only taught Matlab and/or Origin. Of course with some help from other students, getting the technicality of syntax right wasn’t that much of a problem, but it does pose some sort of barrier.

Now I’m doing a PhD in physics, and I have become a regular user of Matlab and Labview as well. Luckily a lot of students in our group come from different Universities, so combined we cover most of the regular computational systems. Still I think it would have been nice to have received an introductory course during my Bachelors, as starting off from scratch by yourself can be time consuming.

I agree that it is good to be familiar with a number of different systems. Much more important, though, is understanding the underlying action of the computational system. So long as you understand what the underlying algorithms are (and what their limitations are!), I don’t think you’ll have trouble switching between systems. If, however, you think of it like a black box, then learning a new system will be much more difficult.

From a practical perspective, it takes a tremendous amount of time to acquire expertise in a sophisticated scientific software package. It’s not really an effective use of time to become an expert in all the different software packages that are out there. A good compromise, I think, is to be comfortable and familiar with a variety of different systems, but to devote time to becoming an expert in just one.

I’m lucky to have come from the other end of the spectrum. I’ve had a year each of C++, Java, .Net and Matlab for my engineering courses. That has helped greatly and I don’t think that the courses wasted too much time on teaching us languages.

Those who did pure engineering only learned Matlab and have huge difficulties understanding anything else. They also never learned good programming techniques, not even the simple ones like using functions. I would say that the students should go through first year computer science and that the language used there should not be Matlab/Mathematica/other proprietary software.

I may add that not only an exposure to a variety of computational software, but also to a variety of software engineering methods seems to be sorely lacking.

There’s been an interesting publication about it recently:

Jeffrey Carver, Dustin Heaton, Lorin Hochstein, Roscoe Bartlett, “Self-Perceptions about Software Engineering: A Survey of Scientists and Engineers,” Computing in Science and Engineering, vol. 15, no. 1, pp. 7-11, Jan.-Feb., 2013

URL:

http://www.computer.org/portal/web/computingnow/content?g=53319&type=article&urlTitle=self-perceptions-about-software-engineering:-a-survey-of-scientists-and-engineers

Math education must use software, no doubt. But it should dwell on the principles, provide overview and insight. The student has enough to do to grasp the basic mathematical ideas. So he shouldn’t be bothered with learning a complicate tool. Let the tools be simple and easy. This means a language like Java or Python, and a bit of a mathematical library, including ways to do graphs, should do. For statistics, add a short introduction to R.

Moreover, I would hesitate before I use the usual candidates. For example, Matlab is the wrong way to do things. One should work with open libraries instead and open languages, not be caught in a closed system. That’s the way science works. Second, why let Wolfram Math, SAS or MathWorks determine our curriculum? Let us try to start education, not a software class!

Of course, in my classes on numerical math and optimization, I include Euler Math Toolbox, but very sparsely. Just the very, very basics, which anybody can learn in a few hours. And I leave the option to use a programming language of own choice instead.