The title is a bit provocative, and I’m not as upset as it might sound. I enjoying lurking on this forum and others to see what cool things people make and do. However, I almost invariably run into a particular stumbling block.
The description for the cool library almost always starts with:
LibTimeTwister solves the Flux Capacitor Equations using the Doc Brown Numerical Integration Scheme, which is a variant of the Spock “Take A Guess” Half Stepping Integration Method. It is robust and optimized to run on GPUs with a user-friendly interface. Also supported are the Wibbly-Wobbly Timey-Whiney TARDIS temporal mechanics equations on an unstructured temporal-spatial grid.
After that is instructions on how to build it, with maybe a few examples, a link to the reference material and a license.
Sounds cool, right? Unfortunately for me, I have no background in temporal mechanics. This is the first I’ve heard of it. I want to learn more! Well, wikipedia either is a stub or an overcomplicated morass of math hieroglyphs that I cannot understand. Maybe a blog post here or a blog post there. I find a $200 textbook - don’t have time or money for that.
So, my plea is for libraries that implement cool stuff is to try, to some degree, to explain what the cool stuff is. I understand we can’t all write textbooks with our libraries. We have to start assuming our audience has some level of understanding. I’m just asking for that level to be a little less than “already an expert-mode”.
As a specific example, I ran into this this week while looking at the recently posted rklib. I’m not picking on it. Obviously a lot of time and effort went into a great and comprehensive library. As I said, I run into this all the time, with all sorts of software projects.
My background with Runge-Kutta is the standard 4th order 5 stage scheme that I learned in school. I see that one in rklib. Cool! But what are all these other ones? I want to integrate the Generalized Lotka-Volterra Equations for a toy project. Would a different one be better? What do these acronyms mean? The only one I recognize is TVD, (and even then I’m not really sure I know what it means). Fixed step or variable step? What does it mean to integrate to an event? What is an event? Why do we need to find roots? Roots of what? How do I choose one method over another?
This is an amazing project, but I don’t know how to learn what I need to know in order to use it well. Part of that is that is just who I am. I don’t like to use something I don’t comprehend to a large degree. I can’t copy-paste something off stackoverflow without understanding what it does. At some point I have to give up and do the best I can.
Just food for thought: please think about the little people who think what you people do is awesome.