Blow and Muratori gained a following of engineers by bashing existing popular languages and engines, claiming they were all garbage.
They both started this after the Witness came out, 10 years ago.
Since then, guess how many games Muratori has shipped? 0. (He cancelled his announced game.)
Guess how many Blow has shipped? 0 so far, but it sounds close now.
These engineers spent their time ragging on other developers for slinging bad code and doing things horribly, meanwhile those developers were shipping games and apps and all sorts of other stuff.
That's kind of a rediculous assessment. "How many games have you shipped in the last 10 years" is the standard for how good your advice is.
John has made two games + one soon in the last 17 years. Braid started off the indie boom, and the witness was a blockbuster hit. Casey works on game engines and optimization, and has an entire video series about writing a game from scratch.
I agree that some authors don't ship any actual software and engineers should stray away from their advice, but this is not that case.
To be fair, I had not heard of the Witness until well after it came out.
Braid came out the same time XBox Indie Games.
I will say, I do not find a lot of their rhetoric convincing. Especially for people who have never attempted to write the software they are criticizing.
Blow only writes single player games that do not persist significant data to the machine. Nothing bad happens if your save file is corrupted. Nothing of value is lost if scene transitions have a bug.
But they're going to tell me that hyper-scaled multi-user real-time software is written poorly?
Also, I've been watching Muratori's Handmade Hero series. The deeper it gets into the game, the worse it gets. At one point, he's like "Ah, I dunno, we'll implement bubble sort because we don't have time to do any other sort." Followed by a diatribe about why bubble sort is a bad name. It's a fine name. Things bubble up.
Second, merge sort is just as quick to write and faster.
But in general, they alternate between speaking in platitudes and disparaging other software.
> Especially for people who have never attempted to write the software they are criticizing.
E.g. Casey and Blow often criticise the Visual Studio debugger. It's slow, has quite limited functionality. And it progressively gets worse over time (e.g. it can no longer update watched values at the same speed as you step through the program).
Do they both have to write a debugger to demonstrate how bad it is?
You don't have to write some software to criticise how bad it is. E.g. I cannot but make fun of Discord for implementing "we will intentionally kill our app if it consumes 4GB of memory and are very good at prioritising fixing memory issues seeing a whopping 5% improvement for p95 of users": https://www.reddit.com/r/discordapp/comments/1pej7l7/restart...
Doesn't mean I have to write Discord to criticise it. All I need is an understanding of rather basic performance and of general engineering practices.
> Especially for people who have never attempted to write the software they are criticizing.
Casey was criticizing new Windows Terminal got into an argument with Microsoft's project manager that said that it was impossible to implement optimizations that Casey talked about. Well, Casey reimplemented terminal, it was not that hard.
Part of the purpose of the series of Handmade Hero is to build a game from the ground up with no dependencies. So I don't think he's bringing in stdlib
So he could use that, but goal is to be someone who doesn't necessarily need to do that.
At some point I think he caved and just started using OpenGL. I don't know because he turned off all of the comments on his youtube channel. I think the only thing he's demonstrated is how bad an idea "building a AAA game entirely from first principles" is.
He says verbatim his goal is to be a stepping stone for serious engine programmers (not necessarily "general purpose", but definitely AAA-level), even though obviously we are not going to be making a AAA game for obvious reasons :)
So fair enough, but between that and his claim that he's showing people how to create a "professional quality" game I think the difference between a AAA game and a "AAA-level" game engine has no distinction, it's basically the same thing.
Is what he has done so far professional grade, capable of "AAA-level" games? I don't think so, but I concede that probably depends on what your parameters for "AAA" and "professional quality" are. It might be fine for indie games but it seems to me that Casey was selling an audience on revealing something deeper.
Soulja Boy never made any videos about Garry's Mod
This is kind of a joke and I know he was mostly poking fun at Braid but this does speak to how mainstream indie games got in that first wave that hit XBLA.
The point is that Blow has two blockbuster hits under his belt and can afford to take a decade to ship a single game. Most people would go broke never having shipped a game if they tried to do things Blow's way.
Casey hasn’t worked on game engine or engine tech in almost a decade. That’s not to say he doesn’t know what he’s talking about, but imho it’s important to be aware that he hasn’t worked on a real shipping product in a long time.
another POV is, business IT projects fail at a higher rate than video games do! the people who post about "shipping" are projecting: "at least my garbage is delivered frequently, which is key to being employed, not key to creating meaning."
He didn't need to finish it in order for it to have an impact. Makers of FilePilot and Animal Well both attribute Handmade as being big inspirations for them to go the way they did. They said, they got the most value from the first 50 eps or so. You'll hear lots of them on the Wookash podcast.
So for your opinion to carry any weight, please enlighten us as to the games you have shipped that qualify you to comment on their take on programming practices.
Not really. Let's reverse the situation on you - why should we take your opinion seriously, we have no idea how much you have shipped, if anything at all, so by your logic, your ragging on the other programmers practices is ridiculous.
I've shipped a few things over the years, but doubt I have strong takes in programming, besides 'the "properness" of a variables name is dependent on the amount of lines between it's definition and usage.' Doubt anyone will take my considerations seriously.
I'm not making any claims about programming practices
If someone comes out saying "you guys are all doing this wrong" and yet they can't finish their own project then why would I take their advice seriously?
If you suggest a way of doing software development and you can't even show it working out to completion, what does that say about your proposed methods?
I had a larger rant written, but this is the only part that had any value:
Yes, one can argue that lack of produces results does not give big plusses towards their work processes, but it does not necessarily negate the value of the concepts that they preach.
The value of a thing is not only defined by who is spouting it, one must evaluate the argument on it's own merits, not by evaluating of the people yelling about it.
There are plenty of concepts in this world that I cannot make work, that does not mean that the concepts are bad. It only means that the failure reflects on me and my in-capabilities.
And this might be something that you are not noticing: You are making claims about programming practices indirectly by stating that THEIR practices are not worth considering due to lack of shipping anything.
It's not really the same. Casey is suggesting people that don't spend 10 years crafting everything from scratch are somehow "lesser than." The user you're replying to is pointing out that Casey has set a completely arbitrary rule for game quality that conveniently leaves out his inability to ship something, and that's funny.
We're not saying games taking longer than a few years are failures, we're saying good games can encompass both approaches. But Casey, and his followers, are doing purity tests to feel good about themselves.
And this is assuming the games they ship are even good or noticeable to the user. I don't much care for Braid or The Witness, and I don't want my favorite dev studios to suddenly write everything from scratch every time. I would have a lot less fun things to play.
If you mean Computer, Enhance!'s Performance Aware Programming series, it's ongoing, but the pace is slower than about 1.5years ago. Given how good it is, and how fastidious and comprehensive Casey is, I imagine it doesn't really pay for itself, even with an impressive subscriber count.
I give Blow a little benefit of the doubt just because spending all of your money on your small business and seriously facing the risk of failure is pretty stressful. I'd be a lot meaner than he is if I were in his situation.
I think I'll judge that by looking at how convincing their arguments are (some are not, I think), not by raw output. After all they already output a lot.
He wrote this whole game in it. Apart from that, a couple dozen or hundreds of beta-testers. Not sure whether the language ever gets released, maybe he's too worried about having to maintain it and not being able to change it anymore.
Why are they being criticized from the arbitrary metric of the last 10 years, when both had careers far longer than that? Jon's advice for software is the same advice he used when developing Braid and the Witness, which are both great games and for their time, technological feats, especially from an indie.
Jon's production from the last 10 year isn't even due to bad software methodology from what I observe, it's mainly seems to be because his company is creating a new programming language tailored to games. This doesn't seem to be done to make money, but rather, to try and fundamentally fixed issues that he perceives in game development. It's a lofty goal, and the compiler itself uses the same software methodolgy that he argues for, and it's quite good.
So I don't think this critism is fair. We should look at the arguments they present, and their multi-decade long careers as a measure of thir authority on this subject.
> Since then, guess how many games Muratori has shipped? 0. (He cancelled his announced game.)
On one hand I'm sympathetic to this view point, on the other, he's done thousands of hours of YouTube videos and inspired a ton of programmers.
> Guess how many Blow has shipped? 0 so far, but it sounds close now.
Not going to lie, it's probably difficult being financially secure and still hustling like you're broke. I imagine it's more by choice (to do other things) than being unable to ship.
I don't much about casey, but jblow seems to have gotten popular partly because of the timing with live streaming becoming mainstream and also because people find his brash "tell-it-like-it-is" opinions refreshing. It's the same reason why people tend to gravitate towards guys like linus or stallman. Having opinions and not being a fence-sitter makes you interesting.
If there's anyone who I think deserves to be able to say "all existing languages/engines suck" it's someone who made his own language from scratch to make an engine with it from scratch to make a game with it from scratch to combat the problem.
I broadly agree with the author’s point there, but disagree with the specific language he used. In my view, engineering includes those pesky non-technical considerations, like the business context and the human factors, which bring their own tradeoffs and priorities to the engineering decision-making.
That is, his “pure engineers” are not really doing engineering, at least under my understanding of the term, whereas (some of) the impure engineers actually are! :)
What? Its about 3-5 years for a AAA game and you ideally pipeline things such that a studio is shipping somewhat frequently. Almost no one can front a decade worth of development without shipping anything.
Where are you getting a decade from? Consoles ship more often then that.
Square Enix: so so many but at least a few FF14 expansions, FF15, Nier: Automata, Dragon Quest XI, Octopath Traveler, Kingdom Hearts III, Final Fantasy 16, Final Fantasy VII Rebirth
Bethesda: The Elder Scrolls Online, Fallout 4, Fallout 76, Starfield
Epic: Robo Recall, Fornite.
Epic cancelled Paragon and Unreal Tournament and Fortnite is a live service game where they're constantly shipping content so its harder to define single releases but they have new money coming in from new content.
And these are only from the main studio, not the dozens of games published by these entities.
There's plenty of examples there of multiple games per studio. Hard to get public into per "team". Teams are mutable within a studio and devs roll off and onto other teams.
Arguably teams are tied to and only ever ship a single game so I'm not really sure what you're arguing at this point.
Someone can't honestly write this unless they aren't a fan of games to begin with. Are you saying the Clair Obscur devs don't care about their craft because they used Unreal Engine?
There is a massive gap between Handmade Hero and a bloated, unoptimized game. It's one thing to be a purist that wants to do everything Handmade Hero style. It's another thing entirely to claim people who don't do that are hacks who don't care about their craft. There is A LOT to game development other than writing things from scratch.
Casey has made great resources, but I understand OPs frustration. He's created a culture of devs that think people shipping games over 100mb are soulless profit chasers. Animal Well is awesome, but not everyone wants to spend 7 years making a platformer.
Probably a nuanced point in what's the purpose for espousing the virtues of performance if you don't have the output to show it is worth it?
If you want advice about making games would you rather learn from the person that routinely ships games or a person that shipped a game once 10 years ago?
Is that a trade off worth chasing? "Potential perfection" with nothing to show for it?
More like, shipped 2 hit games, which were both technological and artistic feats for their time. And developed a blazingly fast compiler. Casey also was a developer in RAD game tools developing animation tools. Their output is probably better than most industry developers. I understand if you don't like their attitudes and the way they attempt to teach/preach to other engineers, but IMO their work speaks for itself. I take their advice and try to apply it to my own work, because it seems to have work for them.
I'm not saying I don't like their attitudes but it's a viewpoint I am struggling with myself.
I'm starting to realize caring about all these minutia of details that don't really matter for my professional goals. I know my software isn't special, caring about pumping out as much performance as possible when I just sling JS professionally feels a tad myopic?
What is the point of it just continues the pattern of procrastination towards the actual goals I want to achieve? Does this also apply to them?
What is the point of espousing all these supposed virtues when the output isn't that special? I mean Braid is still good, but let's not act like greener devs haven't put out good games too without all the jackassery baggage.
Yea I largely agree with you on that point. I think when discussing Jon, Casey (and to add another, Mike Acton), there's actually a series of advice that they give that get lumped into a whole, and people don't really see the parts of what they're saying and instead focus on the part that sounds most critical to their work.
I do agree that if you take from their "teachings" that every dev needs to optimize every thing, and never use any other language than system languages, that advice is myopic for most devs. However, I don't really see them arguing for that, at least not entirely.
From following their teaching for a while, they mostly preech about the following things which I agree with, even when talking about higher-level languages, technologies.
- Get the clowns out of the car: Don't make things needlessly expensive. Write simple procedural code that maps cleanly to what the hardware is doing. This is essentially stating OOP, large message passing, and other paradigms that abstract the problem away from the simple computations that are happening on your computer is actually adding complexity that isn't needed. This isn't about tuning your program to get the highest amount of performance, but rather, just write basic code, that is easy to follow and debug, that acts as a data-pipeline as much as possible. Using simple constructs to do the things you want, e.g. an if-statement versus inheritence for dynamic dispatch.
- Understand your problem domain, including the hardware, so you can reason about it. Don't abstract away the hardware your code is actually running on too much where you lose vital information on how to make it work well. I've seen this many times in my professional career, where devs don't know what hardware the code will be running on, and this inevitably makes their code slower, less responsive to the user and often drives up cost. There are many times in my early career (backend engineering), that just simplifying the code, designing the code so it works well for the hardware we expect, greatly lowered cost. The hardware is the platform and it shouldn't be ignored. Similarly, limitations that are imposed by your solution should be documented and understood. If you don't expect a TPS greater than some value, write that down, check for it, profile and make sure you know what your specturm of hardware can handle, and how much software utilization of that hardware you're getting.
- Focus on writing code, and don't get bogged down my fad methodologies (TDD, OPP, etc). Writing simple code, understanding the problem more deeply as you write, and not placing artifical constraints on yourself.
Now each of these points can be debated, but their harder to argue against IMO then the strawmany idea of them proposing that you must optimize as much as possible. And they argue that you will actually be more productive this way, and produce better software.
FWIW, you may have some datapoints showing that they do propose what I called a strawmany version of their ideas, but I have seen them advocating for the above points more so than anything else.
---
I do want to add, for Jon Blow, I don't think he has a problem with people using engines. From what I've seen he's played, and loved games that used engines in the past, and had no problem with their output in terms of gameplay or performance. From his talk about civilization ending relating to game dev, he's more concern that if no one tries to develop without an engine, we as a civilization will lose that ability.
> I don't think he has a problem with people using engines. From what I've seen he's played, and loved games that used engines in the past
He's also said quite openly that if you're only starting, it's fine if you reach for a ready-made engine. It's that you should try and understand how things and systems work as you progress.
Yes, this is well put. I was heavily influenced by Casey back in 2014 and the advice I give juniors now is always that first point about "getting the clowns out of the car". There's a lot of crossover with the "grug brained developer" here too, which is much more aligned with the web/enterprise world.
I find it very hard to convince people though. It runs counter to a lot of other practices in the industry, and the resulting code seems less sophisticated than an abstraction pile.
Aha! I think I know my contention with this advice now. Who can actually disagree with this? Like I'm saying yes to everything, no one I know would say no to this. Never had a coworker say aloud: "I want to write code to make things worse."
These are the platitudes of our industry that no one disagrees with. Like you said, this is what Blow + Muratori teachings can be distilled into. But there is something worse it also assumes, coming from such people.
Both Blow + Muratori have extremely privilege dev careers that a good ~80% us will never achieve: they have autonomy. The rest of us are merely serfs in someone's fiefdom. Blow has his fief, Muratori his. They can control their fiefs but not the majority of us devs. We don't have autonomy in the direction of the company, we don't control the budgets, we don't even control who we interview or hire.
Assuming that this onus of organizational standards has to be placed on someone with no authority to dictate it isn't just. Also as someone who has consumed content from these two for about a good 8ish years as their videos pop into my feed: I've never see them advocate for workers to be empowered to make their environments better. They mostly just trash on devs that have no authority.
With that mindset I need to seriously decouple myself from these people. Plenty of other devs advocate for the same things in our craft while also advocating for better rights as workers.
Some people actually have mouths to feed. Some people don't have the luxury of preaching for whatever ideals they have without a need to release anything in 10 years; that doesn't make their products "garbage".
> Some people don't have the luxury of preaching for whatever ideals they have without a need to release anything in 10 years
Wait, how did they gain this "luxury"? Are they trust fund babies or something?
Or did they earn their big stash of money by producing "garbage" and now retroactively are preaching ideals that they themselves didn't follow or what?
This line of "criticism" doesn't make any sense whatsoever.
After all both in question live off money they've made and/or are making from their (arguably) uncompromised quality work.
That is to say their uncompromised quality work has directly resulted in them being able to not release anything for close to 10 years, and practice their ideals in software they ship even if the "shipping" takes 10 years to do.
It would be more fair to say, that most people don't have the craftmanship and skill (and not the luxury) to be able to produce high quality work and software that enables them the so called "luxury".
>Or did they earn their big stash of money by producing "garbage" and now retroactively are preaching ideals that they themselves didn't follow or what?
In the JBlow case - yes, he made his money using C++. So far, he hasn't shown that using Jai is particularly productive for software engineering.
> So far, he hasn't shown that using Jai is particularly productive for software engineering.
And how would he do that exactly to whatever ungodly standards you are setting for the man?
Many people have criticized C++ in past (which is very easy to do), yet he's practicing what he's preaching in the most direct way humanly possible, he's both (1) designed and implemented a new programming language (that has directly addressed most of the issues), whilst (2) also making a complete non-trivial game in the newly designed language at the same time.
His games have always taken long time to make, and now he's making game + engine + programming language. At the same frigging time!
The only "luxury" JBlow has is that he's an exceptional individual and you're not. He has rare combination of ability, perseverance and work ethic, and by all accounts most people are neither of those things at once.
Most criticisms 99% of time are either misrepresentitive, misinformed jealousy or something to do with politics.
I have no issue with personally acknowledging that some rare individuals are simply way better than me.
And to prevent sounding like a gushing-fanboy, I suspect that his newest game won't sell very well, because his first two games have atleast something to appeal to general public (either visuals of Witness or time travel mechanics (somewhat novel at the time) of Braid) while this game doesn't appear to have the same draw.
This game has too much of a generic-sokoban puzzler vibe to it to appeal to the general public who aren't already ardent puzzler fans (and are there enough of those and can he reach enough of them? etc). And the trailer doesn't help to change this perception.
Just to be clear, your comments are implying everyone who doesn't write everything from scratch is shipping garbage.
Ignoring how misinformed that opinion is, I would say The Witness is a very compromised game. Maybe if less focus went into the technical aspect, it could've been better.
Fact of the matter is that code quality is a pretty small part of whether a game is good or not. It can be notable when it's good and it can sink a game when it's really bad, but there's a huge gap in the middle where it doesn't really matter that much (especially to the player).
They both started this after the Witness came out, 10 years ago.
Since then, guess how many games Muratori has shipped? 0. (He cancelled his announced game.)
Guess how many Blow has shipped? 0 so far, but it sounds close now.
These engineers spent their time ragging on other developers for slinging bad code and doing things horribly, meanwhile those developers were shipping games and apps and all sorts of other stuff.