My History in programming pt1: Meteorology
Published: 2021-04-03 02:04:54

For my first post in Dev.to, I chose to tell a bit of my history with computer programming. This idea came when I read this article on Medium, [Quality Engineer Learning Roadmap](https://link.medium.com/kd5EYWjleeb), I came up with the idea of ​​sharing my trajectory in programming. Before I enter the software quality world, I was in the academic scientific area: I have a Bachelor's Degree in Meteorology and a Master's Degree in Civil Engineering with an emphasis on Earth Environment. I also have an incomplete PhD in the same engineering.

Programming has always been present in my routine. From approximately 2005, I started my studies in mathematical and meteorological models. Since I already knew in advance that I wanted this area of ​​expertise, I started studying programming from the beginning of college.

Many people think that Meteorology and Programming is unrelated. I realized this in several interviews after I "became" QA, where they said "wow, but why did you move to such a different area?"

I am going to divide this story into two parts: before, when I was in Meteorology, and after I entered computer science and, consequently, software testing 

Here are the languages ​​I used before I started software testing.

1. Fortran
2. Maple e Maxima
3. GrADS
4. MATLAB e Octave
5. Shell Script
6. C

# Fortran

In 2001 I started my (under)graduation in Physics at Universidade Federal Fluminense (UFF), and we had programming in the first period. [Fortran (Formula Translator)](https://pt.wikipedia.org/wiki/Fortran) was the language taught.

At the time, for me, algorithm was something complicated, even more using pencil and paper. I only passed the exam because it was in pairs, and my pair took the exam….

Later (2002) I became more fluent in Fortran, after I switched to the Meteorology course at the Federal University of Rio de Janeiro (UFRJ), as many meteorological models are written in this language and it is widely used in the engineering of the university.

Fortran is a compiled language, used almost exclusively for mathematical calculations. To that end, I think there is no better language (nor Python!), even today. Its performance compares to C.

You will not be able to make buttons or any type of interaction other than from the command line. The inputs and outputs will be text files. Manipulating strings with Fortran is also complicated (at least for me it was ...)

Fortran is still used a lot. Its last update was in 2008, but I stopped at the Fortran 90/95.

If anyone is curious, the [WRF (Weather Research and Forecasting)](https://www.mmm.ucar.edu/weather-research-and-forecasting-model) model has a [repository on GitHub](https://github.com/wrf-model/WRF).


# Maple and Maxima

Also in the first period, in Calculus I, the professor give some homeworkoks in which we had to use a [CAS (Computer Algebra System)](https://pt.wikipedia.org/wiki/Sistema_alg%C3%A9brico_computacional) to draw graphs and calculate some series and integrals. The software he asked for was [Maple](https://www.maplesoft.com/).

A CAS is used, among others, to make symbolic calculations analytically, that is, to manipulate expressions and equations just as you do(did) with paper and pencil.

Even after Calculus I, I continued to use the software to study the other calculations and disciplines of mathematics. Many of them I only passed because of it.

Then I discovered [Maxima](https://maxima.sourceforge.io/pt/index.html), an open source version of Maple, which I started using until I left university. It was essential in some disciplines in the master's degree.


# GrADS

[GrADS (Grid Analysis and Display System)](http://cola.gmu.edu/grads/) is a program for visualizing earth science data.

Widely used in meteorology, it has Fortran-based syntax and built-in functions. It also allows you to generate buttons, graphics and interactions with the mouse.

Python currently has an extension called [GradsPy](http://cola.gmu.edu/grads/gadoc/python.html).

I didn't use GrADS much, just in specific academic works.


# MATLAB and Octave

In some disciplines and meteorological events, I heard professors talking about [MATLAB (MATrix LABoratory)](https://www.mathworks.com/products/matlab.html). Already predicting that one day I would need to use it, I downloaded the program and started to learn. I used it constantly from the middle of (under)graduation more or less.

Then I discovered [Octave](https://www.gnu.org/software/octave/index), the open source version of MATLAB. As it is almost fully compatible with MATLAB, I immediately replaced it with Octave.

There's no better way to manipulate matrices and tables! Building graphs from data with them is also very easy, leaving Excel far behind! In addition, depending on the amount of data, Excel crashes….

I got to play around with MATLAB / Octave for image processing as well. As an image is a matrix, they are great for that.


# Shell Script

In Meteorology, Linux is widely used, but was only at the end of 2007, when I was doing my CBT, that the decision came, in the following year, to abandon Windows for good and use Linux.

This decision came because I had to make dozens of different graphics, and I had to make them one by one in my hand. I used the [Origin](https://www.originlab.com/) software.

Now imagine that your dozens of graphics, beautiful on the screen, had to look beautiful in black and white printing as well. The number of times I had to redo the graphics ...

As I already had command line knowledge, I started my master's degree exclusively with Linux. Then I started to learn Shell Script.

I made simple scripts, but the necessary to automate repetitive tasks or that demanded many steps.


# C

During the master's degree I felt the need to learn more about programming and computer science, to apply it to meteorological models.

I asked for re-entry to [Computer Science](https://www.dcc.ufrj.br/), at UFRJ, and the Programming I class was taught with C. 

Learning this language opened my mind to a number of possibilities. In addition, several other languages have their C-based syntax, which made it much easier for me to learn them later.

The final project of the article was to remake the [Canabalt](http://canabalt.com/) game, using the [SDL](https://www.libsdl.org/) library. Good thing it was optional, because I couldn't do it ... but it gave me a good idea of how to program event oriented.

The C structures also helped me to program better in Fortran.

Later C helped me with a satellite image processing program, SOP.


# Miscellaneous

Since learning C was at the beginning of my doctorate, I spent the next 4 years mixing languages in my daily life. I used what I found easier and more efficient for the task. For example:



*   With C, I downloaded data and assembled text files that would serve as input for the meteorological model. [This code is on my GitHub](https://github.com/rodmatola/getmetar-wunderground) (note: it doesn't work anymore ...);
*   The meteorological model, in Fortran, performed the necessary calculations and assembled the output file with the results;
*   Fortran's output was Octave's input, which did some extra calculations and draw the graphs for interpretation;
*   All of this was orchestrated by a Shell script.

As you can see, I already dealing with automation processes before becoming QA!

Here ends my saga with programming before I start working with software development and quality assurance. In the next post I will tell my journey after I changed to computer science. See ya in next post!

# Text subject links

*   [Fortran](https://pt.wikipedia.org/wiki/Fortran)
*   [WRF (Weather Research and Forecasting)](https://www.mmm.ucar.edu/weather-research-and-forecasting-model). [Repositório no GitHub](https://github.com/wrf-model/WRF)
*   [O que é um CAS (Computer Algebra System)](https://pt.wikipedia.org/wiki/Sistema_alg%C3%A9brico_computacional)
*   [Maple](https://www.maplesoft.com/)
*   [Maxima](https://maxima.sourceforge.io/pt/index.html)
*   [GrADS](http://cola.gmu.edu/grads/)
*   [MATLAB (MATrix LABoratory)](https://www.mathworks.com/products/matlab.html)
*   [Octave](https://www.gnu.org/software/octave/index)
*   [Origin](https://www.originlab.com/)
*   [Canabalt](http://canabalt.com/)
*   [SDL](https://www.libsdl.org/)