Barriers to New Developers

I like the idea of having this thread. It would be fun at some point to teach a workshop on this to get more people into working with the core of Stan.

Some issues I’ve noticed:

Lack of time (on our parts) to properly address design issues with potential contributions. It’s hard over email/github to sort them out and new contributors often don’t understand what our priorities are in terms of efficiency and maintainability. Sebastian and I both had the issue where we wrote a bunch of code while in communication with Daniel/Bob (not pointing fingers, you guys were just the ones willing to correspond over design issues) but in the end a lot of code hard to be re-written anyway due to misunderstandings. It would be nice to flesh out some of our priorities in a doc for new developers. The things I can think of are:

  1. most of the time is spent in auto-diff so maintainability/UI should often win over efficiency in non auto-diff code.
  2. maintainability is critical so don’t try to future-proof by adding indirection
    3)… I forget, I think I’ve gotten used to the project so I lost perspective on these…

There are also some basic tasks that could use examples, for example:

  1. example of adding a function to stan-dev/math, I think we have this in some form
  2. example of exposing a function to stan-dev/stan
  3. example of adding a function to stan-dev/math, with analytic derivatives (In the next few weeks I want to add boost’s inverse gamma so I’ll try to track the process and produce a simple example).
  4. pointers to tests that demonstrate how to call the stan-dev/stan API for algorithms, these don’t necessarily need to be separate examples since the tests Dan and I wrote on the refactor branch are pretty clear. It would help to have some of the objects available.
  5. maybe a generated C++ file for a Stan model with commentary (possibly just in comments) to clear up the ‘model concept’ we’re using. This stuff didn’t really make sense to me until I tried to modify the code generator.

All these pieces make sense to me now but it used to look like a black art. I don’t think much of it really requires a deep understanding of C++, although writing a function with analytic gradients requires more than the rest.

1 Like