5 ms·
Embedded engineering seems to be a lost art in the America. The typical American programmer is certainly not an embedded engineer, and our industry and American
by ipnon 5y ago
Embedded engineering seems to be a lost art in the America. The typical American programmer is certainly not an embedded engineer, and our industry and American universities focus mainly on the application layer of both practice and theory. My university's[a] computer architecture and operating systems courses are both taught entirely using simulation, either simulated hardware or virtual machines, and we would certainly never write our own bootloaders or really ever put code to the metal. It all seems more Shenzhen than Silicon Valley, like part of the stack is simply a bygone thing of the past for American software engineers.
Neither C nor C++ could be considered new languages, and this seems to contribute to this estimation of embedded engineering as a "lost art." C and C++ give a "here be dragons feeling," that only the best engineers can hope to avoid pointer pitfalls and memory leaks. I wonder if Rust's advances in programming language theory could alleviate this problem. The new generation of programmers I feel I belong to are comfortable with functional programming, advanced types, and facile tooling like NPM.
I have personally found embedded engineering underrated in American industry, both for fun and profit. If adopting modern practices leads to further embedded engineering adoption, that would be a worthwhile pursuit for individuals and our community. Perhaps this takes the form of Rust.
[a] Top 300 in global ranking, with a standard but not cutting edge computer science program unlike Stanford or CMU. Having gone to only one university I admit this confusion could simply be a failing of my own education.
- dmitrygr 5y agoEmbedded has always been a "I learned this myself, while tinkering, then expanded my knowledge by tinkering more, and then by having a job doing something similar" kind of field. So that is not new.
- flyingcircus3 5y agoAnother significant difference in embedded development is that it's the intersection of electrical engineering and software development. Without an understanding of both disciplines, it's difficult to be effective in a professional setting. Understanding the hardware, which is almost always custom to your project, is a base level requirement to be able to write the software that will control it.
- dexterhaslem 5y agovery true, i found a niche here (well 70% firmware but being able to understand and reason about the big picture of the rest) and really enjoyed it. seemed to have carved a niche out too troubleshooting basic hw level issues and delivering faster. highly recommend it to anyone who feels it isnt applicable
- ipnon 5y agoWould you mind naming your company? Or a high profile company in the same field as your work? I'd like to get a taste of the sort of work you do.
- ncmncm 5y agoEmbedded programming in C is a chore, because embedded code can be much trickier to debug. Writing C without bugs is a great deal of work, and very stressful. Debugging it when you don't is also very stressful. Embedded programming in C++ is pure fun. The more modern your code is, the less room you leave for bugs: when it compiles, it mostly works. Where it doesn't, it shows up in your logic, not in random memory corruption.
- beached_whale 5y agoI do a lot of static_asserts and small composable constexpr methods so that when I am wrong I get a compile failure. Actually with IDE's I get a little overlay telling me the error usually. Constexpr methods seem perfect for embedded in a lot of ways too. Yes, I won't be touching real memory or ports, but I can ensure that the method isn't doing silly things either. Having a memory address class that filters on the proper operations and only allows them is awesome. Saw a good video on the topic recently too https://www.youtube.com/watch?v=fsMmh8F8uV0 https://www.youtube.com/watch?v=fsMmh8F8uV0
- osivertsson 5y agoExcept that most devs don’t understand what their C++ code actually does at runtime and many try to be too clever and use too many features. I have seen spectacular failures regarding memory usage and copies, static initializers, even exceptions (just design your APIs without them!) C++ code bases may have less buffer overflows and off-by-one errors but I don’t trust them unless they come with an extensive safety-net in the form of unit-tests with good coverage.
- iainmerrick 5y agoI think embedded programming is similar to games programming -- it’s difficult due to the performance constraints and niche skills required (low-level I/O, 3D graphics), but also relatively badly paid. Edit to add: admittedly for different reasons; in gaming I think it’s that the supply of programmers outstrips demand, as every other new graduate dreams of being a games programmer. I think the cultural shift is partly just people voting with their feet and going where the money is.
- ipnon 5y agoAmerica certainly has the engineering talent, it's really the manufacturing base that has been decimated. In some sense this migration was necessary for the iPhone and web app revolutions, Web 2.0. Perhaps we'll see embedded engineering and manufacturing return to America once web and mobile application development becomes over saturated. Already there seems to be a struggle for normal new grads to enter these fields.