Alen Ladavac

4.7K posts

Alen Ladavac banner
Alen Ladavac

Alen Ladavac

@AlenL

Code, project management, design and psychological help for programmers. Tech Director, Graphics @Roblox | prev Google Stadia; Serious Sam; The Talos Principle

Zagreb, Croatia Katılım Haziran 2009
486 Takip Edilen1.8K Takipçiler
Sabitlenmiş Tweet
Alen Ladavac
Alen Ladavac@AlenL·
I promised to write about this a long time ago... @alen.ladavac/the-elusive-frame-timing-168f899aec92" target="_blank" rel="nofollow noopener">medium.com/@alen.ladavac/… This is geared more towards a causal reader than my GDC talk was. Will make another write-up with all the gory details for technical audience later, but this one already has some of the videos I promised.
English
12
56
142
0
Alen Ladavac
Alen Ladavac@AlenL·
@senkorasic I would argue the opposite. AI would have lower cognitive load with C++ than Rust. But that only applies to "pragmatic" C++, not the so called "modern C++". The "modern C++" is an abomination of complexity - a road to hell paved with "automatic safety - that isn't ".
English
0
0
0
64
Senko Rašić
Senko Rašić@senkorasic·
This feels true. Today, everyone jumps on the AI+Rust bandwagon. Wouldn't be surprised if in 2027 someone publishes a research paper measuring LLM cognitive load due to manual memory management as % perf drop.
David Crawshaw@davidcrawshaw

Why does this matter in 2026? Because agents, just like humans, do better when not distracted. GC makes it easier for humans to solve a problem by not having to track free(). Take that work away from agents and there is more intelligence available to solve your problems.

English
3
0
3
902
Sebastian Aaltonen
Sebastian Aaltonen@SebAaltonen·
@tanujDE3180 Could be implemented as a single hashmap request. Million usernames takes ~20MB of RAM (average length = 20 characters). Server can do in-memory request.
English
10
0
282
79.9K
Tanuj
Tanuj@tanujDE3180·
Interviewer: You type a Gmail username and UI instantly shows "Username already taken" There are millions of users globally How does it check so fast?
Tanuj tweet media
English
297
195
6.7K
4.2M
Sebastian Aaltonen
Sebastian Aaltonen@SebAaltonen·
@EOEboh Console game development: Nintendo Switch, Sony Playstation, Microsoft Xbox. All of their tools and SDKs require a Windows PC. No Mac support.
English
7
6
454
32.1K
Alen Ladavac
Alen Ladavac@AlenL·
@Jonathan_Blow The answer is trivial - the construction company is not paid extra to keep maintaining the building in perpetuity.
English
0
0
6
480
Alen Ladavac retweetledi
Casey Muratori
Casey Muratori@cmuratori·
This is the best workaround I've seen - much better than what I used to do! I never noticed the "Associate Handles" bar in there before.
David Jones@djonesuk

@cmuratori There's better tools but I use Resource Monitor when I don't have access to an alternative.

English
8
11
288
20K
Alen Ladavac retweetledi
vas
vas@vasuman·
Claude 4 just refactored my entire codebase in one call. 25 tool invocations. 3,000+ new lines. 12 brand new files. It modularized everything. Broke up monoliths. Cleaned up spaghetti. None of it worked. But boy was it beautiful.
vas tweet media
English
1.2K
2.6K
42.1K
3.9M
Alen Ladavac
Alen Ladavac@AlenL·
@iquilezles Your mistake (/s) is that you are solving actual problems and then expecting an agent to do it for you. You need to pick something that's been done a million times. Then it will "excel".
English
1
0
1
151
inigo quilez
inigo quilez@iquilezles·
I've been giving a serious attempt at using Cursor in a C++ code base. I might still be using it wrong, but I've only managed to get it to write code that compiles and is also actually useful, once every 20 attempts or less. When it does succeed, it's limited to very narrow tasks, never large enough to offset the time wasted by commanding and helping the AI do the work. So as of today, the more I use Cursor, the bigger the productivity loss (and frustration), very far from the advertised claims. I haven't tried other competitor products though, but I'd expect the same unless there's some model out there trained through reinforcement learning instead of basic pattern memorization? Regardless I'll keep trying though because I really want the super-powers; live is short and I have lots of ideas to try. Or is my experience an outlier, and are other C++ developers actually successful with these tools?
English
108
38
651
89.4K
Alen Ladavac
Alen Ladavac@AlenL·
@Jonathan_Blow Have you taken into consideration the possibility that that whole ecosystem is optimized for something else besides what you listed? Perhaps... idk... job security? 😉
English
1
0
2
266
Alen Ladavac retweetledi
Jandel
Jandel@jandelRblx·
This goes out to all the haters at GDC from 2022-2024 if you aren't taking Roblox seriously then you are getting left behind!
Jandel tweet mediaJandel tweet media
English
354
137
2.4K
405.3K
Alen Ladavac
Alen Ladavac@AlenL·
IYKYK
Jonathan Blow@Jonathan_Blow

I read this article about software development, which I knew about because I saw Prime reacting to it: notashelf.dev/posts/curse-of… For the most part I think it is fine: a relatively young programmer is doing the healthy work of introspecting on what he should really be doing. But there's one part of the article that I think is a deep mistake, and the author doesn't know it's so wrong because he has never experienced the alternative: "Software doesn’t stay solved. Every solution you write starts to rot the moment it exists. Not now, not later, but eventually. Libraries deprecate. APIs change. Performance regressions creep in. Your once-perfect tool breaks silently because libfoo.so is now libfoo.so.2. 2 I have had scripts silently fail because a website changed its HTML layout. I have had configuration formats break because of upstream version bumps. I have had Docker containers die because Alpine Linux rotated a mirror URL. In each case, the immediate emotional response was not just inconvenience but something that moreso resembles guilt." Yes, this is true in much of the programming world. But there is another world in which people build things that last much longer. I have done it many times. I shipped a binary for this game Braid in 2009 that you can still download and play on Steam 16 years later. If you are pretty young (like 35), you can run binaries on Windows that were compiled before you were even born, which is amazing given how hard they have been trying to f up Windows lately. On an emulator like MAME, you can play arcade games programmed in 1979. If today's software "technology" is so much better, why does it fall apart like tissue paper? The author is not wrong about the cited decay. But this decay is not inherent to the practice of software. It's due to choices made, usually foolishly, by the people designing the systems being interacted with. And, it's due to a lack of knowing better, non-exposure to the sector of programmers who are very concerned with their code lasting a long time, actually. The way you make code last a long time is you minimize dependencies that are likely to change and, to the extent you must take such dependencies, you minimize the contact surface between your program and those dependencies. The actual algorithms you program, the actual functioning machinery you build, is a mathematical object defined by the semantics of your programming language, and mathematical objects are eternal, they will last far longer than your human life. The goal then is to avoid introducing decay into the system. You must build an oasis of peace that is insulated from this constant bombardment of horrible decisions, and only hesitantly interface into the outside world. This means, for example: If you are shipping on iOS, you only reluctantly use any functions iOS gives you, because when you use them, Tim Apple will come along and break your program next year for arbitrary pointless reasons, because Tim Apple does not respect you or anyone you know. This means a program cannot last forever on iOS, because Tim Apple likes breaking your things and watching you submissively clean them up. But the core of your program, which could be 95% of the code, is fine, and you can deploy it elsewhere. This means you have to insulate from Linux userspace, because of all the jackass decision making that introduces constant incompatibilities while somehow never making the system better. Using a library dependency to do font rendering or sparse matrix math? That dependency gets checked into your source tree, a copy of exactly the version you use. Ten years later you can pull down that source and recompile, and it works, because your program is a mathematical object. If you want to upgrade to something newer that has bug fixes and so forth, you are free to do so, but you are also free not to do so, and your program still works. (And how many of these bug fixes do you really need? Your program worked correctly when you shipped it to the greatest extent you could measure, because you are a skillful software engineer who wants to ship things of a high quality). Everyone who got into programming for the joy of it knows, at some level, that the magic of programs is that they represent complexity that is replicable over time (and thus they exist outside of time). But the trashy programmer culture of the past 20 years stopped aspiring to this, and now has forgotten it is even possible. And so long as people have forgotten, decisions will continue to be made that make the problem worse. There are programmers who only write glue code, and who think that's what programming is; to these people what I have written above will not make sense. But the good news for that contingent is, they can always just stop writing glue code and start doing something else! If today's software "technology" is so good, why do you think it needs so much glue? Maybe there is a stylistic problem. So if you are looking for what to do in the world of software that can represent a lasting contribution, maybe this is food for thought. @NotAShelf @ThePrimeagen

Suomi
1
0
1
342
Alen Ladavac
Alen Ladavac@AlenL·
@michael_timbs @cmuratori @Jonathan_Blow But the main point of SaaS should be that you still retain MRR even if you don't release pointless update. The curse of new versions for sake of new versions was in the buy-once model.
English
1
0
0
27
Michael Timbs
Michael Timbs@michael_timbs·
The world of SaaS and its obsession with MRR also leads to a constantly evolving product to justify the recurring and endless revenue streams. In that world not only is software expected to change, but a lot of the way you build anything assumes that everything *will* change at any moment
English
1
0
3
723
Alen Ladavac retweetledi
Alen Ladavac retweetledi
Tyler Glaiel
Tyler Glaiel@TylerGlaiel·
Easy way for programmers to go viral and become programmer influencers on this site is to just pick some random language feature and act really angry about it all the time
English
19
6
422
32.5K
Alen Ladavac
Alen Ladavac@AlenL·
@mikulasflorek @ThreatInteract It was long time ago, so my memory is a but vague.... but I'm pretty sure it didn't take that much on PII, @ 400MHz. Yes, that was back in the late 90s.
English
0
0
1
341
Mikulas Florek
Mikulas Florek@mikulasflorek·
Moving 200 capsules takes only ~2ms in UE5. I love this engine. /s
Mikulas Florek tweet media
English
23
3
171
17.5K
Alen Ladavac
Alen Ladavac@AlenL·
@SebAaltonen RVO was one of the dumbest things ever added to the standard. it just makes people feel like it's ok to return stuff without thinking of performance. Just don't. only return small stuff. rest is return by input pointer. note I said pointer, not reference. more explicit.
English
0
0
1
156
Sebastian Aaltonen
Sebastian Aaltonen@SebAaltonen·
Explanation: A programmer forgot to pass/return a big container by reference. Auto keyword in C++ doesn't capture reference type. Remember to write auto& if you don't want a copy of the data. Copying a big container is extremely expensive. Forgetting & can be super expensive.
English
2
2
23
4K
Dmitrii Kovanikov
Dmitrii Kovanikov@ChShersh·
I have a math background so what guides me here is.. geometry. In 2D, you can draw infinitely many lines through one dot. So a single dot is not enough to define a line. But two dots define it unambiguously. Similarly, in 3D, you can draw infinitely many planes through two dots. So you need three dots not lying on a single line to define a plane unambiguously. I look at duplicating functions in a similar way. Code is often multidimensional. It may solve multiple problems, and often you don’t even know the dimension limit. The more data points with non-overlapping use cases you obtain, the more confidence you’ll have that your abstraction will actually solve the problem. Abstracting early is usually a mistake. Duplicate the code 2-3-4 times, and you’ll start noticing patterns.
Dmitrii Kovanikov@ChShersh

Duplicating code is fine

English
26
54
595
56.5K