Everything that's wrong with modern software can be summed up in two words:
"Unnecessary Complexity"
Programming languages, project structure, build systems. libraries, performance, team structure, all suffer from this.
Unnecessary complexity affects most human activities. Just look at politics and the legal system. We try and solve every problem by adding something new which just adds another set of problems. But programming has a particular problem because programmers usually self select for enjoying complexity. We enjoy being able to understand something complex and get it working. We are engineers of probably the most complex structures humans have ever created.
Because of this it's our job to fight complexity where ever we can. There will always be complex problems where we do need to flex our brains, but everywhere else we need to strive for simplicity. Complexity is the enemy of good software.
Duke Nukem 3D is 30 years old. Wow. Here's a look at the game's first level, Hollywood Holocaust, created by Allen Blum. This was everyone's first experience with the game and we wanted to make sure it kicked off in a great way.
I’m seeing some hot takes that AI assisted coding means that you don’t have to be technical anymore. That’s only gonna last you until the first database migration, or the first security issue, or the first cloud migration, or the first scale out, or the first major regression, or the first refactor that ends in slop. I am finding that I’m learning more and I have to be as technical or more technical than ever before to get the kinds of high-quality output that I expect of any code, regardless of whether it comes from my fingertips or someone else’s - including an AI.
Whether your source comes from open source libraries, your own hands, or an AI via your clever prompt, there is exactly one responsible person for the output. That is you.
I never want to be accused of gatekeeping AI assisted programming, as non-technical people can get a lot of interesting work done. Until they hit a wall, and it’s gonna surprise them how quickly they either need to get technical, or get a technical person to help untangle the mess they’ve made.
The art and science of programming is taking intent and turning it into shipping products. I will never blame an AI - nor should you - for bad output. Own the code that you ship.
@SandyofCthulhu Really enjoying these insights, thanks! Did you design maps primarily from an overhead perspective, or from imagining how it would play from first person view?
I'm so old, I watched Richard write Scandisk!
I was an intern at Microsoft in '93 in MS-DOS, and while I was working away on Smartdrv and so on, @lertulo was an intern writing scandisk in the office next door...
And yes, it surprised me too that as interns we were working on actual, important shipping features, but I think most of the senior devs were embroiled in rewriting DoubleSpace to avoid the Stacker patent at the time...
In any event, as I recall it, Richard wrote the whole Scandisk app in pure x86 assembly, including his own screen UI, widgets, progress bars, and all of that.
Oddly, there were no shared code libraries in MS-DOS. So if you needed to convert HEX to Decimal ASCII, you did it yourself for the millionth time in assembly. Why he chose not to use the UI framework from the Edit command I'm not sure, but I assume he had his reasons.
What I remember most is that he coded it all in vi, and he was a master with it. I've been using vi casually for 40 years, and I know about eight commands. But his hands were just a blur of weird search tags and hotkeys...
I learned a ton just sitting on a chair in his office, asking too many questions, and generally being annoying - picking his brain! He never ultimately did go on to work for Microsoft, much to our loss, I'd say.
@RyanRodemoyer2@devinbgoble This is why for the past ten years mastery of coding has not been the thing I seek, but mastery of simplicity. Most problems we face producing great software involve people not tech.
I’m always surprised when developers are unaware of the tradeoffs they are making by choosing a particular architecture for their applications. Following best practices dogmatically or picking patterns based on buzzwords is the best way to end up in this predicament.
Some days it is kind of depressing watching the idiocracy of modern tech influencers teach devs nonsense that probably comes from job-hopping and never seeing the consequences of actions.
We know how to build better software; it's not what the popular idiocracy promotes though
@jasongorman Programming does not explicitly consider user needs. Also, programming is one small part of software development (not even the most important part)