Go, How it Started
The transition from C to Go is not en easy step to make for a low-level hardcore embedded programmer. Being in the software industry since the late eighties, I have seen many promising developments come and go. Programming languages were replaced by better–or at least other–versions and the world around me jumped frequently on another bandwagon.
I have always been conservative in my development environment choices. Not because I don’t like change, but because the environments in which I program often do not give much choice. When programming close to the hardware level on systems ranging from small micro-controllers to multi-core servers, the choice is practically limited to C. For that reason, C has been the main programming language for my projects since the eighties.
C, although dated and procedural, fits most needs, and produces fast en small code. But modern development requires more than that. As systems grow larger, maintenance is important, and so is a modular design and parallel execution. Modular design is possible with C, but it is a programmer’s choice, rather than a design feature of the programming language. Most development I do is using multiple parallel processes. Fast small tasks for time-critical work, larger worker processes for data crunching and low priority work. C is simply not designed for it. With libraries for semaphores, threads, inter-process events and queues it is possible to get it working, but under the hood it is practically just a mess.
The programming language Ada should fix all those problems. A modern, fast, object oriented language with multi-process design built-in. I did some projects in it but the language was never fully accepted in the industry and it has effectively died. Even though it is the best designed programming language I have ever worked in.
But now, a new bright star is shining on the horizon. The Go language, developed by Robert Griesemer, Rob Pike and Ken Thompson to become effectively the new general purpose programming language. With Go being en efficient language with broad availability of tools and libraries, even for micro-controllers, I have decided to give it a go (no pun intended).
These pages will be a guide for the transition from the relatively simple and clean C language to the modern language Go. It is not a tutorial for the novice programmer. There are better resources if you are just beginning, like the official Go language website. But if you want to know some secrets how to fix real-world problems in Go, read-on. There might be a bit of two of information which be helpful.
The organization of any bureaucracy is very much like a septic tank: the really big chunks always rise to the top.