A Julia developer returns to Golang

Image for post
Image for post

I did a bunch of Go programming the past and even held conference talks on Go. But I have been away from Go for a while and did both Swift and Julia programming in the meantime.

Fortunately Go has stayed remarkably stable as a language since I first picked it up, so I don’t have to learn a lot of new things. Rather it is more about a fresh up. The key new thing for me to learn are Go modules as well as familiarizing myself with the tooling around the language. …


People always say it is good if company X does better, because it brings more competition. And competition is good right?

One of the most annoying truthism I hear people pander, is this idea that competition is always good. Specifically this comes up often when a dominant company which has held back the market for years slips and the little guy gets some time in the sunlight. This could be AMD beating Intel for a change. It could be ARM beating x86.

It could be Tesla beating General Motors. Or it could be SpaceX beating United Launch Alliance. …


With automatic garbage collection, is Go really suitable as a systems programming language?

Image for post
Image for post

A topic that arise from time to time is whether Go is a systems programming language. The creators of Go has characterized it as such but many object to that label.

With automatic garbage collection it does not seem to fit the bill. You would not want to write an operating system kernel e.g. with a language using a garbage collector.

However it helps to clarify by looking at wikipedia definition of systems programming:

Systems programming, or system programming, is the activity of programming computer system software.

The primary distinguishing characteristic of systems programming when compared to application programming is…


Few things are linear. Double compile times does not necessarily mean you double the amount of useful stuff done. Usually there is a case of diminishing returns.

Rust seems to have gone to extremes to squeeze tiny amounts of performance in exchange for massive increases in build times.

I don't know the current state, but for years Rust build times was significantly worse than C++. In my humble opinion, that is simply an epic failure.

People talk about the million dollar mistake of having null pointers. Well having C++ style compilation times is in my humble opinion a million dollar…


Writing graphical user interfaces that work across multiple platforms is notoriously hard or complex. What can we do?

Image for post
Image for post

Lots of ways exist today for writing cross platform GUI software. You could use web technologies, Qt, Godot and many other technologies.

Yet none of the solution are all that great. I have used Qt for many years which is quite well made for C++ GUI development. Yet it is a large installation and creating bindings for other languages is less than ideal thanks to it being made in C++ which has no stable well defined binary interface.

Nor does it ever really look good on all platforms. E.g. Qt will use native drawing function to draw things like buttons…


Some reflections on how a game engine made for beginners should look.

Image for post
Image for post
Visual coding of a game in Scratch. A beginner friendly tool, but which is hard to advance coding skills with.

The desire to program games was what got me into programming in the first place. I have probably been programming for some 30 years at this point and having children on my own. Today this makes me reflect upon how to teach programming to the next generation.

The Challenge of Learning Programming Today

While we have more amazing tools, hardware and resources available than ever before, it does present new and unique challenges.

Computer hardware today is exceptionally complicated compared to Commodore 64, Amiga and PCs with DOS that I grew up with. …


Comparing how Julia and Go deal with dependencies to other code

Image for post
Image for post
Gopher image by Ashley McNamara CC BY-NC-SA 4.0

Julia and Go are a fun exercise in how terminology can get really confusing. In Julia and Go, the package and module concepts have basically been swapped.

The Go documentation defines a module as:

A module is a collection of packages that are released, versioned, and distributed together. Modules may be downloaded directly from version control repositories or from module proxy servers.

This is pretty much the reverse of Julia. In Julia a package is what get distributed and version controlled. A package however may contain multiple modules.

In Julia modules exist at the language level providing a namespace for…


A friendly explanation of how Kakoune is configured.

Image for post
Image for post

Most likely you read this because you have some idea of what the Kakoune editor already is. If you don’t you can think of Kakoune as Vim for dummies. Yes, I include myself in that category. I have what amounts to goldfish memory when it comes to remembering tons of commands in advance coding editors.

Read more: Kakoune, the Text Editor I Didn’t Know I Needed.

I quite like the whole concept of Vim, but I can never quite get used to it. Instead I prefer to use more GUI oriented editors such as TextMate and VSCode. However there are…


Reflections on the advantages of a TDD and REPL based approach to software development

Image for post
Image for post
REPL-Driven development is all about moving fast with rapid iterations towards the goal.

Few things gets software developers as passionate as discussions about best engineering practices. Should you do test-driven development, behavior driven development or even REPL driven development?

While I am quite opinionated on software development, I don’t want to claim there is one right true path. The style of development that will work best for you depends both on your traits, the language you use and the problem you are trying to solve.

Here I will try to make the case for REPL-driven development over TDD, based on my experiences. …


We tend to treat programming as a science or engineering. But is that all that it is?

Image for post
Image for post

A computer program is a recipe of steps to perform. Together these steps should solve a problem or perform a task. This seems very different from making a painting where there is seemingly no rule that has to be followed. What is a compile error on a painting?

Yet to the pedantic who gets too hung up on the concrete, it is hard to see any relation: Painting is an art and programming is an engineering discipline.

By now you may wonder why I am making the comparison between painting and programing. …

Erik Engheim

Geek dad, living in Oslo, Norway with passion for UX, Julia programming, science, teaching, reading and writing.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store