Why do departments fund PhD students instead of postdocs?
"I'm dismissing the altruistic reason"
Therein lies one of the biggest problems with your question. I work for a land-grant state university in the U.S. Our mission includes education. It's not an altruistic reason, it's literally why we exist.
The other flaw in your question is assuming that the money to hire these two groups is fungible - it isn't always. For example, there are grant programs where education of graduate students is a major component of what one is supposed to be doing - "we're going to hire a postdoc" is simply a non-alloweable use of funding.
There are some other nice features of graduate students to consider as well:
- They're cheaper. While a postdoc is probably more value for complex activities, there are sometimes things that require some expertise, but not a full-blown PhDs worth. Masters and early-stage PhD students are excellent people to conduct literature reviews, field collection, etc.
- You can identify promising researchers early. Lets say you see someone in undergraduate courses whose impressed you. If you only recruited postdocs, you're essentially saying "Look me up in 6 to 8 years, I'd love to work with you." If you recruit graduate students, you can usher them into their research career.
- You get them for longer. Postdocs are (by and large) transient positions, and much of their time may be taken up by looking (rightly) for another position. In many labs, especially those without long-term technicians, graduate students may actually have more institutional knowledge.
One of the premises of your question is simply incorrect in the US. Since most of the funding for postdocs and PhD students in the sciences comes from grants and the usage of that money is specified by the grant and approved by the funding agency, departments can't simply decide to spend the money differently.
Furthermore, in the US, postdocs can be considerably more expensive than PhD students.
For a Postdoc you've got to pay full time salary, plus fringe benefits (typically 30% on top of salary) plus overhead on the salary and fringe benefits. For example, a postdoc might cost $50K in salary per year, $15K per year in fringe benefits, plus another $35K per year (54%) in overhead for a total of $100K per year.
For graduate students the costs include a stipend, fringe benefits (typically much lower for graduate students than postdocs, e.g. 2% at my institution), tuition waiver (varies a lot between universities), and overhead (on stipend and fringe benefits only, since tuition waivers are excluded from overhead.) A student might cost $25K per year in stipend, $1K per year in fringe benefits, $20K per year in tuition, plus $15K in overhead (58%), for a total of $61K per year.
In these calculations, a postdoc was almost twice as expensive as a graduate student. Also notice that the postdoc costs three times as much in overhead as the graduate student. Many program managers hate to see funds going to overhead. For these and other reasons, there's a widespread preference in the funding agencies for funding graduate students rather than postdocs.
There are several reasons, here are some:
- The most important one, IMHO, is that the reputation of the department depends a lot on how many good PhD students they can produce. This will affect the ability to obtain funding, attract (masters/undergraduate) students, etc.
- There are some grants that are only enough to fund PhD students, or that can only be used to fund PhD students.
- Advisor to PhD student can be considered academic parent, advisor to postdoc is just another employer.
It seems more sensible to me that departments should concentrate all funding on postdocs, and leave PhD students to pay for their own education.
In Computer Science (and STEM in general), if you don't fund PhD students, not many people will do it. If one can have a PhD offer from Stanford, s(h)e can also get a job offer from big five (Amazon, Google,...) with a six-figure salary. And you want them to work for free in 5 - 6 years?