• 2 posts
  • 51 comments
Joined 3 years ago
Cake day: July 4th, 2023
  • Have you actually read the study? People keep citing this study without reading it.

    To directly measure the real-world impact of AI tools on software development, we recruited 16 experienced developers from large open-source repositories (averaging 22k+ stars and 1M+ lines of code) that they’ve contributed to for multiple years. Developers provide lists of real issues (246 total) that would be valuable to the repository—bug fixes, features, and refactors that would normally be part of their regular work.

    They grabbed like 8 devs who did not have pre-existing set up workflows for optimizing AI usage, and just throw them into it as a measure of “does it help”

    Imagine if I grabbed 8 devs who had never used neovim before and threw them into it without any plugins installed or configuration and tried to use that as a metric for “is nvim good for productivity”

    People need to stop quoting this fuckass study lol, its basically meaningless.

    Im a developer using agentic workflows with over 17 years experience.

    I am telling you right now, with the right setup, I weekly turn 20 hour jobs into 20 minute jobs.

    Predominantly large “bulk” operations that are mostly just boilerplate code that is necessary, where the AI has an existing huge codebase to draw from as samples and I just give it instructions of “see what already exists? implement more of that following <spec>”

    A great example is integration testing where like 99% of the code is just boilerplate.

    Arrange the same setup every time. Arrange your request following an openapi spec file. Send the request. Assert on the response based on the openapi spec.

    I had an agent pump out 120 integration tests based on a spec file yesterday and they were, for the most part, 100% correct, yesterday. In like an hour.

    The same volume of work would’ve easily taken me way longer.

  • More like “why the fuck would I walk all the way across the city now that I own a car”

    Once you find out how a bunch of boring bulk tasks can be automated away and 20 hours of work turns into 20 minutes, you really dont wanna go back to the old way.

    If someone asks me to code in C# without my IDE in notepad, can I do it? Sure

    But it fuckin sucks losing all your hotkeys and refactor quick actions and auto complete and lsp error checking…

    Would you find it weird for someone to state they’d rather use an IDE than not when coding, because it saves so much time/effort?

  • Yeah, and it moreso moves a lot of your work over to other important stuff.

    Namely, planning things better, reading, documenting, and coming up with more specific scenarios to test.

    Before, because Id spend an extra chunk of my time on that 90%, maybe my documenting would be mid at best, stuff would slip through, my pile of “I prolly should get around to documenting that stuff” keeps growing and growing.

    And then while maybe I can vaguely think “yeah I bet theres edge cases for this stuff I didnt make tests for”, its followed by “But I dont got time for that shit, I have to have this done by end of day”

    Meanwhile with LLMs, I can set it off to cook on that 90% chunk of work, and while it’s cooking I can chat with another LLM instance and back-and-forth iterate on “what are some possible gotchas in this logic, what are edge case scenarios to test?” and by the time the agent finished coding, I have like 20 edge case test to copy paste over to it “Hey, make tests for all these cases, make sure those all work as expected <big copy paste of scenarios and expected outcomes>”

    It shifts my focus over from just monkey work to stuff that matters more, finding and poking holes in the code, trying to break it, making sure it withstands stress and edge cases, and finding possible gaps and flaws in it.

    When you focus like that, you definitely become way more productive.

    As opposed to people who just give up and, yeah as you said, just are lazy, they hand off the work to the LLM but arent making up for that by redirecting the energy to other places of value, they’re gonna go, I dunno, run a raid in WoW or something fuck knows.

  • Theres a fundamental minimum amount of boilerplate you just have to write to make a functioning app, even if its simply just describing “this thing does this”

    For example, if Im making a web api, theres just fundamentally a chunk of boilerplate that wires up “This http endpoint points to this domain logic over here”

    And then theres gonna be some form of pre-amble of describing “it takes in this input, it returns this response, and heres all its validation”

    And while its simple code, and its very simple to test, its still a buncha LOC that any half assed dev can write.

    Stuff like that AI can shit out very quick given an input requirements doc that you, the dev, were gonna get anyways

    And then you, the dev, can fill in the actual logic that matters after all that basic boilerplate stuff.

    “Yes, it has a phone number input, its required, and it must fit the phone number regex we defined. So… shocker, you gotta put a string called PhoneNumber on the inptu model, and another shocker, its gotta have the phone number validation on it and required non empty string validation on it”

    It doesnt take much trust to put into the LLM to get that sorta stuff right, but it saves me a whole bunch of time.

  • Pretty much, its the actually important code you wanna pay attention to.

    The majority of code is just connecting pipe A up to pipe B, its honestly fine for an LLM to handle.

    The job security comes from, as a developer, knowing which code goes in the 90% bin vs which goes in the 10% bin, being able to tell the difference is part of the job now.

  • Meanwhile everyone I work with is loving the smooth copilot integration with vscode.

    Its so good at automating boilerplate stuff.

    Especially testing, oh god does it make writing tests faster. I just tell it the scenarios that have to be tested and boom, 1000 lines of boilerplate produced in like 5 minutes.

    And when it has existing code to use as a reference on how to do it right, it does a very solid job, especially repetitive stuff like tests, since usually 95% of the code in a test is just arranging and boilerplate setting up the scenario.

    Also “hey go add xml docs to all the new public functions and types we made” and it just goes and does it, love that lol

    Once you acknowledge like 90% of your code is boilerplate and sonnet/opus are extremely capable at handling that stuff when they have existing references to go off of, you can just focus on the remaining 10% of “real” work.

  • Getting a later special meeting request with the ceo, at one company, because he wanted feedback on their interview process itself. He then offered me a different job and I had to decline cuz I already accepted another (this was a few weeks after the initial decline I gave)

    In another case they just fast tracked me and I ended up declining the job anyways (didn’t like the job)

    I’m full time employed but I still do occasiobal interviews to keep feelers out for how the market is. But I typically decline most offers cuz they’re not good enough to get me to actively quit my current job.

  • In the “right” use case, story points should just represent relative effort.

    The hours dont matter, its more about ranking how challenging a task is, in order to help the manager rank the priority of tasks.

    You should have typically 2~3 metrics:

    1. Points, which represent relative effort of the task to the other tasks you are also ranking.

    2. Value, how much value does doing this task provide, how important is it

    3. Risk, how risky is it that this might break shit though if you make these changes (IE new features typically are low risk since they just add stuff, but if you have to modify old stuff now your risk goes up)

    If you have a good integration testing system automated, Risk can be mostly removed since you can just rely on your testing framework to catch if something is gonna explode.

    Then your manager can use a formula with these values to basically rank a priority order for every ticket you now scored, in order to assess what the next thing is that is best to focus on.

  • Sorts? Not tabs in the way you’d expect but it’s default ones can be sufficient

    Honestly though once you get pretty good with hotkeys you stop using tabs, for all intents and purposes harpoon is tabs, but better, and without the UI. You just mentally usually pick harpoon keys that make sense to save jump points to, like I’ll harpoon FooController.cs to c and FooService.cs to s and FooEntity.cs to e and so one

    And the I jump around with those keys. Usually when working I only need tops 5 harpoon or so for a chunk of work.

  • I still boot in sub 1s so I don’t know what you mean by “bloated”

    Lazy allows you to boot ultra fast by loading stuff in the background later, so “bloat” doesn’t matter

    nvim-dap does literally nothing until you trigger it, so it’s only impact on my startup is like 3 hotkey registrations :p

    It’s a perfectly fine debugger, works great. The fact I can telescope search to fzf my stack trace actually kind of makes it superior? Like you can’t do that sorta stuff in any other IDE I know of

    Also all my navigation stuff like telescope/harpoon/etc still apply when debugging, so I can literally debug faster jumping around the stack trace with hotkeys.

    Neovim doesn’t get any less awesome when it comes to debugging, a lot of it’s power still applies just as much haha

  • A lot of them are dependencies of other plugins.

    Stuff like icons support, and every little feature. Neovim is extremely minimalist to start, so you need plugins just to get something as simple as a scrollbar lol

    Things like git status of files and file lines, all your LSPs, syntax highlighting (for each language you work with), file explorer, you name it, there’s a lot.

    But what’s nice about nvim is for any of these given features, there’s numerous options to pick from. Theres probably a dozen options to choose from for what kind of scrollbar you want in your editor, as an example.

    So you end up with a huge amount of plugins in the end, for all your custom stuff you have configured.

    You have to setup yourself (though theres a lot of very solid copy pasteable recipes for each feature):

    • Scrollbar
    • Tabs(if you want em)
    • bookmarking
    • every LSP
    • treesitter
    • navigation (possibly multiple of them, I use both a file tree, telescope, and harpoon)
    • file history stuff
    • git integrations, including integrating it with the numerous other plugins you use (many of them can integrate with git for stuff like status icons)
    • Code commenting/uncommenting
    • Code comment tags (IE TODO/BUG/HACK/etc)
    • your package manager is also a package (I like lazy for wicked fast open speeds, neovim opens in under 1s for me)
    • hotkey management (I like to use which-key)
    • prose plugins (lots of great options here too, I use nvim for more than just coding!)
    • neorg, so I can use nvim for taking notes, scheduling stuff, etc too
    • debugger via nvim-dap
    • debugger UI via nvim-dap-ui
    • lualine, which is a popular statusline plugin people like to have at the bottom of their IDE for general file info
    • new-file-template which lets me create templates for new files by extension (IE when I make a .cs file and start editting it, I can pick from numerous templates I’ve made to start from, same for .ts, .lua, etc etc)
    • git conflict, which can detect and work with detected git merge conflict sections in any type of file and give me hotkeys to do stuff like pick A / B / Both / Neither, that sorta stuff

    The list goes on and on haha

  • API is just the term for “the surface of something that’s been exposed to you to interact with”

    Libraries, websites, tools, etc all have APIs, it’s just the general term for “this thing has something we can interface with”

    A library is a bunch of code someone else wrote.

    A package is when you use a tool to bundle up a library to make it easier to distribute to other people, usually adding a version # to it, and adding it to so.e popular package manager network so millions of people can find your package easier.

    A framework is a term for a very big cohesive library, with an advanced api, that does a whole bunch of different things that all have stuff in common. Basically a firework is a huge library that provides many many different things to do that all have stuff in common.

    Game Engines for example are frameworks.

    A library of tools to make a bunch of different website components that all work well together and have stuff in common is a framework.

    Etc etc. It’s a bunch of code that doesn’t do anything in it’s own, but provides a bunch of modular pieces you can assemble into something.

    Think of a framework like buying a big box of lego. It’s not anything specific yet, but you can assemble all those pieces together to make infinite different things.

  • Like I said, in the scale compared to actual high frequency data though, that’s still be infrequent.

    High frequency DBs are on the scale of many queried per second

    Even with tonnes of data scientists and engineers querying the data, that’s still in the scale of queries per minute, which is low frequency in the data world.

  • They probably do use lots of NoSQL DBs too, which perform better for non relational “data lake” style architectures where you just wanna dump mountains of data as fast as possible into storage, to be perused later.

    When you have cases where you have very very high volume of data in, but very low need to query it (but some potential need, just very low), nosql DBs excel

    Stuff like census data where you just gotta legally store it for historical reasons, and very rarely some person will wanna query it for a study or something.

    Keep in mind when I talk about low need to query, the opposite high need us on the scale of like, "this db gets queried multiple times per minute’

    Stuff like… logins to a website, data that gets queried many times per minute or even second, then sometimes nosql DBs fall off.

    Depends what is queried.

    Super basic “lookup by ID” Stuff that operates as just a big ole KeyValuePair mapping ID -> Value? And thats all you gotta query?

    NoSql is still the right tool for the job.

    The moment any kind of JOIN enters the discussion though, chances are you actually wanna use sql now

  • I use Hugo, it’s not super complicated.

    You basically just define templates in pseudo html for common content (header, nav panel, footer, etc), and then you write your articles in markdown and Hugo combines the two and outputs actual html files.

    You also have a content folder for js, css, and images which get output as is.

    That’s about all there is to it, it’s a pretty minimalist static site generator.

    Hosting wise you can just put it on github pages for free.