while that sounds like a fun endeavor
Added highlighting to answer your question.
Longer answer: when I am paid to write software, then time is short, perfection is frowned upon (because "good enough" is what sells), libraries are good (because someone else is responsible for testing and bug fixing code in there), and nobody cares what I learn in the process.
When I am programming on my own, I have all the time in the world to polish whatever irrelevant detail I always wanted to understand better. I use libraries that I want to familiarize with. I write stuff myself that I want to learn the basics of. I skip things that would be an absolute requirement for product quality code, but that I don't want to bother with for a single run of a prototype algorithm.
In short: my
goals can
differ a lot. In one situation I want to get something done. In the other situation I want to gain insight.
A note on existing numerical libraries. Earlier in my life, I earned the friendship of folks who wrote such highly tuned code for a living.
(That happened due to a few cases of undue perfectionism on which I had wasted my spare time, and which caught their attention.)These libraries are usually created in "get something done" mode. The experts who do that work are on somebody's payroll. And that somebody, being a successful business(wo)man, usually tends to impatience.
Existing high performance libraries are typically
very good. But they are
never perfect. When the next processor revision is released, the timing of the execution pipelines is rebalanced. But the library is still tuned for the previous hardware. There is usually no money budgeted to rewrite the library's existing functions. Instead, new features keep getting added to the library; tuned for whatever machine is interesting at the time.
In other words, the
hardware target keeps shifting under the code tuners' feet. But their boss would rather release that software product now, instead of spending another three months re-tuning it.
The point of my ramblings is this:
1. It would be a herculean task not to use libraries at all and do everything over and over again. Libraries are good. Trying to write a big application from scratch without using any existing libraries would be pretty insane.
2. A single programmer with sufficient time and dedication, when focusing on a single detail of implementation, can occasionally outdo a team of experts. Trying to do that is not nearly as insane.