14,277 karma · joined March 19, 2015
When I was optimizing for render sorting on mobile hardware we knew we would never see 2k+ drawcalls and cache aware tuning gave us huge end-user facing benefits.
Once you make changes like that upleveling is a serious challenge. We had one dev who's responsibility was to pull latest, spend about a month getting to to compile, another 1-2 months fixing all the issues, checking it in only to them spend another 2 months fixing all the cases that weren't tested. With a ~6mo uplevel cadence it was just enough time to finish it in order to start the next uplevel. Once you've gone through that internal engines start to look appealing(although they have their own pitfalls, I.E. heavy dependency on MAX/Maya for editor support and other "fun" bits).
Hopefully it spurs further investment in things like godot and bevy.
When we got a mower we went with a flail mower because we'd be mowing near neighbors and a bush hog(giant lawnmower blade style mower) will happily pick up a rock and send it with enough force to easily kill someone at a good distance. Flails tend to throw less things(which is why highway maintenance use them for mowing along the road).
Elecraft gear has pretty good output/inputs but it's spendy, it's a hard ask for someone to fork out $1k for a 10-15W radio.
The whole bandwidth/symbol rate thing is also just incredibly short sighted, a number of other counties have started to change things but here in the US we can't even seem to get something as simple as that updated.
Might be one of the few industries where I've seen visual hot-code reloading on-the-fly in production scenarios used at scale. The visual debugging of ladder is really similar to debugging tools we had, heck FBD[2] comes really close as well. Kind of an interesting covergent evolution of two different domains coming to very similar tools.
[1] https://docs.unrealengine.com/udk/Three/KismetUserGuide.html
[1] https://www.automationdirect.com/adc/overview/catalog/progra...
[1] https://ham.stackexchange.com/questions/2032/do-ethernet-ove...
FWIW I think repealing the symbol rate restrictions and opening up bands a bit more would go a long way towards the spirit that ham was started with. The hobby seems pretty ossified these days and it would be great to see more advancements in digital modes and stuff closer to the state of the art.
Mekka talks about this in terms of underrepresented groups[1] but the same principals apply as well to any low-vis when successful / high-vis when it goes wrong(I.E IT, Ops, etc) roles. It's really up to technical leadership in an organization to make sure that they're noting high-impact/low-viz work and surfacing that in a way that the "new shiny" doesn't drown it out. I've been in both domains(high-vis graphics/shiny!, low-vis tooling/devx that had huge impact) and you really do need to account for it properly otherwise you'll have exactly the situation described in the article. Your company/org will falter and stumble as those infrastructure pieces slow everything down if you don't retain/reward the people doing that work.
[1] https://mekka-tech.com/posts/2018-08-09-the-difficulty-ancho...
FWIW I consider shared_ptr a bit of a code-smell that you don't have your ownership model well understood, there are cases to use it but 90% of the time you can eliminate it with a more explicit design(and avoid chances of leaks + penalties from atomics).
For what its worth UMA/USM wasn't build to bridge a gap but rather to offer greater flexibility in resource utilization for embedded platforms, that's been moving upstream(along with tiling GPUs) over the years. With UMA you can page in other data on a use-case basis which is why they were relatively popular in phones, if you don't have a bunch of textures loaded on the GPU you can give that space back to other programs. Although come to think of it we used to stream audio data from GPU memory on certain consoles that didn't have large discrete system memory(the bus connecting System <-> GPU memory had some pretty harsh restrictions so you had to limit it to non-bursty, low throughput data which audio/music fit well into).
My point is if you're not using C/C++/Rust what are you using that exposes those concepts? Not saying you can't do those things in other languages(I've shipped cache-aware datastructures at scale in Java using ByteBuffers + flatbuffers) however you're having to reach through abstractions and/or other limitations. Say nothing that on most OSes that C tends to be the OS ABI as well.
One of the best courses I had was taught by Bruce Dawson, it was an entry-level "image processing" course but really it was a tour-de-force on cache hierarchies, modern computer architecture and how to build efficient real-world algorithms and not things that just scored well on the complexity scale. The first assignment was a simple bit-blit, he grabbed a random assignment from the class and in about ~30 minutes walked us through a multi-order-of-magnitude performance improvement with just small adjustments that made the program more cache-aware and also showed how you empirically test for performance improvements instead of doing it in a theoretical manner.
Back when I was in college(which was admittedly a long while back now) those sorts of things just weren't taught and that class was by-and-far an outlier from traditional coursework. My experience has been that even though there's a lot of talk about "fundamentals" in a CS degree it's touched at such a shallow layer that practical application of any of those fundamentals are missing and it doesn't "stick".
I've met all of a handful of people who can tell me what restrict does(much less how to use it), what a cache-aware data structure is or why we care about value types. ABI is just a 3-letter word to a large majority of people because they just don't have to deal with it(but are then oblivious when it blows up, I.E the number of times I've seen STL in what are supposed to be ABI-safe boundaries). That stuff is all foundational at the systems level. I've had much better luck with breaking people of their assumptions(I.E. Big-O) and working up from first-principals of how computer architecture works and structuring systems in such a way that take advantage of that instead of a theoretical ideal.
Even then I regularly find that so-called "fundamentals" are missing, the number of times I've had to explain page tables, how the kernel shares memory and other core details is surprising. Everyone drives Big-O notation left/right/center but can't tell what a page fault is or why algorithms with higher complexity wipe the floor with better "ideal" algorithms under actual operating constraints. I've found that engineers who have drive or innate curiosity will poke in those areas but getting a degree doesn't automatically confer that knowledge(or guarantee that it sticks).
Also, if you're getting into systems programming I care about 0% about "prestige", it's a domain that is even more binary(things work or they blow up spectacularly[1]) than some other programming domains. I care that someone understands the fundamentals, can apply reasoning and drive a hypothesis with data more than what college they did/didn't attend.
[1] https://www.usenix.org/system/files/1311_05-08_mickens.pdf
We were using coroutines about ~12 years ago in embedded contexts, this was with Lua which has very good support and being a managed language avoids all the footguns here while still allowing very fast interop with native code(at least in the case of LuaJIT).
I hate to drag Rust into every C/C++ conversation but this is one area where the language really keeps you within the guardrails. Callbacks are hard to use correctly in Rust, less because of the language and more just do to the messy lifecycle aspect of them. You can side-step that with shared_ptr/Arc but then you're stepping into memory leak territory when you have a circular reference(and the atomic ref counting isn't cheap either).
That really depends on the studio and publisher. I saw all sorts of credit shenanigans in my time in industry, hell I spent ~3 years on a title and because I left before ship due to insane crunch all I got was "Special Thanks". I saw people from the publisher that did almost nothing get top billing while art/dev get near the bottom. I won't even get into "developer interviews" where a large majority were from the publisher who weren't working directly on the title.
IMO if you like the space do it as a side project or gamejam/indy angle, I know of very few places from my time in the industry that were "sane".
Oh and how much publishers meddled in games and/or set constraints. At one point one of the big 3 wasn't approving games that didn't have multiplayer regardless of genre, got to spend ~5mo working on multiplayer that was totally broken until we got sign-off that we could pull it from the title.
If you don't deal in those sorts of domains that's fine but don't dismiss them as those are some of the primary use cases for native languages. Pimpl is a hack, it's a clever hack in the context of C++ but it's not something intrinsic to native development. For instance it's a non-concern for languages like Rust(which just handle this whole domain much better due to not having to inherit a bunch of legacy behavior).
There's a bunch of feedback in adjacent threads that you seem to be ignoring so I suspect I won't change your mind here but I would encourage you to be a bit more open and consider that there are use cases where things like this matter rather than dismissing them offhand.
> So why should you, as a seasoned software developer, become a mentor?
Early in my career I got some very good advice and mentorship from a number of people that I respect who didn't have to do it but did so anyway. I pay that forward wherever I can and I only ask that others do the same.
We're better as an industry if we support and lift up our fellow developers across the board. There's a number of things that I've seen people struggle with over the years(imposter syndrome, first time breaking prod, difficult organizational issues, etc) and being able to give them the tools to better approach those things is really rewarding. If you approach it authentically with care and a positive intent you can have a real impact that lasts across someone's career and technical journey.