The thing I love about Django’s documentation is the layering. From beginner tutorial through to high level overviews of the subsystems, through to detailed usage for the subsystems, through to API level docs, through to the source code - all of it is there, and all linked together well. On top of that, it’s all well written, approachable, full of notes and caveats/warnings where necessary (for the level of the documentation too).
I’ve not seen another set of documentation that provides something at each of those layers.
I like the fact that you have the separation between getting started/tutorials, main concepts, advanced concepts, and an API reference. The notes/caveats/etc seem reasonable.
It would be nice to link to the source in the API reference, and there are a lot of mentions of APIs that could be linked (pretty much any function name in a body of text could be linked I think), but apart from that these docs look great.
That said, I haven't had to use them day after day for 6 years like I have with the Django documentation!
One thing you might want to consider for the future would be switching between versions of React. Django has a version switcher at the bottom of the screen that lets you jump between versions, shows banners when reading the docs for unreleased/insecure/old versions (in case users are linked to them), and also mentions when APIs were added in recent versions in the text.
* Links to source: I use these frequently in other libraries, but I don't think this would be as useful for React, because we tend to have just a few functions each with a complicated implementation (vs programming stdlibs or other frameworks where many methods are on the order of 10-100 lines calling other public functions). Also our implementation isn't that easy to understand. I wonder if you had a particular use case in mind?
* Linked method names: Good idea.
* Version switcher: We've thought about this and will probably add it at some point.
Django does a lot of complex/clever stuff under the hood, but the source is still readable, and in most cases fairly easy to understand.
This is just my 2 cents though.
I believe Django's "functionality/(API surface)" quotient is still much lower than React's, which means it's easier to make the source useful to a newcomer.
You should start with a very long, nicely sliced in small chunks, tutorial begining with script tags and react.create element, followed by a step by step ramp up to babel/webpack integration and only end by demonstrating create-react-app as a way to do all that automatically and more.
Not the other way around.
I get the wow effect is sexy, but it's pedagogically backward. Or at least just use it to show off, then use the momentum to motivate the reader to start from scratch.
The hello world should just say hello, and how the same code in pure html, and then in vanilla js.
Also, while progressing, you needgo from tighly coupled monolitic components to clean reusable decoupled ones, illustrating common patterns little by little.
Yes, it's tempting to do it correctly the first time, and faster. But it's mixing several things to learn at the same time, which makes things a lot harder to grasp.
At last, the tutorial should start using es5, and introduce new es6, 7, and stage 3 stuff on the way, next to the matching babel config and typical use cases. Particularly imports, spread, arrow function and destructuring. You must understand: this week i was hired to give yet another react training. The students didn't even know what the dom was. It's very common.
A bigger app than a todo list should be achieved in the end, and it should, in it's very final state have an opiniated by the book ajax and router setup, plus a friendly way to share the state without going full blown flux. Then conclude, opening to other options, including but not limiting to a word on redux and mobx.
Yes, a good doc write about other tech. It's irritating, i understand. It's not your job after all. But django has a section explaining how to configure nginx and apache. They get that it's part of the experience.
A separate section should be dedicated to integration with popular frameworks in other languages such as ror or django.
All in all, it should not assume people are advanced js dev nor that they are familiar with the js ecosystem. Many new comers come from other languages and run npm for the first time.
This would make the official tutorial 10 times larger at the minimum. It's a good thing, but people looking for a quick reference would be annoyed. So you also need to keep the current version around, which is the short story and is great when you already know what you are looking at. And make explanations about js and its ecosystem in optional sections to avoid borring people that already know the stuff.
Two more additions are nessary.
One is a glossary you should hyperlink from everywhere in the doc.
Two are schemas showing off things like data flow, components life cycle, relation between the dom and virtual dom and rendering, main functions mapped to main use cases, etc.
It's a lot of work, i known. I wrote tons of those. It takes months. But that's the only way to get a great doc. Besides, react is not a simple tech despite what every tutorial says, and a lot of magic hide the "it's just javascripy" so people get confusew.
While the learning curve seemed to go on and on, the documentation had a half-tutorial, half-specification answer for everything.
Jekyll because it's beautiful and the user can read all the pages at once with the previous/next buttons (at the bottom) https://jekyllrb.com/docs/home/
Node.js because they propose a single page version and it makes search easier https://nodejs.org/dist/latest-v10.x/docs/api/all.html
It was also the first time I encountered the flow diagram type of syntax explanation which I found to be a fantastic way to grasp the details of each command. Eg https://sqlite.org/lang_createtable.html.
And this applies to the vue API as well. The guy just crafted in so many little things to make real life easiser. The event.once helper for example. Simple, elegant, useful.
It's the only doc that generally comes before SO in finding solutions for me.
Complex concepts are told in a very simple and concise fashion. There is just the right amount of text for what is told, it does not make you feel dumb and instead invites you to dig deeper in a very welcoming manner.
The only downside is if the reader is "spoiled" by a particular feature that's documented as standard (such as to comply with one) and subsequently has to work with one that lacks it or implements it less completely.
The thing the latter gets right is that, as well as the usual long list of options with an explanation of what their effects are, it also describes in full detail what the program actually does, rather than leaving you to deduce it from the options.
So each option is normally described twice: once in an alphabetical list, and once where the operation it affects is described.
More documentation back then seemed to be of higher caliber, than much if not most of what we wade through, today.
I think the people writing it had more time and resources for attention to detail. And perhaps more need. There was no generally public Internet for updates and corrections including turning your product from a pain in the ass quasi-brick to something useful. You had to get it right, up front.
EDIT: It all depends on how you set the bar, though. There are plenty of projects whose entire documentation is a README with a few examples.
Also, what's "best", documentation that greatly explains a horrible, unintuitive interface of a program or one that hardly needs to exist because the use of the program is so intuitive, you don't need documentation? Greater effort was spent in the former, but you understand the program better in the latter.
If you want to do anything useful with Redux, the Redux docs are pretty terrible.
I hate any docs that are written in "step" form rather than "book/info" form.
I search for a specific thing I want to learn about and apparently it's skipped over because it's not "a commonly used thing".
The tutorial is OK-ish, but the reference docs are weak. If I have a specific question about some detail of the language, the answer is very rarely there.
Sometimes the answer is written up in the bug-tracking system or an RFC. They don't seem to have a culture where someone making a behaviour change, or a language-definition decision, is expected to update the reference manual at the same time.
> they don’t seem to have a culture
We actually do have that as a literal rule , but since we’ve started from a place where the reference is incomplete, we can’t block everything on fully filling out every last detail. It’s being actively worked on though!
1: the rule has been slightly relaxed in the last few months for reasons; now a bug must be filed, rather than writing out the literal text. They usually get done fairy shortly after though.
Gives you examples right off the bat to get started, is organized well so it's easy to dive deeper, and the author includes some conventions for incorporating the module into your app.
The best three entries are
* Learn - http://erlang.org/doc/reference_manual/users_guide.html
* Use - http://erlang.org/doc/search/
* Go deep - http://erlang.org/doc/efficiency_guide/users_guide.html
But as jolmg pointed out, some projects are just simple readme and that is more than enough. Love those. But the total opposite is also common, a wall of text that is meaningless and in the end, you have to go through the source code to get some answers...
I found some bugs and I wanted to fix them. I've done a little python in the past but I'm not entirely up to speed on the whole python ecosystem. This documentation was exceptional and allowed me to get my bugs fixed, some unit tests written and PR's merged.
Everything in the api, should be covered somewhere in the docs with examples and use cases, imho.
I would say it's pretty terrible at providing a reference for a new GUI system in ruby, but it's also the most fun I've had reading docs
My personal is firstname.lastname@example.org for anyone else in the same boat.