Semi-Automatic rifles are a favored weapon by mass shooters and terrorists. Let us look at the case for banning them.

I am a pragmatist. Whether semi-automatic rifles should be banned in your country or not depends, I think, on how frequent mass shootings and terrorist attacks happen and how important a role semi-automatic rifles play.

However, if you look at the US, they have been involved in pretty much every mass shooting in the US in the last years. One of the most favored semi-automatic rifles is the AR-15.

AR-15 style rifle. These come in many different configurations and styles.

To get a sense of how dangerous these guns are, consider this: In 2011 the right-wing terrorist Anders Behring Breivik blew up the government building in downtown Oslo, Norway where I…


Or maybe you don’t write Python, JavaScript or whatever, the way I butchered it in my writing. Here is a clarification.

One of the things I do in my writing is exploring different technologies and programming languages. I write about a lot of things I am not an expert in. I write about colonizing Venus.

Read more: Why Colonize Venus Instead of Mars

Does anyone seriously think I am a trained space engineer? I write about microprocessors architecture, stuff like pipelining, branch prediction, instruction decoding, you name it. Yet I am not a trained chip designer.

Read more: Why Pipeline a Microprocessor?

I am not your expert advisor on technical matters. I am a popularizer. I am a tourist in the…


A look at the apparent contradiction of following object-oriented principles leading to tight coupling.

Scott Meyers is a well known guy in the C++ developer community. He wrote a book called Effective C++, which is composed of items, which give specific advice on best practices in C++. Most of these I have forgotten and I no longer program in C++. Yet there is one item I believe has relevance to all object-oriented programming:

Effective C++ item 23: Prefer Non-member Non-friend Functions to Member Functions

In this story I want to talk about how this applies to my recent discussions of Java and Go programming. …


A comparison of the object-oriented approach used to construct Java programs with the simpler and more pragmatic Go approach.

In the world of Java, object-oriented programming reigns supreme, and you had better not dare suggest any other programming paradigms. This is not an asset, but a problem.

I am writing this story, because through various conversations with the Java crowd while discussing the merits of Go vs Java, I frequently see Java developers claiming that Java has “proper” object-oriented programming support and hence is superior for large scale development.

Well, I beg to differ. To make it clear, I think object-oriented programming has its place and I used it frequently. However, it is also one of the most overused…


The garbage collector papers over weaknesses in the design of Java.

Java has an impressive set of garbage collectors with high performance. However, when discussing alternative programming languages, I see all too often that the Java crowd will claim some sort of superiority because of the Java garbage collectors.

There are major flaws with this argument, which I would like to point out here. What is overlooked among the Java fans is that Java needs a high performance garbage collector, due to the design of the language.

Pointer heavy programming was popular in the 90s when Java was designed and garbage collection was a popular research topic. Thus there was a…


Respect is a two way street. If you want it, you got to show it to others. The point I made, which you have yet to answer is that rather than attacking me as a person, try to counter my arguments.

If you cannot be serious, I will simply delete your post. I will also ask you to write your responses in English as few readers of these stories are native Norwegian. I keep the comment fields here for people to add to the discussion.

As I said, this is an opinion piece, you can agree or disagree with the…


CODEX

Reflections of the challenges of creating abstractions in software engineering.

Recently I wrote about how modern programming languages have tried to peel away some of the abstractions of memory built in earlier times. This got me thinking about how we know what the right level of abstraction is.

Let us begin with programming languages. Allocating and freeing memory is a frequent source of bugs. From early on, then, automatic memory management was seen as the silver bullet that would solve a large class of problems.

Yet this created new kinds of problems. For example, garbage collected languages never managed to make much inroads into high performance computing, game engines, kernels…


Random assortment of lessons, insights and observations while exploring the Go programming language.

I am not new to Go, but took a long break from it doing other stuff. Getting back in, I am looking at earlier code I wrote and making mental notes of things that are easy to forget but which are important.

Comparing Arrays and Slices

You can compare arrays with the equality operator == but not slices. So this works:

var xs = [3]int{4, 2, 3}
var ys = [3]int{4, 2, 3}

if xs == ys {
fmt.Println("equal")
} else {
fmt.Println("different")
}

While this does not work:

var xs = []int{4, 2, 3} var ys = []int{4, 2, 3} if xs ==…

In software development, simplicity pays off as systems get large and you have to troubleshoot or understand them.

My story on Docker, Java, and Go spurred a number of discussions and there is one in particular that I think is worth elaborating. The software industry is full of different kinds of people with different preferences and that is fine. A large number of developers make their living writing large Java and C# systems. Understandably, many may not be happy about me often being quite negative about Java and C# development and my praise of languages such as Go.

One commenter, John Phillips, remarked that he had trouble understanding my preferences, instead making the following point:

And for programming…


If you are a leftist, you should be against open borders as it diminishes democracy and promotes hypercapitalism. Let me explain why.

Being in favor of open borders is a classic leftist point of view. In this regard I am the black sheep of the left. I very much believe in strong borders and I believe in the nation-state.

But how can I? Don’t borders divide people instead of uniting them? Don’t borders create wars? Aren’t borders racist? Isn’t it about keeping brown people out? If I support borders, I must hate Mexicans, right? I must be a Trumpist of some sort?

How Your Views are Shaped by the Size and Power of Your Nation

No, no, and more no. However, I will make a point that may come across as prejudiced, namely the belief…

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