Do I need this level of depth to get a microcontroller to make a stepper motor do what I want to do (whatever that may be)
Dave over at the EEVBlog likes to draw a distinction here. He distinguishes between people who want to learn electronics (build power supplies, radios), that is, analog circuits, from people who want put together Arduino projects. He refers to the latter as more of embedded programming rather than electronics.
The linked course definitely leans way over to the side of the former. If you’re more interested in the latter, there are tons of YouTube channels out there about building projects with the Arduino.
Possibly OT and possibly triggering, but I had to stop watching Dave's videos because he matches my personal definition of giant gatekeeping asshole.
I have learned a ton from him over the years, but when you watch something like his video about Flux, it's hard not to feel a little gross. This is subjective, but when you spend a lot of time making sweeping generalizations and then quite literally read the fawning comments as though an echo chamber proves your point... that's when I have to check out.
My bias is that I've been using Flux for about a year and while it's not without flaws... it's actually pretty great.
TL;DR: dividing people who are building things with electronics into "real" vs "embedded" is just a way to enforce a very artificial hierarchy where you're conveniently always at the top.
There is an artificial hierarchy here but it’s not the one you’re thinking of. It’s a hierarchy of abstractions. At the lowest level of abstraction you’re dealing with physics, Maxwell’s equations, materials and their properties. Above that you have the lumped matter abstraction (conductors, resistors, capacitors, inductors, diodes, transistors). Above that you have modular circuit components, ICs, digital logic. Above that you have CPUs, instruction sets, assembly language… This abstraction continues all the way up through software engineering.
The reason Dave makes this distinction is not because he wants to gatekeep. It’s because he wants people to learn how to build their own circuits rather than combining modules built by others. This is no different from a programmer telling someone to learn a programming language to build their own software rather than using Microsoft Office etc.
Dave does plenty of embedded programming himself. He uses Arduinos when the project calls for them. He just wants people to understand that there’s a whole lot more to understand when you go to a lower level of abstraction (lumped matter components).
I think it’s also an important distinction to be made because a lot of businesses have sprung up within the Arduino ecosystem and it’s brought a lot of new people into the electronics world. These folks are excited and enthusiastic but they often lack knowledge of electronics fundamentals and so they struggle to troubleshoot when things go wrong. It’s important to help these people find the resources they need to learn electronics so they don’t need to rely on others to troubleshoot their circuits.
I respect your reply. What follows isn't arguing against what you said.
I see a parallel between the Arduino/Adafruit folks and the people who go through developer bootcamps. It is extremely ill advised to make sweeping statements about bootcamp grads which might imply a shallow depth of understanding or troubleshooting capacity, because so many people will get very upset about your gatekeeping. That vibe hasn't made its way to the EE world, clearly.
I've had a 35 year and counting career as a self-taught software developer. I've learned a lot about adjacent concepts without needing to become particularly expert in any of them, because I learned early to delegate to others' strengths. For example, I've never learned assembly or been unable to function because I couldn't implement a device driver. I also have very weak math skills in general.
All of which brings me to the actually important question: what knowledge or skills do you need to do what you have set out to do? An honest evaluation of most problems can only result in "not that much, actually" because you are not working in a vacuum. We have YouTube and GPT. We make friends with complimentary skills, and we develop a sense of when to persist vs when to ask for help.
I don't subscribe to the idea that someone who has internalized all of the formulas is somehow more pure, any more than I assign respect to someone who still memorizes all of their friends' phone numbers.
In many/most cases, not knowing which topics we should obtain deep knowledge of is actually a negative. While it's perfectly reasonable to decide that you want to know all about Maxwell's equations, but you should see it for what it is: a hobby, unless you have a damn good reason to prioritize it over something silly like shipping your project.
It's like the DIY keyboard community, I guess: it's cool that folks want to get that nerdy about building their own data input device... but if you stop to build your idea of the perfect keyboard before starting the task assigned to you, you deserve to be given a strike.
TL;DR: 98% of people with a deliverable in mind would be better suited by a Collin's Lab video than a 45 minute lecture on the physics that make capacitors work.
One of the biggest challenges with electronics is that the abstractions are leaky. We see this as well sometimes in software. You may be writing a project in C++ and you keep getting segmentation faults and other memory errors, so you need to know something about assembly language and the computer's memory architecture if you want to be most effective at troubleshooting these issues.
At another level of abstraction, say Python programming, you're much less likely to have to deal with this issue because memory is managed for you. You can get a lot done with Python without ever needing to know anything about the lower levels. Python is a much more solid abstraction than C++, which is leaky.
Electronics is even worse than C++. All of the rules and formulas with lumped matter abstractions change when you move into the realm of high frequency signals. A circuit you build to operate at low frequency may fail utterly at high frequency due to transmission line effects. The Arduino/Adafruit communities try to get around these issues by largely operating at low speeds and confining much of the high speed stuff (radios) to built-in modem circuits and antennas.
But even at low speeds, you still have issues with things like impedance, current, etc. Beginners hoping to run an electric motor on the IO pins of their Arduino are going to be confused and frustrated when it doesn't work. Not only that, but experimentation in electronics can result in electric shocks and even fires if users don't know what they're doing. This is one area where software has a big advantage: it's pretty hard to do physical damage to your property (or your health) with a Python script.
I've really enjoyed this exchange. I come to HN to have my thoughts provoked. Thank you.
One of the most shocking things (no pun initially intended) about learning electronics [as someone who has spent absurd amounts of time tweaking the user experience of interacting with text input elements] is the cold realization that you have to manually handle switch bounce. Because physics.
Wait, I have to think about how tiny bits of widget bounce when they come into contact with each other? Every button and every encoder? You'be got to be kidding me.
And so you set out on the dark road as you first wonder WTF is going on with your counter, then you start tracking the time between pulses. Then you learn about hardware interrupts and state machines and oscilloscopes. Then you learn about RC and Schottky diodes and soon, hex inverters.
Would I benefit from a two hour lecture about the math behind RC calculations? It might be interesting, but at some point if you pull enough yarn out of the sweater, it stops keeping you warm.
I have always really enjoyed clever and/or obsessive answers to "describe what happens when you type a URL into your browser". If someone starts with the mechanical behaviour of a cherry switch before talking about the USB protocol, is this not the free jazz of computer science?
Dave over at the EEVBlog likes to draw a distinction here. He distinguishes between people who want to learn electronics (build power supplies, radios), that is, analog circuits, from people who want put together Arduino projects. He refers to the latter as more of embedded programming rather than electronics.
The linked course definitely leans way over to the side of the former. If you’re more interested in the latter, there are tons of YouTube channels out there about building projects with the Arduino.