phaedrus
I think there's a lot of parallel with experienced programmers using LLMs and that idea about steroids that it just gets you there faster. I'm pretty sure I could eventually program most of the things I've used AI to write, and what it produces at the top end I/you can't really prove that I wouldn't have thought of it. But is that really true?
I left that model with university which they kept as a display; I felt a little guilty having used up most of three Mindstorms sets for my project. Later I bought my own Mindstorms set, and then one of my then-wife's coworkers - whom we didn't know, and I don't know how she knew of me - randomly gave her a 2nd Mindstorms set to give to me. I keep meaning to re-create this dragon robot someday, leaner so it only takes two RCX. I have a lighter design now for the gripper + wrist section which, like the rocket equation, would allow the whole rest to be smaller if the last stage is smaller.
I wanted to throw a shoe at him. A static type check doesn't stand in for "a" unit test; static typing stands in for an unbounded number of unit tests.
Put another way, this common misconception by users of languages like Javascript and Python that unit testing is just as good as type checking (plus more flexible) is a confusion between the "exists" and "for all" logical operators.
Much like how Cosmic Inflation in the early universe left the imprint of microwave background radiation written exponentially large across the sky, I believe the exponential expansion of computing during the era of Moore's law left whole sections of scale in software not-fully-explored.
Specifically, as "average app sizes" went from 1K - 10K - 100K - 1M - 10M - 100M+, you could imagine the 1K-10K got fully explored because the space wasn't that big to begin with, and the 1M - 10M range got, if not explored at least inhabited, but it could be that that middle range of "neat applications that weigh in ~100K+ but less than 1M" didn't get completely explored because we didn't spend enough time in that era of computing.
A similar thing may be playing out in AI scaling, where we went from tiny to medium to huge model sizes, but now some new participants are going back and doing neat things with medium sized models.
The irony is in my day job I am developing a traditional downloadable Windows application which will come with an immediate user base. But although I have considerable discretion over the project, it isn't mine (in an intellectual property sense), and I'm not getting rich off it.
I am assuming the best thing I can do for it is lose weight, but that's easier said than done.
One might argue maybe a mixture of experts is just the best that can be done - and that it's unlikely the AGI be able to design new experts itself. However where do the limited existing expert problem solvers come from? Well - we invented them. Human intelligences. So to argue that an AGI could NOT come up with its own novel expert problem solvers implies there is something ineffable about human general intelligence that can't be replicated by machine intelligence (which I don't agree with).
One older coworker is quite enthusiastic about it (as a mechanical engineer, he designed some of the custom rigging), so perhaps this is a case where he does it because he wants to & demonstrated aptitude so they let him. He actually decided to on his own to stop when a recent near miss made him question "why the hell" he isn't leaving this to professional riggers.
I don't know how/why my younger engineer coworker ended up doing it. Both her parents are in this same field and I know she feels a lot of pressure to excel and not say no to things. And when we come out to help a site there's a lot of pressure to restore service. So she may have agreed or even volunteered but not for the right reasons.
It may though be a case where no one thought to mention to me that this isn't a required thing, that some are doing it because they want to, etc. My coworkers aren't always good at realizing what new employees don't know, and I'm not good at picking up nuance.
But I definitely was "voluntold" to go out to a site and cut cables, which is a specialty technique I'm not properly trained in and would've taken place outside in the elements. (Did I mention I'm a programmer, a profession I chose in part because it takes place indoors? I also have undiagnosed/self-diagnosed dyspraxia; it would have been a disaster.) Thankfully the trip got canceled for other reasons, but my point is I wasn't asked; I was just told we need to send someone so you're going.
I work for a team in a government agency that does engineering support for RF based navigational aids. Because we're short staffed (Congress underfunds us), everyone fulfills more jobs than their official title. (There's an elastic clause in government worker job descriptions, "and other duties as assigned.")
Anyway. I live in fear of the day I'm called upon to climb a tower because they need me to do that. My regular job is software development! Obviously I'm not going to do it, but I'm unsure what my rights are / what will happen if and when I refuse. Unfortunately my position isn't union protected because my older peers didn't sign on when the (non-computer science) engineers did.
(I seem to have a good size memory buffer for this which no doubt has to do with enabling the speed reading. I remember in typing class classmates were amazed that the way I transcribed assigned text was to read a half a page or more and type it all out verbatim before going back for another chunk. Until they pointed it out I didn't think that was anything special.)
I will admit that at 900 WPM I wasn't getting 100% of the material (albeit enough to get 90% on the comprehension test - which is less than 90% of the source material, just enough source material to reconstruct 90% of the gist). I was really trying to see how fast I could go, since it was computer graded and I could gamify it. (I did get a different text to read and questions to answer about it each time; I wasn't re-reading the same text.) Through this same exercise I learned my comfortable reading speed was 200 - 300 WPM and speed reading without loss of comprehension (just requiring effortful concentration and/or impatience) was around 500.
As an adult I'm certain my reading speed is NOT that fast anymore, and I often find myself re-reading text I just read.
https://monotech.fwscart.com/product/nuxt-v2-0---microatx-tu...
Skimming this paper it's unclear to me whether the author is referring to one or the other, or both.
Interestingly I'm not sure that the mind wandering is separable from my creativity and problem solving. Often I'll come out of a blank period with the answer to something without consciously having been thinking about it. I think of these periods of "lost time" in my day as background processing - it's just my misfortune I live in a world where it's not socially or economically acceptable to space out for long periods throughout the day.
The resolution algorithm(s) implemented by a general purpose logic programming or relational language are not the only ones possible, and being more general may not be efficient for the type of problem you want the game engine to solve efficiently. Conversely extending a logic programming language to natively include these features may invalidate simplifying assumptions or require a change in evaluation order that makes the language impossible to implement as simply or efficiently.
A concrete example (of extending logic programming with game specific features):
I wanted to both use logic programming relations and also linear constraints, so that you could say something like "A <= (B-10.0) .OR. B <= (A-10.0)" which you could picture as constraining the position of the centers of two width=10.0 game objects so that their boundaries do not overlap, but you don't care which is in front of the other. (Statements like this would be used to build up a scene or more complex game object qualitatively, without pinning down exact coordinates rather letting the linear constraint solver pick them.)
Since running the linear constraint solver to resolve something like "f(A) <= g(B)" actually (potentially) updates all of the interrelated variables (A or B might also have constraints against C,D,E,F), running it as soon as you pick the LHS or RHS of the logic expression "prop(X) .OR. prop(Y)" could potentially invalidate propositions elsewhere previously committed to. So what you probably want to do is, rather than interpreting the "<=" on linear variables as a test with a boolean result, interpret it as a command to add "f(A) <= g(B)" to the global store of linear constraints, and then at some later time run the solver on the complete matrix of linear variables.
That leads to design questions like how does the language know when it's done adding constraints and time to solve, what if we really do need a logic clause to depend on testing a value not constraining it, etc. But all of that's just a distraction from the real issue, which is that for the case of BOTH the linear constraint solving and the logic programming, in the context of a game engine we really need to have more control over both when lengthy computation is run and how long it runs.
That is, even if we design a good way for the extension features to run from the POV of the logic language, from the POV of the outer system we still have the problem of sometimes the search time to resolve part of a logic program blows up and it's difficult for the programmer to always predict when/where that will happen. In this sense it's not even required that hand-rolled imperative code be faster, it can be slower - as long as it's predictable.
And in reality you wouldn't even necessarily be hand-rolling it; what I'm talking about is whether the rules engine is a solver that is externally driven (and pre-emptible) by imperative game code, or the whole game runs within the "solver" (i.e. relational language). As tempting as it is to imagine what could be done if literally "the whole" game were relational, the fact is using that technology for a whole game implies a magic relation solver that doesn't actually exist.
If so, it solves a real problem I've been having for eight years.
The issue is, if you want complete decoupling (in the sense of orthogonality) among all four of:
- screen (window) size & resolution (especially if game doesn't control)
- sprite/tile image quantization into pixels (scaling, resolution)
- sprite display position, with or without subpixel accuracy
- and physics engine that uses floating point natively (BulletPhysics)
then to achieve this with integer drawing coordinates requires carefully calculating ratios while understanding where you do and do not want to drop the fractional part. Even then you can still run into problem such as, accidentally having a gap (one pixel wide blank column) between every 10th and 11th level tile because your zoom factor has a tenth of a pixel overflow, or jaggy movement with wiggly sprites when the player is moving at a shallow diagonal at the same time as the NPC sprites are at different floating point or subpixel integer coords.
A lot of these problems could be (are) because I think of things from bottom up (even as my list above is ordered) where a physics engine, based on floating point math, is the source of Truth, and everything above each layer is just a viewport abstracting something from the layer beneath. I get the impression SDL was written by and for people with the opposite point of view, that the pixels are important and primary.
And all (most) of these have solutions in terms of pre-scaling, tracking remainders, etc. but I have also written an (unfinished) 3D engine and didn't have to do any of that because 3D graphics is floating point native. After getting the 2D engine 90% done with SDL2 (leaving 90% more to go, as we all know), I had a sort of WTF am I even doing moment looking at the pile of work-arounds for a problem that shouldn't exist.
And I say shouldn't exist because I know the final output is actually using floating point in the hardware and the driver; the SDL1/2 API is just applying this fiction that it's integers. (Neither simple, nor direct.) It gets steam coming out my ears knowing I'm being forced to do something stupid to maintain someone else's fiction, so as nice as SDL otherwise is, I ultimately decided to just bite the bullet and learn to program WebGPU directly.