Polyglot programmer advantages and disadvantage

A polyglot programmer is what I would like to call a programmer that knows many languages and is able to write software in which various languages are combined and used. Knowing many different languages also introduces you to many different concepts.

The reason why we have so many programming languages is because each language has its own speciality. Some languages have strong typing and others have weak typing. Some language use prototyping, while others have inheritance.

Not only that, but each language has an ecosystem. Within an ecosystem there are various tools. Think about NuGet, CMake or even the bash scripts your build system might be using. There are so many languages that have a close relationship to a set of tools that you might not even realize half of the tools that you are using.

The one tool you might want to exclude is an IDE like Visual Studio. An IDE is more a tool that hides a lot of the tools that you are using which reduces the visibility of the tools you might be using. My opinion is that the use of an IDE is overrated, so if you know tool mostly through an IDE you might want to think about trying to use it without an IDE. After all, msbuild.exe builds the project not Visual Studio.

The above are all advantages of being a polyglot programmer has one huge distinct disadvantage. He is rarely seen as an expert on any of the subjects if his co-workers have a similar level of skill but for that particular subject. This is not strange as you might be considered the expert in general knowledge. Personally I find that a small price to pay.

When I look at my resume I know I can do almost any other software development. I’m not bound to a single technology. This means that there is always job I can do.

Why do I own a Mac?

In the past I was an active Microsoft fanboy and when someone else had a Mac it was difficult not to make some snarky remark about it. The other operating system I had my eye on is Linux. Even though both Microsoft and Linux seemed exact opposites I love playing around with both.

The only reason why I never fully switched to Linux was because I kept playing with it until it broke. Of course, this is mostly my fault but the unpolished experience stayed with me. Again, I caused this and by no means I’m saying the problem is Linux.

So how does tie in with owning a Mac?

The Mac is originally based on Unix which is also considered the ancestor of Linux. Since they are quite similar under the hood it means that everything I can do on Linux I can most likely also do on the Mac.

Steve Jobs is a man who was passionate about design and I believe that the Mac is well designed. Like all things it requires time to get adapted to the system.

Combining the above I came to a nice conclusion: With a Mac I have an easy to use system which has most if not all the things I want from Linux. That is the reason I have decided to buy a Mac and frankly I think the high price tag is worth the experience.

Fake full-screen

Today went well. My love for DX11 continues to increase and although SharpDX seems a lot harder to use than C++ implementation (be aware that I’m a C++ programmer) but the joy of C# balances it quite nicely.

Today I implemented something I always wanted to do: Fake full-screen.

Fake full-screen is the same as normal full-screen but with one slight alteration: You are not using the graphics card exclusively. All fake full-screen does is remove the border and maximize the form.

This has the following advantages:

  1. When debugging I can always access the debugger without losing the graphics context.
  2. Switching to and from full-screen becomes a lot faster
  3. I don’t have to wait until the computer has changed the graphics context (that blinking black when you change resolution).
  4. It is easier to simulate various screen ratios.
  5. When the game crashes I can simply use alt-escape to make the task manager visible.

The major downside however is that you don’t use the graphics card exclusively which means a performance drop but since that is not much of a difference compared to full-screen you can put that off until the rest is ready.

It was just one word…

Sometimes the bug that ruins my entire night is just one word and for some reason I find that funny. It’s like a crossword puzzle of which you only have to find one more word, but you can’t find it.

The bug in question was the following C# code:


public class CrossWordPuzzle {
    private string word;

    public void SetDefault()
    {
        string word = "Oh crap..."; // Doesn't set the member variable.
    }
}

I’m a C++ programmer and the above would generate an error since “word” is defined twice. C# however only gives a warning that the member variable is not used. The reason why I don’t like it is because if you do use the member variable (say in another function) you will never notice the above problem. It was only because I was at a dead-end that I decided to look at the output.

Anyway the code is now switched to DirectX 11 and I finally understand how buffers and shaders work. It feels as if DirectX 11 is easier and makes a lot more sense than DirectX 9 but like always I think it takes a bit of time before I’m used to it and have internalized the features.

Tomorrow the work will move on to repairing the scene graph and the GUI. Until then I’m stuck rendering cubes.

Becoming serious about the project

Last year I was in a Ludum Dare together with a few friends and in the end we have decided to try to create an indie game from scratch. After all: We have the skills. We have the technology.

Sadly we didn’t make a great start. Mostly because each one of us had no time and had to focus on our day-to-day job. So starting this week I have decided that I will try to put no more than 8 hours of work in my day job and try to spend every evening at least an hour working on our project.

In addition I have made myself another promise: I will try to provide updates on a regular basis using my blog. It will be a good reason to start using my blog again.

The project is called SpaceMayhem.