|
>It's simply a matter of fact that, unless the hidden details are very simplistic, abstract concepts with no edge cases, terseness hinders readability. No. Using the correct abstractions helps readability. I'll agree with you that a complicated SQL statement may not be a good thing to use, but it also probably isn't the right abstraction. Compare, on the other hand, using numpy/matlab/Julia vs. something like ND4J. Its the difference between `y = a * x + b` in the former, and `y = a.mmul(x).add(b)`. Granted the ND4J version isn't terrible, but I used an older similar library in Java that only provided staticmethod, so it was `y = sum(mmul(a, x), b)`, which is fine when you're only working with two operations, but gets really ugly really fast when you want to do something remotely more complicated. And I'll even note that all three of these are already highly abstracted. If you want to drop all semblance of abstraction, keep in mind that that `y = a * x + b` works equally well if `a` is matrix and x a vector, or `a` a vector and `x` a scalar, and separately it doesn't matter if `b` is a vector or a scalar. They'll get broadcast for you. Overly terse code does indeed hinder readability. But so does overly verbose code. Its much more difficult to understand what is happening in outputValue = sumVectors(
multiplyColumnVectorByMatrix(
inputValue, weightsMatrix),
broadCastScalar(
biasValue, size(inputValue)))
than it is in `out = weights * in + bias`, even though the second is significantly more terse. |
That doesn't mean that a DSL or higher level language feature might not be better (the operations are pretty clear and not prone to edge cases, as I said before), but as far as "big problems" go, I find that example to be a pretty minor one.