I cannot tell you about Go and how I have been Gophing without sharing with you the background of Go. Allow me to share with you some lines based on my own words. So, some smart well-known guys ( my two first languages learned are Pascal & C – with deep focus on C) into the software industry while working at Google noticed a serious problem (I would say frustration) with current programming languages they are using into their work places – in terms of compiling time – code readability when dealing with debugging – ease of learning for beginners software engineers – productivity when needed to build new high scalable distributed systems – high performance networked systems etc. The people I am mentioning here are at least (the initial Go designers) : Robert G. , Rob Pike and Ken Thompson.
If you got curious at programming languages history you will not be surprised about the performance and beauty of, Go, because the authors / designers of Go have their traces & names there. Let’s me give you a quick idea – when looking at Golang syntax and features, it was also inspired from Pascal & C programming languages. Talking about C lets think about high performance, yeah believe we still using C widely for low-level high-performance systems nowadays, telecoms & networking devices are example of running millions of lines of C. But how C get into the authors story – In fact, Ken Thompson was the co-creator of C programming language. So, it is not surprising as well to have Golang using Curly-bracket syntax approach and providing the possibility to use Pointers. And, having Go compiler initially written into C, before moving to Go itself from version 1.5. Golang uses Unicode by default like C and on Unix system, which makes Go having a great support for characters and string manipulation & transformation. Not surprising, since Ken Thompson and Rob Pike created UTF-8 (which is one type of Unicode’s encoding system) and both have worked on Unix inside the Unix Team at Bell Labs. Obvious that Go performs nicely on Linux systems. Robert G. was involved into the famous V8 JavaScript engine (used into NodeJS and Google Chrome and CouchBase etc.) and co-worked with Robe Pike on a Google’s internal language for log processing.
Regarding the fact that Golang is compiled and strongly statically typed, this is obvious when you need to build hundreds of thousands or millions of lines of code for backend systems – the language itself should help you avoid some issues / errors and run fast with low overhead and with ease to move the executable file (so compact & smaller is better). In short, all these three authors (who works at Google) have deep experience into system programming and system languages design & implementation – which made Golang as a well-crafted modern language for system programming and good for general purpose programming as well.
Golang was designed and initially developed at Google and got open sourced. The most important points of the design goals have been targeting new engineers entering the company and needed to build concurrent highly scalable backend systems which works fast and fine. By saying beginners, it means, engineers with not too much experience at building complex and large-scale networked systems like they run at Google. So, C++ which is heavily used there for this kind of systems is not always easy for beginners to speed up and be quickly productive, which leads to have the idea of designing a beautify and simple and built-in easy concurrency and networking features to allow the beginners to become great doers at building distributed platforms which work fine and fast at scale. At the same, time making the programming fun / lovely 😊
Golang has been used into many great products (commercial or open source) and companies : like Docker, Kubernetes, Uber, Twitch, Dropbox, DailyMotion, Google itself, and all my backend platforms as well owadays, with the adoption of micro-services, do not expect always view big product using a single programing language for all services. Golang could be used for some services and other languages for others. Of course, this is one of the advantages provided by microservices architecture/mindset. Finally, recently the great creator of Vagrant himself twitted that they are porting Vagrant to Golang -
https://www.hashicorp.com/blog/toward-vagrant-3-0
Now back to Me & Golang – What have we been doing in our couple ?
So, we saw how Go is beautiful and nice by design. Which makes us to provide less effort to beautify our code and write efficient and elegant code at the same time. Just to mention that I did not get wrong to get into marriage with Golang – I will tell you why into the next lines of this article.
Before, allow me to share with you where I come from. I am a natively Telecoms engineer, and I got my Telecommunications engineering degree from Polytechnical School of my country – which is one of the references into West Africa. In overall, I have been very excellent into my school program with many awards and recognition. Mathematics and science and mechanics have been my stuff and comfortable area during all my studies – so you start to understand why working on challenging technical things and having fun at coding have always been my stuff. At school, we started by learning programming – algorithms mainly and get tested at writing algorithms based on a problem. I was very strong at it, and I really loved it. Then we practiced on Turbo Pascal, I am still remembering how I was excited when started to implement my algorithms (solving 2nd degree equation, matrix computation, arrays sorting and comparison, strings processing etc.) on Turbo Pascal. Most of the programs we have been writing were targeting mathematics and science aspects. Then during engineering, we get deeper at data structures and learned C programming and Java SE and Web frontend stack and SQL (with database modeling).
Personally, due to the fact I was good at Java SE, I decided to learn and practice Java EE for Web-based backend and C# followed by WPF for Rich Desktop applications and others scripting languages (Batch, Bash, VBS etc.). I was deeply getting into these languages since I loved build things – I am a doer. You may ask why digging into Coding while being into Telecoms engineering field. In fact, our program has been designed greatly like that and I am one of the people who believe that as a Network engineer, if you are strong at Coding, you will be the right person for building networked systems – like Web backends (since HTTP is part of Application layer of TCP/IP) and Microservices and Distributed systems in general – your understanding of how the Networking infrastructure works for the the applications data transport, will be really important and helpful for you to craft better distributed backend platforms and more.
We can work as networking engineers and as software engineers – with great performance and flexibility by leverage both area of competences when design a system either software-based or network-based. Later, I learned Python and started to build things with. With my Java background, decided to speed up on Android development and build things with as well.
With Golang – it started since 2016. I have designed and build my chat application (both console-based client and backend) into Python, using socket and multi-threading programming features. As I said I have networking background – so those things are my stuff. I built some tools into Python and my own Quiz platform. Next, I decided to build my own website for blogging – so this one. But I was looking for language which compiles and provide high speed of execution with ease of concurrency for all my upcoming software products I am planning to build. This is where and I discovered Google’s language named Golang.
I quickly get to their official docs website - https://golang.org/doc/ and started to learn the syntax and what it provides as basics (the five fundamentals of programming – Commands, Variables, Iterations, Branching, Functions), then looking at what its provides for building Webapp and socket-based tools and how it deals with concurrency and threads (which is called goroutines – which is much more lightweight) synchronization. One day was enough for me to get into and started to craft my website. I noticed how easy and powerful and elegant is the language. I searched for most popular web frameworks to facilitate the coding of my website – and I’ve chosen Gorilla, which is documented here.
https://www.gorillatoolkit.org/
I automatically started to re-write my chat and quiz platforms backend into Golang. I created a new project of building my own management backend platform which pure socket based into Golang. This platform is used to control remotely all my backend systems. Finally, I started coding my own blog into Golang which is connected to a MongoDB database and uses go templating engine for web pages generation. So, let me tell you that this article you are reading was generated and formatted and pushed to your browser by Golang. After I started to advocate for Golang usage, since I noticed that many people don’t know it or don’t know how to start into it. Maybe it was easy for me because, I had a background into C and Java and C# before – but it is simple to ramp up on Golang. While discussing with some backend developers friends, who are doing only Java, as soon as I explained them Golang – they fall into love and give a try. I use Golang into all companies I have been working for side projects or volunteering internal projects – sometimes, I meet some people willing to grow into Golang as well which is great. Golang has been the de-facto backend language for all my backends. Of course, I am still learning few new such Rust and Elixir. It is not bad to have several strings to your bow 😊