Thanks everyone for pulling these issues apart, it sure reads like youâre doing hard work.
Please excuse me if the following sounds overly contrarian; Iâm not trying to throw wrenches in the machine but rather explore different approaches to ensure we make progress:
In the past I had discussions with many people on whether to take a top-down or bottom-up approach to teaching Nix. Proponents of top-down usually insist that beginners donât want to care how it works but just want to use it. Bottom-up is the long, arduous path to success, and since learning has a cost weâd be losing a lot of audience if we didnât offer top-down paths. Also of course weâd ideally offer both, but due to resource constraints one would have to focus on one thing first.
I always leaned towards bottom-up because thatâs what worked well for me and others I know (opponents argued that there are different learning types, and not everything works for everyone), but more importantly because surface-level interfaces, documentation, and learning content were of little help, and at the very least extremely confusing and scattered.
Last year I essentially gave in to the top-downers for the sake of making any progress at all, despite still being convinced that in order to teach interfaces effectively we first have to get them at least somewhat consistent and document them properly at the reference level. Now the discussions of the past week reinforce my impression that attacking the mess from the outside may indeed be a foolâs errand.
Arguments:
- There are too many moving parts and too many of them are arbitrary historical accidents. This makes it harder to actually teach anything at all without leaving gaps all over the place and thus risking learners to build the wrong mental models. That would do users a disservice.
- Core concepts (such as packages in Nixpkgs or modules in NixOS) are still not entirely understood and therefore in flux, leaving interfaces a moving target. Teaching superficial features wonât age well, and we canât afford sustained maintenance of that kind. We should teach things that are sure to stick around, for mere efficiency reasons.
- Many features that are in evident demand (such as Python packaging) are not fully established or not well-executed upstream, and users have to develop the ability to navigate and judge the quality of competing community efforts. This is simply not possible with superficial knowledge, and tiring enough even with some expertise, and in my opinion the reason why users feel like beginners for such a long time.
- On the other hand, building up concepts from first principles would help grow a community of empowered contributing users (who we expect to be software developers to begin with), who are more likely to help implementing sound designs we would eventually be able to teach to âpurely consumingâ users efficiently.
Itâs all about messaging and setting expectations though. I was insisting on telling people up front that using Nix effectively requires a serious time investment and that there is nothing we can do about it with the given resources in the foreseeable future. I donât think there is anything wrong with being honest about it. And Iâm convinced there is a reasonable and much more obvious way of teaching that stuff than pretending any of this is somehow suitable to any kind of end user. (@ianthehenry aptly summarised: Itâs impossible to use Nix without knowing how it works.)
I got shot down a lot for this stance. Maybe thatâs because some prefer to sustain their phantasies about what Nix could or should be. Maybe that is worth reconsidering. We talked at length about first making reference documentation nice, complete, and maintainable. But reams of manual pages are near worthless without an overview, without guidance on how to make sense of all that.
What do you think about shifting focus on teaching Nix from first principles? Please try to override the sunk cost fallacy in your judgment (maybe it helps to remember that Iâve been at it for more than a year for most of my waking hours, so tell me about sunk cost).
Iâm particularly interested in what @zmitchell @roberth @maj @infinisil @ericson2314 have to say.