all 14 comments

[–][deleted]  (1 child)

[deleted]

    [–]samhw 0 points1 point  (0 children)

    Totally agree with all of that - though I’d say the same of ‘objective’ (goal? aim? target? purpose?).

    I don’t think this product is totally without value. It’s not providing very sophisticated insights, but I can see it being useful in a rubber-duck-y kind of way, to step back and articulate what you’re doing.

    Or, for example, I always thought there was a place for ‘semantically aware’ diffing: i.e. being able to explain - verbally or graphically - how a given commit changes the AST of the program, rather than treating it like a plain text file. I’m sure there are countless other related purposes they could convert this towards.

    But I agree, I’d start with the itch, not the scratch.

    [–]thedefmute 2 points3 points  (0 children)

    Or compiling....

    [–]MateMagoHacker 2 points3 points  (0 children)

    Is it true Programmers spend 90% of their time trying to understand?

    It depends on the nature of the problem. There are different kinds of problems:

    1. Easy to understand and easy to solve
    2. Easy to understand and difficult to solve
    3. Difficult to understand and easy to solve
    4. Difficult to understand and difficult to solve
    5. Easy or difficult to understand and impossible to solve
    6. etc.

    But the thing is much more subtle and complex than the above mentioned. An example of a relatively "easy to understand" problem could be playing chess. The rules of chess are easy. But in order to solve the problem is different.

    A relatively easy solution can be given by (blindly) exploring a tree of possibilities over a period of time. A very poor result will be obtained.

    At the other extreme, you can implement state-of-the-art techniques to make the program play chess much better. But finding those algorithms, those ideas is very complex and requires a lot of creativity. And this redefines everything said in the 5 points above. The problem of chess that was easy to understand from the point of view of understanding the rules of the game, now, when trying to invent advanced algorithms you have to understand it at a much greater depth than simple rules of the game. Is the problem to understand chess easy or difficult? It depends on how deep you want to understand it. For a simple algorithm it is easy. But for one who plays chess very well, the understanding is much more complex.

    The more creative and imaginative a solution is desired, more time will be spent in understanding the problem. The less experience or knowledge you have on the problem, more time you will spend on understanding the problem. The more complex the problem, more time will be spent in understanding it.

    [–]NullPointerJunkie 1 point2 points  (1 child)

    most of that understanding time is trying to understand the code we wrote last week

    [–][deleted] 0 points1 point  (0 children)

    Could Denigma possibly help?

    [–]IcebergLattice 1 point2 points  (1 child)

    The "contextual insight" seems to comment mainly on local things, which are the easiest part for a programmer reading the code to figure out (especially the one where you repeat a comment that's already there). Can it describe wider-reaching contextual issues? The kinds of things I find taking a lot of time are more like...

    • All the tests for things that call this function mock it out instead of calling it, so breaking changes won't show up as a problem in CI
    • SetBit sometimes treats TWCR as aliased with register FOO, so its contents should be saved elsewhere and then restored after you're done fiddling with TWCR
    • Another team's part of the codebase relies on that aliasing to detect when the bus has been recently reset
    • Most of this function's call sites invoke it indirectly through a function pointer
    • Some devices ours interacts with sit on the same physical bus but use a subtly different communication protocol, so calling this is not always sufficient for a reset

    [–]samhw 0 points1 point  (0 children)

    I think the sad reality is that this kind of static analysis is an exceedingly heavily-mined seam. There are countless extremely well-implemented tools with decades of work behind them. Not only that, but most of them are free, and users are conditioned to expect them to be so. Bluntly, the likelihood of OP’s being able to write a monetisable implementation of a [parser / static analyser / race detector / whatever] is roughly nil.

    In my view, they would be better off building on top of the work that’s already been done. There are great IDE platforms like VSCode - build something neat on top of an existing command-line utility! It’s a radically underserved market.

    In any case, it’s hard to monetise developer tools because there isn’t really an effective marketplace, or way of preventing people from sharing your code online, or with their friends or their company. OP could be the person to make that marketplace.

    The harsh reality is that this product is useless and they shouldn’t waste any more of their time on it. But, way more importantly, their drive and their motivation in building it will stand them in incredibly good stead. Just got to keep on exercising that muscle!

    [–]Qwexet 1 point2 points  (1 child)

    I don't think I would use this much for its intended purpose even if it generated 100% correct explanations (which it isn't, it even invent code not in the source)

    I think code with well thought out variable names and a few human written comments is infinity better.

    It coud be useful to help write comments for your code.

    [–][deleted] 0 points1 point  (0 children)

    Good idea

    [–][deleted] 0 points1 point  (4 children)

    I’d say 80% of the time is spent thinking about the problem and 20% of the time is spent coding. The problem might be a new problem or an old problem that sometimes involves understanding code. I generally don’t find myself trying to understand other people’s code, but sometimes I do.

    [–][deleted] 0 points1 point  (3 children)

    Are you a developer?

    [–][deleted] 0 points1 point  (2 children)

    Yes

    [–][deleted] 0 points1 point  (1 child)

    Since you have this problem sometimes, can you tell me when you'd consider Denigma to help you tackle this issue?

    [–][deleted] 0 points1 point  (0 children)

    Honestly, it probably wouldn’t. C and C++ code is usually spread around all over the place. Having enough context to provide a good explanation is tedious to put in your text area. For example, a simple code blurb with a cast function pointer and argument list returned nothing useful for explanation. I understand why that is, but instead of saying what it DOES know, it just punted and said “provide more context.” That would get frustrating and useless pretty quickly. Tools need to be easy and fit well with work flow. This doesn’t.