The Computational Science Survival Guide

Free science with open source software

The CSSG Swiss Army Knife

Cutting-edge science can be done with open source software that can be freely used, changed, and shared by anyone. My experience is that almost everything can be done with only these four tools:

             Python   /   Prototyping, post-processing, and data visualization
             C/C++   /   Low level programming and high performance computing
             Git   /   Code management and development notebook
             SSH   /   Secure access to remote computers and data transfer

There are situations where you need to use commercial packages, e.g., because your collaborators use them, or because the method you need would take you months to implement. But with the suggested tools, you will be able to build and run custom programs with methods you understand very well, to compare and make sure everything is right.

Python

Python provides a complete programming solution for research and scientific coding. It is open source, scalable, well-supported, and runs natively on the major platforms (Windows, OS X, and Linux). It is similar to Matlab: not as good for certain aspects, better for some others [1]. With libraries like SciPy and Matplotlib, there is not much you can't do with it. There are also specialized software - like Pymol, Mayavi, VisIt, and ParaView - that offer application programming interfaces (API) for control within Python scripts. Why not giving a try to the Quantum Toolbox? Even more numeric and scientific packages here, help yourself!

[1] 10 Reasons Python Rocks for Research (And a Few Reasons it Doesn’t)

C/C++

C is one of the oldest and most popular programming languages. It is powerful, fast, and available on all platforms. The C syntax and style inspired the creators of other programming languages like Perl, Java, and JavaScript. Learning C as a first language makes learning other languages easier [2]. C++ is an object oriented version of C. It offers more flexibility with features like function overloading, data abstraction, and templates.

C/C++ is the most widely used computer language. With it, it is possible to build stable and efficient programs to solve the most demanding numerical problems. And there is a vast collection of free and open source software, resources, and libraries that can be hacked, tweaked, and adapted to almost every need.

[2] Top 10 Programming Languages to Learn in 2014

Git

When it comes to code development, using a version control system (VCS) is good. Essentially, it keeps track of the evolution of the piece of software you are working on so hard. It both acts as a time machine and a backup system. There exists several VCS options, but Git is a safe bet [3]. As a bonus, it gives you access to the world's largest open source community. The learning curve is steep for some, not so much for others, but in the end Git makes your life easier.

[3] Why Git is Better

SSH

Secure Shell (SSH) is a network protocol for secure, encrypted, communications between computers. In particular, it is used for data transfer, remote access, remote command execution, and setting proxy server connections. For someone involved in computational science, it allows to connect to remote computers to extend storage capacity and computational power, wherever you are, no matter how fast your personal computer is. Open source implementations like OpenSSH are available on all platforms. Imagine controlling multi-million-dollar supercomputers with your smart phone [4]! That's only one of the things you can do with SSH.

[4] Easily make an SSH connection from your Android device