1. 10

For me, the best thing happened to Lobsters is addition of “debugging” tag. Now I have links of debugging heroics more than I can read.

Lobsters already gets links of optimizing heroics, so let’s tag them so that they are discoverable.


  2. 7

    So, I have actually been kicking around the idea of offering a similar tag.

    How would you feel about performance instead of just optimizing?

    I think it’d be handy to denote when an article has as a primary focus the issues of speed and efficiency.

    1. 5

      performance too is okay for me.

      1. 4

        I think performance has better prosody and doesn’t lose any meaning. :)

        1. 2

          Performance isnt the only optimization. Space is the other one. It requires sacrificing performance in extremes. Theres other forms like flexibility, cost, etc. So, if we do it, optimization is a better generic term.

          Note: There’s also a chunk of CompSci work on general-purpose optimization that’s just called optimization.

          1. 2

            One of the reasons I don’t like optimization is that that is also a field of mathematics for things like linear programming and curve fitting and whatnot.

            1. 1

              Don’t forget outlier exclusion, the most important step in obtaining the right result.

              1. 1

                They are indeed general-purpose techniques in the field of optimization that can be applied to achieving the optimizer’s goals. Out of curiosity, I tried to cross-reference your techniques against goal of performance. I found that both of those are used in optimizing the performance of computer programs. Amuses me for some reason.

                Use of linear programming and GA’s, two general-purpose optimizations, for code generation in compiler http://liu.diva-portal.org/smash/get/diva2:416671/FULLTEXT01

                Far as curve fitting, I mostly found links saying not to use it to improve performance. Especially in financial applications. Other, general-purpose optimizations that led to better software or hardware than human designers in specific cases include heuristic search + backtracking, genetic programming, geometric, stochastic, annealing, and well-trained neural. Human annotations and brainpower + tool support… “augmented” methods… remain best.

                The methods are general purpose. Some are domain-specific. Each applies one or more algorithms to change something until a measurable aspect matches one or more requirements. Common goals include speed, memory, activity per watt, unit cost, NRE cost, flexibility, or even yield/defects.

              2. 1

                Performance is, however, the most common thing to optimize for.

                1. 1

                  It is. That doesn’t mean we define the superset category with name of a subset just because it’s common. In that case, the site wouldn’t need browser, desktop, mobile, or server OS tags. Especially niche like BSD’s. There’s about two, dominant subsets in each of those that it would use instead excluding all others. I question that logic.

                  The one reason performance should be used over optimization is if vast majority of users were uninterested in alternative optimizations such as reducing memory, energy-use, cost, unpredictability (eg real-time), or physical footprint. Seems like an easy way to decide whether performance or optimization tag is better. Could use CompSci for general-purpose optimizations if performance was adopted as the academics usually come up with them.

              3. 1

                Kind of similar to scaling, no?

                1. 1

                  I don’t really think so–scaling to me is somewhat more in the vein of “How do I bring this service up for a lot of users?”, and the answer could just be “throw even more money into the fires at Heroku and AWS!”.

                  performance is more about “How can we write this code as tightly as possible, or at least reduce glaring inefficiencies?” So, it covers things as diverse as:

                  • Fixing untuned PG queries
                  • Avoiding practices that brainfuck the Ruby method cache
                  • Helping GCC do smarter vectorization of C loops
                  • Reliably hitting the 60 hz framerate using graphics libraries
                  • “scaling down” assembly to run in limited environments like MSP430s.

                  It’s a tag I don’t think is super useful on its own, but one that adds a helpful additive delineation to any number of tags we currently have.

                  1. 1

                    In optimization, you usually have multiple variables involved. Different goals tweak them in different ways. A system designed for high-scalability requires tweaks that could reduce max, single-threaded performance or minimum necessary RAM/disk. Those are two commonly optimized for that you trade against in many high-scale designs. One can also apply techniques from optimization like constraint solving or genetic algorithms on components in that domain.

                    So, it’s not totally optimization but has a lot in common with that. Just different property one is optimizing.

              4. 1

                Hmm. Most optimizations are quite specific to the tool, platform, or domain in question. They have tags for many of those. People often dont read optimization stories for tools or platforms they’re unfamiliar with. Might be better to leave optimization as just a type of story that uses existing tags.

                1. 4

                  I quite like reading posts about optimisation in completely unfamiliar platforms because they often illuminate slices all the way through from the offered semantics to the underlying implementation, in an interesting way.

                  1. 1

                    I hear you. I do too. Just wondering what ratio is that does.