I disagree with the conclusion though. I think the reason Steve Jobs' death impacted people more than Dennis Ritchie's is that Jobs was taken in his prime. Who knows what the world lost by his premature death.
I disagree with the conclusion though. I think the reason Steve Jobs' death impacted people more than Dennis Ritchie's is that Jobs was taken in his prime. Who knows what the world lost by his premature death.
This article has been posted at least once onto HN, and I liked reading it then, too. One of the first major insights I remember from my CS curriculum was the concept of abstraction -- in CS it's applied to code-as-data, the OSI model, etc, but it exists everywhere, including all engineering, large bureaucracies, etc. Thank you Prof Harvey!
"Any technology distinguishable from magic is insufficiently advanced"
Complexity is there every day, we just abstract it away in order to focus on the task at hand.
If you are widely read or have worked in multiple fields, and/or multiple levels of the "stack", both hardware and software, then it's a bit more apparent.
I've seen discussions on LinkedIn about how one gets into embedded systems engineering. Nobody seems to have a clear answer.
I've seen people get all hyped up on using small eval/dev boards like Raspberry Pi, but don't get much farther than loading a desktop or XBMC on it. There's hope in the Arduino crowd, but blinking LEDs isn't even putting the training wheels on the bike.
I spent the first few years of my career doing hard (as in deadlines not effort) real time embedded software and I think it made me a better programmer. However being able to work from a laptop anywhere I want instead of being stuck in a test lab with bus analyzers, scopes, data analyzers and bond out emulators booping all around me is a nicer lifestyle I'll have to admit.
Embedded software requires attention to detail, and a continual focus on reliability.
It seems to me that web development often involves shoving shoddy solutions out the door, and often encourages a certain cowboy mentality.
Alternatively to try and make an elegant and correct solution for browsers (my goal) is frustrating and dissapointing due to the thousands of meaningless browser bugs and standards faults, and the ugly compromises that are forced to be made... Embedded vendor toolchains and hardware bugs are a dream in comparison!
At least that is my experience coming from an embedded programming background and now five years working on deep DOM foo... Slowly poisoning my brain with browser crud. Unfortunately business reasons often lead to choosing the browser as a delivery platform regardless of its numerous downsides :'(
I've been in 20+ years as well and I kick myself a lot over not going the way of the web developer. After all, what's web programming other than finding new and interesting ways to concatenate strings? =) Sorry, embedded dev joke there.
But as I get older and the greenhorns out of college can't tell me the difference between ASLA and ROLA, it kind of gives me some reassurance that my skills will be needed and valuable for the time to come.
Sounds like a fun HN project.
I think arduino has done wonders for getting people started, but it would be great if there was a similar ecosystem for people who are further along than blinking LEDs and building something of significance.
The thing about embedded is that you're crafting a very specific hardware and firmware design for the task at hand. The project may begin with a generic setup like Arduino or Beagle or Rpi, but at the end it's a totally unique animal. There's no way any graphic or assisted design environment is going to be able to handle it all.
Hell, FPGAs are Jedi-Master class devices as far as I see it. This is the kind of firepower you call in when you have something that no off-the-shelf micro can do, like emulate an obsolete processor, or put 128 of them on one chip, or hash Bitcoins, image processing, etc etc etc.
For example, it would be cool if there was some sort of software that would let you design multiple-chip setups that would usually require breadboarding, but then run the whole circuit on the FPGA. That design could be transformed straight into a PCB that's ready for fab with the discrete components.
I actually see a lot of potential in devices like the aforementioned Cypress PSoC. If you're not familiar, the PSoC family involves chips that have a core microcontroller with ram and Flash but also have a number of analog blocks inside as well. ADCs, capsense, op-amps, logic gates, muxes, comparators, timers, etc. You can use the Cypress IDE to wire the components up and connect them to I/O pins. The IDE can generate your configuration, or you can optionally reconfigure the chip while running via internal registers.
So it's kind of like an FPGA-type solution as you suggested. When you start developing with these chips, you're really creating hardware from software. It's interesting stuff.
I'm teaching myself to build a self-driving trash can, among other things.
I don't think there is a particular shortage of jobs in embedded systems relative to demand. A degree in electrical engineering along with programming skills is highly valued in the field. The players to target is also different. Not a huge demand for embedded engineers at say Facebook, but lots of demand for them at Raytheon or Juniper. Telecoms, wireless, defense, and aerospace hire up a lot of embedded software developers.