So, you're one of our MVPs on Devcord. You do a lot around the community. You're from Germany, and you're a lead developer. Can you tell me about where you work and what you do?
I work at Articy, we are a company that makes software for Game Development. Primarily you can imagine, like, a game content management system. So, you put in your characters, your items, your story, everything that defines your game basically, and then you can export that into your engine, which is quite nice. I really like my workspace.
How did you get into Web Development in the first place, how did you start?
I think the earliest moment when I started to program is when I tried to play games. Back in the times when I had a PC, you didn't have a CD. You had these magazines, and you either bought these with a diskette or without one, and if you bought it without one (which was way cheaper), you had to type in the code of the game to play it. This is like the earliest moment I started to program. Web Development came like when I was 14, I started to test it out. "Okay, what can I do? I know basic programming, but I'd really like to create something for myself." My first webpage was a rom emulation page, so I picked up fonts with Super Mario Characters in it, put them in the background, and I started to code a very ugly HTML table. I ended up with a page that looked okay for the time, in early 2004.
From 2004 until now, how did you work your way into a Lead Developer position?
I think the biggest part is I did a lot of school. Here in Germany we have a very good education system, in some regards. If you want to get into tech, they have some ways to help you. I started with getting all my degrees, and over time, I gathered additional skills, which were mostly self taught. Without them, I would never be in the position I am now. Even though I learned a lot in University, those skills would never have taught me what I learned by being self taught. Having my own problems while coding and maintaining my software, those were the key parts of getting my current job. At the same time, without school in Germany you wouldn't get the chance to put your skills to the test.
Does passion drive you to learn more about it? How do you maintain your passion?
I think the biggest driver of my passion, starting back from the first page I made, is that I'm creating something. I'm sitting there, typing in text, and part for part this page builds up in front of me. It gets better and better, and the more I work on it, the happier I am, because I know it was created by me.
So you're doing it because you enjoy the process.
I still get frustrated, don't get me wrong. Imagine you have a problem in front of you, and no matter what you google you will not find a solution. This goes on for days I lay in bed and I can't sleep because I'm thinking about the problem. Sometimes I think I have a solution, but I know deep down that it's not it, because I'm really half asleep. I hear this often from other coders as well.
What is your favorite language, and why? How many languages do you know?
I couldn't even sum them up with 100% certainty. I use too many to count. I think the most important ones are C, C++, Rust, JavaScript, TypeScript, and CoffeeScript. I think those are relatable for web developers. But I've also written Fortran, Cobol, Algo, multiple dialects of Assembly. I've written Assembly for Motorola 68000, x86, Netwide Assembler. So I was basically on a journey, and I tried everything to find my language. I think the most frustrating one was C++. I had this one enormous bug that I could never understand, where my program's logic was fine, but I got this segfault permanently, and I thought "Why is this happening?". Normally, they are caused by something in the memory not working out, or something hardware-related code in your processor fucked it up. Or you just did something really stupid in your code. I was so unsure of what it was. This took me months. Then at some point I was checking if my RAM was damaged, and it was. I ran the program again after I switched out the module, and it worked! So it was not the code, it was actually my machine. This was the most memorable bug ever.
Were you relieved that it wasn't your code?
Well, I was relieved, but at the same time very frustrated. I think I stopped coding C++ for half a year because I was so pissed. I actually did mostly JavsSript in that time, because I was like "yeah, in JavaScript this shit doesn't happen." I didn't even care if the browser support was good or not.
Can you talk about C, or Rust?
C is probably the best language that exists, because you learn how a computer works, and you learn what it means to program properly. You think "Okay, what happens in Hardware? What is a heap, what is a stack? How does a pointer work, and How do I efficiently write my program?" This is stuff you'd basically never think about if you coded in JavaScript. But if you did C, and then come to JavaScript, you suddenly start to think.. "Okay, if I have an array and i put in a variable, does it put the variable in, or the value?" You have this moment of curiosity, where you think about what happens underneath, and this makes your code so much better at some points. So I think generally, if you know c, you're a better programmer overall. I mean, the same applies to C++, but C++ has a lot around it, and C is very pure.
How do you feel about peer-to-peer questions versus Googling?
If you Google first, it's usually the better choice for the first 20-30 minutes But if it takes longer, go for peer-to-peer. Or if you know there's a specialist for your problem, then you should go there. One example is if you have an issue with Electron and you go to StackOverflow, there are a lot of bad questions and answers. (I would recommend you join the Electron Slack channel.) In general, though, I would Google for half an hour and then ask a peer, or in a chatroom. Make sure your question is a valid one first. One thing I don't like is when someone goes to StackOverflow without Googling, and asks a question that doesn't make any sense. Wasting time is probably the worst offense in tech when you're asking something without thinking.
What advice would you give to people who need to think out loud to work through a problem?
Get a rubber duck.
If I have an issue, and I know I can not Google it, I end up talking to my rubber duck (not out loud, that would be strange for my coworkers). I look into the rubber duck, and I ask the rubber duck if for example, "does it make sense if I change the way my program works like this or that", I sometimes I have this moment where I'm like "What the fuck am I talking about? this doesn't make any sense." I sound nuts when I talk about that, but it really helps. If you've ever worked in an environment where programmers are close to you and you ask a question, you have this moment where when you are saying the stuff you want to do right now, to a person who knows programming, you suddenly have the proper solution. You just have to imagine the rubber duck, in this case, is a programming rubber duck. It just works like that. It's magic.
What's a good first language to learn?
I started with Basic and with Assembly. I think Python is a good language to start with; JavaScript as well, but it can be a pain because of its hard to understand ecosystem. If you go native, you're probably better off with Go. It has an interesting following, and as far as I know it's really fast in comparison to C. I would not recommend Rust for a beginner, because it has a steep learning curve. Otherwise, I think the best advice I can give you is pick a project you want to do. Then, if you want to make a game for example, the best language you can choose is C# because it's easy to get into. Start with Unity, pick some tutorials, and learn step by step. (Take into consideration that unity C# is lightweight, so it will not make you a C# expert.) Most new programmers I've seen that pick a language at random, don't stick with it. Like I explained earlier, I made a page for video game ROMs because I have a passion for it and it had a purpose. If I do something I don't like, I'm not gonna stick to it. This is still true for me today.
How do you stay motivated when you're creating something for someone else that you're not passionate about.
I would say that's part of being a professional. being professional doesn't always mean writing good code. Sometimes it means sticking with it, still making progress even if you hate it. Maybe you're progressing slowly. Maybe you're not writing good code. But you're still going through with it because your customer is trusting you to get shit done.
Tell us about your development environment. Do you prefer developers on your team use the same workflow?
So in our company, we have a version control system in place. I don't like it to be honest, but we still use it just to get it out of the way. Normally, I'd say everyone should use git and nothing else. Other than that, we do have specific workspace settings for Visual Studio Code that every developer for the frontend part of the software has to have installed. We a certain selection of extensions that every developer must use to ensure we all have the same error messages.
What are the pros and cons of using custom build tools?
You can be very flexible, but you have to document everything. What I have is a big flow chart where everything is pointed out, and I have a lot of back references to documentation tools. Nearly everything is written down in that, though some parts are not because I think they're self explanatory. It's much better to document everything before you leave. If your contract is terminated, you have to leave immediately. They don't even let you have access to your PC sometimes, so you can't document your code anymore. It's not necessarily your problem anymore, but it's still nice for your colleagues to have some kind of documentation.
I wouldn't survive without documentation. It's really important, not just for a company. I've even documented stuff I was thinking about. I made a game engine at some point, and I documented the whole approach I was thinking. This really helps me get back into the project if I decide to make something new with it.
Why do you switch languages?
I think switching languages was always something I did depending on the project I'm working on So let's say I want to make a webpage, the only way I can do it is write JavaScript. Likewise, if I want to make a driver, I need to use C or C++. I pick up languages based on my needs. I've never had a language that I thought was perfect, where I wrote everything in it. I don't think that kind of language even exists.
How do you know which languages to use?
I don't necessarily know beforehand which languages I need, but since I have gathered a lot of experience, I have a hint on what language could be the solution.
What are some projects you work on the side?
I do a lot on the side, every chance I can pick up an API and do something with it. I think the first time I actually did it was back in the IRC days I was in an IRC and was playing around with PHP, and I thought "Let's write an IRC bot in PHP".
How did you sell a Snickers bar that you took a bite out of?
We were on a school trip, and I bought myself a Snickers bar. I had it in my backpack because I didn't eat it, then mid-day I took a bite out of it and put it back. Then someone else told me "I'm so hungry", and I said "Dude. I have half of a Snickers. If you give me like a dollar, you can have it."
"Dude. Fucking take my money."
What's your opinion on Dark Theme vs. Light Theme?
I had this discussion with one of my coworkers. He hates dark themes, with a passion. He says dark themes hurts his eyes, and I say light theme hurts mine.
Why is fullstack bad?
If you're asking if you want to be a frontend or backend developer, you're most likely a beginner, and a beginner could never properly learn everything required for fullstack development. What happens is you end up in this weird position where you know about a lot of topics, but you are not very experienced with them so you can't get a job. That's why I'd never recommend anyone to go fullstack. It's not that it's bad, but it's not very helpful for you as a person Fullstack development would also mean knowing not just hard skills, but also the soft skills required for someone who leads a team and a lot of experience.
Can you explain DevOps?
DevOps is the guy who brings your code from the repository into production, and also someone who maintains, for example, a build pipeline. This is the simplest explanation for it, someone who is a programmer but also a server administrator. It's sometimes hard to define it, but in most cases this is DevOps.
Do you have any comments about learning as you go?
If you have a problem, you need to learn about it. You shouldn't avoid it, that's a missed opportunity.
Do you have any IT horror stories?
I was junior developer, and what I did was chmod
on the root folder on an old Linux install.
It didn't work, and then I did sudo chmod 777
recursively on the root folder.
This sets user permissions for every folder and file, as accessible for everyone.
So, not really something that should happen.
I was a junior, so my educator had to cover for me. He fixed it, and was super pissed.
How do you learn to trust new developers with a proprietary codebase?
You can not trust them, you have to check.
Check everything. Twice. Especially with a junior developer.
Someone else has to secure the codebase to ensure they can not delete it.
Giving a junior sudo
permissions on the serer, on the root level, is a mistake in itself.
If you have sensitive information in your company, don't share that with the junior if you don't have to.
This is especially true for me, I work in the game industry,
there is a lot of information I know which I am not allowed to talk about.
A junior in this regard, will never know what he's allowed to talk about.
He might blast sensitive information at some online platform,
and suddenly we'd have people from Kotaku saying "New leak appeared!"
How do you feel about PC vs. Mac vs. Linux?
I like all of them, I hate certain parts about each and every operating system. I like Linux as a general machine. It's great for working, you can do some gaming on it. It's great for doing anything code related, but it's shit for content creation. Windows has all of this stuff on a very high level. But if it comes down to video editing for example, Windows isn't great, and Linux is absolute shit. And for MacOS, I like the premise, I like how it works, but I dislike a lot of the decisions they made. Everything is hidden away. It is pretty and nice to use, but if you need to do more than the average day's work, it is a pain to do. Every OS has its ups and downs. I think Windows is the closest to being the most usable. The only thing that is missing for me is a proper terminal, like a full bash terminal integrated with the OS.
Currently, I use Powershell on all my operating systems so I have this unified form of using the terminal, but it's not the best on Linux or MacOS.
What is your favorite JavaScript library?
Hammer.JS, just for the name. It's for touch controls, and I love it. I love the name, I love the gimmick. They even have MC Hammer as the logo on their homepage.
What technologies do you never pass up an opportunity to talk about?
Anything game related. I love to talk about how games are made, and how to improve the way they are made, and how to write them efficiently. I don't know when it started, but I think writing games is an art in itself, so I really like when I see tooling for it, or tricks on how to improve something, or getting a better framerate on a shitty laptop.
What are some names in development that you think everybody should know?
I love Paul Lewis, from the Google Devtools development team. He's probably one of the greatest guys in Web Development currently. I love his attitude, I love the articles he writes. He does a lot about performance, especially like CSS. Besides him, there are these giants everyone should think about like Dennis Ritchie, Richard Stallman, Steve Wozniak. Those are like the biggest names in programming, and I think every programmer should know about them. Richard Stallman is especially interesting, he is the biggest hacker/hippie you will ever encounter in your life. I know a few people who met him who said he was one of the greatest guys ever. Dennis Ritchie passed away a few years ago, unfortunately. He invented C.
Do you have advice for people starting out programming in Game Development?
Luckily, we are in the day and age of Unity, which makes it so much easier to get into Game Development. Even if you're not into unity, unreal is the same way. Just try to make games basically, start small, get better over time, enter game jams. Then if you want to apply for a job, usually you can get a low tier game dev job fairly easy, like mobile development. You can do those things remotely. They're very accessible.
The game development industry can be really hard to get into if you're not doing this kind of development. Most companies require you to have at least two finish titles under your belt before you apply for positions they have. Start with mobile games, or small indie games. Even if you release it on your own, it's something. Usually you meet people by working in this field, and the more contacts you gather, the better positions you can get. So if you want to work in AAA, they want you to have two AAA games under your belt, which a paradox in itself.
You need to specialize, which is another thing you need to think about. The game industry doesn't like a jack of all trades. They're not needed. You really need to start with one specific topic at some point and stick with it. Get an overview of technologies used within game development, and then make a decision at some point where you stick with, for example, game engine development, or game logic development, or assets, or animations, or tooling. The game industry is pretty open at that point. If you are a specialist, for example, in animations, which could be someone who just does animation, or just does animation systems, he suddenly becomes a technical artist. and the technical artists are highly sought after in the industry. This is quite easy to get a job in AAA.
Indie games are quite opposite in this regard, you need to do everything. They're smaller scoped in general, except when you have a big team, but then they also specialize.
Is it a good idea to keep it as a hobby until you're ready? Is there a time limit for age?
So, age matters if you've never developed, and start at 35. You're gonna have a hard time. But, if you are a developer already in any field, you're still well suited for this kind of position.
How do you feel about the idea that you need a Bachelor's degree, or a portfolio?
I think for a web developer, a degree isn't important. The thing is, you mostly deal with HR before you get to talk to a developer, and HR tries to pick the best candidate. And sadly, for them one indicator is a degree. In our company, for example, I am the guy who says "Okay, we want to hire him", and I only base it on the portfolio, or their GitHub page, or their StackOverflow, just to see how he programs, and what he does.
How do you deal with someone who interviews well, but doesn't have a body of work?
Without any kind of proof of work, you can't do anything. Most companies have HR, as I said, which take over the gatekeeping part for people who apply. But when I do get someone in front of me, I don't care about his degree or his education. All I care about is what he has coded, and how he codes it. In this regard, I think IT is the least biased industry that exists.
It's like math. Even if you think the math teacher doesn't like you, you could still prove him wrong by showing the correct answer. The same applies for informatics. If someone is a good coder, they're a good coder. Their gender doesn't matter, or their background, or even their age. If they're good, they're good.
Would you say it's a red flag if you get hired without it?
It's pretty normal for junior developers, but if you get hired as a senior without any body of work, I would not work for that company.