this post was submitted on 12 Oct 2024
73 points (95.1% liked)

Programming

17528 readers
240 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
 

Hi,

My question certainly stems from the imposter syndrome that I am living right now for no good reason, but when looking to resolve some issues for embedded C problems, I come across a lot of post from people that have a deep understanding of the language and how a mcu works at machine code level.

When I read these posts, I do understand what the author is saying, but it really makes me feel like I should know more about what's happening under the hood.

So my question is this : how do you rate yourself in your most used language? Do you understand the subtilities and the nuance of your language?

I know this doesn't necessarily makes me a bad firmware dev, but damn does it makes me feel like it when I read these posts.

I get that this is a subjective question without any good responses, but I'd be interested in hearing about different experiences in the hope of reducing my imposter syndrome.

Thanks

(page 2) 33 comments
sorted by: hot top controversial new old
[–] [email protected] 2 points 1 month ago

I'd say average.

In every project and in every team, I end up being strong because I fix the hard stuff. I debug better and I deliver mostly bug free code. My code is more efficient and performant than my coworkers most of the time.

That's gotta count for something.

Imposter syndrome is good for me. Keeps me learning.

[–] [email protected] 2 points 1 month ago (1 children)

I don’t think your question relates to the language as much as to the platform. The language of choice is somewhat irrelevant and what you care about is what actually happens under the hood.

For the likes of java and go you want to have some understanding of what runtime does for the memory allocations and how their GCs work. For python you sometimes end up in the spots where you need to understand what limitations the GIL imposes (even more important now that they are trying to get rid of it). When you run C (or C++ or Rust) on the embedded hardware it really helps to understand what exactly bit flipping does in specific registers and what DMA means for how you write your code.

You don’t really have to know it all. You can absolutely write code without caring about anything of that and I know plenty software engineers that do. Some people write amazing functional things in java without ever questioning what it does to the machines and what resources you need to run it.

If you start questioning it, that will only expand your understanding. It's not a lateral move from e.g. C to Rust where you need to learn a lot to write your code in a memory-safe way, it's a movement deeper into the stack and what you learn there will be applicable to any language you use for this stack.

Answering your question: I always feel bad about not understanding some low-level concept. I have stacks of MCU reference docs lying around, printed, highlighted; I have archives with sample code, and hand-annotated CMSIS reversing notes. Embedded world is hard because you can’t just know C and be done with it. You have to know the hardware, too.

Here's my advice for you. Make notes of things that you learn from people smarter than you. Create a web of those notes and see where your gaps are. Then, work on learning something in those gaps in particular and see if you can make a blog post or something of your own. When you share what you learn you become one of those people with deep understanding that others look up to. There's always someone struggling with something that you either know or know how to figure it out.

[–] Croquette 2 points 1 month ago

What I like about embedded is that it's between software and hardware, where you have to know both to a certain extent. It kinda feels like being a mad scientist bringing a monster to life. Seeing that my code makes physical actions (lighting a LED or controlling a motor) never seems to get old, even when trivial.

I am confronted everyday about the things I don't know because I work in a startup and I am the only one that does what I do. Any issue that I have tells me what I need to learn to fix the issue.

You are right that for a lot of people, what I do seems like magic and we often forget the extent of our knowledge because it has become innate.

Thanks for the insight, I appreciate it.

[–] [email protected] 2 points 1 month ago (4 children)

Good enough to make my own things or mod things.

But not good enough to get a job as a programmer.

load more comments (4 replies)
[–] [email protected] 2 points 1 month ago

Being proficient isn't about getting something right the first time, it's about how easily you recognize something as wrong and knowing how to get the knowledge to fix it. Under that definition I rate myself 5/5 if I'm not trying to be humble or sorry about tiny details.

[–] [email protected] 1 points 1 month ago (1 children)

I’ve been using Scala professionally for 3 years. I don’t know what I’m doing most of the time because we have a ton of implicites and monads and extension methods. I just know the general idea and can get where I want by reading types.

I’ve been creating a language for fun for nearly 6 years. I often don’t know what’s going on under the hood because it’s somewhat complex. I think this is normal for every language. You don’t have to know everything to be able to use it. You don’t have to write blog posts once a week about the language subtleties you found.

[–] Croquette 1 points 1 month ago

The blogposts are the example I had because this is usually where I find my solutions.

I do understand that I don't need an in depth knowledge of everything about my language, but I sometime feel like I should know more. But again, this is the imposter syndrome talking.

I am thinking about blogging once my kids are older and I have more time because I am grateful when someone else does and I want to contribute as well.

[–] [email protected] -2 points 1 month ago* (last edited 1 month ago)

Even the creators of languages don't know their own languages 100%. I wouldn't even call them the limit. So, I'm good enough in my main language that a lot of code doesn't surprise me. And I try very hard to write code that others can understand as well when in a team.

Anti Commercial-AI license

load more comments
view more: ‹ prev next ›