I am a very different person than the person I was in college. After the C++ class, I really thought I knew a lot about programming. I was very wrong to think that. I went through many different stages in my "I know a lot about programming" phase, until a couple of years ago when I realized that I actually know very little. The arrogance I had was mostly due to my desire to make something of myself and know everything, but I also believe that the way I was taught programming had something to do with it.
The Java class was taught online by a foreign professor (nobody at our community college taught programming) who had an extremely thick accent and often sent me puzzles by way of email that I had to decipher (some people call these assignments). I had no previous knowledge of programming. The textbook was not beginner-friendly, but I honestly don't remember too much of it.
The C++ class was in-person at my university. The instructor was excellent - she had the knowledge, taught in a way that was easy to understand, and also cared about her students. I don't really remember the book at all, but the instructor was so good that I passed with flying colors.
The algorithms class initialized my hatred of how systems within a university work. The professor was not very friendly and would often scoff at questions. Learning effectively was not a priority. It was a very strict "here's your book, figure it out" type of class. I stopped going after being yelled at by the professor for asking a simple question - "hey I found this other compiler that works on macOS, can I use it?".
When my interest in programming started, and perhaps during the three first years of learning and doing it, I didn't care much for the why and how. I cared more about the end result - making code do something neat. I started out with simple code, like in the C++ class or writing HTML for a website, but once I found things like Bootstrap, VueJS, Laravel, etc, I immediately thought of them as the pinnacle of web development. I switched over to using tools that made it easier for beginners to develop a good looking web application. These tools also make projects larger, make projects dependent on many third-party packages, can introduce bugs into the project, and typically define a set of rules or mechanics that are exclusive to themselves.
This mindset, where you see new things and switch to them is mostly caused by lack of knowledge. You don't fully understand the mechanics behind the toolset, so you keep switching to the new fad. Surely enough, that will die and you'll keep going. Unless you eventually get interested in the mechanics, you will continue to fail to realize that you're doing a lot of work for very little gain. How can you get someone interested in the mechanics who really doesn't care? I think the most practical thing to do is to give them an overview.
An overview of programming doesn't mean you list out every single language. It means you take languages that you have experience with (or at least knowledge of) and discuss with your students or peers how they work and the pros and cons of each one. Other people can then throw in their opinions, ideas, and questions. You will also want to take a few languages and discuss the toolset of each, including optional (but popular) frameworks (like Laravel or React). Then, walking through those libraries, tools, and frameworks, discuss how they could impact projects of different scales. Ask things like:
- How would this effect future developers who are hired to the company?
- How would this effect internal documentation changes and upkeep?
- How likely is it that this tool will continue to be developed in the next five years?
- If the tool is no longer being maintained, how likely is it that our company can support it?
- Can parts of the tool be swapped out with other tools?
Most students never think of these things until many years into their career. I believe the "fresh out of college programmer wants to come in and change everything" stereotype is largely because they don't learn these kinds of things in college. Sure, you work with classmates sometimes and deliver a project of some sort. But you aren't involved with a company.
An overview and discussion of programming languages, frameworks, libraries, tools, and other programs is absolutely crucial for programmers today. I believe it can simplify understanding of the large world of programming and impact students and peers in a way that makes them think more about the inner workings of computers.