Intro

I've been a professional web developer for almost a decade at this point in my life, and I wanted to make a game.

In my time as a developer, I've dealt with a lot of programming tools. I've dealt with a few truly excellent tools, like React, Postgres, and Redis. I've dealt with plenty of average tools, like Angular. And I've dealt with plenty of bad tools - names omitted to protect the innocent.

Unity is not excellent. It's not even average. Unity straddles the line between bad and terrible. I hoped when I was first using it and noticing issues that it would just have a few small problems here and there I could work around. This is not the case. Working around Unity's issues causes one to run headlong into more, deeper Unity issues. These problems are not superficial - they go right to the heart of Unity, and they are unavoidable.

Poor and confusing API design and architecture choices are endemic in Unity - it's a fractal of bad design.

Why I care

Normally, I wouldn't be so bothered. Generally when I deal with something bad, I drop it and move on.

But Unity isn't just a library. It's a lot of people's - particularly children and teenagers' - gateway with coding. I'm worried that these new programmers will learn poor habits and practices from Unity.

One particularly bad line of reasoning I see toted in the Unity forms is "a library is just a library - it's the responsibility of the programmer to bring good coding strategies" I want to set the record straight for all time: This is wrong. Good libraries guide the programmer towards writing good code. Truly exceptional libraries actually cause her to discover new, better ways to think about writing code[1]. Conversely, bad libraries frustrate the programmer and guide her towards writing poor code.

So, here we go. A non-exhaustive list of issues with Unity. I hope that when people - particularly people new to code - read this, they realize that things don't have to be this way, and that issues they run into when using Unity generally aren't their fault - they're on Unity.

Non-Code

The Unity Engine is closed source.

If Unity had all these issues, but was open source, it would be a lot more acceptable.

In other libraries, if I'm noticing some bizarre behavior or strange bug, I can hunt it down in the source if I need to, which helps me either figure out a way around it or (more likely!) figure out that I had some incorrect assumptions. In Unity, if the engine has a bug, it means a time-consuming set of steps for me to figure out what causes the bug and how I can work around it.

Unity uses "Unity Answers", a StackOverflow clone, rather than StackOverflow

This is a poor choice for many reasons:

You lose all the resources that StackOverflow has

StackOverflow is many orders of magnitude more popular than Unity Answers is. This means you'll have more eyes on your question, there will be more mods to sort through duplicates, and there'll be more of a community effort to update old questions. Which leads me to my next point...