When you try and build someone else's full-stack web app for the first time.
(... yes, this includes you, #mastodon. ;) I see you in there with your four package managers and your curl-into-bash shortcuts.)
"But Mark, why does it matter that some methods are methods and some 'methods' are functions that take an object as the first argument?"
Theoretically? It doesn't; the two are isomorphic modulo a little bit of bookkeeping convenience on an OOP system knowing the method is always associated with the object.
Aesthetically? Because I'd rather fix *this shit* in an implementation by writing a new function that is every bit the peer of the existing behavior, not "living off in a cupboard somewhere else because I didn't get there first."
More than anything else, my career being "fixing this without being able to modify the object" is the main reason OOP has lost its luster for me.
A big breakthrough for me today was realizing that most of what I know about #cplusplus is wrong.
I mean literally. There was a standards update in the early 2000s that fundamentally changed some rules of the language, in a desperate attempt to wallpaper over the disaster that error messages had become by forcing developers to be more explicit about specific statements (so that the compiler had enough info to distinguish typos creating accidentally-valid statements from mis-instantiations of templates, because the language is complex enough that parsers can't tell the difference... This is related to the legendary issue with the language that `WhenYou<nest<templates>>` some compilers get really confused about whether you meant "close template argument" or "bitshift right" at the end of that statement).
... but I was programming on Windows back then, and Microsoft basically told the standards committee to pound sand; they had a billion human-hours of accrued business logic (their own and their customers) written in MSVC's interpretation of C++, they'd do what they want. So I got CVS-receipt-length error messages but *didn't* learn the tweaks to the language to try and make those shorter. Those tweaks are (in the new environment I find myself in) `-Wall -Werror`-flagged, so the old ways are dead.
Now I have to learn how the language spec literally changed while I was doing something else and that I just un-lucked into training in the wrong dojo.
Hey, gotta know there's a problem to fix the problem, right? ;)
#frc Screwed up my toe having the robotics team test a safety limiter we added on my body.
To the team's credit, the code did exactly what it was supposed to and the robot hit me exactly as anticipated.
... Except that instead of catching the bulk of my foot, it hit right on the nail of my big toe.
Atomic Robo spoilers
I don't think it's biologically possible for me to get enough of Dr. Dinosaur. #AtomicrRobo
So I'm in Blender and I'm generating asteroids using the Add Mesh -> Rock Generator tool (part of the "Add Mesh: Extra Objects" add-on) with an Asteroid template.
(*click* new asteroid)
Each of these rocks is created using a few overlapped mathematical algorithms. The math is pure math, procedurally understood, with no hidden-node neural network in play.
(*click* new asteroid)
The results are sufficient to serve the purpose of putting a rock in a game or image with maybe a little polish. The whole script is here at https://svn.blender.org/svnroot/bf-extensions/contrib/py/scripts/addons/add_mesh_rocks/rockgen.py
(*click* new asteroid)
I can click this button ten thousand times and get ten thousand convincingly-different distinct blobs of rock, suitable for inclusion in a game or visual artwork.
(*click* new asteroid)
I couldn't tell you, precisely, if it's kosher that the author of this plugin made this plugin. He credits a tutorial at blenderguru that is a dead-link (probably because the site was re-organized, but the likely tutorial is easy to find by search at https://www.blenderguru.com/tutorials/how-to-make-a-realistic-asteroid; a quick jog around the FAQ and other info doesn't suggest the author has created this tutorial for the purpose of creating an automated tool to obviate the need for the tutorial.)
(*click* new asteroid)
The author also credits this tutorial (http://saschahenrichs.blogspot.com/2010/03/3dsmax-environment-modeling-1.html), which also has no obvious information on whether or not the author is okay with someone creating an automated tool to obviate the need for hand-building rocks. Broadly speaking though, both tutorials show the user how to wire up a procedural algorithm in to create the rocks by transforming numbers; the plugin mostly scripts the process of recapitulating that pipeline and then adding some constrained random numbers as input. The "artistry" is in the connection of the pipeline pieces and the choice of RNG constraints to make something 'sandstone' vs. 'asteroid' by modifying the height of peaks, the depth of holes, and the frequency of their repetition.
(*click* new asteroid)
And, of course, my input to this process, which is when I stop clicking this button because I'm happy with this asteroid being *my* asteroid, for *this* game.
(*click* Oh, that's not bad.)
Where am I going with all this? not exactly sure. The questions it raises for me are around art and automation as a microcosm, obviously, for the larger discussion around Stable Diffusion and DALL-E. Taking this as perhaps an exemplary problem, we could ask questions like:
* Does it matter that the script author extracted the essence of these tutorials without explicit consent of the tutorial authors, or does "tutorial" imply that it doesn't matter how they're used?
* In some sense, I'm now "competing" with those artists because I can crank out 100,000 asteroids a second... But I'm not? Because I don't want to, I just want one? Has work been 'stolen' from them because I can now crank my own out on my laptop instead of commissioning one of them to make me one? But if so, why write such tutorials?
* Is the real issue with computer automation the use of other people's work without their consent, or was consent given to something like this without thought of how a machine could extrapolate learning a style to a pushbutton process? Because if the only issue is consent, what happens when someone builds DALL-E on top of a thousand paid artists... And those are the last artists ever paid for that kind of art?
* Is the real issue with computer automation that I'm not really an artist if I'm just clicking a button? And who cares if I'm really an artist if my goal isn't to compete with Picasso, it's to get a lump of pixels that a game player will see as "space rock" and behave accordingly?
These questions aren't discrete; all of these technologies exist on a continuum that we've been walking since Ada Lovelace hypothesized that a machine that transforms numbers can transform notes. I don't think we find happy answers on a path that precludes us from using those machines, but I don't think we find happy answers ignoring the question of what it means when humans "make art" either.
In any case, I think I have my space rock.
(*click* file saved)
Control system theory is frustrating because the nomenclature is all over the map.
Sometimes you get a formula where the inventors named the important tuning parameters, which you need to understand to make the formula work, "B" and "Zeta."
And then you get the *coolest* names for relatively mundane concepts, like "control authority." "Control authority" sounds like what an anime character uses to control their magic servant, not the idea that you can't force a motor to do more if it's already doing as much as it can.
Career software engineer living something approximating the dream he had as a kid.