• GameOfHotPotato@programming.dev
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 year ago

    I wouldn’t necessarily say it’s critical thinking as that’s too wide a term to be useful. What I would put in my top 3 skills are:

    • problem decomposition
    • curiosity
    • being open to feedback / criticism

    Problem decomposition allows you to take huge problems and fix them as if they’re nothing more than a few tiny issues.

    You won’t learn anything after the initial knowledge required to do your job and keep on growing without being curious.

    The same can be said for feedback, a lot of people attach their ego to their work. This is such a limiting factor, holding you back from improving in areas you weren’t aware of.

    • terebat@programming.devOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      I like problem decomposition a lot as a discrete step. There’s a huge tendency to go, I have problem A, let’s just solve with it B. Many times the nuance of why A occurred, whether it’s a symptom of something, and what are the different subproblems that comprise A are skipped.

      This often causes solutions which don’t actually solve the problem, or just mask it. That extra effort up front, leads to the proper solution, and as you said, very tactical fixes instead of huge unnecessary solutions.

  • Golang@programming.dev
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 year ago

    I’d say the ability to understand a problem set and break it down into pieces is the most important skill for software engineers. You can have all the AI tools you want, but if you don’t truly understand what it is you are trying to solve, you will likely end up at an over-engineered solution that requires consistent iteration.

  • Tom@programming.dev
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 year ago

    I was lucky I didnt faced this dumb attitude of locking others out of conversation. My experience from my early days is that seniors used jargon, but made sure that everyone understands what is means without any kind of shaming.

    That’s why I always considered jargon as useful. It is just some kind of model of point of wiew on some part of reality that we already agreed on (and must be clear to everyone in conversation). There is a saying “all models are wrong, some are useful”. And critical thinking helps you determine if the presented model is useful in your context… or anywhere at all.

    So I think it is good to understand some jargon, so you can determine if it fit your needs and brings any value, also you can be the hero who makes sure everybody understands.

    • terebat@programming.devOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Jargon is great for consolidating complexity into just a few words, reducing the things you have to think about. It can be equally valuable though to poke into implicit assumptions that are commonly made.

      It’s definitely a balance, and being inclusive in conversations is super important as you mentioned. It allows newer folks to get up to speed much faster in comparison, and allows more engagement across the people within the discussions.

  • schizosfera@feddit.de
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Critical thinking is definitely important, but I would say that the most underrated skill is communication (spoken and written).

    • terebat@programming.devOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Definitely agree there! Communication is super underrated, especially with how difficult it can be to align people and teams across organizations.

      • schizosfera@feddit.de
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 year ago

        Also communication: issues, blockers, requirements, expectations. Nothing works without these things and the ones you mentioned.

  • railsdev@programming.dev
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    1
    ·
    1 year ago

    After the last six hours of programming I’d say another huge factor is being able to keep a huge set of logic in your head as you switch between different parts of either the same or multiple projects.

    For example, I’m changing one web app to push builds (rather than deploying) and then notifying another web app of the pushed build.

    The receiving website authenticates via an nginx forward auth proxy so I had to learn to do basic HTTP authentication against that, actually implement the model, create an API endpoint for it, write tests, etc.

    For the sending app, I need to keep track of how the data will be sent, do research on how to make it happen within the context of GitHub Actions, etc.

    This is my side project. I’m keeping track of a whole host of issues for what I do at work with Kubernetes and another web app that manages clusters.

    • terebat@programming.devOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Context size is huge, as well as the ability to context switch effectively. It can mean the difference between solving something in a day or weeks.