It is simply not easy to see a given software problem as an instance of a type of problem, to which various established patterns might give a solution. And in some contexts you can make working, maintainable code without explicitly thinking in these terms. [9/N]
-
Show this thread
-
But if you're trying to do something tough and/or big and/or unwieldy and you aren't thinking in terms of interfaces and design--not "system design" in the narrow sense of "what database do I use," but (again) the high-level logic of your code--you'll get smoked. [10/N]
1 reply 0 retweets 0 likesShow this thread -
A useful way to think about this is in terms of what is accidentally quadratic--and this happens not just at the data structure level* but at the objects-and-interfaces level. [11/N] *https://accidentallyquadratic.tumblr.com
1 reply 0 retweets 0 likesShow this thread -
"I need a new thing to happen. Do I make it happen here or there?" Very often, if you put it in the right place, six months later you'll be doing O(n) work (where n is some natural unit of "stuff happening in your system"), but O(n^2) if you get it wrong. [12/N]
1 reply 0 retweets 1 likeShow this thread -
That's reductive, certainly not always true. But many mistakes amount to subtle duplications that mean that you need to check two things against each other when one thing should be handling it all. Usually that means a linear -> quadratic penalty. [13/N]
1 reply 0 retweets 0 likesShow this thread -
And--the devil is a busy man--these tend not to take the form of nested for loops, which means that it can require a keen eye even to perceive that this quadratic work is happening. (And you'll probably be having to reason about code that's all over the place.) [14/N]
1 reply 0 retweets 0 likesShow this thread -
And if you fix the downstream problem the wrong way, you're only going to compound the issue. And this is why "average time to 'fix' a bug" is a pretty bad metric by which to distinguish levels of programmer, too: [15/N]
1 reply 0 retweets 0 likesShow this thread -
Someone who's "fixing" a problem by bashing in some glue and tape in the first obvious place, but making an interface worse, might do so quickly but at huge technical cost. (See John Ousterhout on "tactical tornados.") [16/N]
1 reply 0 retweets 1 likeShow this thread -
And if I fix a problem the wrong way, I'm likely to be the one best positioned to fix the downstream problem four times as fast as you--because of a hyper-local knowledge gap I created through my mistakes. Getting this kind of thing right is super-hard... [17/N]
1 reply 0 retweets 1 likeShow this thread -
...and it requires not only knowledge but *discipline* (see (ii) waaaay up a ways in this thread). It can be tough to not just throw in an extra parameter on a function, to split one object into two when it's called for, and so on. [18/N]
1 reply 0 retweets 1 likeShow this thread
Anyway, why don't I do poker software? Because, basically, this stuff is what I care about, and the comparative advantage one should have to do poker software is (basically) something different. [19/N]
-
-
I like math, and I like learning about optimizations that help with numerical stuff, and game theory is cool. But, basically, I should leave software that relies heavily on that sort of thing to folks like
@ivan_bezdomny. [20/N]2 replies 0 retweets 2 likesShow this thread -
So, there's your answer, various people. I'm not doing poker software because my main intellectual interests are the sort of thing that push me elsewhere in the software world. [21/21]
0 replies 0 retweets 5 likesShow this thread
End of conversation
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.