Doxygen relies on comments formatted in a very specific way to be of any use. So if one doesn't think comments are ever up to date, Doxygen doc will never be either. All it does automatically is extract definitions, so your data structures and function prototypes will match the source code, but the documentation for parameters or what the functions actually do may never be.
It can be useful for documenting APIs (as long as you keep corresponding comments up to date). But for otherwise documenting a whole code base, not that much.
Nope. API documentation should provide you with information about how to use the function calls together. How to make a coherent solution. Doxygen generated crap is like giving someone a random list of ingredients and expect to cook an extensive meal from it without specifying which ingredients go together in a dish, which dishes of the meal must be baked, what must be cooked and what has to be served cold.
That only holds if Doxygen generated from sources with no comments is the only documentation. But that's hardly Doxygen's fault, is it?
If used properly it is a valuable tool, esp. on large projects. But as with anything - garbage in, garbage out. If your team can't be bothered to describe the functions/datastructures, can't be bothered to write high level documentation explaining the use the APIs, etc. then autogenerated
reference documentation from Doxygen is not going to save the day either.
That Doxygen (and similar tools) are frequently used only to check the "Provide documentation" checkbox on the TODO list with minimal effort possible is not really the fault of the tool.
The solution to comments being out of date is to strip out all comments and just read the (very clear and precise) code.
I heard the term "self-documenting code" used unironically many, many times
That's just BS. Yes, code should be ideally "self-documenting". But that's not an excuse to not have documentation - that code should be readable and easy to understand is a completely orthogonal concept to having high level/reference documentation for the codebase. Both things need to be in place if you want to have any sort of chance to work on a large codebase efficiently.
Good luck having to wade through millions of lines of source code to figure out how to use a certain feature. Having it documented at least at the high level is a huge time saver. I am working on codebase that is 25+ years old, millions of lines, some very complex. With very little documentation - I can tell you, it is a huge "fun" having to reverse engineer that stuff whenever I need to add a button somewhere. Just finding the right place where to start working is a challenge already. Yes, documentation can go stale - but even outdated documentation for concepts that are still being used in the codebase is better than having nothing - it gives you at least a starting point.
The same if you see some complex algorithm or the reasons why a seemingly arbitrary decision was made is not obvious. Think e.g. physics simulation or some complex event handling or working around some platform issue ... Having a comment in the code for your colleagues (or even the future you) linking in e.g. the JIRA ticket requesting the change or some explanation of what is going on is essential. Yes, comments can get outdated - but that's your job when you modify that code in the future to also fix the comment, if needed. That the team is lacking the discipline to do this is not really a good reason to not write
useful comments or documentation.
I have seen so much code engineered using this "self-documenting code" mantra - broken down into hundreds of tiny ("self-documenting") functions that are then haphazardly assembled together in a huge spaghetti mess with no clear idea of why, what depends on what, requiring to reverse engineer the architecture of this mess each time, making any sort of maintenance a costly nightmare.
Worse, usually the codebase knowledge is only in the heads of some old-timers in the company. Suddenly they get laid off or leave on their own and you are back to square one, because nobody has any idea how a certain feature or code works. Such things could even cause a company go bankrupt in extreme cases - or at least give the laid off people a very cushy and well paid consulting job while the know-how is transferred ...
Yes, and my observation is this: people are taught to be afraid of modifying generated code/text, which makes a lot of sense, because in many cases you definitely should not be doing that (e.g., generated coefficient tables; modify the source which generates the tables instead).
And yet, for Doxygen it's the exact opposite: you get a tiny bit of boilerplate, and totally should add as much relevant content as possible. I believe that this boilerplate is however directing people to either not touch it at all (I have seen this!) or edit it as little as possible, limiting them to add just a few words, especially when they are unsure where exactly to type to produce the correct HTML output.
But you don't modify the generated content. You modify either your code and put the documentation there in the comments that Doxygen then extracts. Or you modify
the templates the generator uses, e.g. to include some static content.
BTW, for documenting code in the format that Doxygen (or Javadoc or Python Sphinx, etc.) understands there are plenty of tools - there are even plugins for VS Code and similar editors that will automatically extract the function signatures and generate/update the entire boilerplate of the comment for you. You only need to fill in the meaning of all those arguments, what the function returns and some description of what the function does. A lot of "Intellisense"-like tools will also use these comments and display the information right during completion in the editor, so that you have immediately an idea what is which argument doing without having to look it up.
This functionality and tooling exists since ages (and is only getting better). I am rather surprised that it is not known and people think they have to manually do this. There are even tools that will generate these comments for your entire codebase, if you so wish - I personally wouldn't do that but the option is there.
https://marketplace.visualstudio.com/search?term=doxygen&target=VSCode&category=Other&sortBy=Relevance