Live data from Hacker News

Learning hardware programming as a software engineer

blog.athrunen.dev

21–30 of 50 posts

Re: Learning hardware programming as a software engineer

#21
post #19

Earlier quoted context omitted.

Just got around to reading it. Good stuff. Welcome to my world, although I seldom work on any kind of firmware, anymore. I'm mostly about driver-level stuff, and I try to leverage platform transport, as much as possible. I have blown up $40,000 (in 1987 dollars) devices with software errors. FUN!

My favorite part of hardware development is that you learn the true meaning of "bricking". People often use the term when something is recoverable, having never felt the pain of 1-2 engineer years worth of assets turning into paperweights in an instant. How on earth did you blow something up from software? I'm guessing you were touching power delivery from software for some reason?

Yup. Those were the days before everything had switching power supplies.

I was designing ATE systems, and I accidentally delivered 240 volts to a 110 volt configuration, and discovered the fuse didn't work.

Re: Learning hardware programming as a software engineer

#22

For any high level software engineer, looking to get into embedded development: A lot of Arduino, ESP tutorials do not teach you fundamentals. I recommend spending sometime (if not to code along) watching this course: https://www.youtube.com/playlist?list=PLPW8O6W-1chwyTzI3BHwB...

For any high level software engineer, looking to get into embedded development: A lot of Arduino, ESP tutorials do not teach you fundamentals.

Even books. I read ~two Arduino books that would write something along the lines of "we need a pull-up resistor to keep the pin from floating", without ever explaining what floating pins, pull-up, and pull-down resistors are. The concepts are not all that hard, except that they are often not properly defined or explained.

Re: Learning hardware programming as a software engineer

#23
Right now is a great time to learn about lower level, "on the metal" type programming! Has been for a while now.

People, like Ben Eater, are making great kits.

Components are not so expensive. You can (and will) fail. Get more, get gear, try again.

One can get good gear, scope, meter, solder station, etc... at good prices. Used pro gear is a good option too.

Making things, signal generator, logic analyzer, are also fun projects.

And there are many programming options from assembly to Python showing up.

I love this stuff and often couple it with retro computing. The speeds are low enough to make most things possible for fairly new comers.

Jump in. It is fun!

Great post OP.

Re: Learning hardware programming as a software engineer

#24
funny thing is, when "software engineer" as a term came along, it was a bit of a fuzzy term, but here in NZ a lot of people took it as someone who had a engineering background and understood something of electronics/mechanical/chemical/civil engineering, a number of courses made SE have a common first year with the other engineering disciplines. This was more my background I did software / electronic engineering and went into embedded systems for electronic/mechanical/software type systems. Though these days I do more "full stack" systems development but still highly involved in embedded development.

But of course, software engineer has no particular definition and lots of people use the term to describe themselves, even if they have no real engineering background.

Re: Learning hardware programming as a software engineer

#26
Also, might wanna learn some basic electronics.

With very modular devices, it's easy to avoid that - since you're basically building stuff like as with lego bricks, and things are abstracted form you - but if you need / want to build your own sensors, or customized setups, you'll need to know a thing or two about electronics / circuit analysis and design.

Re: Learning hardware programming as a software engineer

#27
Excerpts:

"The most basic pins are digital pins, they can only either be on or off. You would, for example, use them to check if a button is pressed. Or if you use them as output, turning a led on or off."

[intermediate content deleted for brevity...]

"And while those pins cannot output a true analog signal, they can use a technique called PWM to approximate one by only switching the signal on for some time."

Fascinating! Knew about digital pins before this, and PWM generally speaking (with respect to PC fans, power supplies, etc.) -- and yet, I did not proverbially put "2 + 2 together" in my head! (For some inconceivable reason I always conceptualized PWM as analog/multiple waves per unit time, in nature...) Yup, makes a ton of sense!

Anyway, thanks for the great article!

Re: Learning hardware programming as a software engineer

#28
post #3

That's a good article for the simple reason that it is written by someone who still had enough 'outsider perspective' that it can help guide other people new to the material in ways that old hands never could. It is impossible for me to tell a person new to this material what the pitfalls will be because most of what they will be struggling with is obvious to me and it would never even occur to me to explain it. The…

+1 for the nit-pick. Hardware programming make me think of FPGA design and Verilog, etc. I'd call this 'embedded programming'.

Re: Learning hardware programming as a software engineer

#29
post #8

I actually thought this was about learning verilog or another hdl. I was a little disappointed, maybe I should write a blog about my experience learning an hdl as a software engineer. Nonetheless them learning embedded systems programming is still an interesting read! Especially when coming from a language like C#

Thank you, now I want to learn about hdl. ^^ Languagevise coming from C# and learning c or c++ for low-level programming was quite smooth, also coming from python was the hard part, that was a lot of comforts I had to give up. But as I am also learning some micropython, I might write about porting stuff to it in the future.

Since you mention MicroPython, TinyGo (eg Go instead of Python) might be interesting as well: :)

https://tinygo.org

https://github.com/tinygo-org/tinygo

Re: Learning hardware programming as a software engineer

#30

Earlier quoted context omitted.

> The largest negative ROI over time Why do you have to obfuscate the language so much with technical jargon? Just say 'the costliest mistake'.

Because costliest mistake isn't equivalent, and it isn't nearly as funny like that. Just imagine a whole team of people working on a combination of hardware and software, some of the hardware prototype level floating point gear obtained directly from the manufacturer under NDA (that's non disclosure agreement) and then someone decides to drop a dime into the machine. The dime is the investment, the time it took to ca…

Reminds me of when rockets launching to space blow up instead, taking out their payloads (months/years of work). ;)
Post reply on HN