Recently I have been doing a course on Domain Driven Design (DDD). This made me make some reflections on how DDD related to other technologies that I know.
DDD is not like say object-oriented design or functional programming. Rather it is more about a way of dealing with data which needs to be made persistent. It is a natural companion to object-oriented programming, but exist at a higher level.
Yes, I know this sounds like a click bait title. How dare I come with such a controversial and radical claim that Java and C# is obsolete?
Before jumping to the comment field and calling me a clueless idiot, let me clarify what I mean by “obsolete” in this case. Something being obsolete doesn’t necessarily mean it isn’t used or important anymore. I think it is fair to call COBOL obsolete as a programming language. It is no longer needed to solve specific problems we have. However that does not mean we can shut down every system running COBOL or…
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. …
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. …
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…
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…
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.
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. …
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…
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.
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…
Geek dad, living in Oslo, Norway with passion for UX, Julia programming, science, teaching, reading and writing.