Author Archives: Gregor Ulm

Programming Game Review: SpaceChem (2011) by Zachtronics Industries

Introduction

I bought SpaceChem years ago, but only launched it once. It did not immediately grab my attention, so it spent years unplayed in my Steam library. A few months ago, though, I came across a presentation by Zach Barth, the mastermind behind SpaceChem and the subsequent games released by Zachtronics. He talked about the design philosophy behind their games and briefly covered aspects where he thought SpaceChem went wrong. He pointed out that puzzles in Zachtronics games have multiple solutions, which may also have to take tradeoffs into account, which is similar to engineering problems. That is true for all games Zachtronics has released. What is not true for all of them is that they are punishingly difficult. Yet, when Zach Barth mentioned that less than two percent of players were able to finish the story mode of SpaceChem, I was intrigued.

The main reason I am put off by most video games is that they do not offer much of a challenge. Instead, they are a sedative grind, rewarding you for the time spent doing mundane tasks instead of pushing your skill as a player. To illustrate this, think of the vast majority of games that offer “RPG elements”, where the stats that define your character grow. You do not get any better at the game. Instead, your avatar becomes more powerful. In comparison, to advance in a skill-based platforming game — think of Super Mario games — you need to learn how to control your avatar better. Furthermore, back in the days of the Nintendo Entertainment System, games were normally punishingly difficult, i.e. “Nintendo hard”, which was a consequence of memory limitations. Developers could not get a lot of content into a game as memory was limited. That kind of challenge was largely one of execution, however. SpaceChem feels like a throwback to those days, but only in the abstract. While there are almost no demands on mechanical skills, the game tests you in other ways, namely abstract thinking. Just like with a Nintendo-hard game from decades ago, you need a tremendous amount of persistence.

As a full disclosure, unlike the vast majority of people who have reviewed SpaceChem online, I am part of the very small minority of players who did finish the campaign, and then some. I’d say I took the game as seriously as a part-time job as I found it extremely captivating. I played through the story mode, the Corvi 63 DLC, and the Moustachium bonus levels in the span of about two months. During that time, I took two breaks of about one week each, one after a boss fight I thought was poorly implemented, which temporarily sapped my enthusiasm for SpaceChem (details later), and another when I got stuck at what is arguably the most difficult problem in the game (Omega-Pseudoethyne). I took some time off because I did not make any progress on it for a while. I completed all in-game challenges. I did not consult any outside resources, neither solutions nor hints. With very few exceptions, my solutions are far above average, and commonly in the top quintile if not the top few percentiles in terms of cycles used. I don’t mention this to brag, but to give the reader some background. If anything, professional game journalism would be a tad less useless if reviewers stated how competent they are at a given game, or at least how familiar they are with the genre the game they have been reviewing belongs to. I quit playing SpaceChem after solving a few of the curated user-generated puzzles of the ResearchNET section, for reasons which I will mention below.

I put more than 100 hours into SpaceChem, which makes it my second most-played game in my life, after Tetris in various iterations (original Game Boy, NES, TetrisFriends.com, and Puyo Puyo Tetris on Nintendo Switch). I can’t give a precise figure because I played the game offline, so the Steam application could not track the time. Also, even if the Steam client had been online, a significant part of my play time consisted of me closing my laptop and working solutions out with pencil and paper.

Basics of SpaceChem

SpaceChem is a “design puzzle” game, according to Zach Barth. You progress through a series of puzzles that are connected with a story that may as well not exist as it is rather disconnected from the actual gameplay. In the game, you transform inputs into outputs using a visual programming language. The input are atoms and molecules, and so is the output. According to the story, you work for a corporation called SpaceChem that exploits various planets for resources. A lot of people die, and for some reason there are enormously large monsters to defeat as well. Yet, from one stage to another, you either write functions (regular levels) or programs (production levels). Below is a screenshot of a regular level, which looks like nothing as a static image. Yet, you can probably notice that two operators, a red an a blue circle, assemble a molecule from atoms.

This is a relatively straight-forward regular level of SpaceChem

One step above are production levels, where multiple reactors, which all execute one function, are connected via pipes. This adds further difficulties, because pipes can be clogged. The entire execution path crashes if one reactor produces its output faster than the subsequent one is able to consume it.

This is a production level. The reactor on the left produces input for the reactors on the right.

This was the bird’s eye view. In more detail, you work with a (functional) visual programming language. Interestingly, that language, at least when used in production levels, has been shown to be Turing-complete by implementing a Brainf*ck interpreter in it. Each function executes two “processes”, which run concurrently and indefinitely. These processes are visualized by circles. Input shows up in the fields ‘alpha’ and ‘beta’, and output has to be delivered, in most levels, to fields ‘omega’ and ‘psi.’ To do so, you create a path for your process markers to run on. Along those paths, you place operators, which start out being quite limited: you can request an input element, grab or drop it, bond it to other elements, or remove bonds. Within a few levels, though, you end up creating quite complex programs with subroutines, conditional expressions, and flip-flops (and more!). You may not like that the game does not properly explain what some operators can achieve. Instead, you are supposed to figure this out yourself and push those operators to their limits. In fact, if the game told you some of the supposed “tricks” it expects you to discover, quite a few of the stages would be boring routine work.

You will face much more complicated problems than this one.

You may wonder why you might want to play SpaceChem. Well, if you subscribe to the school of thought according to which leaning a new programming language, even one you will never use, will make you a better programmer, then there’s your answer already! In SpaceChem, you have to wrap your head around a different way of expressing computational primitives, break down problems, translate them into the abstractions you have at your disposal, and even do some software architecture by combining reactors to achieve a particular task. You program with a different set of tools. On top, you get to practice your understanding of concurrency and multi-core programming, the former quite concretely, and the latter more in the abstract. True, SpaceChem will not get you a job, but if you manage to play through it, you are most definitely smart enough to be a very effective software engineer. I don’t know much about process engineering, but some people claim that SpaceChem is quite similar to that field as well. In any case, SpaceChem helps you keep your mind sharp, and that is arguably worth a lot.

A Game for the Cognitive 1%?

SpaceChem is brutally difficult. Zach Barth even called it “stupidly difficult.” Fully understanding the programming model is part of it, which probably already excludes a good 90% of the population. Another part, and this is where a bit of trial and error comes into place, is fitting your solution into the available space, which intensively tasks your ability to reason spatially, probably excluding another 5% of the population. Thus, you end up with a game that only the smartest 5% of the population, and that is probably too high a percentage, could play through, due to the demands on abstract thinking and spatial reasoning required. If you enjoy abstract reasoning, chances are that you will love SpaceChem. Otherwise, you will probably drop the game within the first few stages; if you are in doubt, better play the free demo first. In later games, Zachtronics fundamentally changed their approach to difficulty, which I will talk about further down.

Completion rates of SpaceChem, according to data by the developer (Fair Use is assumed).

However, you not only have to be smart, you also have to be very dedicated. In essence, the game presents you with a few dozen problems, one more difficult than the next, and gives you almost no guidance. There are a few text screens, which cover the basics. Yet, the techniques to solve the more difficult levels you have to discover yourself. The game does treat you like an intelligent adult. It gives you a problem, and tells you to figure it out. Modern games do not do that, which might explain why they can be so incredibly tedious to play. For instance, the last time I played mainstream video games, which were GTA V and The Witcher 3, I spent most of my time following a marker on a map, which I found quite off-putting (I put my PlayStation 4 up for sale soon afterward).

Sometimes, you find a solution to a problem that you cannot implement because you are not able to route your processes given the constraints on space. This can largely be overcome with practice. After about one third into the game, I got to the point where I was able to visualize solutions to SpaceChem problems in my head. I could think in the SpaceChem language, but even that has limitations. For later production levels, you will probably have to use pencil and paper to break the problem down because you would juggle too much information in your head. This is not an exaggeration. For one of those levels, I used up five or six pages of scrap paper. That level alone took me about eight hours to solve, at which point I doubted my abilities. Yet, after I learned that less than five percent of players even got to that point (you can eyeball absolute completion rates with the plot above), and that it was quite common that the more difficult levels take many, many hours, I resigned myself to the fact that that level really is that difficult. Some levels take ten hours or more; the infamously difficult last level of the game took some people weeks or months, which probably amounts to a few dozen hours in play time.

While the game does not track how long it took people to solve problems, it takes other metrics. Well, tracking time would be imperfect anyway because you may well find the solution to a problem in the shower, or through working it out with pencil and paper. Instead of time, the game measures the number of cycles your solution takes, the number of symbols you have used, and the number of reactors. This only makes sense because there are many possible solutions to each problem. It would not work with traditional puzzle games that only have one solution, for instance Portal or The Witness. Metrics are illustrated with histograms. Sometimes, the fastest solution has the fewest symbols, but in general this statement does not hold. You can certainly come up with a very slow solution that uses an excessive amount of symbols. I found those histograms quite motivating, because they make you not just want to solve a level, but to also do it well, “compared to other engineers”, as the results screen states. I think the game deliberately breaks the fourth wall at this point. While you are a “reaction engineer” in the game, the game itself is mostly played by engineers, so your performance is compared against real-life engineers.

Making it through the story mode without consulting outside sources is quite a feat. I managed to do so. It may sound bizarre, but playing through SpaceChem on my own was much more difficult than any course I have taken at university. Note that I hold a Master’s degree in Computer Science from a decent technical university, so the issue is not that I have never encountered challenging material. Yet, compared to the dedication and creativity some of the later levels of SpaceChem require, any problem I encountered in upper division courses like Discrete Optimization or Algorithm Design seemed almost trivial in comparison. It is highly likely that your day job, no matter what it is, is not nearly as difficult as SpaceChem. Well, in the end you don’t get anything for finishing SpaceChem, but it if you like solving challenging problems, it will feel highly satisfying.

Sometimes people mention SpaceChem as a good game to introduce people to programming. I would not recommend that at all because an introductory programming course is laughably easy in comparison. If anything, it is a game you may want to introduce a subset of programmers to. If you can make it through SpaceChem, you should have no problem at all to make it through a technical degree, based on demonstrated intellectual ability and perseverance. When I researched what other people thought of that connection, I came across a blog post by an academic in educational research at King’s College London who bluntly stated that he would not use SpaceChem at university as the game is far too difficult. Later Zachtronics games are probably suitable for that purpose. Still, I think if you want to learn how to program, you should just learn how to program. The barrier to entry is basically non-existent at this point in time, given that you can learn a language like Python or JavaScript with free, interactive online tutorials.

The achievement completion percentages on Steam you can ignore, by the way. It currently lists that around five percent of players have completed the story. I would be interested in the real numbers, but the rampant use of tools for unlocking Steam achievements make them relatively useless. In that regard, it arguably did not help that SpaceChem has been included in indie bundles, as this exposes this game to people who are more interested in harvesting Steam achievements, trading Steam cards, and other items on, which can be used for bartering, or even traded for money.

Flaws of SpaceChem

As satisfying as SpaceChem is, it does have a few flaws. I think that the story is superfluous. The game would have worked just as well without it. The soundtrack is a bit odd. It consists of a few pieces that are several minutes long, which are repeated ad infinitum. While you can solve the earlier puzzles in a few minutes, many of the later ones will take multiple hours. Thus, you will quickly get to the point where you will disable the soundtrack. Just like it is with the story, the soundtrack is thus quite superfluous. The same is true for the sound effects.

You may also find some of the later levels tedious. There are a few that are conceptually simple to solve, yet challenge you because it is difficult to accommodate the necessary operators on the restricted playing field. Debugging such levels can test your patience and determination. Still, once you solve them, you will feel every bit as accomplished — in particular when your first working solution is one of the fastest recorded ones. This happened to me a few times, and it served as a powerful confirmation that I had mastered the mechanics of SpaceChem. That being said, the story mode levels almost never felt like routine work. The same cannot be said for some of the curated user-created levels, but those should be viewed as bonus material for those who just cannot get enough of this game.

SpaceChem only allows you to keep one active solution per level. It is not possible to save a solution and reload it later. This may consequently discourage experimentation in more difficult levels where the play area is packed with symbols. Zach Barth has mentioned this flaw in various talks. In later Zachtronics games, it is possible to save and reload solutions. Some players may find that it is a flaw that progress in SpaceChem happens mostly in a mostly linear fashion. In order to access level n, you need to have solved level n – 1. There are very few situations where you are free to choose the order in which you tackle stages. In later Zachtronics games, you have a lot more freedom in that regard. Yet, I view this limitation as a positive as it forces you to focus on one problem at a time. Some take significant dedication. You also get the sense that you have to focus on the task at hand as there is no alternative stage to work on instead. I think there is the risk that some players would jump between puzzles, solve neither, and abandon the game if non-linearity was not enforced as much as it is. Seeing that completion rates in later Zachtronics games are also quite low, this is not just baseless conjecture.

In particular for later production levels, it would have been helpful to have the option to use placeholder inputs to speed up development. Sometimes, it takes a few hundred cycles to get the required inputs to show up in a later reactor, as a reactor earlier in the system first has to produce it. I would have appreciated it very much had I been able, for debugging, to specify any input I wanted and receive it immediately afterward. Of course, for the proper simulation, you would still have to rely on the modules your reactors actually produce.

In terms of gameplay decisions, I am a bit unhappy about the defense missions, as they involve manual intervention. You speed up or slow down the simulation, and when appropriate, you have to hit certain triggers. Some of those missions can be solved without triggers, which may not always have been by design, but in others it seems unavoidable. I don’t quite see what this mechanic adds to the game. I would have been much happier by solving regular problems and then watching my solution being carried out, instead of slowing down the simulation when the boss creature reacts in a particular way, manually interfere with the execution of my pipelined reactors, for instance by triggering the firing of a laser, and then speed up the simulation up. It feels like a burden.

I got quite annoyed with the boss of stage 6, where I was very proud of a solution that extremely quickly produced the necessary modules for firing a laser. Yet, the external trigger element arrived in only irregular intervals, and not nearly quickly enough. Thus, I had to slow down my solution. In the end, I arrived at a fully-automated three-reactor solution that avoids manual triggers altogether. This happened by accident. I first sped up the first reactor a little bit, which led to more erratic behavior. After speeding it up some more, I discovered that the pattern at which the elements that trigger the laser arrive are now antagonistic as they come in at an importune moment. In the end, adding two extra cycles to one reactor happened to enable a fully automated solution. However, it does so by exploiting the arbitrary game logic of this particular level. It would have been much more satisfying had the reactor fired whenever a module was ready, or just more often in general. Coming up with a very fast solution, just to learn that it is too fast for an external process you have no control over, on the other hand, is demotivating. What is worse is that you do not discover this limitation before you have a working solution that is able to fire several times. At that point, I felt that SpaceChem had jumped the shark and I was close to quitting. I was incredibly turned off by that experience and almost would have deleted the game afterward.

There are very few bugs in the game. It crashed once without any warning. Another time I opened a reactor level, and wanted to edit a solution, only to find that it was scrambled: there were two red “start” symbols and the layout did not make any sense. The game then booted me back to the level select screen, and when I reloaded that stage, the previously valid save state was restored. Lastly, in an early production level I encountered a reproducible bug when running the simulation at the fastest speed: one of the process markers was not following its path but instead followed a straight line. This bug is reproducible and appears every other time I run the simulation.

The blue ‘waldo’ is not supposed to leave its path. This bug is reproducible. Thankfully, it only affected one problem.

Additional SpaceChem Content

SpaceChem comes with copious amounts of bonus content, none of which matches the excellent difficulty curve of the main story mode. There is a bonus section in which you research “Moustachium”, which gives you bonus items for Team Fortress 2, or at least did. I haven’t tried if this still works as I don’t own that game. The few problems of that section are comparatively easy. The last one is rather enjoyable as it suggests an approach you may not have used in the main story. That content is free and it doesn’t take long to complete. As a conservative estimate, two hours should be plenty.

Most bonus content is part of ResearchNet, which divides problems into volumes. This section contains hundreds of problems. They are ranked by difficulty, from 1 to 3. The vast majority of those problems were created by users. While ResearchNET has the potential to entertain you for hundreds of hours, I dropped it relatively quickly. The biggest issue is that the content widely fluctuates in quality. Some problems are very easy to solve, others not so much. In comparison, almost every problem in the story mode is more difficult than the preceding one.

Furthermore, the problems in the story mode often have many viable solutions. I lost my interest in ResearchNET almost completely when I encountered a problem that was very restrictive. I solved it with little difficulty, but it was tedious. The reason was that instead of finding your own solution, which is one of many viable ones, you have to find the one solution the puzzle creator intended, or one that is very close to it. You can identify those problems easily because their associated histograms show a very narrow distribution curve, indicating that all solutions are within a tight range. Many ResearchNET puzzles lack histograms, which is quite unfortunate as part of the appeal of the story mode of SpaceChem is that you get to compare yourself with a large number of smart anonymous people and their solutions. Even if you lack a competitive streak, you still get feedback telling you how well you did. In the absence of such feedback, any working solution is a good solution.

The “Corvi 63” DLC is quite good. It’s lacking in presentation, however. Instead of story panels with illustrations, you only get to read a few emails. The graphics are bland, and the absence of a visually impressive boss creature does not help either. On the plus side, the various stages are fun. They introduce a new mechanic, quantum tunneling, which necessitates finding new solutions to problems, sometimes old ones. The first few problems help you get used to that mechanic. The subsequent ones test your understanding in increasingly complex problems. At the end, there is a final mission which is disappointingly easy. I would be surprised if anyone who has finished the story mode got more than eight hours out of Corvi 63. There is not a single level that provided a hefty challenge. Instead, the DLC felt more like a victory lap, after beating the story mode. Compared to the price of the main game, which is $10, the price of the DLC is too high, even though it’s only $2. I got the DLC during a sale at a 75% discount, and SpaceChem at an 80% discount, and I still think that the DLC was not worth it, compared to the fantastic value for money of the main game.

Game Length

SpaceChem is a long game. Zach Barth thinks that the game is too long overall, but I don’t mind the length much at all. In an interview with Gamasutra, he spoke of an “oppressive 40+ hour difficulty curve that only 2 percent of players reach the end of.” Notably, Zach himself has not finished SpaceChem and has no interest in doing so. I think he is missing out. Instead of his harsh judgment towards his game, I would liken it to a very rewarding hike that rarely gives you any respite, but which will give you an incredible sense of accomplishment, the likes of which you probably will not find in any other video game. Granted, I would have been perfectly happy had SpaceChem ended after the fifth or sixth planet. In particular, one of the bonus challenges I found fiendishly difficult. Had that been a regular level, followed by a boss fight, the game would have ended on a very high note for me. Overall, I was quite happy I got so much great content, but there is certainly a bit of fat that could have been cut.

A single play-through through the story mode, including all challenges, may take easily between 80 and 100 hours — if you are good. If you finish SpaceChem in 40 hours, you probably do not spend any time on optimization and skip the few brutally hard optional levels in the story mode. A good chunk of your play time you may spend on optimizing your solutions. (It took some people well over 200 hours to just play through the campaign, ignoring the challenges.) If you need more content, you can purchase DLC levels, do a short bonus mission, or solve curated user-created levels, which will entertain you for hundreds of hours more. There are very few people who have finished SpaceChem completely. Their play time is in the region of 500+ hours, spread over four to six years, based on the few people I was able to track down online who did so.

In terms of bang for your buck, there are few games out there that can compete with SpaceChem. Yet, I think that the story mode has overstayed its welcome. I would, at the very least, have cut the final level as that is a rather tedious boss fight. The most difficult level, in my opinion, was the second-to-last regular level, which is followed by a surprisingly easy one which could easily have been cut. It probably serves as a breather before the boss battle, which is quite straight-forward and one of the less challenging ones. Yet, afterward, you encounter the very tedious final boss of the game. The chemical processing I found quite trivial, in particular compared to how difficult that stage supposedly is. You can sidestep some of the challenges, which I am not going to spoil, and then you have to make it through a slog of a battle that could send you right off to sleep. Thus, for me, SpaceChem ended on a sour note.

Quo vadis, Zachtronics?

We may never see a game like SpaceChem again. Its creators underestimated the difficulty of their game. In fact, several levels of SpaceChem had never been solved by anyone when the game was released. Thus, Zach and his colleagues may not even have been aware of how tough the game gets. Yet, the utterly brutal difficulty is the biggest strength of this game, which is only exacerbated by the lack of instructions. SpaceChem is quite antagonistic. It throws you into the deep end and makes hardly any attempt to give you a helping hand. Many players may not like that. On the other hand, those that do not give up and persist will feel rewarded as they overcome tough intellectual challenges. Arguably, it’s bad enough if you put out a game for the general population and only a few percent complete it, but if your target audience consists of engineer-types and even among those less than two percent complete it, your game is indeed too difficult. I can understand that Zachtronics want to grow their audience. By doing so, they however lose the hard core that embraced SpaceChem for its difficulty, not in spite of it.

Making more and more difficult games is a losing proposition. There are genres that got so specialized that only a handful of players on the planet is able to complete its games. The poster child of that is arguably the bullet hell genre, which caters to a tiny niche, at the cost of alienating a mainstream audience. Then again, the question is whether those games could even reach a mainstream audience in this day and age. Maybe the most apt comparison one could make is between Zachtronics and From Software. The latter put out the game Demon’s Souls in 2009, which was a sleeper hit. It looked like a commercial disaster at first, and in the end it sold millions. In that game, the player has to master multiple roughly 30-minute long sequences, consisting of a difficult level that ends with a challenging boss fight. You have to complete each level in one sitting. Of course, being an action RPG, Demon’s Souls is the polar opposite of SpaceChem. Yet, in both games, players find it very rewarding to eventually beat stage after stage, for which they have to overcome challenges they initially may well have thought impossible. In subsequent games, From Software restructured their games. The spiritual sequel to Demon’s Souls, Dark Souls (2011), was a massive commercial success. Yet, among those who have played the predecessor, that game left something to be desired. You will find various opinions online. I think it boils down to challenge and reward, which were both higher in Demon’s Souls than of the later games in that series. Arguably, the more challenging a game, the higher the reward the player experiences, provided the challenge is perceived as being “fair.”

Zachtronics has released several more games that embrace programming or engineering in one way or another. There are two different kinds of games they have put out: (1) more visually-oriented games with fewer constraints and (2) games in which you write actual code. The first kind is represented by Infinifactory and Opus Magnum. In Infinifactory, you put together assembly lines. Compared to SpaceChem you get to work with an additional dimension. Based on what I have read online, the third dimension makes the game a lot easier and thus this game is often recommended as an entry point for Zachtronics games. It is only about half as long as SpaceChem and takes around 30 to 40 hours. People who have completed SpaceChem tend to report that they found Infinifactory very straightforward and not particularly challenging. The other game in that vein is Opus Magnum, in which you do not deal with fake chemistry like in SpaceChem but with “real” alchemy instead. You operate again on a 2D plane, but this time it is comprised of hexagons. It is an infinite plane. Due to that, Opus Magnum is even easier than Infinifactory. People who were chewed out by SpaceChem report that it took them ten to twelve hours to play through the campaign. On the other hand, people who did finish SpaceChem report that it took them four to six hours to play through the entire (!) campaign. To put this in comparison: A significant number of individual level in SpaceChem will take you about as long, and some could take you twice as long. Among the visual Zachtronics games, I have not the slightest interest in Opus Magnum. I might play Infinifactory because I have already picked it up as part of a bundle some time ago.

The other kind of games Zachtronics has put out more fully embrace programming. You write assembly code and you even have to read manuals. It’s almost like your day job. The games in that vein are TIS-100, Shenzen I/O, and Exapunks. The first game in this series was TIS-100, which has you program interconnected nodes. It’s assembly-programming with a flavor of Erlang. That game was a surprise success, so Zachtronics doubled down on it. For Shenzen I/O, they put together an even longer manual. In addition to writing assembly, but this time no longer for multiple nodes, you have to put together electronic gadgets that perform a certain role. TIS-100 has tight space constraints. This does not seem to apply to Shenzen I/O, with the exception of one stage, according to player feedback I have gathered online. I already own TIS-100 due to a bundle sale, but I do not have much interest in playing it as I find it visually off-putting with its tiny white text on a black background. I tried reversing the colors on my screen, but this didn’t improve matters much as the white turns into a grey-tone.

I have no interest in Shenzen I/O either as the visual presentation is just as off-putting, with its tiny text. From what I have read, the verdict is that if you have studied assembly programming at one point, neither TIS-100 nor Shenzen I/O are particularly challenging. Of course, these games do not use MIPS, ARM or x86 assembly, but the mental model will nonetheless apply. TIS-100 uses Erlang-inspired assembly. Shenzen I/O is conceptually simpler. One credible voice online wrote that those games quickly become a “plug and chuck” exercise. Zachtronics recently released a third game in that vein: Exapunks. You again write assembly code, and it seems there is one mode where you can even write ‘real’ JavaScript. In a tweet, the company shared that there are no constraints on space, meaning that your programs can be arbitrarily long. Upon reading this, I lost all interest in that game. From the first report I found online of someone who finished the game I learned that it took that person 13 hours to play through the campaign, further corroborating that this game is far too easy. Given the comparatively high price point of that game, I’d say that that is not nearly enough value for money. This is a disturbing trend in their games: they get ever more expensive, yet they provide fewer and fewer hours of entertainment, and that is without taking into account the qualitative difference between a hard game that feels rewarding and a game that lacks all challenge, which cannot keep your attention.

Zachtronics have been trying to widen the appeal of their games. Instead of catering to the ultra hardcore, engineer-types who solve difficult problems for fun, they put out games probably the average person could solve if they just dedicated themselves to it. In SpaceChem, the first part of the challenge is solving the problem. Afterward, you can look for a more efficient one. Step 1 is normally quite difficult. Step 2 is an optional bonus. In many cases, just cleaning up your solution makes it a lot more efficient. Sometimes, a different approach helps to make it so. On the other hand, if Step 1 is trivial, then the optimization is basically pointless. It is unfulfilling busy work. Think of the more difficult problems you may have faced in university courses: You solve them, you feel proud of your work, and then you clean up your solution. On the other hand, if the problem was not challenging, you just move on because it was not engaging enough. If you improve it, you do it for a better grade, but not because you feel driven to do so. It seems that Zachtronics has been heavily moving in that direction. Life is full of fairly trivial problems that are not particularly engaging. I do not need to pay for a game to get more of them. What I would like to see more of are “stupidly difficult” problems I can sink my teeth in, not games I can sleep-walk through because they go to great length to eliminate the possibility of failure. I could already get that in triple-A gaming, if I wanted to.

As it stands, SpaceChem is my favorite game after Tetris (NES), which is a perfect game, in my opinion. Both are lightning in a bottle. They are much different games, but there is an interesting parallel I would like to draw your attention to: Nintendo, who implemented that version of Tetris, was unable to come up with a puzzle game that was anywhere near as good, and it was not for a lack of trying. The comparison is a bit off because Nintendo did not create Tetris. Yet, they created gameplay mechanics that have not been reproduced in any other version of Tetris. That game is something special, which is only underscored by the existence of a seemingly endless number of insipid versions of Tetris out there. (Most people are not even aware that there are significant differences between Tetris versions, believing they are all the same.) Zachtronics seems poised to never produce a game that is anywhere near as brilliant as SpaceChem. Their follow-up games similarly underscore how great SpaceChem is, and as long as they do not produce another “design puzzle game” that is not afraid to genuinely challenge the player, SpaceChem may never be dethroned in that genre.

Upcoming talk at Trends in Functional Programming 2018

As part of my work at the Fraunhofer-Chalmers Research Centre for Industrial Mathematics, I have been working on a platform for distributed data analytics. I will present one facet of it, updating code on client devices without restarting them, at the upcoming conference Trends in Functional Programming 2018, which will take place from June 11 to June 13 at Chalmers University of Technology in Gothenburg, Sweden.

The abstract is reproduced below. Note that this is a work-in-progress paper or an extended abstract, depending on how you want to call it.


Active-Code Reloading in the OODIDA Platform
Gregor Ulm, Emil Gustavsson, Mats Jirstrand
Fraunhofer-Chalmers Research Centre for Industrial Mathematics, Sweden

The OODIDA (On-board/Off-board Distributed Data Analytics) Platform has been designed for distributing concurrent data analysis tasks to a network edge devices that are connected to a central server. It has been implemented in Erlang and Python. Its focus is the automotive industry, even though it is, in principle, a general solution. The heavy lifting is performed by edge devices. In contrast, the central server mostly performs supplementary tasks. One practical issue is that some data analytics tasks, for instance explorations of machine learning algorithms, do not lend itself well to the paradigm of deploying a new software installation to the edge device as it is both more time-consuming and inconvenient, due to the necessity of having to restart the applications that are executed on an edge device. As a response to this problem, we developed a solution for reloading active code on the client, which means that a data analyst using the OODIDA platform can define a custom function in Python and use it for local aggregations on the affected edge devices. This makes OODIDA even more flexible. It also enables new use cases such A/B testing of algorithms or experimental explorations. In particular the latter would have been inconvenient when relying on the standard deployment model of updating the software run on client devices.

Two Talks at the Singapore Elixir and Erlang Meetup Group

I will give two talks at the Singapore Elixir and Erlang Meetup Group on Monday, 14 May 2018. Kaligo is hosting the event. Their address is 298 Jalan Besar #03-01, Singapore 208959, Singapore. In order to attend, join the Meetup group and bring an ID document. There is a separate event page on Meetup.com.

Below you will find the event description in full.

Talks related to Distributed Data Analytics and Erlang in the Workplace

Details
Gregor Ulm is an R&D Engineer from Sweden, working in industrial research. He is currently visiting Singapore and agreed to give two talks related to his work. One talk is on his current main project, an analytics platform for connected vehicles that has largely been implemented in Erlang. The other is on his experience with introducing Erlang in a mature organization.

Agenda:
• 6:45 pm: Snacks - Pizzas, drinks, mingling
• 7:10 pm: OODIDA: On-board/Off-board Distributed Data Analytics for Connected Vehicles
• 8:00 pm: Break
• 8:10 pm: Introducing Erlang in the Workplace: An Experience Report

Thanks for all the following volunteers:

Pizza Sponsor: Yojee.
Venue provider: Kaligo.
Organizing:
Anil Thaplar (@athaplar| [email protected])
Grzegorz (@arnvald | [email protected])

Speaker: Gregor Ulm, Research and Development Engineer at the Fraunhofer-Chalmers Research Centre for Industrial Mathematics (FCC), Gothenburg, Sweden

Talks:

1. OODIDA: On-board/Off-board Distributed Data Analytics for Connected Vehicles
A modern connected vehicle generates dozens of gigabytes of data per hour, which implies that central data processing (off-board) of a fleet of connected vehicles is not feasible. Instead, a large part of data processing has to happen locally on the client (on-board). The OODIDA platform facilitates concurrent distributed data analytics. Its key feature is the ability to concurrently execute multiple distributed data analytics tasks on overlapping subsets of client devices. This talk gives an overview of OODIDA, which is largely implemented in Erlang, discusses design considerations, and highlights various use cases, ranging from the simple, such as filtering, to the more complex, such as coordinating and executing distributed machine learning tasks with a large number of client devices. OODIDA is an ongoing research project at FCC. It is carried out in collaboration with industry partners.

2. Introducing Erlang in the Workplace: An Experience Report
The number of developers with an interest in functional programming seems to easily outnumber the number of industry jobs that entail using functional programming in practice. However, you don't have to only use functional programming languages in your spare time! One approach to get a job as a functional programmer would be to launch your own startup or join one of the comparably few companies that prominently use a functional programming language. A different approach is to introduce a functional programming language in your own workplace. In this talk, I discuss how I introduced Erlang at FCC in early 2017, and got it adopted for a major project. Since then, we filled several internship positions and, much more importantly, very recently hired two full-time Erlang developers and thus actively grew the local Erlang community.

About Yojee (Pizza Sponsor)
Agile startup in Singapore building logistics software utilizing Block-chain, AI and Machine Learning to optimize and manage fleets.

What to bring
ID

Out now: Mastering CodingBat (Java), Vol. 1: Basics

For many years, people have shown great interest in my solutions to the entire CodingBat problem set. When I published my solutions, they were in fact the first complete set on the Internet, which might explain part of their popularity.

The solutions I have published on my websites are for the most part quite straightforward. They are not always the most elegant. Furthermore, there are no explanations provided. This was enough motivation for me to work on a series of books on CodingBat. The first volume is now available as a paperback on Amazon: Mastering Coding Bat (Java), Vol. 1: Basics.

Here’s the cover:

This book contains extensive discussions of the problems in the sections Warmup-1, String-1, Array-1, and Logic-1. This is a total of 121 problems, which I discuss on 326 pages, using 357 code listings.

On the product page on my blog you’ll also find a short PDF preview file, which includes the full table of contents and a sample chapter.

Internship Opportunity at the Fraunhofer-Chalmers Centre in Gothenburg, Sweden

The Systems and Data Analysis department at the Fraunhofer-Chalmers Centre for Industrial Mathematics intends to hire a student for an internship. The starting date is flexible, but the end date is firm, it’s the end of May 2018. You would be working under my supervision and contribute to algorithm development in the realm of big data analytics. This internship is related to our work on Contraction Clustering (RASTER).

Here is the job ad:


Internship at the Fraunhofer-Chalmers Centre for Industrial Mathematics

The Fraunhofer-Chalmers Research Centre for Industrial Mathematics (FCC)
offers software, services and contract research for a broad range of
industrial applications. Modelling, simulation and optimization of products
and processes can boost technical development, improve efficiency and cut
costs of both large and small businesses. Since 2001, our highly skilled team
of mathematicians and engineers has successfully solved problems for more than
170 clients. We combine consultancy services with innovative research and
development based on a wide spectrum of competences.

We are looking for an ambitious student with a background in computer science
or related fields to assist in an ongoing applied research project in the
Systems and Data Analysis department. You will contribute to research in data
stream processing that is conducted in the area of distributed data analytics.

Your task:
- Implement a stream processing algorithm, which was developed in-house
- Compare the implementation with other existing algorithms on a variety
of metrics

Required background:
- Functional programming in Scala or Haskell

Meriting:
- Experience implementing algorithms based on a mathematical specification
or pseudocode
- Algorithms/Machine Learning, in particular clustering
- Stream processing, in particular Apache Spark - Structured Streaming
- Data visualization, in particular Matplotlib

Your ideal profile:
- Chalmers student at the Master's level, preferably in the penultimate year
- Pursuing a degree in Computer Science or a similar field
- Previous work experience in the software industry or as a student research
assistant
- Ability to work independently

If you maintain a private code repository (Github, Gitlab, Bitbucket etc.),
then please highlight this in your application. If you have other samples of
work to show, such as a portfolio of projects on a blog or private website,
we would be keen to have a look.

This internship is a paid part-time (4h/week) fixed-term position until the
end of May 2018. The starting date is flexible.

Contact persons:

Mats Jirstrand, Head of Department
[email protected], 031-772 42 50

Emil Gustavsson, Applied Researcher/Data Scientist
[email protected], 031-772 42 92

Gregor Ulm, Research and Development Engineer
[email protected], 031-772 42 71

Please send your application, marked "Contracted Student / SYS (OODIDA)",
consisting of a cover letter, CV, and a current academic transcript, to
[email protected].

Interviews will be held continually. Please apply as soon as possible.

www.fcc.chalmers.se