In 2008, I started studying physics and got in contact with Linux, since a bunch of people used it for data analysis and simulations. Comprehension came fast and easy with such people around, and I was strongly encouraged to get things done with Linux. I installed Ubuntu on my notebook, and soon got familiar with Bash and the standard tools.
After some years I turned to theoretical physics. While I was writing my master’s thesis I gained access to a workstation running Scientific Linux, and a cluster system with a few hundred cores. I was impressed that each of my peers had implemented his own customized workflow, and that it was actually possible to work entirely with the keyboard, which is inconceivable for a Windows user. Using Linux on a daily basis luckily resulted in a steep learning curve. My task was to write a piece of software with the ability to determine material properties from video sequences, which we received from experimenters. I got it to work using C++, which handled image analysis and lots of math in a satisfactory amount of runtime, which was a critical factor. This project could have been done in Windows, but using Bash and powerful command line tools like MEncoder, convert, and AWK turned the development into a quick and efficient process.
I have been working on my PhD project for nearly three years using exclusively C++ and Bash. I enjoy the old C99 coding style without smart pointers, functionals and other stuff intended to make coding comfortable. Throughout my set of self-written tools I use libraries like the GNU Scientific Library, Cairo, OpenCV, OpenMP, and some more. Since I produce a lot of numeric data requiring heavy post-processing, I would be stranded without the Bash shell and its tools. For visualization I use gnuplot and Visual Molecular Dynamics (VMD), which are great and simple-to-use tools that save a lot of time.
Coding in Windows left me unsatisfied in understanding the mechanisms, which are hidden behind the standard system calls. Because I spent a lot of time condensing large data blocks into simple graphics, I became more interested in finding out what happens behind the scenes. This resulted in my own database project, which I worked on for about three years. Of course I know there are hundreds or thousands of existing projects, but I was interested in understanding it from the bottom up, and this is what Linux makes possible. It involved a lot of problems, which probably loads of people tackled before me, but I liked the challenge. Reading books like The Linux Programming Interface and Unix Domain Sockets inspired me to work out some simple concepts. This project helped me build useful experience, since in the future I would like to contribute to open source projects either by starting a new one or by joining another.