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

  • danhab99@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    3 days ago

    I have no fear of implementing anything I’m asked to in typescript go rust java c# f# or nix… They’re all the same tool just kinda different in some places.

  • Tyfud@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    4 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.

  • dirtySourdough@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    4 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
      0
      ·
      4 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.

    • MajorHavoc@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      3 days ago

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

      This is as weird of a time for getting hired as a programmer as we have ever had. Hang in there. Once we let AI deployment pipelines start causing production outages and shareholder bankruptcies, we will start falling over ourselves to hire human programmers again.

      • emil_98@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        3 days ago

        Feels good to hear this. I’m also struggling to enter the industry and it’s nice to read something hopeful for a change

      • 🇰 🌀 🇱 🇦 🇳 🇦 🇰 ℹ️@yiffit.net
        link
        fedilink
        English
        arrow-up
        0
        ·
        edit-2
        3 days ago

        I mean that it’s quite a leap going from making, like, a text-based adventure in C++ or BASIC and changing/adding lines of code to someone else’s thing making mods to doing actual, professional level programming of systems I have never even fucked with for fun. Like, I can’t make the screen display an image. I don’t know how to do any sort of networking, at least from a programming standpoint (hardware and shit, no problem; I was CISCO and A+ certified at one point).

        I guess if all they need me to do is make what is essentially a database or calculator, I could do that. 🤷🏻‍♂️

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

          That’s the beauty of programming (and lots of skills, really) - once we master the basics, all we tend to notice is what we haven’t learned yet.

          It’s hard on our confidence, but there’s also a perverse beauty to it.

          It is a big leap, but it’s the kind of leap that gets easy when doing the job with training for dozens of hours per week.

          And it’s also a very small leap compared to the average computer user who doesn’t know why smoke shouldn’t come out of the computer case during normal operation.

          One of the cool things that AI will do is once again lower the barrier of entry for full time programmers.

          We’re on our way to finding out just how terrible AI is as a pilot, but it makes a damn fine co-pilot much of the time. And it’ll be key in welcoming in and enabling our next batch of brilliant full time programmers.

  • JackbyDev@programming.dev
    link
    fedilink
    English
    arrow-up
    0
    ·
    4 days 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.

  • lohky@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    edit-2
    5 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. 🤷

    • houseofleft@slrpnk.net
      link
      fedilink
      English
      arrow-up
      0
      ·
      edit-2
      4 days ago

      I have advice that you didn’t ask for at all!

      SQL’s declarative ordering annoys me too. In most languages you order things based on when you want them to happen, SQL doesn’t work like that- you need to order query dyntax based on where that bit goes according to the rules of SQL. It’s meant to aid readability, some people like it a lot,but for me it’s just a bunch of extra rules to remember.

      Anyway, for nested expressions, I think CTEs make stuff a lot easier, and SQL query optimisers mean you probably shouldn’t have to worry about performance.

      I.e. instead of:

      SELECT
        one.col_a,
        two.col_b
      FROM one
      LEFT JOIN
          (SELECT * FROM somewhere WHERE something) as two
          ON one.x = two.x
      

      you can do this:

      WITH two as (
           SELECT * FROM somewhere
           WHERE something
      )
      
      SELECT
        one.col_a,
        two.col_b
      FROM one
      LEFT JOIN two
      ON one.x = two.x
      

      Especially when things are a little gnarly with lots of nested CTEs, this style makes stuff a tonne easier to reason with.

      • lohky@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        4 days ago

        I’m 100% going to try this, but I have a feeling that it isn’t going to work in my application. Salesforce Marketing Cloud uses some pared-down old version of Transact-SQL and about half of the functions you’d expect to work just flat out don’t.

        The joys of using a Salesforce product.

        • houseofleft@slrpnk.net
          link
          fedilink
          English
          arrow-up
          0
          ·
          4 days ago

          Oh boy, have fun! CTEs have pretty wide support, so you might be in luck (well at least in that respect, in all other cases you’re still using saleforce amd my commiserations are with you)

      • lohky@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        edit-2
        4 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
          0
          ·
          3 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…

  • MXX53@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    5 days ago

    I think my job requires me to work in too many different areas. So although I can work in several languages and dev stacks, I am probably only a 2 or 3 or less out of 5 in all of them. However, network and server infrastructure, and cybersec/opsec I am probably more in the realm of a 4-4.5.

    • MajorHavoc@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      3 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++.

  • souperk@reddthat.com
    link
    fedilink
    arrow-up
    0
    ·
    5 days ago

    I would give myself a solid 4.2/5 on python.

    • I have in deepth knowledge of more than a few popular libraries including flask, django, marshmallow, typer, sqlalchemy, pandas, numpy, and many more.
    • I have authored a few libraries.
    • I have been keeping up with PEPs, and sometimes offered my feedback.
    • I have knowledge of the internals of development tooling, including mypy, pylint, black, and a pycharm plugin I have created.

    I wouldn’t give myself a 5/5 since I would consider that an attainable level of expertise, with maybe a few expections around the globe. IMO the fun part of being really good at something is that you understand there still is to learn ❤️

  • SuperFola@programming.dev
    link
    fedilink
    English
    arrow-up
    0
    ·
    5 days ago

    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.

  • I should know more about what’s happening under the hood.

    You’ve just identified the most important skill of any software developer, IMO.

    The three most valuable topics I learned in college were OS design basics, assembly language, and algorithms. They’re universal, and once you have a grasp on those, a lot off programming language specifics become fairly transparent.

    An area where those don’t help are paradigm specifics: there’s theory behind functional programming and OO programming which, if you don’t understand, won’t impeded you from writing in that language, but will almost certainly result in really bad code. And, depending on your focus, it can be necessary to have domain knowledge: financial, networking, graphics.

    But for what you’re taking about, those three topics cover most of what you need to intuit how languages do what they do - and, especially C, because it’s only slightly higher level than assembly.

    Assembly informs CPU architecture and operations. If you understand that, you mostly understand how CPUs work, as much as you need to to be a programmer.

    OS design informs how various hardware components interact, again, enough to understand what higher level languages are doing.

    Algorithms… well, you can derive algorithms from assembly, but a lot of smart people have already done a ton of work in the field, and it’s silly to try to redo that work. And, units you’re very special, you probably won’t do as good a job as they’ve done.

    Once you have those, all languages are just syntactic sugar. Sure, the JVM has peculiarities in how its garbage collection works; you tend to learn that sort of stuff from experience. But a hash table is a hash table in any language, and they all have to deal with the same fundamental issues of hash tables: hashing, conflict resolution, and space allocation. There are no short cuts.

      • College.

        I’m one of those folks who believes not everyone needs a degree, and we need to do more to normalize and encourage people who have no interest in STEM fields to go to trade schools. However, I do firmly believe computer programming is a STEM field and is best served by getting a degree.

        There are certainly computer programming savants, but most people are not, and the next best thing is a good, solid higher education.

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

      Thanks for the input, it will make me think about how to approach how to get the skills I need.

      I’d say I am decent with FreeRTOS which is pretty much just a scheduler with a few bells and whistles.

      I haven’t used assembly in a long while, so I know where to look to understand all the instructions, but I can’t tell right off the bat what a chunk of assembly code does.

      Algorithms, I am terrible at these because I rarely use them. I haven’t worked in a big enough project where an algorithm is needed. I tend to work in finite state machine which is close to algorithms, but it’s not quite it. And a big part of my job is interfacing peripheral chips for other to use.

  • Ephera@lemmy.ml
    link
    fedilink
    arrow-up
    0
    ·
    5 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
      0
      ·
      5 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.

  • magic_lobster_party@fedia.io
    link
    fedilink
    arrow-up
    0
    ·
    5 days ago

    I’m mostly working in Java now. I’m proficient to the degree that I can solve most things without looking for reference online. I think that matters most to me.