• 0 Posts
  • 23 Comments
Joined 1 year ago
cake
Cake day: June 13th, 2023

help-circle

  • As someone whose employer is strongly pushing them to use AI assistants in coding: no. At best, it’s like being tied to a shitty intern that copies code off stack overflow and then blows me up on slack when it magically doesn’t work. I still don’t understand why everyone is so excited about them. The only tasks they can handle competently are tasks I can easily do on my own (and with a lot less re-typing.)

    Sure, they’ll grow over the years, but Altman et al are complaining that they’re running out of training data. And even with an unlimited body of training data for future models, we’ll still end up with something about as intelligent as a kid that’s been locked in a windowless room with books their whole life and can either parrot opinions they’ve read or make shit up and hope you believe it. I’ll think we’ll get a series of incompetent products with increasing ability to make wrong shit up on the fly until C-suite moves on to the next shiny bullshit.

    That’s not to say we’re not capable of creating a generally-intelligent system on par with or exceeding human intelligence, but I really don’t think LLMs will allow for that.

    tl;dr: a lot of woo in the tech community that the linux community isn’t as on board with






  • If you’re trying to pull your weight, and it sounds like you are, the problem is either with the tasks, the codebase, or the teammates:

    Potential problems with the tasks:

    • they’re not researched sufficiently
      • is this doable?
      • should we we even be doing this?
      • have we actually thought about how hard this will be, or did someone say “well that should be trivial” a bunch?
    • there’s not enough info on the tickets
      • inexperienced leads tend to just shit out tickets with zero info and underpoint them
    • they’re not broken down into small enough pieces
      • are you working “implement X” tickets while everyone else is working a series of “implement X: step N” tickets?

    A ticket needs: clear repro documents (if necessary), screenshots, and clear steps to reproduce. It needs more than “Title: Add X to Y. Description: We need Y in X. Implement it.” unless you’re intimately familiar with the codebase. And even if you are, you still need a paper trail to back up what you’re doing. If you’re not closing tickets, be very chatty in the comments. Share where you are, problems you’re running into, and who you’re waiting on for help. If there’s a consistent theme to the things you’re fighting, keep a list of them and bring them to your manager. Be your own advocate and be very transparent about all the research you’re doing because other people didn’t.

    Potential problems with the codebase:

    • someone preemptively optimized it
    • it’s not documented well
    • it’s spidery bullshit code that someone has deep emotional attachment to

    Hey, it works. But it’s not documented, someone decided to be clever instead of elegant, the local story sucks, or it’s optimized to such a degree that you have to refactor just to add a simple option ("lol why would we ever need that data here? It’s inefficient!)

    Potential problems with teammates:

    • they’re not supporting you
    • they’re grabbing easy tasks because you’re the “code whisperer”
    • they didn’t know what they were doing either so they’re vague when you ask them questions

    Everyone pulls their weight. Everyone communicates in clear, declarative sentences and provides examples if necessary. “I don’t know” is an acceptable answer. Evasiveness, vagueness, specialized jargon, or acronyms point to the dev being insecure about their knowledge in that area. Be very suspicious of the word “should”: “that should work”, “that shouldn’t be hard”, “you should be able to…”

    And, as an aside, I’ve seen this happen a lot. A new dev or contractor comes on, blows through tickets, gets good marks, and an existing dev or two get called out for not contributing with the same frequency. One of two things are happening here: the new devs are getting softballs, or they’re creating a lot of subtle tech debt that someone else will have to fix because they don’t have a full picture of the codebase. Eventually, those devs will be where everyone else is, but it’s still frustrating.

    Hang in there.







  • The final project in my instrumentation class was to tune a PID controller for a hot/cold mixing valve. I (CS/ENG) was paired up with an engineering student and a lot of it was throwing parameters in, seeing if weird shit happened, and then turning down or up based on the result. I had a programming final and something else I was supposed to be studying for, so I just started doing a binary search with the knobs. We got the thing tuned relatively fast and my partner acted like I was a wizard.







  • I’ve been a dev for 20+ years and yeah, learning a new repo is hard. Here’s some stuff I’ve learned:

    Before digging into the code:

    • get the thing running and get familiar with exercising it: test happy path, edge cases, and corner cases. We’re not even looking at code yet; we’re just getting a feel for how it behaves.
    • next up, see if there’s existing documentation. That’s not an end-all solution, but it’s good to see what the people that wrote the thing say about it.

    Digging into the code:

    • grep is your very best friend. Pick a behavior or feature you want to try and search for it in the codebase. User-facing strings and log statements are a good place to start. If you’re very lucky, you can trace it down to a line of code and search up and down from there. If you’re unlucky, they’ll take you to a localization package and you’ll have to search based on that ID.
    • git blame is also your very best friend. Once you’ve got an idea where you’re working, use the blame feature on github to tie commits to PRs. This will give you a good idea of what contributing to the PR looks like, and what changes you’ll have to make for an acceptable PR.
    • unit tests are also a good method of stealth documentation. You can see what different areas of the code look like in isolation, what they require, and how they behave.
    • keep your own documentation file with your findings. The act of writing things down reinforces those things in your mind. They’ll be easier to recall and work with.
    • if there’s an official channel for questions / support, make use of it. Try to strike a balance here: you don’t want to blow them up every five minutes, but you also don’t want to churn on a thing for days if there’s an easy answer. This is a good skill to develop in general: knowing when to ask for help, knowing when an answer will actually be helpful, and knowing when to dig for a few minutes first.

    There’s no silver bullet. Just keep acquiring information until you’re comfortable.