This week we welcome Robert Cimrman as our PyDev of the Week! Robert is the project leader of Sfepy: Simple Finite Elements in Python package. He is also a contributor to NumPy and SciPy. You can see some the projects he works on over on Github. Let’s take a few moments to get to know him better!
Can you tell us a little about yourself (hobbies, education, etc):
I studied applied math (numerical methods and parallel processes) for my master’s degree and then switched to biomechanics for my PhD (topic: mathematical modeling of biological tissues). Besides working with computers, I like music (the harder the better), reading various stuff (from physics/science to science-fiction to fantasy) and skiing/hiking in mountains.
Why did you start using Python?
I have seen an article about Python on an OSS-related server (root.cz, https://www.root.cz/clanky/nebojte-se-hroznyse/ in Czech) that got my attention – at that time (year 2000) I was mainly working with C, so a language with a nicely readable syntax that had linked lists and hash tables out-of-the-box and required no manual memory management really seemed interesting. Some years later I started a real project in Python and that turned later into SfePy. At the time the scientific Python ecosystem was at its infancy, so from time to time I needed to “scratch an itch” and contributed to projects like NumPy (arraysetops) and SciPy (various stuff, mostly related to sparse matrices).
What other programming languages do you know and which is your favorite?
I know C quite well, although I do not use it regularly anymore. Many years ago, I worked a bit with C++ but did not come to like it. Even earlier I really enjoyed programming in assembler and various basics on an Atari 520 ST machine that I still have around.
Nowadays I work almost exclusively in Python and I still like it after the many years. From time to time I am enticed by functional languages (now Clojure) – I would like to learn one properly when I have time (well…). So it came to that lately I have started using more and more functional features in my Python codes.
What projects are you working on now?
As part of my job, I am developing the SfePy package (Simple Finite Elements in Python) – I am working with two groups of people that use it in quite different contexts (multiscale modeling using the theory of homogenization and ab-initio quantum mechanical calculations). Simultaneously I am developing a number of research codes related to my work on those projects, but those are not public (no proper docs for general audience etc.).
Then I have a number of little projects that are on github, but of general interest is just the scikit-umfpack wrapper package that I maintain (hoping that the umfpack solver will be available in scikit-sparse one day).
Which Python libraries are your favorite (core or 3rd party)?
I am using NumPy, SciPy and Matplotlib all the time, so definitely those. IPython and related projects are great for interactive work. I also enjoy using sympy and cython. From Python core, I started to like itertools, functools and other modules that support the functional style of code writing. Finally, in big letters on my virtual “look at” list, are Dask and Numba for speed-up, and Theano mostly for automatic differentiation features.
What was your motivation for creating the SfePy package?
During my PhD studies I was supposed to model mathematically some complex biological tissues such as muscles or bones. The equations were not supported in the available commercial finite element codes, so I coded that in C. It worked reasonably well, except at times when I needed to accommodate a feature I had not anticipated – the refactoring was not very pleasant. Later, while coding up a human heart model during a post-doc stay at INRIA Rocquencourt in France, I was using a mix of matlab (for the code logic) and C (for the actual work), and that was much better, but matlab as a programming language not so. And I was already aware of a quite nice language, and there was even some numerical array support. So, basically, I created SfePy for being able to drive my old C functions without the need of matlab.
What are the top three things that you have learned while maintaining this project?
- Try to streamline and document the maintaining tasks as much as possible, so that things like releases do not take too much time/mental power.
- Using tools like git, github, Travis CI etc. is essential.
- Do not reinvent the wheel (too much – it is OK for learning).
Is there anything else you’d like to say?
Thanks to all package developers and maintainers for making their work available!
Also, lately some opportunities/initiatives appeared to enable software developers to present their work and get some credit in terms of citations etc. This is IMHO a very important issue – I am also one of those who is not paid to actually develop and maintain an open source software, but to create and publish scientific results. The latter would not be without the former, but the time invested into the software is often missing in the publication activity.
Thanks so much for doing the interview!