4 ms·
I do a lot of systems-type work academia (OSes, CPU sims, transient execution attacks, etc). "Should not apply" is a very strong phrase. Would you be willing t
by dwrodri 4y ago
I do a lot of systems-type work academia (OSes, CPU sims, transient execution attacks, etc).
"Should not apply" is a very strong phrase. Would you be willing to humble yourself in a junior position so that you could learn? Are you willing to put in the time and effort to learn the ins and outs of the platform? If so, I think you'd be a great fit as a junior systems engineer at a 50-500 person org that has the self-awareness to put you on a team with more experienced engineers who can show you the ropes. If anything, you're a great candidate because you'll already have some programming experience under your belt which minimizes the barrier for learning syntax and language-agnostic programming concepts, allowing you focus more on actually learning how everything works under the hood.
I work professionally on computer vision software, and quite frankly one of the biggest barriers we have now is that the people who are deploying our ML code have the experience with all the experimental tooling (PyTorch/Python) but not as much with what's going on under the hood, and thus we're leaving lots of performance on the table.
My personal definition of "systems knowledge" is "can you answer 'how does this work under the hood?'" to the point where we're talking about assembly/bytecode and drivers. It's more tedious than learning the Java standard library, but I wouldn't necessarily say it requires more intellectual power. It just takes time.
- mannymanman 4y agoThis is great insight. Do you have any recs for someone with python experience to get started with learning systems programming?
- dwrodri 4y agoYes! But it depends what you want to get out of it. I'm a big proponent of project-based learning, so my question to you is: what would you want to build? I'll lead with an example: I really like the idea of search indexes and search engines. I cobbled together a search engine on my own that indexes arXiv's metadata, very similar to Andrej Karpathy's Arxiv Sanity Preserver [1] in Python. I very quickly encountered that the "What can I rip off of medium blogs and StackOverflow" approach wasn't scaling well, so I had to dig into how each part of my tech stack worked to figure out where things were going slower, and how I could improve it. You can "do systems engineering" in any language and just about any tech stack, but you'll often see it closely associated with compiled languages, because those are often chosen when we care about performance because extra abstractions often make it harder to reason about what's really going on in certain portions of your tech stack. It started in Python, but then dusted off my C skills, and then my C++ skills for different parts of the entire stack. Before I get too carried away, here's the main point: Try to find a problem where you have to deal with lots of data on a single computer/server/device. You'll quickly hit limitations on what your software can do. Figuring out why you hit those limits is gonna start you down a path to acquiring the "systems knowledge" that you seek. It's actually quite difficult to hit performance limitations on your average server with just text. Video and 3d content are much more intensive mediums that very quickly let you hit those limits. It's one of the reasons why Twitch and YouTube don't have lots of competition, but we've hopped between link aggregator to link aggregator over the years. 1: https://arxiv-sanity-lite.com/ https://arxiv-sanity-lite.com/ 2:
- elipsey 4y ago[deleted]
- abc_lisper 4y agoEach of those things are a self contained domain in themselves and will require a few years of effort for reasonably smart people. The q question thus is, how much time are you willing to grind?