Where are the low level system engineers?
twitter.com
twitter.com
I maintain a C++ service running in production since 2015. I released Windows and Mac kernel drivers in 2012, both of which are still used in commercial products. My NAS runs a patched kernel because the stock dm-cache didn't offload burst writes onto SSD. I once built a virtual filesystem driver to run inside my PS2 so that I could exfiltrate in-game debug data over LAN. My most recent low-level project was PCB+Firmware for a digital camera.
But:
Ruby on Rails just has a much better bang for buck than C++ and customers know it. Powerful hardware is dirt-cheap these days, so nobody wants to pay for the extra +50% you get from C++ over JavaScript.
And if you want to be paid well, call your multi-threaded C++ calculations something like "CPU-accelerated AI deployment optimization" ;)
And lastly: Most embedded C/C++ jobs went to China! We used to design hardware and firmware in the west. But nowadays, you just book a Shenzhen shop to design, code, and produce your product. That's why nowadays almost every device has firmware with Chinese debug strings inside ^_^
As an engineer I have a really strong opinion about only finance being left in Europe and all the engineering being outsourced to cheaper countries.
I personally think in tech the ladder to the top is made so you have to switch to management at some point in order to promote any further. I see managers and people that actually want to volunteer to become a manager instead of an engineer as the root of this problem. At my company we organize the hierarchy more like a hospital or a law firm, with the best engineers having the highest positions, just like partners at a law firm.
We also make cameras, I've become the MIPI expert.
Our bread and butter includes mechanical design, PCB design and firmware / FPGA design. This maybe sounds like basic stuff, but includes things like RF and COMSOL / ANSYS physical and mechanical modeling and simulation.
A startup company in India hired us: they had plenty of software developers, but wanted experts to de-risk the hardware and low level firmware.
Basler Vision Beijing later confirmed that it's a firmware issue and indeed switching from RGB to YUV reduced the noise to less than 1%, but it left a very sour taste that the support team in their supposed headquarter didn't recognize a noise issue when we sent them test pictures, like this: https://www.dropbox.com/s/ahht53ht6moa40g/Image__2021-04-07_...
Also, the marketing photos of dart Cameras had a "Made in Germany" sticker on the back. Ours shipped from the US (to Germany) and didn't have a "Made in Germany" sticker.
In the end, our client then decided to go with a custom camera. They wanted full control over the FPGA firmware to avoid future issues like this.
But probably not compared to Rust, Go, Kotlin, or Java. Few people are going to opt for C++ for an internet-facing web service given the multitude of better options.
That's a key part of my depressing realisation in the last five years or so (my realising, not putting a timeline on the happening, that's rooted in industrialisation basically I suppose) that practically everything is just marketing. Some tiny amount if product and then just marketing.
It's 'drop shipped' 'import' 'Chinese tat' with its bizarre fonts & 'brands' and unintentionally humorous instructions that clued me on to it, but now it's everywhere. Hand soap. As fancy as you like, essence of bullshit and aroma du markèting, it's all made in a big stainless steel vat.
Greengrocers have to be the one avenue you can still find authentic no-nonsense products. Even then you basically have to go 'ethnic'. A British mainstream supermarket will charge a couple of quid for a pathetically sized, masses of food miles (and time) short-dated pack of some herb; the grocerywali opposite will gladly sell you two big bunches, far fresher, for less. I don't really get that? Even in the British supermarket they'll sell you a 10g glass jar marketed to white people for £2 while the same bloody thing is £1/100g (and in that sort of quantity, i.e. spend less for more) on the other side or in the next aisle in a plastic bag sold as 'world foods'.
(I've probably digressed enough...)
$2.5 product + $9 shipping + $20 in facebook ads => sold for $75
As for supermarkets, the main difference is probably what they charge you for placement. If you (the manufacturer) want your product inside a supermarket, you typically have to rent the shelf space from them. And depending on where inside the shop that shelf space is located, it'll be priced vastly differently. That is also one of the reasons why you typically only see high-throughput high-margin products close to the cashier, e.g. sugar candy for kids.
But I feel like on the electronics side, it's not that obvious. When you need access to electronic components, being close to the markets in Shenzhen is a huge advantage. Shenzhen engineers can just walk over, chat to the manufacturer, and buy some sample products. Western engineers need to read the spec sheets and then wait 2 weeks for the samples to make it through shipping and import clearance. Also, some top-notch components only have descriptions in Chinese, because the manufacturer knows that 99% of their market is selling to other Chinese companies, so they don't bother producing an English datasheet.
The result is that Shenzhen shops are not only cheap, but also better quality.
Depends. Use cases with highly constrained hardware SWaP where inches, ounces, and watts matter, the expense to optimize may well be worth it.
- read file
- start at beginning; if you encounter separator, add new entry to an array. if you encounter newline, save entire current array as a new line to an array of lines.
- do lexicographical sort of arrays (can just use qsort for this).
- if the test q actually wants you to parse out numbers and shit like that, nothing about the structure changes, you just have to record some extra info when parsing values and then use a different comparison depending on the type in the function you pass to qsort
I dare say someone programming algorithms in a kernel or writing code for custom file systems should be able to do this. OK 15 min may be tight if you're nervous but you should get there.
Things get even weirder when you throw non-Latin characters in the mix. May such parsers predate widespread use of UTF-8.
Personally I’d do it by storing indexes into the CSV contents instead of using null terminated C strings.
Doing all of this in just 15 minutes is going to be hard.
By the way, your solution as described is wrong, since it sorts each row independently. What you’d need to do is store all the data in a transposed format i.e an array of pointers to column arrays, then sort the array by giving qsort a comparison function that looks at the first entry in each column.
"Want me to write a specialised API with custom encapsulation transmitted over UDP?"
"Nah fam, we want to watch you code in our super-duper-wiz-bangy-exclusive IDE that you've never used before. Oh, and you have an hour. Oh, and it's going to be super-specific tasks that only we know how to do."
"So, no on the encapsulation, eh?"
<click>
But then, when I interview, I don't ask leetcode questions in the first place...
What you’re describing is the opposite - some kind of esoteric question related to a specific language.
Of course, data.table has existed for over a decade and you're not going to come up with something comparable in 15 minutes, but that's why you'd want to just copy it and not come up with your own solution in the first place.
Now I manage rEqUireMenTs, syNcHroniZaTiOn oF cRoSs fUnctIONal teams, building a myriad of control planes over open source software, make 5x more, and am 10x less happy. Bills to pay.
I'm talking about programmers working on any kind of application in C/C++ (or other systems languages) with nontrivial performance and memory requirements. It's not like there are a ton of those either, but they're there.
If for some reason some day some market popped up for OS devs that paid better than the other sub-fields those low level programmers are currently working in, nobody need be concerned about supply of programmers who can do the job.
I tried finding a job somewhere around this realm. Half the companies were using Go and none of them wanted to talk to me.
just the fact that people practice them before FAANG interviews and their correctness/success rate and speed at completing those tests suddenly gets better by an order or magnitude or more should tell you how little those tests actually filter for any more fundamental abilities.
a proper test for the abilities you mentioned should not only be doable no problem by any working programmer (especially senior and above) walking into that test naked and unprepared, in fact preparing for the test in any reasonable manner before the interview should give no advantage at all.
Complaining about any test obviously just sounds like nothing but proof the test did it's job, to those that want to believe it.
But what you just said stands on it's own and doesn't matter that the probably-lame applicant said it.
If preparing for the test works, then that fact itself exposes the test is not testing what you think, or anything very useful.
This, 100 times. All performance discussions at my employer are at the upper layers of the stack ("hey look I'm using char vs. string in this C# method, 0.15% improvement!"), while nobody is looking at the lower layers where the real improvements can be made and benefit all platforms.
ABET accredited CS degree programs still require students take courses including "Exposure to computer architecture and organization, information management, networking and communication, operating systems, and parallel and distributed computing."
I'm not aware of any flagship state universities that don't have an ABET degree option, but maybe I just have massive selection bias.
[1]: https://www.abet.org/accreditation/accreditation-criteria/cr...
I suspect there are a few other universities in that position that have reputable CS programs but otherwise no engineering--although CS itself can be said to not be engineering, I would argue that for the 90% of CS majors wanting to get a SWE job, what they are effectively seeking is an engineering degree not a science one. Still, there isn't any expectation on the part of employees that a degree is ABET accredited, as there is for engineering.
C, basic digital logic, and MIPS assembler are part of the required intro sequence here.
I'm trying to implement these sorts of changes (and many others) right now at my own place, but it's quite frustrating from the other side too.
1. Being paid much less than my similarly leveled colleagues
2. Needing to work with engineers well outside my timezone
3. Being hounded by recruiters to do bluetooth comms and nothing but bluetooth comms
4. Having to be very careful to not put myself in a position where I need to fly to China to deal with manufacturing issues on a moments notice
5. Lack of remote work opportunites for obvious reasons
I do enjoy working on low level code but not enough to deal with the industry in its current state.
Recruiters are breaking down my door, asking me if I code in Ruby (Rails).
No.
Recruiters saw Rust and I got blockchain spam. Nope.
I've moved on to my own thing anyway, but I've still had to put an explicit "no crypto/blockchain" everywhere they might look.
сrʏpto ʙloϲkchain
from https://www.irongeek.com/homoglyph-attack-generator.php
There are definitely more than five firms that would pay reasonably well for an ex-Googler with a "whole career" and a PhD, yes. The barrier to entry is too high for the rest of us.
School taught me none of that(the opposite with more of a focus on big-o and ignore the constants), all the good systems engineers I know either learned it on the job or were self taught.
A lot of HFT shops definitely care about those things.
I couldn't get a job in that though, so I moved further up the stack and now do backend instead.
As an individual who is very proficient in this areas, I get rarely any reachouts about those skills. 90% of LinkedIn recuiter messages inquire about generic high level programming projects. Then there's 8% crypto related things, and a very tiny amount of other systems level engineering roles.
On the other hand trying to hire someone for such a role is super hard. Most engineers don't deal with low level details and systems programming languages anymore.
Compensation wise the domain does not be better than others. While one assumes it might be more specialized, that seems by far offset by the amount of lower opportunities and thereby less chances to negotiate compensation than in other software engineering parts.
If you're after good compensation and want to work at a low level, then go for companies that sell both hardware and software. FAANGs are an obvious choice but B2B companies (usually IoT-ish) that have have both a software and hardware subscription component are another option worth looking at.
Yep. I moved into web development because it paid a lot more and carried a lot less stress. The 7 years I spent working on embedded systems paid off in a major way, too, because I showed up equipped to directly address performance problems. I'm still in web development and I'll probably never leave.
Working on consumer electronics, VoIP phone systems specifically. It's not sexy, but my boss is cool and it's reliable employment - have been at the same gig over 5 years. I occasionally feel jealous of my peers higher up the stack who get paid a bunch more and/or don't have to explain "how git works" weekly. Day-to-day, I deal with some tedious old school codebases that can be frustrating at times, but I occasionally get to play electronics engineer, and have an ongoing embedded Rust project to keep things fresh.
Maybe the right thing is to lean in to it, and become a git consultant! I'm a bit scared to see if that's a thing - would be a sad commentary on the state of the software industry.
Over time, there is more opportunity to run into performance problems, memory/ gc issues, deadlocks, null pointers… And when you don’t know what the hell is going on, you can end up going pretty deep down the stack before realizing you’re off course.
Obviously, this doesn’t happen to every developer, but it does seem like there are always some devs that want to dig into this stuff.
I’m now working on a team that builds foundational things like api templates, common libraries, patterns… It all seems like this long progression as I work towards lower level knowledge.
https://flagshipbio.bamboohr.com/jobs/view.php?id=79&source=...
I'm in no way affiliated with the company, but my friend is (honest!). They have had a heck of a time finding a person for the role. Comp maxes out at ~$120k, remote is just fine. If anyone is good with C++ and would like to transition to the bio side of things, this role may be for you.
I think I know why.
People who actually take care of the low-level plumbing are not being incentivized nor given their due. Expertise and Hard-won knowledge is being lost. There is also not much ground-breaking research going on in these domains which doesn't bode well for the future. As a final nail in the coffin, Colleges/Universities are not even creating/training the next generation of "Low-Level System Engineers". We are going to end-up with a handful of Companies holding the keys to the kingdom and holding Society-at-large hostage.
There aren't a lot of native code positions, and those who are pay generally less than I get now or have an unclear offering.
Once you take a career path, like C# web development in my case, you generally keep doing that unless you are attracted by a company which really needs you or believes in you.
So my C++ experience is limited to side projects like Marlin based firmware and that's it.
If you like kernel level c I'm hiring. The best hackers want to work with the best hackers and we are charting a new course for the 2020s - not one from the 1960s. Despite what you might read in the main-stream dev news our work is extremely important and needs people just like you.
You don't have to work at a boring corporate job -- you can instead work at the unikernel company NanoVMs - you just need to email me.
IIRC nanos doesn't eliminate syscalls in it's entirety like other unikernels.
We keep the kernel/user cause otherwise you can very very easily change page permissions which means all security goes out the window. You could instantly make rwx on all pages with a few instructions.
If you rewind to ~ 2013 most unikernels were talking about trashing the context switch yet depending on the "context" that implies various things (kthread <> kthread, user proc <> user proc, user thread <> user thread, etc...) They all have different costs and while we definitely agree with the aggressive cost of various user process to user process the kernel <> user was one we felt was not worth trashing.
Clearly though, because of massive adoption, we see 200% extra throughput on GCP and up to 300% on AWS - so the performance and security remain.
I would call people who write c/c++ code 'programmers' - interesting to see that title is not universal.
If you are wondering where all the c/c++ programmers (system engineers) are - they are in the defense industry - or at least all the ones that I know are.
Generally, when you are unable to find X at cost Y, either settle for worse X, or raise your price-i-am-willing-to-pay (Y)
"Low level" covers many things that don't have much overlap.
In the employment market, I see a significant distinction between "embedded"/"firmware" and "server systems engineering". TLDR: Embedded pay is low compared with other software.
As far as I can tell, from inbound recruiter mail and job ads, the pay for embedded and firmware work is consistently low compared with what's possible in webdev, cloud, and software generally. Even for "senior" embedded and firmware work. I suspect this is because it's adjacent to things like FPGAs and electronics, which also pay low compared with software engineering generally.
By low, I mean senior embedded pay at about 60% of senior webdev pay.
On the other hand, seasoned "system level" engineering such as kernels, compilers, database engines, GPU drivers, storage, crypto, and many other such things, especially things that run on servers, can pay well and seems to be in some demand, especially at big companies.
(Device drivers can fall into either category. For example a GPU or storage subsystem driver is at a completely different level from a USB serial driver.)
Who wants to think about cycles and bytes when everyone else is talking about gigabytes and "spin up another 1,000 instances" is the expected answer to every problem?
Is anyone hiring these people? Look at the SoC world, the stuff that's being made with the expectation of taking advantage of the public code ecosystem... Would you even want to work at a place like that? "Make the minimal system that passes tests; actual functionality is secondary" is not a good motivation.
Even the RasPi people have blobs of ugly and seekrit hardware; and they're the epitome of "open" systems engineering now, aren't they?
It's true that the frontend side is awash with money, and that there are nowhere near as many such engineers, but we tend to be a lot quieter about it. A lot of people went into IoT.
The economics of the hardware market mean that "open" is even more unprofitable than it is for software, which already has a bit of a crisis in terms of the few people holding up the world not being paid properly.
Who? The farmers and sweatshop workers in frontier or emerging economies?
It’s actually small to medium operations that don’t care so much about performance.
working on operating systems and software loads for UAS flight controllers, some of them. stuff like an auterion FC is very limited in CPU and RAM.
Of course, there's a few more problems than low paying or moved to China - it might be on-site somewhere expensive (Apple), somewhere you don't want to live (probably a lot of these), or boring or unethical (a defense contractor).
I agree. I passed interviews for a Systems Software Engineer position at Apple two months ago, and I can attest that the interview process was very down to Earth. No LeetCode questions. Instead, the interviews were mostly system design and and simple programming exercises where finding a solution was less important than the discussion with the interviewers.
If anyone is interested, Apple is still hiring - https://jobs.apple.com/en-us/search?search=systems%20enginee...
16 weeks at a bootcamp is enough to get you up to speed with the important parts of a rigorous 4 year education into the foundations of computing. No one needs to know CS or computer engineering anyway. It's just like math - useless.
I'm a software developer. How does software work, you ask? Uh...
If you're at Meta making an OS for VR, you're at the top of the market and getting paid very well. If you're at Cisco making router firmware, or F5 making DNS boxes, you're likely getting paid far worse than at equivalent experience to say a web dev - for which there is a lot more work. Employment mobility is far far lower when doing embedded work.
(Don't take that the wrong way; it's not criticism of web development. It's just what generally happens when there's an oversupply of anything in a marketplace. We've been in a boom for web developers for a long time and what goes up must come down.)
Yes eventually web devs will be eventually commoditized, but that doesn’t mean the return of low level programmers persay.
Long term doesn’t seem too great for low level stuff either. It doesn’t seem like a lot of new people are entering the field and getting up to speed on the radically complex hardware we have now
There are of course outliers, but the vast majority of CS jobs out there are simply shuffling data around. They even call it “shuffling protobufs” at Google.