Lessons learned from writing a linter/static analysis tool for shell scripts: https://www.vidarholen.net/contents/blog/?p=859
(Preserve positions, use error codes and document them, and there's a tradeoff between beginner mistakes and advanced mistakes!)
miniblog.
Related Posts
If function f1 is unused, and f2 is only called from f1, Rust complains that both f1 and f2 are unused.
I find this confusing: it's useful to know that I can remove both functions, but removing f2 alone gives a compile error.
Not sure what the best tradeoff is though.
Dependency management in Go: https://research.swtch.com/vgo-principles
There's a tradeoff between work for libraries (declare your minimum version/any incompatibilities) vs work for programs (investigate when dependencies aren't compatible). If programs are more common, should we empower them?
One fascinating property of chess engine design is that a deeper tree search can be more valuable than a smarter board value metric.
If a metric is more accurate but more computationally expensive, it might not be worthwhile! It's a precision/brute force tradeoff.