AusOcean's mission is to help our oceans through the use of technology. One way we're achieving that is with software, and "open-source software" in particular. If you're not familiar with the term, there is a good Wikipedia article. In a nutshell, open-source software right holders grant others the rights to study, change, and distribute the software with few restrictions. Using open-source software means we don't have to re-invent the proverbial wheel all the time. We also need to develop new software, which AusOcean is making available under a type of open-source license known as the GNU General Public License (GPL).
The question I pondered early on was "which programming language to use at AusOcean?" Over the years I've worked in over a dozen different programming languages, going as far back as BASIC, FORTRAN and COBOL to more modern languages such as C++, Java and Python. All of them have their pros and cons, although with some the cons considerably outweigh the pros. Developing new software is still a relatively expensive, time-consuming process, and the choice of programming language can make a big difference when it comes to productivity. On top of that, the software that AusOcean is developing will eventually evolve into a giant distributed system, and such systems have a tendency to become complex.
This brings me to "Go", a new programming language created in 2007. Its chief architects, Robert Griesemer, Ken Thompson and Rob Pike, all work at Google and are quoted as saying [they] "started off with the idea that all three of us had to be talked into every feature in the language." Go is a compiled, statically typed language, but it comes with conveniences such as garbage collection and some memory safety features, plus support for concurrent programming. The authors' motivation was to make it much easier to work on large programs (the norm at Google) through these and other features such as fast dependency analysis. Equally important, Go is a small language, meaning that it is easy to learn - although becoming expert in the language's idioms naturally takes longer.
I confess that I'm very new to Go, having written my first serious Go program less than a year ago, but I believe that it is an excellent language choice, especially for distributed systems. AusOcean has therefore standardized on Go for all of our software development (although we use a little bit of Python and C++ for projects developed by others.)
All of our software is available from bitbucket.org/ausocean. Our three main repositories are:
- ausocean/iot: Internet of Things (IoT) software (Go, C++ and Python)
- ausocean/av: audio-visual software (mostly Go)
- ausocean/ocscigo: ocean science go (pronounced “oxy-go”, mostly Go)
The latter is brand new and mostly empty, so watch this space!
Finally, if you're a software developer and interested in volunteering, please reach out.