out of curiosity, why don't modern software engineering courses structure curriculum in such a way that students actually do learn about and then fully program entry-level versions of each of these? It would get them exposed not only to tentpole software used cases, but each of them entail a wide array of foundationally diverse programming and algorithmic topics.