• Cyclohexane@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    8 months ago

    Requiring a candidate to know a specific programming language is stupid. Nearly all of the commonly used languages in industry are similar.

    It’s maybe more valuable to require knowledge in a specific framework, where knowledge is less transferrable between popular frameworks. Nonetheless, I personally rather hire an engineer that solves problems and learns flexibly rather than one that happens to know the right tech.

    • AnyOldName3@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      8 months ago

      I’d say this is pretty dependent on the language. For example, with C++, you need to micromanage (or at least benefit from micromanaging) a lot of things that you can get away without knowing about at all with other languages. That stuff takes time to pick up if you’re self-teaching as you can write stuff that looks like it works without knowing its half as fast as it could be because you aren’t making use of move semantics, and if a colleague is teaching you, then that’s time they’re not spending directly doing their own work. On the other hand, someone with Typescript experience could write pretty decent Javascript from the get-go.

      • CodeMonkey@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        8 months ago

        C++ is unique in that it is wildly dominant in its niche. I am sure that any developer who has worked with another object oriented, manually memory managed, systems programming language (are there any other popular ones out there?) should have no trouble picking up C++.

    • onlinepersona@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      8 months ago

      It’s not a black and white issue. “Jack of all trades, master of none” vs “expert of one”. Both have their place and I think it’s better to have a mix than just one or the other.

      I’ve seen python newcomers writing code as if they were writing in another language. They don’t know about dataclasses, operator overrides, __init__ vs __new__, metaclasses, __init__.py vs __main__.py, @property, match, the walrus operator, or assignments, or the common pitfalls of python like mutable defaults, type hints, and a bunch of other things.
      Knowing a language in-depth helps write DRY code, avoiding common pitfalls, handling things better like debugging, profiling, and other tooling, and avoiding pitfalls of the language, which newcomers have to first learn, regardless of how their experience with other languages.

      A lot of stuff is transferable, for sure, but every language uses different idioms, covers different paradigms, and so on. It’s good to have at least one expert on the term to teach others, and to have people flexible enough to switch of willing to learn. Having only experts can mean a static team unwilling to experiment or use better programming languages or technologies. Having only beginners or mediors of a language can produce functional, but sub-optimal code. YMMV

      CC BY-NC-SA 4.0

    • frezik@midwest.social
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      I used to agree, but now I’m not so sure. There are huge time savings in having someone already familiar with a specific technology. They’ve ran across an issue before and can quickly find the solution.

      For example, I started learning Elixir a little over a year ago. I struggled with how to get it to change data in place, and the answer is that you don’t. You work with data in an immutable way; you make a copy with the change made and throw away the original. Once you get used to it, this works very nicely, and Elixir has quickly become one of my favorite languages. However, few other languages force you to work immutably, and nobody does it voluntarily. It takes a bit to get your head around it, and you’ll take a lot longer on any given task until you do.

    • neomachino@lemmy.dbzer0.com
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      I generally agree with this, there’s specific circumstances but for the most part its true.

      I went from a C# position to PHP, to Python, to perl all with little or no experience with what I was jumping in to. There’s different nuances and the syntax might take a bit to get used to but as long as someone understands the how and why of what their code is doing that can be pretty easily transfer to most other languages. It’s all about the fundamentals.

  • halloween_spookster@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    ·
    8 months ago

    Myth: software engineers replicate value similar to a factory worker making the same item over and over

    Truth: software engineers are closer to artists than factory workers IMO. We find and create new value, not replicate existing value

  • tatterdemalion@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    8 months ago

    That a “working” prototype with no tests is just as good as a carefully-designed and well-tested feature. I see this happen so often that a coder puts a prototype in front of a product manager or exec and they are like, “this is exactly what we need, now! Ship that!” And then misery ensues for all of the engineers that need to maintain this piece of garbage. As managers pressure the engineers to build new features on top, they inevitably break fundamental parts of it, and without a confident leader to demand that tech debt is paid off, that product will consume the souls of many desperate coders.

    In contrast, if you do it right the first time, there will be significant parts of code that never need to change, and the parts that do need to change will be much easier, because it will be obvious if it breaks the tests.

    • waz@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      I like puting my prototype code in namespaces like “garbage” “trash” “throwaway” etc to emphasize how unfit for production. I’ve no concrete evidence of it’s success, but I like to think it dissuades other team members from using it where they shouldn’t.

    • nilclass@discuss.tchncs.de
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      That sounds super familiar :D

      Anyway, a prototype is not a bad thing, if the managers know the difference. It’s easier said than done to “do it right the first time” if you don’t know how / what to build. Prototypes can be built to validate hypotheses and generally figure out what works, then build the real thing afterwards.

      • tatterdemalion@programming.dev
        link
        fedilink
        arrow-up
        0
        ·
        edit-2
        8 months ago

        Yea I should have clarified. Prototypes are a great idea. The problem occurs when you say, “this is good enough we can improve on it as we go.” Yea good luck balancing priorities when everything breaks from tapping your keyboard too hard. You MUST NOT MERGE the prototype.

    • Ethan@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      ·
      8 months ago

      As my first job out of college (when I didn’t know what I didn’t know) I was hired to build a bespoke inventory system for a manufacturing company. My prototype became a production system the second I showed it to one of the engineers. The next three months of my life were a living hell as I frantically fixed bugs on a live system. Lesson learned.

  • Cyclohexane@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    8 months ago

    Some programmers are software engineers. They solve problems, sometimes problems with great ambiguity or non-straightforward solutions.

    And some programmers are… code technicians? They understand and write code, but their job seldom involves problem solving. Often times, they’re asked to code an already solved problem, or mostly solved.

    This is not a diss. I was in the second camp for a while. But it hurts your career to stay in that. So be careful.

  • namingthingsiseasy@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    8 months ago

    This one might be a bit controversial, but has rung true in my general experience. Probably a lot of exceptions to these rules, but here goes:

    You don’t really know a programming language until you understand a fair amount of the standard library and how packages/modules/dependencies work. Syntax is pretty easy, and any mainstream language will work just fine for solving basic leet-code style problems. But when you really spend a lot of time working with a language, you’re going to spend more time learning about common libraries and how to manage dependencies. If you’re working with a language like C++ or Java, this could also include build systems and how to use them.

    Another precursor to being able to say that you know a language is that you should also be familiar with best practices (ie. how to name modules, how to write documentation, etc.) and common pitfalls (undefined behavior, etc.). This is one of the hardest parts about learning a new language in my opinion, because the language may not necessarily enforce these things, but doing them the wrong way can make your life very difficult.

    • owsei@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      That’s what I hate about javascript, it doesn’t warm you about undefined behavior, it just throws.

      I used to not really care about that, but after learning C and Rust, damm, I wish there where result types everywhere

      • spartanatreyu@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        8 months ago

        Some small nits to fix:

        1. C has it’s own undefined behavior.

        2. JS has confusing behavior, not undefined behavior. Its specs are well defined and backwards compatible to a fault, making some things unintuitive and harder to learn if you don’t learn the history of the language.

        3. Problems with both should be avoided by learning and using standard practices. (Don’t pretend C is object oriented, always use === instead of == in js, etc…)


        In complete agreement:

        1. Result types are awesome, all future languages should be designed around them.
        • owsei@programming.dev
          link
          fedilink
          arrow-up
          0
          ·
          8 months ago

          thank you very much.

          By undefined I meant the usage of undefined in the language, however you phrased it way better :)

    • Ethan@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      ·
      8 months ago

      Counterpoint: knowing a programming language doesn’t matter if you can solve problems. A competent programmer can pick up a new language and be productive within a few months. That is, a new language within the same paradigm - going from a imperative language to a functional language can be a drastic shift, but going from one imperative language to another is easy. If you can’t do that as a intermediate to senior developer, you’re not a competent programmer IMO.

      The real skills of a good programmer are things like problem solving, debugging, understanding how to write readable and maintainable code, etc. Having deep knowledge of a specific programming language or languages is helpful and enables you to work faster, but if you’re only a skilled developer in the languages you know - if you aren’t capable of pivoting those skills to another language - you aren’t a skilled developer IMO.

      • namingthingsiseasy@programming.dev
        link
        fedilink
        arrow-up
        0
        ·
        8 months ago

        Agreed overall, you will still be competent switching from one language to another, but intricacies and nuance matter a lot here. You may have enough knowledge to solve problems, but will you have enough knowledge to avoid creating new ones too? Like performance issues, or memory leaks, or other unwanted behavior? C++ is a great example here: someone that’s smart but inexperienced might just be dangerous enough to start writing classes with dumb pointers without overriding the copy constructors, and this is just a recipe for disaster.

        I think it would take more than a few months to develop the kinds of experience that you need to be aware of these issues and avoid them. And while C++ is a very easy example to point out here, pretty much all languages have their share of footguns to be aware of, and it just takes time to learn them. A “deep knowledge” of a language is not just about being faster and more productive; it’s also about not creating more issues than the ones your solving.

  • stoly@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    8 months ago

    Honestly? The people who say “learn to code” as the solution to getting a better job. Only some people can do this.

    Also the idea that tech “just works”. Have had freshly-minted CS/info types suddenly realize why the phrase “back away slowly” exists.

    • Asafum@feddit.nl
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      I learned this the hard way like 3 times lol

      I keep trying to “better myself” by learning programming, but I’m just a fucking moron, I’m not capable. That and I really have 0 interest in it, but I can’t make enough to survive as a single individual being a fucking moron…

      • stoly@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        8 months ago

        The people who really succeed are the ones so obsessed with tech that they wrote their first app at the age of 10 and were in the high school robotics club.

        • anti-idpol action@programming.dev
          link
          fedilink
          arrow-up
          0
          ·
          8 months ago

          only if the definition of success excludes having a stable, well paying position working for someone. I wrote some websites for fun at the age of 13, got into Linux at 12 but does anyone care? No, because that’s not commercial experience and that’s what matters in the world of job postings written mostly by non-technical people.

        • jasory@programming.dev
          link
          fedilink
          arrow-up
          0
          ·
          8 months ago

          Nope. I only learned to use computers as an adult, and only learned programming incidentally as a tool for other work.

          The truth is that it’s actually much faster to learn as an adult, you just have more momentum if you start as a child.

  • Dr. Wesker@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    8 months ago

    That you can just go to a bootcamp, and be good at or naturally suited for it.

    That you can go to college and get a degree, and be good at or naturally suited for it.

      • AggressivelyPassive@feddit.de
        link
        fedilink
        arrow-up
        1
        ·
        8 months ago

        But programming is definitely more open to the idea of people just showing up and claiming to know stuff. You wouldn’t trust Steve to build a bridge just because he watched a bunch of engineering videos on YouTube.

  • pinchcramp@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    1
    ·
    8 months ago

    That programming as a career means you’re going to spend writing nice, clean code 80% of the time.

    It’s rather debugging code or tooling problems 50% of the time, talking to other people (whether necessary or not) about 35% of the time and the rest may be spent on actually spending time doing the thing you actually enjoy.

    I may be exaggerating, but only a little.

    • AggressivelyPassive@feddit.de
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      In my experience, you’re rather inaggerating. I’m not even 10y into my career and if I get to actually code for 2h a day, that’s already a success. Most of my time nowadays is documentation, meetings, jira, research and calls with the clients.

      • pinchcramp@lemmy.dbzer0.com
        link
        fedilink
        arrow-up
        0
        ·
        edit-2
        8 months ago

        I think it heavily depends on the size and (management) culture of your employer. My most recent gig had me sit in way too many meetings that were way too long (1hr daily anyone?), dealing with a lot of tooling issues and touching legacy code as little as possible while still adding new features to our main product on a daily basis. Obviously “we don’t need a clean solution. We’re going to replace that codebase anyways, next year™”.

        The job before that had me actually code for about 80% of the time, but writing tests is annoying and slows you down and we don’t have time for that. Odd how there was always time for fixing the regressions later.

        • anti-idpol action@programming.dev
          link
          fedilink
          arrow-up
          0
          ·
          8 months ago

          also microservices in my experience worsen this sort of bitrot where the amount of usual duplication it involves means that even if you manage not to have poorly documented spaghetti magic that gets updated once in an eon in one service or two it still might be elsewhere and this

          1. discourages refactoring due to the duplication
          2. harms consistency
          3. encourages lousiness because your stuff might mostly work on a surface level with the rest of your system because you only expose APIs and don’t need to worry that much about how your methods will be called. Which might seem convenient to use and implement in an ideal scenario, but could easily become troublesome to debug if anything goes wrong.
        • AggressivelyPassive@feddit.de
          link
          fedilink
          arrow-up
          0
          ·
          8 months ago

          I think it’s also a question of how you position yourself. Without noticing it, I’ve developed a kind of “will to power” in the sense that I want to shape the product we’re working on. So instead of just sitting in my corner and working on ticket after ticket, I’m actively seeking conversations with stakeholders to find out, whether it even makes sense to implement it as described in the ticket, or propose new ideas, etc.

          Also, my mother taught me (by virtue of being completely untechnical) how to explain complex problems and systems in a way that non-technical people understand. So if “a developer” was needed, management often enough volunteered me.

          I could pull myself mostly out of this stuff, but I’d get even more frustrated not being able to at least try to make things a bit better. So I’m putting on the headset once more.

  • Addv4@kbin.social
    link
    fedilink
    arrow-up
    1
    ·
    8 months ago

    That if you know how to code, you understand how computers work and understand really complicated math concepts.

    • jadero@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      I call that the “nerd equivalency problem”. I think it’s the source of much (most? all?) of the problems with software that comes out of organizations that are not programming shops by nature.

      “We’re not moving fast enough (or, “I have this great idea!”), hire another nerd!”

      The problem also exists within individual programmers (“sure, I can do that UX/UI thingy, just let me finish building this ray-tracing thingy”), but that’s just an ordinary cognitive weakness that affects us all (thinking that being expert in one field makes one expert in all). It’s the job of proper leadership to resist that, not act as though it’s true.

    • BrianTheeBiscuiteer@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      That’s the difference between a programmer and a computer scientist, but even I (a computer scientist) I’m not an expert in hardware, networking, or OS level operations because that’s not my daily focus.

      • Landless2029@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        8 months ago

        I compare my career to the medical field. Sure there are some crossovers but lots of specialties.

        Would you consult a dentist about your bowel movements?

  • I Cast Fist@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    8 months ago

    “Programming is just writing code”

    Programming is, first and foremost, understanding what the fuck you want/need the computer to do. That means that some programmers (mostly analysts) may understand workflows and processes better than the people whose job depends on their knowledge of said things.

    • Daxtron2@startrek.website
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      People don’t realize that as you get better at programming, the amount of code you write goes down. At least in my experience, my work day has shifted to 80% thinking about what I’m going to write and then about 20% actually writing it.

          • okamiueru@lemmy.world
            link
            fedilink
            arrow-up
            0
            ·
            8 months ago

            It was the job switch that landed me in that situation. A change from a small company where about 70% was actual productivity, to a large corporation, in a team where there was severe issues with planning and working on the correct problems. So far it’s been 6 months of… well, wondering if I’m missing something, or a bigger picture somewhere, to trying to turn the ship in the right direction. If it’s still like this in another 6 months, I’ll consider a change of scenery.

            • Daxtron2@startrek.website
              link
              fedilink
              arrow-up
              0
              ·
              8 months ago

              That’s fair, that definitely can happen with a switch. My first year at my current company was like that and occasionally still is lol. Luckily our next few quarters I’ll be on a team that has much nicer processes so I won’t be twiddling my thumbs waiting for solid requirements.

              • okamiueru@lemmy.world
                link
                fedilink
                arrow-up
                0
                ·
                edit-2
                8 months ago

                waiting for solid requirements

                This is exactly the situation. Except that my team consisting of consultants just “started”, instead of trying to scope out the constraints and larger picture. I joined a month or so after.

                Six months, and the result so far of their exploration is a fairly uninteresting happy-path use of some technologies, barely related to the task that had unclear requirements. Turns out the work done is unsuited for it. Boggles the mind how much resources are wasted on such things.

                Feels extremely unrewarding to have worked, relatively hard, for half a year, and the fruits of my labour is… getting to the point where the actual problems are solved. Which one could have done from day one, if one had started in a team without wrong preconceptions, or, no team, for that matter.

                • Daxtron2@startrek.website
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  8 months ago

                  Yeah I would not like that situation at all. I was very adamant about not starting our latest project until we had firm requirements. Of course that didn’t happen but I was very careful about designing in a way to be flexible enough to change to requirements. Had a major change halfway through but only lost a week or two which could’ve been much worse.

    • anti-idpol action@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      8 months ago

      especially if the other person uses some stupid bloat like MIUI. I assume under the hood it must be a real hot mess if in the process of adding new features they broke support for standard stuff if last time I needed to do something on two people’s xiaomis these shitboxes didn’t show a password below the wifi qr code and it has this thing with accent colors derived from wallpaper but absolutely no control over it unlike in standard android despite the fact that it landed two major releases ago.

  • PeeOnYou [he/him]@lemmygrad.ml
    link
    fedilink
    arrow-up
    0
    ·
    8 months ago

    less about programming, more about programmers: just because you can code an app doesn’t mean you know jack shit about anything else… politics included

    so many software engineers think they’re the only one who understands the world and that they are the one to have the final say in any discussion

    i think that stems from their outrageous overpayment

    • Xavienth@lemmygrad.ml
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      He’s getting downvoted but he’s right.

      The hubris of a dev thinking they can solve a non tech problem with tech that they know nothing about, it’s almost unmatched.

    • Cirk2@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      8 months ago

      This also works the other way round:

      The best programmers won’t be able to fix you clunky mess of bureaucracy by making it digital.

  • space@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    0
    ·
    8 months ago

    When you release something, your work is not done. You have to maintain it, fix bugs, release patches, and probably the worst part, keeping it up to date.

    For example, Apple decides to deprecate some API, or decides to switch cpu architecture, or for the millionth time change how app signing works, or add some new security feature that breaks your app. Now you need to make your app work properly on the new platform, switch APIs, all the fun. Or, there’s some critical vulnerability in library you used and customers are deleting your app from their computers (a lot of companies use automated scanners that check against published CVEs). It’s most fun when you learn that the new version that fixes the vulnerability completely breaks compatibility with the old one and now you have to rewrite all the code that used that library.

    Also, maintaining open source projects is not fun. It’s a lot of work, in most cases unpaid, thankless, and building a community around a project is really hard.