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

    • Ð Greıt Þu̇mpkin@lemm.ee
      link
      fedilink
      arrow-up
      22
      ·
      28 days ago

      This is probably the true highest level of expertise you’ll get out of most professional coders.

      It takes a real monk level of confinement to understanding the language to break out of being proficient in looking shit up and start being proficient in being the person that writes the shit people are looking up.

  • nik9000@programming.dev
    link
    fedilink
    arrow-up
    19
    ·
    28 days ago

    I’ve learned a lot by breaking things. By making mistakes and watching other people make mistakes. I’ve writing some blog posts that make me look real smart.

    But mostly just bang code together until it works. Run tests and perf stuff until it looks good. It’s time. I have the time to write it up. And check back on what was really happening.

    But I still mostly learn by suffering.

    • MajorHavoc@programming.dev
      link
      fedilink
      arrow-up
      8
      ·
      28 days ago

      But I still mostly learn by suffering.

      That resonates so much. Almost every time someone is deeply impressed with something I know, it brings back a painful memory of how I learned it.

    • Croquette@sh.itjust.worksOP
      link
      fedilink
      arrow-up
      3
      ·
      28 days ago

      I really like brain twisters. It can get frustrating at times, but it’s the most fun out of the profession to me.

  • hperrin@lemmy.world
    link
    fedilink
    arrow-up
    16
    ·
    28 days ago

    Knowing the footguns in your language is always useful. The more you know, the less you’ll shoot your foot.

    • Croquette@sh.itjust.worksOP
      link
      fedilink
      arrow-up
      5
      ·
      28 days ago

      I think that one of my issue is that I’d like to be more knowledgeable to the smaller bits and bytes of C, but I don’t have the time at work to go deeper and I don’t have any free time because I have young kids.

      • MajorHavoc@programming.dev
        link
        fedilink
        arrow-up
        7
        ·
        edit-2
        28 days ago

        I don’t have any free time because I have young kids.

        That’s a healthy thing to acknowledge.

        It’s a brutal phase for professional development, hobbies, free time, sex, basic housekeeping…

        It gets better as the little ones grow.

        • Croquette@sh.itjust.worksOP
          link
          fedilink
          arrow-up
          2
          ·
          27 days ago

          At least, we know emotionally that it will get better with the second one haha, even if the day to day is rought.

          With the first one, it felt like we would never get to the other side of it. But we did and we will for the second one.

          I am eager to learn new things, so having so little free time is definitely tough. And the lack of sleep/energy makes it even harder.

          Thanks for the encouragement, it’s nice to be acknowledged by someone else that went through the same thing. We often forget that we are not alone and a lot of people got through it before us.

      • arendjr@programming.dev
        link
        fedilink
        arrow-up
        3
        ·
        28 days ago

        I don’t know about your workplace, but if at all possible I would try to find time between tasks to spend on learning. If your company doesn’t have a policy where it is clear that employees have the freedom to learn during company time, try to underestimate your own velocity even more and use the time it leaves for learning.

        About 10 years ago I worked for a company where I was performing quite well. Since that meant I finished my tasks early, I could have taken on even more tasks. But I didn’t really tell our scrum master when I finished early. Instead I spent the time learning, and also refactoring code to help me become more productive. This added up, and my efficiency only increased more, until at some point I only needed one or two days to complete a week’s sprint. I didn’t waste my time, but I used it to pick up more architectural stuff on the side, while always learning on the job.

        I’ll admit that when I started this route, I already had a bunch of experience under my belt, and this may not be feasible if you have managers breathing down your neck all the time. But the point is, if you play it smart you can use company time to improve yourself and they may even appreciate you for it.

        • Croquette@sh.itjust.worksOP
          link
          fedilink
          arrow-up
          1
          ·
          27 days ago

          I work in a startup, so I’d say that almost every day, I learn something new. So I don’t really need to look in-between tasks because a lot of tasks bring new challenges.

          When I worked in corpos, my job was restricted to the same tasks and specific knowledge. Now it’s the opposite where I need to learn what I need to create a feature or fix an issue.

          I guess that lately, a lot of new things have popped up and I need to absorb a lot of information to implement the features I need. And that is probably what is triggering the imposter syndrome.

          Thanks for the insight, it is appreciated.

      • nebeker@programming.dev
        link
        fedilink
        English
        arrow-up
        2
        ·
        27 days ago

        There’s a lot to talk about from this point alone, but I’ll be brief: having gone through university courses on processor design and cutting my teeth on fighting people for a single bit in memory, I’m probably a lot more comfortable with that minutia than most; having written my first few lines of C in 10 years to demo a basic memory safety bug just an hour ago, you’re way way ahead of me.

        There are different ways to learn and gain experience and each path will train us in different skills. Then we build teams around that diversity.

        • Croquette@sh.itjust.worksOP
          link
          fedilink
          arrow-up
          2
          ·
          27 days ago

          Thanks for the insight. I guess one thing that causes my imposter syndrome is that I want to know how everything works in details.

          I agree that for other people, what I know seems like magic to them. It’s easy to look at what we don’t know, but we don’t take the time to appreciate how far we’ve come. We should do that more often.

  • MajorHavoc@programming.dev
    link
    fedilink
    arrow-up
    14
    ·
    28 days ago

    how do you rate yourself in your most used language?

    I know things that no human should have to carry the knowledge of

    Do you understand the subtilities and the nuance of your language?

    My soul is scarred by the nuanced minutia of many an RFC.

    in the hope of reducing my imposter syndrome.

    There’s but two types in software - those who have lived to see too much…and those who haven’t…yet.

  • cinnamon_tea@programming.dev
    link
    fedilink
    arrow-up
    13
    ·
    27 days ago

    After almost 12~15 years of programming in C and C++, I would give myself a solid “still don’t know enough” out of 10.

    • MajorHavoc@programming.dev
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      25 days ago

      After almost 12~15 years of programming in C and C++, I would give myself a solid “still don’t know enough” out of 10.

      That resonates so thoroughly.

      And while it can 100% also be the case in any tool or language, it’s somehow 300% true for C and C++.

  • solrize@lemmy.world
    link
    fedilink
    arrow-up
    12
    ·
    edit-2
    28 days ago

    In C in particular, you have to be very cognizant of the tricky ways the language can screw you with UB. You might want to try some verification tools like Frama-C, use UB sanitizers, enable all the compiler warnings and traps that you can, etc. Other than that, I think using too many obscure features of a language is an antipattern. Just stick with the idioms that you see in other code. Take reviewer comments on board, and write lots of code so you come to feel fluent.

    Added: the MISRA C guidelines for embedded C tell you to stay with a relatively safe subset of the language. They are mostly wise, so you might want to use them.

    Added: is your issue with C or with machine code? If you’re programming small MCUs, then yes, you should develop some familiarity with machine code and hardware level programming. That may also help you get more comfortable with C.

    • Croquette@sh.itjust.worksOP
      link
      fedilink
      arrow-up
      1
      ·
      28 days ago

      My issue is with the imposter syndrome i’d say.

      I don’t know asm on the tip of the fingers because today’s mcu are pretty full of features that makes it not useful most of the time, but if I need to whip up something in asm for whatever reason, I know the basics and how to search for documentation to help me.

      I try to follow MISRA C guidelines because it’s pretty easy to follow and it gives tool to reduce mistakes.

      I have enough experience to avoid many common pitfalls such as overflows, but for whatever reason, it always feel like I don’t know enough when I come across a tutorial or a post with a deep dive in a specific part of an embedded project or on the C language.

      When I read these tutorials/posts, I understand what is being done, but I could not come to these conclusions myself, if that makes sense.

      • solrize@lemmy.world
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        28 days ago

        What are you working on and what kind of organization? Are you working with someone more senior? You could ask him or her for an assessment of where you should work on strengthening up.

        You are in the right mindset if you are worried. Many C programmers greatly overestimate their ability to write bug-free or even valid (UB-free) code.

        The AVR MCUs are pretty simple compared with 32 bit MCUs, so are good for asm coding.

        Otherwise it’s a matter of coding til it’s reflexive.

        Philip Koopman has written a book on MCU programming that sounds good. I haven’t seen it yet but someday. You might look for it: https://betterembsw.blogspot.com/2021/02/better-embedded-system-software-e-book.html?m=1

        John Regehr’s blog is also good.

        • Croquette@sh.itjust.worksOP
          link
          fedilink
          arrow-up
          1
          ·
          25 days ago

          Thanks for your input.

          I think I would like to follow all these people and their work on C, and their in depth knowledge. But free time is sparse, and I don’t have the mental energy when I do have some time.

          As for my work, I work in a startup where I am the only one doing what I do. However, I have a lot of leeway in how I code, so I am always somewhat read on best practices. So I can’t really refer to a senior dev, but I can self-teach.

          I think I coded enough that a lot of what I do is a reflex, and I often can approximate a first solution,but I have doubts all the time on how I implement new features. That makes it so that I am a slower coder and I really struggle to do fast prototyping.

          I am aware enough of what I do well, and what I struggle, so there’s that.

          • solrize@lemmy.world
            link
            fedilink
            arrow-up
            2
            ·
            edit-2
            25 days ago

            Fair enough. If your product isn’t safety or security critical then it’s mostly a matter of getting it working and passing reasonable testing. If it’s critical you might look for outside help or review, and maybe revisit the decision to use C.

            The book “Analysable Real-Time Systems: Programmed in Ada” was recommended to me and looks good. I have a copy that has been on my reading pile for ages. I was just thinking about it recently. It could be a source of wisdom about embedded dev in general, plus Ada generally fosters a more serious approach than C does, so it could be worth a look. I also plan to get Koopman’s book that I mentioned earlier.

      • Professorozone@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        27 days ago

        Nope. I’m just that bad. I feel like I have a logical mind but it just seems like the command don’t do what I think they will, won’t operate on a certain type of variable or Holy crap I forgot a friggin space or semi-colon or something.

        Languages in order of proficiency: C++ HTML/CSS Matlab Basic Fortran (1 class taken)

        But when I say proficient I seriously mean looking stuff up on the internet for every single line. And I haven’t used Basic in decades.

  • Tolookah@discuss.tchncs.de
    link
    fedilink
    arrow-up
    8
    ·
    edit-2
    28 days ago

    Better than many, mediocre.

    With my coworkers I’ve got a strange ability to pick up any language that tastes like c, and get stuff done. I’m sure I’ve confused our c# guys when I make a change to their code and ask for a code review, because I’ll chase down quality of life improvements for myself. (Generally, I will make the change and ask if I have any unintended side effects, because in an MCU, I know what all my side effects are, multi threaded application?, not at all)

    Edit: coming from a firmware view, I’ve made enough mistakes to realize when order of operations will stab me, when a branch is bad because that pipeline hit will hurt, and I still get & vs && wrong more often than I would like to admit.

    • Croquette@sh.itjust.worksOP
      link
      fedilink
      arrow-up
      2
      ·
      28 days ago

      I think I’ll never not make & &&, | || or = == operators mistakes. It’s so easy to go over it fast and not notice the mistakes.

      I like developing MCU firmwares because there is limited amout of resources and you usually have direct control of what is running when.

      I feel the better than many, but mediocre in my soul. I mean, I get paid to code, so I certainly have a good enough knowledge to do so. But I have the tendancy to undersell myself.

  • Tyfud@lemmy.world
    link
    fedilink
    English
    arrow-up
    8
    ·
    26 days ago

    I’ve been writing code for 25+ years, and in tech for 27+.

    I’m a novice at all languages still. Even though they tell me I’m a Principal Engineer.

    There’s always some new technique or way to do what I want that’s better I’m learning every day. It never stops. The expectations for what I consider to be good code just continues to climb every day.

    • Rusty Shackleford@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      18 days ago

      I try to tell this to all young guns getting in.

      The amount of information due to the dearth and depth of theory, practical, and abstraction I would need to where I’m comfortable enough to consider myself an expert would take a lifetime to learn.

      Hence, it’s, “Stay in the dojo, young padawan!”

  • itsathursday@lemmy.world
    link
    fedilink
    arrow-up
    7
    ·
    28 days ago

    If you step in enough shit you eventually learn to realise when you are about to step in it again. I think the most knowledgeable people are those that have failed the most and found something helpful along the way, seems you are well on your journey so just keep steeping. At some point the abstractions you have control over become unreliable until you understand how they interact with lower level systems and the balance of control comes back because you know know the circumstances in which these abstractions work in your favour.

  • dirtySourdough@lemmy.world
    link
    fedilink
    arrow-up
    6
    ·
    26 days ago

    After 6 years of seriously using Python regularly, I’d probably give myself a 6/10. I feel comfortable with best practices and making informed design decisions. I have no problem using linting and testing tools. And I’ve contributed to large open source projects. I could improve a lot by learning more about the standard library and some core computer science concepts that inform the design of the language. I’m pretty weak in web frameworks too, unfortunately.

    • JoshCodes@programming.dev
      link
      fedilink
      English
      arrow-up
      3
      ·
      26 days ago

      After 3-4 years of using python I’m bumping you up to a 7 so I can fit in at a 5. Congrats on your upgrade. I’ve never contributed to open source but I’ve fixed issues in publocly archived tools so that they aren’t buggy for my team. I can see errors and know what likely caused them and my code literacy is decent. That being said, I think I’m far from advanced.

  • Kissaki@programming.dev
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    28 days ago

    I am very proficient in my primary language, C#.

    Writing more context out feels like boasting, so I think I will skip that and go to a summation/conclusion directly.

    Knowledge and expertise comes from more than the language. Which you hinted at. The language is only our interface. How is the language represented, how will it transform the code, how will it be run. There’s a lot of depth in there - much more than there is in the language itself.

    I learned a lot, through my own studies and reading, studying, projects, and experience. I’m a strong systematic thinker. It all helps me in interpreting and thinking about wide- and depth- context and concerns. I also think my strengths come at the cost of other things, at least in my particular case.

    You’re not alone. Most developers do not have the depth or wide knowledge. And most [consequently] struggle to or are oblivious to many concerns and opportunities, and to intuitively or quickly understand and follow such information.

    Which does not necessarily mean they’re not productive or useful.

    • Croquette@sh.itjust.worksOP
      link
      fedilink
      arrow-up
      2
      ·
      27 days ago

      Through the different replies, I reflected on what I know and what I do for work and I feel like my skillset is more akin to a generalist/integrator, which is needed. But I also feel like everyone in my domain does that. Which might or might not be true.

      I guess knowing our strengths and weaknesses is also a skill in itself and a little bit of self doubt here and there can help us grow and direct our knowledge in a certain direction.

      Thanks for the insight.

    • MajorHavoc@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      28 days ago

      Nice!

      I’m still struggling to get good at BASIC, myself.

      BASIC was my first language, and I still don’t feel like I’ve mastered it, so I still study it on some weekends.

      I take so many modern tools for granted, now. It makes my learning progress in BASIC feel slow.

      But I’m getting better at it.

  • lohky@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    edit-2
    27 days ago

    8/10 Server-side JavaScript

    7/10 Ampscript

    3/10 SQL

    There is something about SQL that I can’t get to click with me. I can run basic queries and aggregation, but I can never get nested queries to work right.

    All of these also assume I have access to documentation. Without documentation, all of them are like a 2. 🤷

      • lohky@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        27 days ago

        Wrap the Ampscript in an ssjs try/catch block and debug all your shit on a cloudpage. ;)

        Everyone that works in SFMC for an extended period of time hates SFMC. Or at least has a love hate relationship with it. I think Salesforce is the most worthless company in existence and John Mulaney’s anti-SF rant at Dreamforce brought a little light to my life.

        I very rarely actually use Ampscript anymore. Almost everything is done in ssjs in my instance. Thank fuck I’m not consulting anymore and don’t have to deal with other company’s stuff.

        • FourPacketsOfPeanuts@lemmy.world
          link
          fedilink
          arrow-up
          2
          ·
          26 days ago

          I’m probably at about a 1/10 in ampscript. I just don’t use it enough. I tried something like what you are describing but it didn’t work very well. Trying to debug ampscript that runs in an email template at send time by copying into a cloud page and then trying to mimick the various properties only available at send time was just maddening. I can’t comprehend how Salesforce bought such a buggy and poorly thought through piece of junk. It’s a coin toss whether some of the main menus even load half the time. Ergh…

          • lohky@lemmy.world
            link
            fedilink
            arrow-up
            1
            ·
            edit-2
            25 days ago

            Yeah, you still have to draw in all those values through lookups or just set the variables manually but if you keep getting a failed send or that shitty 500 error on a cloudpage, the try/catch block prevents it and will actually display the error. Should look something like this:

            <script runat=“server”> Platform.Load(“Core”,“1.1.1”); try{ </script>

            %%[ your AMPscript block goes here ]%%

            <script runat=“server”> }catch(e){ Write(Stringify(e)); } </script>

            SFMC is Salesforce’s red headed stepchild. The product has been neglected into the ground and they keep shoehorning random shit into it then neglecting that, too. Ad Studio, Social Studio, and Interaction Studio were all different things they bought and slapped a coat of SF branded paint on then let die. It is such a weird product but EVERYONE has it and it gives me pretty good job security knowing how to make it function about half the time.

  • Ephera@lemmy.ml
    link
    fedilink
    arrow-up
    5
    ·
    28 days ago

    What helped me a lot with pushing deeper down into the language innards is to have people to explain things to.

    Last week, for example, one of our students asked what closures are.
    Explaining that was no problem, I was also able to differentiate them from function pointers, but then she asked what in Rust the traits/interfaces Fn, FnMut and FnOnce did (which are implemented by different closures).

    And yep, she struck right into a blank spot of my knowledge with that.
    I have enough of an idea of them to just fill in something and let the compiler tell me off when I did it wrong.
    Even when designing an API, I’ve worked out that you should start with an FnOnce and only progress to FnMut, then Fn and then a function pointer, as the compiler shouts at you (basically they’re more specific and more restrictive for what the implementer of the closure is allowed to do).

    But yeah, these rules of thumb just don’t suffice for an actual explanation.
    I couldn’t tell you why these different traits are necessary or what the precise differences are.
    So, we’ve been learning about them together and I have a much better understanding now.

    Even in terms of closures in general (independent of the language), where I thought I had a pretty good idea, I had the epiphany that closures have two ways of providing parameters, one for the implementer (captured out of the context) and one for the caller (parameter list).
    Obviously, I was aware of that on some level, as I had been using it plenty times, but I never had as clear of an idea of it before.

    • Croquette@sh.itjust.worksOP
      link
      fedilink
      arrow-up
      2
      ·
      27 days ago

      I work in a small start-up where I am the only one doing what I do, so my epiphanies come from the struggles I have.

      Other people I work with often have a blank look in their eyes when I try to explain some issues or what the code does because they don’t have the skillset to comprehend what I am doing. So this isn’t a path for me (yet, hopefully we can grow enough where we need more people in my field).

      But I appreciate your experience. I will certainly think about a way to play in the innards of my language so that I can understand it better.