Teach/use Octave, SciLab or Python/Numpy?

4 minute read

Dr. John W. Eaton moved to ESI Group in Sept. 2017. The GNU Octave developer community is thinking of ways to improve the pace and structure of Octave development. It appears Octave development has been continuing just fine from a casual glance at the GNU Octave commit log, including ongoing numerous commits from John W. Eaton (jwe). It seems that GNU Octave is continuing to be a healthy project, but I think Python is in general a better choice for any kind of STEM research, development, deployment and education.

I have used GNU Octave throughout my career, for systems deployed in the field, lab research, and teaching. I have submitted accepted code pull requests to Octave. I use Octave to:

  • run Matlab code to determine if I want to port a function to Python
  • use Matlab function from Python with oct2py
  • limited teaching use, where time is pressing and student doesn’t know Python at all.

Choose Python

Why do I still recommend to almost anyone to use Python as a first choice over Octave? Any of these languages is a good choice for someone, or they would be relegated as a curiosity of past times, like Turbo Modula-2 or other in their time fantastic, but now more obscure languages. Sure Nissan used Maple for MBSE, but could most companies afford to retrain in Maple? Maybe Maplesoft would ask, can they afford not to?

Practically what happens is that we choose a “good enough” language. C is certainly a case of a language that is good enough. For people that feel otherwise, there’s C++/C# etc., which are also good enough. I have had people adamantly tell me that IDL 2.0 from the early 1980s is all that’s needed for geoscience work, likewise with Fortran 66. Well, indeed that’s true, because a lot of discoveries were made with such software. However, how much programmer time was wasted and how many missions lost due to ambiguous syntax and single namespaces?

What about beautiful new languages like Go, Haskell, Rust, Scala, Julia, etc.? For the class of work that I commonly do, what’s important is having a language that most other people are using so we can share results. The team might be building a radar or robot or satellite imager, and what’s being used in those domains is C, Matlab and Python. I want a data analysis language that can scale from Cortex-M0 to Raspberry Pi to supercomputer, since that’s the domain space I across. Yes, Matlab can use the Raspberry Pi as a target, works with software defined radio, etc. But will my collaborators have the “right” version of Matlab and the toolbox licenses to replicate my results? How can I debug 100 Raspberry Pi’s sitting out in a field? I need to use the GPIO, SDR, do machine learning processing and forward packets, perhaps using coroutines.

Since 2014, MicroPython has been rapidly growing in the number of MPU/SoC it supports. For just a few dollars, I get an IoT module with WiFi that runs full Python 3.4 including exception handling, coroutines, etc. with some Python 3.5 features. And it’s all open source, so I don’t need to worry about this and that license or the company folding. When it comes to my business of rapid prototyping, I can get the prototype SoC running remote sensing code passed to the cloud before the debate over which language to use for the backend is done.

In early stage efforts for companies of any size, needing to call in consultants can be frustrating as first you have to find the right one, and then you need up needing them when your prototype code is beyond what people on your team totally understand. Why not instead hire the consultant, have them get the prototype running in an afternoon, in a language you and just about any sort of technical person in the company already understand or at least have seen before? Do you want to have to pray that that intermittent C memory leak doesn’t bite you on demo day?

SciLab

As in math systems such as Sage, Scilab allows integrating multiple numerical systems together. However, Scilab is its own language–with convenient syntax, and a Matlab to Scilab converter. For my purposes and for many of my colleagues, we seek the lowest boundaries to cross-platform code sharing. SciLab is a bit like IDL, Mathematica and Maple: some people have heard of it, but few people have used it. I would not be surprised if SciLab has the least number of users of those four programs.

Python

Most analyses in remote sensing as well as geospace remote sensing (radar, optical, radio) use the Python & SciPy stack. This has been extremely stable and robust. Sometimes there are accidental corner cases experienced with Windows, which can be handled via Appveyor. For Mac/Linux continuous integration (auto self-test on each git push) I use Travis CI.

GNU Octave

GNU Octave allows running Matlab .m code without changes for many tasks. .m code that calls proprietary toolboxes or advanced functions may be need some try catch statements. Matlab is also widely used in remote sensing. From my own experience as well as what I hear from others, one of the biggest problems with Matlab is that your colleague may not have a sufficiently new Matlab version, or is lacking a paid toolbox.

Notes

  • J. W. Eaton homepage https://jweaton.org/

Leave a comment