So... not exactly.
At work, I have tools that set up my relevant directory structures for me for the different projects I work with. I use tools that have their own directory structures in which they present content. My experience of using these tools is almost always approximately equivalent to navigating an app that presents options on multiple screens. With the native tab-complete, cd src<TAB>/Package<TAB>/lib is a bit like clicking through nested menus. At work, it is exceedingly rare that I ever have to indicate the kind of complicated relative paths that require a mental model of location beyond "you're here, click here, now you're here, click here...".
This is not true with my personal projects, because I am lazy and I have not set up tooling that would make things neat and straightforward. Relative paths are common, mental models are necessary, and I'll admit that when these fail there's a certain amount of fallback to recursive grep -- the unindexed brute-force search of eras past.
Academic programming contexts are kind of uniquely unprofessional, and I don't like that this is being presented as "there's nothing we can do, computers are just like this!" when that's not really the case. Standard directory structures enforced by tooling change how you relate to the whole thing.