> There are two ways to architect a program and write code: top-down and bottom-up.¶ […] The correct way to architect and write a program is top-down. This is not a matter of taste or preference. Bottom-up design is fundamentally busted and you shouldn’t use it. Every system I’ve been involved in that used top-down succeeded and those that used bottom-up failed. [...]
> At every level there’s pressure to do bottom-up programming. Avoid it. Instead, start at the top, with `main()` or its equivalent, and write it as if you had all the parts already written. Get that to look right. Stub out or hard-code the parts until you can get it to compile and run. Then slowly move your way down, keeping everything as brutally simple as you can. Don’t write a line of code that isn’t solving a problem you have *right now*. Then you may have a chance of succeeding in writing a large, working, long-lived program.
<https://www.teamten.com/lawrence/programming/write-code-top-...>
See also: Java for Everything <https://www.teamten.com/lawrence/writings/java-for-everythin...>
I really love seeing an example of DTP-style typesetting using Java. It's one of those problems that seems really easy, but then you look into it a little bit and decide it's not really worth the effort (and there aren't many practical, independent examples of it in practice). This person not only took the effort – to make something more personally pleasing than TeX – but also took the time to organize their code and share it, in order to decrease the scarcity of such examples.
Kudos.
[1] https://hn.algolia.com/?q=java+for+everything (just searching for the URL doesn't work, because it started as http and changed to https 5 years ago)
Taking this to its logical conclusion all programs should be written in assembly.
The reality is that there's a tradeoff: Programmer time vs performance, and which parts of performance matter. I've worked using anything with performance from assembly to shell scripts (including C, C++ and Java). It is all tradeoffs. Do users want more features, or more speed? Are we running at a scale or situation where ultimate usage of hardware matters, or not?
Saying we should do ultimate amounts of investment in performance when there's three users and one programmer doesn't make sense. They'd typically rather have more features and adequate performance.