This article raises, sort of incidentally, one of the issues I've noticed recently teaching intro CS. Every CS2 class teaches linked lists, right? (Except for the ones that hit them in CS1, of course.) But: when was the last time you had to roll your own linked list?
Once, not that long ago, it was important to cover linked lists (and other data structures) because you'd have to be writing them in order to implement a program of any significant size. Now, though, all the common ones are already implemented for you (and to be honest, we don't even use LinkedList all that often---array-based lists are better in most real use cases).
So now their role in (my) CS2 is chiefly as setup. I still need to cover linked lists because they establish concepts that will be important when we get to trees (links) and to more general graphs (cycles and the lack thereof), as well as in operating systems (continuation inodes, memory allocation) and other areas.
But implementing an honest-to-god plain-old linked list holding ints or strings or whatever? Who does that anymore?
This is a question I see asked all the time and it's absolutely mind-boggling to me that you could ask it. Who do you think writes the linked-list libraries you use? Do you think the libraries just magically appear when someone wishes them up? Do you think we should use the current set of libraries forever, calling them "good enough", and limiting ourselves to current programming languages for all of history? That's what will happen if we no longer teach people to write these things; or else (more realistically) we leave it up to them to make the same mistakes and waste time solving the same problems which were solved decades ago, because no one ever bothered to teach them the answers. Give it a few years and we'll have no one left who can program in anything but javascript; no one left to write the browsers! --- or so I worry when I read HN sometimes.
You'll notice I'm not suggesting we stop teaching them. But what you describe are specialised applications; my point is that where linked lists were once something that every programmer, large and small, could reliably expect to have to write repeatedly, they're now something that are only directly relevant to, say, library maintainers.
Once, not that long ago, it was important to cover linked lists (and other data structures) because you'd have to be writing them in order to implement a program of any significant size. Now, though, all the common ones are already implemented for you (and to be honest, we don't even use LinkedList all that often---array-based lists are better in most real use cases).
So now their role in (my) CS2 is chiefly as setup. I still need to cover linked lists because they establish concepts that will be important when we get to trees (links) and to more general graphs (cycles and the lack thereof), as well as in operating systems (continuation inodes, memory allocation) and other areas.
But implementing an honest-to-god plain-old linked list holding ints or strings or whatever? Who does that anymore?