Maciej Mróz Personal Blog

Because why not

Oct 25, 2022 - 6 minute read

A very long break

It’s suprising even to myself how long was the break between posts on this site. It’s almost as if it got completely abandoned. In a sense, it was. Had a lot things on my plate in past two or three years. Most notable events: got married, changed my job twice, went through COVID, got a dog, moved to new apartment, started to appreciate physical activity, got my diet somewhat in control … and counting. On top of that you usual stuff like evolving interests, hobbies, social circles, and massive changes to the world around us (not all of them good but that’s not really the topic of this post).

I took the opportunity to clean up this blog from some old/outdated stuff. Some things I was very right about, some things I was very wrong on - this is what happens when you speculate. Not much value in keeping that content here, so it’s removed. It is somewhere in Git version history, so still accessible with some limited effort ;)

What happens now? Not promising to be a regular poster from now or anything but … I may have some interesting stuff to say in future. Besides, I feel that I need to practice writing a bit, I got very rusty at that. Maybe not so much about game industry, which is no longer my career (at least for now ;) ), but definitely about programming and perhaps some wider technology topics. I still do software engineering (with focus on backends), after all. Leaving game development industry was a huge step for me, but in the right direction. As a side effect, I truly enjoy playing games again (and PS5 is totally awesome ;) ). I may not be capable of not deconstructing specific game design, so perhaps I will never enjoy games in the sense of pure joy experienced by children, but I find playing many games to be enjoyable experience now. Is this step outside game industry just a break or permanent shift? Hard to say, I have a lot of great memories and know-how related to making games, so … never say never!

Quite some time ago I have written about my interest in Scala language - I actually followed up on that (yay!!!) and shifted to full time professional Scala development. If feels great. Regardless of Scala being “the answer” or not, I just happen to like functional programming. Once things start “clicking” it’s really hard to go back to old world of mutable data, eager evaluation, and lack of referential transparency ;) Yes, it’s not the fastest language around (abstractions do come at a price), but comes with insane power that really matters when working on complex systems. One thing I surely intend to at least try out is Scala 3.x, which looks like a pretty big evolutionary step for the language, although not without some migration pains. Might take a while for it to be a default for new Scala projects but situation looks to be much better than in case of Python 2.x to 3.x transition. Recent “poison pill” to Akka is a pity because Akka Typed combined with Scala 3 would have been great. Ah well, there’s still a choice between Typelevel and ZIO.

One language I did not write yet about, here or elsewhere, is Rust. Obviously, being an ex-C++ developer, it’s impossible to not at least take a look at it. Idea of proving certain properties at compile time, and having strict runtime checks for other things is very, very different from everything that we’ve seen in programming languages so far (at least in mainstream PLs). We ended up with alternative solution to problems that are usually solved by things like garbage collector and immutable data structures. What is intriguing about this approach is that is comes without or with very low the runtime cost, putting Rust directly against C++. I still have to write at least a toy project in Rust to have a stronger opinion and for that I need project where performance part is really critical. All I can say now is that Rust is likely to take over many spots where normally one would consider using C++. This transition will take significant time for existing projects, as there are many 1M+ LOC codebases out there that will be maintained as long as it makes business sense (which can be very, very long) but for new projects I’d say critical mass has already been reached.

Other things? In the area of programming languages, being interested in functional programming means touching more than Scala. I have some interest in Haskell, but I see low likelyhood this will ever change into commercial interest. Maybe some proof of concept kind of work, maybe exploration of some FP techniques in “purer” language? Most of the time I just write purely functional Scala (both privately and for a living) with Cats/Cats Effect. Not sure I have any actual use case for Haskell where Scala wouldn’t do just as good. Again, we’ll see, it is very interesting language. Highly focused on academia, but there are commercial projects created in Haskell.

On the other end of spectrum there’s Go, which has some great ideas behind it, but at the same time feels like C with garbage collector. I can understand why it’s gaining a lot of popularity: it’s extremely easy to learn, has great tooling, it has fast compiler and produces exectutables are actually very fast, has nice concurrency primitives built-in … It’s a different philosophy that wins a lot people and teams. I’d say that right now I appreciate Go and I am not a big fan of it, both at the same time ;) There are scenarios where I would consider it to be at least very good, maybe even great choice.

On software operations side, for better or worse, Kubernetes has become de facto standard for any larger system. I feel much more dev- than -ops so it’s more an observation that a direction of professional development. I know for a fact that many people are just fine running normal system services or using something like Docker Compose, seen actual businesses making very serious money (ARR in millions of $’s) without using Kubernetes at all. Sometimes even without using Docker. Simple things can be pushed very far. There definitely is a point when using Kubernetes to manage your workload becomes the right thing to do. I firmly believe that most companies are nowhere near that kind of scale, but hey, at least it’s easy to lure engineers in ;)

I recently gave up on trying to use Windows for any development work. These words are written on Ubuntu. It runs inside a VM on Windows but works well enough to not notice (although I do own quite beefy PC with a lot of memory), so no need to bother with dual booting. It is interesting to see how this will turn out in future. Worst case scenario if the performance is not sufficient, I will switch to dual boot setup. Otherwise, unless I have some Windows-specific work to do (likeome gamedev in Rust ;) ) I don’t see myself going to back to it as my dev environment. Linux/Mac OS X are just better. In fact, if not some apps I have to be using for business, Ubuntu is undisputably better than Mac. It’s just less cluttered, more “to the point” environment, which really reminds me of the good old days when computing was pure distilled fun ;)