I was asked this by a colleague after last week’s post on why astronomers have not taken to cloud computing. So I thought this week I would give my answer to this question. What I think astronomers need to learn as part of formal instruction is
- How a computer works and what limits its performance – when do I/O, memory, processing speed start to limit performance, and what a scientist can do about this
- Languages – at least one low level language, preferably C, and at least one scripting language; my choice would be Python. C is powerful – as it is close to machine language, it can perform bit-level manipulations, it is versatile, and a the best choice for many high performance apps. Python introduces astronomers to object-oriented coding as well as a powerful scripting language with an easy syntax. Armed with these two languages, it becomes easier to learn IDL , Java and many other languages.
- How to make code portable – Astronomers are much more likely nowadays to have to run their code on a remote computer, so they should learn how to develop portable code that is easy to maintain (component based design, avoid shared memory and avoid system calls…)
- Parallel programming. Astronomers will process larger and larger volumes of data in the future, so I think they should learn how to perform parallel processing – MPI, vectorizing code etc
- How relational databases work, their theoretical basis (set theory), and how to design relational tables
- Computing platforms – clusters, clouds, grids. What they are and when to use them.
Of course, in a few years, I might advocate different technologies, such as computing on mobile platforms, if that takes off in science.